diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..b754a17388 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,39 @@ +# SPDX-FileCopyrightText: © 2025 ALIAS Developer +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +# Submodules that the Dockerfile clones fresh inside the container. +db4.8 +leveldb +tor + +# Modernization scaffolding: +# - external.deprecated/ is the old CMake-based dep glue +# - test/ is the lifted Particl functional test framework, not needed +# to compile the wallet itself +# (depends/ IS included because Dockerfile.win cross-compiles via it.) +.git +.github +external.deprecated +test +out +dist + +# Build artifacts +*.o +*.lo +*.la +*.a +*.so +.deps +.libs +obj +src/obj +src/obj-test +src/qt/moc_* +src/qt/qrc_* +src/qt/ui_* +src/qt/locale/*.qm +*.log diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..ae7e92d1c8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,26 @@ +# This is the top-most EditorConfig file. +root = true + +# For all files. +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +# Source code files +[*.{h,cpp,py,sh}] +indent_size = 4 + +# .cirrus.yml, .fuzzbuzz.yml, etc. +[*.yml] +indent_size = 2 + +# Makefiles +[{*.am,Makefile.*.include}] +indent_style = tab + +# Autoconf scripts +[configure.ac] +indent_size = 2 diff --git a/.gitattributes b/.gitattributes index 26d7549356..61a15330de 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,13 @@ +# SPDX-FileCopyrightText: © 2025 ALIAS Developer +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + src/version.cpp export-subst + +# Shell scripts etc +*.sh eol=lf +configure eol=lf +configure.ac eol=lf +Makefile.am eol=lf diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000..3b5638446f --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +team@alias.cash. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000000..3b28914589 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,116 @@ +# Licensing + +* SPDX-FileCopyrightText: © 2025 ALIAS Developer +* SPDX-FileCopyrightText: © 2020 Alias Developers +* SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +* SPDX-License-Identifier: MIT + +# How to contribute to ALIAS + +The ALIAS project operates with an open contributor model where anyone is welcome to contribute towards development. This can be contributions in the form of peer reviews, testing and patches via pull requests. We will actively encourage community involvement and reward good work. This document explains the practical process and guidelines for contributing to ALIAS. + +In terms of ALIAS code governance structure, there are no privileged individuals or developers. ALIAS as most open source projects naturally revolves around meritocracy where longer term contributors gain more trust from the developer community. However, a certain hierarchy is necessary for practical purposes. + +Therefore, there will be repository “curators” who are responsible for merging pull requests as well as the ALIAS Core Team who are responsible for the release cycle, moderation and appointment of "curators". + + +# Contributor Workflow + +The ALIAS codebase is maintained using the “contributor workflow” where everyone contributes patch proposals using “pull requests”. This facilitates social contribution, easy testing and peer review. There may be circumstances where the ALIAS Core Team will update the code if needed. + +To contribute a patch, the workflow is as follows: + + - Fork repository + - Create topic branch + - Commit patches + +A project coding convention will be introduced in the future and is under consideration. + +In general [commits should be atomic](https://en.wikipedia.org/wiki/Atomic_commit#Atomic_commit_convention) and diffs should be easy to read. For this reason do not mix any formatting fixes or code moves with actual code changes. + +Commit messages should be verbose by default consisting of a short subject line (50 chars max), a blank line and detailed explanatory text as separate paragraph(s); unless the title alone is self-explanatory (like "Corrected typo in main.cpp") then a single title line is sufficient. Commit messages should be helpful to people reading your code in the future, so explain the reasoning for your decisions. Further explanation [here](http://chris.beams.io/posts/git-commit/). + +If a particular commit references another issue, please add the reference, for example "refs #1234", or "fixes #4321". Using "fixes or closes" keywords will cause the corresponding issue to be closed when the pull request is merged. + +Please refer to the [Git manual](https://git-scm.com/doc) for more information about Git. + + - Push changes to your fork + - Create pull request + +The title of the pull request should be prefixed by the component or area that the pull request affects. Examples: + + Consensus: Add new opcode for BIP-XXXX OP_CHECKAWESOMESIG + Net: Automatically create hidden service, listen on Tor + Qt: Add feed bump button + Trivial: fix typo + +If a pull request is specifically not to be considered for merging (yet) please prefix the title with [WIP] or use [Tasks Lists](https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments) in the body of the pull request to indicate tasks are pending. + +The body of the pull request should contain enough description about what the patch does together with any justification/reasoning. You should include references to any discussions (for example other tickets or mailing list discussions). + +At this stage one should expect comments and review from other contributors. You can add more commits to your pull request by committing them locally and pushing to your fork until you have satisfied all feedback. If your pull request is accepted for merging, you may be asked by a curator to squash and or rebase your commits before it will be merged. The length of time required for peer review is unpredictable and will vary from patch to patch. + + +# Pull Request Philosophy + +Patchsets should always be focused. For example, a pull request could add a feature, fix a bug, or refactor code; but not a mixture. Please also avoid super pull requests which attempt to do too much, are overly large, or overly complex as this makes review difficult. + + +### Features + +When adding a new feature, thought must be given to the long term technical debt and maintenance that feature may require after inclusion. Before proposing a new feature that will require maintenance, please consider if you are willing to maintain it (including bug fixing). If features get orphaned with no curator in the future, they may be removed by the Repository curator. + + +### Refactoring + +Refactoring is a necessary part of any software project's evolution. The following guidelines cover refactoring pull requests for the project. + +There are three categories of refactoring, code only moves, code style fixes, code refactoring. In general refactoring pull requests should not mix these three kinds of activity in order to make refactoring pull requests easy to review and uncontroversial. In all cases, refactoring PRs must not change the behaviour of code within the pull request (bugs must be preserved as is). + +Project curators aim for a quick turnaround on refactoring pull requests, so where possible keep them short, uncomplex and easy to verify. + + +# "Decision Making" Process + +The following applies to code changes to the ALIAS Core project (and related projects such as libsecp256k1), and is not to be confused with overall ALIAS Network Protocol consensus changes. + +Whether a pull request is merged into the ALIAS Core rests with the project merge curators and ultimately the ALIAS Core Team. + +Curators will take into consideration if a patch is in line with the general principles of the project; meets the minimum standards for inclusion; and will judge the general consensus of contributors. + +In general, all pull requests must: + + - have a clear use case, fix a demonstrable bug or serve the greater good of the project (for example refactoring for modularisation); + - be well peer reviewed; + - have unit tests and functional tests where appropriate; + - follow code style guidelines(TBA); + - not break the existing test suite; + - where bugs are fixed, where possible, there should be unit tests demonstrating the bug and also proving the fix. This helps prevent regression. + +Patches that change ALIAS consensus rules are considerably more involved than normal because they affect the entire ecosystem and so must be preceded by extensive discussions. While each case will be different, one should be prepared to expend more time and effort than for other kinds of patches because of increased peer review and consensus building requirements. + + +### Peer Review + +Anyone may participate in peer review which is expressed by comments in the pull request. Typically reviewers will review the code for obvious errors, as well as test out the patch set and opine on the technical merits of the patch. Project curators take into account the peer review when determining if there is consensus to merge a pull request (remember that discussions may have been spread out over github and Discord discussions). The following language is used within pull-request comments: + + - ACK means "I have tested the code and I agree it should be merged"; + - NACK means "I disagree this should be merged", and must be accompanied by sound technical justification. NACKs without accompanying reasoning may be disregarded; + - utACK means "I have not tested the code, but I have reviewed it and it looks OK, I agree it can be merged"; + - Concept ACK means "I agree in the general principle of this pull request"; + - Nit refers to trivial, often non-blocking issues. + +Reviewers should include the commit hash which they reviewed in their comments. + +Project curators reserve the right to weigh the opinions of peer reviewers using common sense judgement and also may weight based on meritocracy: Those that have demonstrated a deeper commitment and understanding towards the project (over time) or have clear domain expertise may naturally have more weight, as one would expect in all walks of life. + +Where a patch set affects consensus critical code, the bar will be set much higher in terms of discussion and peer review requirements, keeping in mind that mistakes could be very costly to the wider community. This includes refactoring of consensus critical code. + +Where a patch set proposes to change the ALIAS consensus, it must have been discussed extensively on the appropriate Discord channel, and have a generally widely perceived technical consensus of being a worthwhile change based on the judgement of the curators and the ALIAS Core Team. + + +# Release Policy + +The ALIAS Core Team is the release manager for each ALIAS Core release. + +This document is subject to change and will be updated. diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000..455c0e0d6e --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +#github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +#patreon: # Replace with a single Patreon username +open_collective: alias # Replace with a single Open Collective username +#ko_fi: # Replace with a single Ko-fi username +#tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +#community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +#liberapay: # Replace with a single Liberapay username +#issuehunt: # Replace with a single IssueHunt username +#otechie: # Replace with a single Otechie username +#custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..0345493c52 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,36 @@ +--- +name: Bug report +about: Create a report to help improve ALIAS +title: '' +labels: '' +assignees: '' + +--- + +**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. Windows 10] + - Wallet version: [e.g. 4.3.1] + +**Smartphone (please complete the following information):** + - Device: [e.g. Galaxy S20] + - OS: [e.g. Android 11] + - App version: [e.g. 4.3.1.15] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..b102be294f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for ALIAS +title: '' +labels: '' +assignees: '' + +--- + +**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-develop.yml b/.github/workflows/build-develop.yml new file mode 100644 index 0000000000..6fee7d1e70 --- /dev/null +++ b/.github/workflows/build-develop.yml @@ -0,0 +1,432 @@ +name: Develop +on: + push: + branches: + - dev + +permissions: + contents: write + +jobs: + # ========================================================================== + # Create Github tag/release and export short SHA of current HEAD + prepareRelease: + runs-on: ubuntu-latest + outputs: + upload_url: ${{ steps.create_release.outputs.url }} + github_sha_short: ${{ steps.slug.outputs.sha8 }} + alias_release: ${{ steps.determine_release.outputs.alias_release }} + steps: + - uses: actions/checkout@v4 + - name: Get short SHA + id: slug + run: echo "sha8=$(echo ${GITHUB_SHA} | cut -c1-8)" >> "$GITHUB_OUTPUT" + - name: Get current date + id: date + run: echo "date=$(date +'%Y-%m-%d %H:%M:%S')" >> "$GITHUB_OUTPUT" + - name: Set Alias release/tag name + id: determine_release + run: | + echo "alias_release=Build${{ github.run_number }}" >> "$GITHUB_OUTPUT" + + # First create the plain release, so the upload URL could be exported + - name: Create release + id: create_release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ steps.determine_release.outputs.alias_release }} + draft: false + prerelease: false + target_commitish: "develop" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Releasenotes from Develop + id: create_release_develop + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ steps.determine_release.outputs.alias_release }} + name: "Continuous build #${{ github.run_number }}" + body: | + Build #${{ github.run_number }} from ${{ steps.date.outputs.date }} + - To verify checksums see dedicated checksum files for each download + draft: false + prerelease: true + target_commitish: "develop" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # ========================================================================== + # Build all x86 Linux flavours except Ubuntu 20.04. See next step. + buildLinux: + runs-on: ubuntu-latest + needs: prepareRelease + strategy: + matrix: + distro: [ CentOS/Dockerfile, Debian/Dockerfile_Buster, Debian/Dockerfile_Stretch, Fedora/Dockerfile, OpenSUSE/Dockerfile, Ubuntu/Dockerfile_18_04 ] + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Build binaries + run: > + docker build + -t local + -f Docker/${{ matrix.distro }} + --build-arg BUILD_THREADS=2 + --build-arg GITHUB_CI_TOKEN=${{ secrets.GITHUB_TOKEN }} + --build-arg GIT_COMMIT=${{ needs.prepareRelease.outputs.github_sha_short }} + --build-arg ALIAS_RELEASE=${{ needs.prepareRelease.outputs.alias_release }} + --build-arg REPLACE_EXISTING_ARCHIVE=--replace + --build-arg ALIAS_USER=${{ github.repository_owner }} + --build-arg ALIAS_REPOSITORY=${{ github.event.repository.name }} + . + env: + GITHUB_CI_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # ========================================================================== + # Build Ubuntu 20.04 version, which is also base for Alias Docker image. + # After the Docker build, extract aliaswalletd + Tor/ from the image and + # upload a raw binary zip for the desktop app to consume. + buildLinuxBinariesAlsoForDockerImage: + runs-on: ubuntu-latest + needs: prepareRelease + outputs: + github_sha_short: ${{ needs.prepareRelease.outputs.github_sha_short }} + alias_release: ${{ needs.prepareRelease.outputs.alias_release }} + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Build binaries + run: > + docker build + -t local + -f Docker/Ubuntu/Dockerfile_20_04 + --build-arg BUILD_THREADS=2 + --build-arg GITHUB_CI_TOKEN=${{ secrets.GITHUB_TOKEN }} + --build-arg GIT_COMMIT=${{ needs.prepareRelease.outputs.github_sha_short }} + --build-arg ALIAS_RELEASE=${{ needs.prepareRelease.outputs.alias_release }} + --build-arg REPLACE_EXISTING_ARCHIVE=--replace + --build-arg ALIAS_USER=${{ github.repository_owner }} + --build-arg ALIAS_REPOSITORY=${{ github.event.repository.name }} + . + env: + GITHUB_CI_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # Stage aliaswalletd from the final image. `local` is the stage-1 image + # (FROM github-uploader); Dockerfile_20_04 COPYs the daemon there to + # /filesToUpload/usr/local/bin/aliaswalletd (the build-stage path does not + # exist in this image). Tor is not bundled separately on Linux (the daemon + # loads system Tor); only the daemon binary is needed by the desktop app. + - name: Stage Linux raw binary archive + run: | + mkdir -p /tmp/linux-raw/aliaswalletd-linux + docker create --name alias-extract local + docker cp alias-extract:/filesToUpload/usr/local/bin/aliaswalletd /tmp/linux-raw/aliaswalletd-linux/aliaswalletd + docker rm alias-extract + cd /tmp/linux-raw + zip -r Alias.zip aliaswalletd-linux/ + + - name: Upload Linux raw binary archive + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: /tmp/linux-raw/Alias.zip + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Linux.zip + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + # ========================================================================== + # Build aarch64 version (Raspberry PI ARMv8) + buildARM: + runs-on: ubuntu-latest + needs: prepareRelease + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Set up QEMU + id: qemu + uses: docker/setup-qemu-action@v3 + with: + image: tonistiigi/binfmt:latest + platforms: arm64 + - name: Build binaries + run: > + docker build + -t local + -f Docker/RaspberryPi/Dockerfile_Buster + --build-arg BUILD_THREADS=2 + --build-arg GITHUB_CI_TOKEN=${{ secrets.GITHUB_TOKEN }} + --build-arg GIT_COMMIT=${{ needs.prepareRelease.outputs.github_sha_short }} + --build-arg ALIAS_RELEASE=${{ needs.prepareRelease.outputs.alias_release }} + --build-arg REPLACE_EXISTING_ARCHIVE=--replace + --build-arg ALIAS_USER=${{ github.repository_owner }} + --build-arg ALIAS_REPOSITORY=${{ github.event.repository.name }} + . + env: + GITHUB_CI_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # ========================================================================== + # Build MacOS version + buildMacOS: + runs-on: macos-13 + needs: prepareRelease + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '15.2' + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.12.10' + modules: 'qtwebengine' + + - name: Install dependencies + run: | + brew uninstall --ignore-dependencies berkeley-db + brew install berkeley-db@4 boost openssl + + - name: Cache build dependencies + uses: actions/cache@v4 + env: + cache-name: cache-build-dependencies-mac-v3 + with: + path: | + ${{ github.workspace }}/cmake-build-cmdline-mac/* + !${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet + ~/Archives/Tor/Tor.libraries.MacOS.zip + key: ${{ runner.os }}-${{ env.cache-name }} + + - name: Build MacOS binaries + run: ./scripts/cmake-build-mac.sh -g + env: + MAC_QT_DIR: ${{ env.Qt5_DIR }} + + - name: Create MacOS dmg sha256 checksum file + run: | + shasum -a 256 ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.dmg | awk '{ print $1 }' > ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.sha256 + cat ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.sha256 + + - name: Upload MacOS Build + id: upload-release-asset + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.dmg + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Mac.dmg + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + - name: Upload MacOS checksum file + id: upload-release-checksum + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.sha256 + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Mac.sha256 + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + # Stage aliaswalletd and the Tor bundle for the desktop app. + # cmake-build-mac.sh sets ALIAS_BUILD_DIR=cmake-build-cmdline-mac/aliaswallet. + # aliaswalletd lands in that dir under src/ (OUTPUT_NAME aliaswalletd). + # The Tor bundle is unzipped into Alias.app/Contents/MacOS/Tor/ by the + # cmake POST_BUILD step (see src/CMakeLists.txt line ~624). + # TODO(#73): confirm aliaswalletd and Tor/ output paths on macOS + - name: Stage MacOS raw binary archive + run: | + mkdir -p /tmp/mac-raw/Alias + cp ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/src/aliaswalletd /tmp/mac-raw/Alias/aliaswalletd + cp -R ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.app/Contents/MacOS/Tor /tmp/mac-raw/Alias/Tor + cd /tmp/mac-raw + zip -r Alias.zip Alias/ + + - name: Upload MacOS raw binary archive + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: /tmp/mac-raw/Alias.zip + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Mac.zip + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + # ========================================================================== + # Build Windows x64 version + buildWindows: + runs-on: windows-latest + needs: prepareRelease + outputs: + upload_url: ${{ needs.prepareRelease.outputs.upload_url }} + github_sha_short: ${{ needs.prepareRelease.outputs.github_sha_short }} + alias_release: ${{ needs.prepareRelease.outputs.alias_release }} + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.12.9' + setup-python: 'false' + modules: 'qtwebengine' + + - name: Install vcpkg and packages with cache + uses: lukka/run-vcpkg@v11 + with: + vcpkgGitCommitId: e8709ee8703328fe121eab33cda73a406a7626b7 + + - name: Build Windows binaries + run: ./scripts/cmake-build-win.bat + env: + VCPKG_DEFAULT_TRIPLET: x64-windows + QTDIR: ${{ env.QT_ROOT_DIR }} + VSDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise' + CMAKEDIR: 'C:\Program Files\CMake\bin' + VCPKGDIR: ${{ github.workspace }}/vcpkg + + - name: Create zip archive and sha256 checksum + run: | + powershell "Copy-Item (Get-ChildItem -Recurse build/src -Filter aliaswalletd.exe | Select-Object -First 1).FullName build/delivery/Alias/" + powershell Compress-Archive build/delivery/Alias Alias.zip + powershell "(Get-FileHash Alias.zip).Hash > Alias.sha256" + powershell "(Get-Content Alias.sha256) | Out-File Alias.sha256 -Encoding ascii" + type Alias.sha256 + + - name: Upload Windows Build + id: upload-release-asset + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/Alias.zip + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Win64.zip + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + - name: Upload Windows checksum file + id: upload-release-checksum + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/Alias.sha256 + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Win64.sha256 + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + # ========================================================================== + # Build Windows x86 version + buildWindowsX86: + runs-on: windows-latest + needs: prepareRelease + outputs: + upload_url: ${{ needs.prepareRelease.outputs.upload_url }} + github_sha_short: ${{ needs.prepareRelease.outputs.github_sha_short }} + alias_release: ${{ needs.prepareRelease.outputs.alias_release }} + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.12.9' + setup-python: 'false' + modules: 'qtwebengine' + arch: 'win32_msvc2017' + + - name: Install vcpkg and packages with cache + uses: lukka/run-vcpkg@v11 + with: + vcpkgGitCommitId: e8709ee8703328fe121eab33cda73a406a7626b7 + + - name: Build Windows binaries + run: ./scripts/cmake-build-win-x86.bat + env: + VCPKG_DEFAULT_TRIPLET: x86-windows + QTDIR_x86: ${{ env.QT_ROOT_DIR }} + VSDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise' + CMAKEDIR_x86: 'C:\Program Files\CMake\bin' + VCPKGDIR: ${{ github.workspace }}/vcpkg + + - name: Create zip archive and sha256 checksum + run: | + powershell Compress-Archive build-x86/delivery/Alias Alias.zip + powershell "(Get-FileHash Alias.zip).Hash > Alias.sha256" + powershell "(Get-Content Alias.sha256) | Out-File Alias.sha256 -Encoding ascii" + type Alias.sha256 + + - name: Upload Windows Build + id: upload-release-asset + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/Alias.zip + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Win32.zip + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + - name: Upload Windows checksum file + id: upload-release-checksum + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/Alias.sha256 + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Win32.sha256 + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + # ========================================================================== + # Build Alias Docker image + # Based on the docker-aliaswalletd installer repo content + buildDockerImage: + runs-on: ubuntu-latest + needs: buildLinuxBinariesAlsoForDockerImage + steps: + # Get installer repo content + - uses: actions/checkout@v4 + with: + persist-credentials: false + repository: ${{ github.repository_owner }}/docker-aliaswalletd + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} #use username, not email + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v6 + with: + push: true + context: . + tags: ${{ secrets.DOCKERHUB_USERNAME }}/docker-aliaswalletd:latest,${{ secrets.DOCKERHUB_USERNAME }}/docker-aliaswalletd:${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.alias_release }} + build-args: | + DOWNLOAD_URL=https://github.com/${{ github.repository_owner }}/${{ github.event.repository.name }}/releases/download/${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.alias_release }}/Alias-${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.alias_release }}-${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.github_sha_short }}-Ubuntu-20-04.tgz + #arg2=value2 + + - name: Image digest + run: | + echo ${{ steps.docker_build.outputs.digest }} + echo ${{ steps.docker_build.outputs.digest }} > ${{ github.workspace }}/Dockerimage.sha256 + + # Upload the installer to Github + - name: Store docker image digest at Github release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/Dockerimage.sha256 + asset_name: Alias-${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.alias_release }}-${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.github_sha_short }}-Dockerimage.sha256 + tag: ${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.alias_release }} + overwrite: true diff --git a/.github/workflows/build-featurebranch.yml b/.github/workflows/build-featurebranch.yml new file mode 100644 index 0000000000..ef69d9b6ab --- /dev/null +++ b/.github/workflows/build-featurebranch.yml @@ -0,0 +1,139 @@ +name: Featurebranch +on: + push: + branches-ignore: + - 'master' + - 'main' + - 'develop' + - '*android*' + +jobs: + # ========================================================================== + # Build all x86 Linux flavours + buildLinux: + runs-on: ubuntu-latest + strategy: + matrix: + distro: [ CentOS/Dockerfile, Debian/Dockerfile_Buster, Debian/Dockerfile_Stretch, Fedora/Dockerfile, OpenSUSE/Dockerfile, Ubuntu/Dockerfile_18_04, Ubuntu/Dockerfile_20_04 ] + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Build binaries + run: docker build -t local -f Docker/${{ matrix.distro }}_noUpload --build-arg BUILD_THREADS=2 . + env: + GITHUB_CI_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # ========================================================================== + # Build aarch64 version (Raspberry PI ARMv8) + buildARM: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Set up QEMU + id: qemu + uses: docker/setup-qemu-action@v3 + with: + image: tonistiigi/binfmt:latest + platforms: arm64 + - name: Build binaries + run: docker build -t local -f Docker/RaspberryPi/Dockerfile_Buster_noUpload --build-arg BUILD_THREADS=2 . + env: + GITHUB_CI_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # ========================================================================== + # Build MacOS version + buildMacOS: + runs-on: macos-13 + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '15.2' + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.12.10' + modules: 'qtwebengine' + + - name: Install dependencies + run: | + brew uninstall --ignore-dependencies berkeley-db + brew install berkeley-db@4 boost openssl + + - name: Cache build dependencies + uses: actions/cache@v4 + env: + cache-name: cache-build-dependencies-mac-v3 + with: + path: | + ${{ github.workspace }}/cmake-build-cmdline-mac/* + !${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet + ~/Archives/Tor/Tor.libraries.MacOS.zip + key: ${{ runner.os }}-${{ env.cache-name }} + + - name: Build MacOS binaries + run: ./scripts/cmake-build-mac.sh -g + env: + MAC_QT_DIR: ${{ env.Qt5_DIR }} + + # ========================================================================== + # Build Windows x64 version + buildWindows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.12.9' + setup-python: 'false' + modules: 'qtwebengine' + - name: Install vcpkg and packages with cache + uses: lukka/run-vcpkg@v11 + with: + vcpkgGitCommitId: e8709ee8703328fe121eab33cda73a406a7626b7 + - name: Build Windows binaries + run: ./scripts/cmake-build-win.bat + env: + VCPKG_DEFAULT_TRIPLET: x64-windows + QTDIR: ${{ env.QT_ROOT_DIR }} + VSDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise' + CMAKEDIR: 'C:\Program Files\CMake\bin' + VCPKGDIR: ${{ github.workspace }}/vcpkg + + # ========================================================================== + # Build Windows x86 version + buildWindowsX86: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.12.9' + setup-python: 'false' + modules: 'qtwebengine' + arch: 'win32_msvc2017' + - name: Install vcpkg and packages with cache + uses: lukka/run-vcpkg@v11 + with: + vcpkgGitCommitId: e8709ee8703328fe121eab33cda73a406a7626b7 + - name: Build Windows binaries + run: ./scripts/cmake-build-win-x86.bat + env: + VCPKG_DEFAULT_TRIPLET: x86-windows + QTDIR_x86: ${{ env.QT_ROOT_DIR }} + VSDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise' + CMAKEDIR_x86: 'C:\Program Files\CMake\bin' + VCPKGDIR: ${{ github.workspace }}/vcpkg diff --git a/.github/workflows/build-master.yml b/.github/workflows/build-master.yml new file mode 100644 index 0000000000..2dbb9c0f47 --- /dev/null +++ b/.github/workflows/build-master.yml @@ -0,0 +1,429 @@ +name: Master +on: + push: + branches: + - master + - main + +permissions: + contents: write + +jobs: + # ========================================================================== + # Create Github tag/release and export short SHA of current HEAD + prepareRelease: + runs-on: ubuntu-latest + outputs: + upload_url: ${{ steps.create_release.outputs.url }} + github_sha_short: ${{ steps.slug.outputs.sha8 }} + alias_release: ${{ steps.determine_release.outputs.alias_release }} + steps: + - uses: actions/checkout@v4 + - name: Get short SHA + id: slug + run: echo "sha8=$(echo ${GITHUB_SHA} | cut -c1-8)" >> "$GITHUB_OUTPUT" + - name: Set Alias release/tag name + id: determine_release + run: | + majorVersion=$(grep CLIENT_VERSION_MAJOR ${{ github.workspace }}/CMakeLists.txt | head -n1 | cut -d ' ' -f2 | sed 's/)//g' | tr -d '\\n' | tr -d '\\r' | sed 's/ //g') + minorVersion=$(grep CLIENT_VERSION_MINOR ${{ github.workspace }}/CMakeLists.txt | head -n1 | cut -d ' ' -f2 | sed 's/)//g' | tr -d '\\n' | tr -d '\\r' | sed 's/ //g') + bugfixVersion=$(grep CLIENT_VERSION_REVISION ${{ github.workspace }}/CMakeLists.txt | head -n1 | cut -d ' ' -f2 | sed 's/)//g' | tr -d '\\n' | tr -d '\\r' | sed 's/ //g') + echo "alias_release=$(printf '%s.%s.%s' $majorVersion $minorVersion $bugfixVersion)" >> "$GITHUB_OUTPUT" + + # First create the plain release, so the upload URL could be exported + - name: Create release + id: create_release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ steps.determine_release.outputs.alias_release }} + draft: false + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Releasenotes from master + id: create_release_master + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ steps.determine_release.outputs.alias_release }} + name: "Release ${{ steps.determine_release.outputs.alias_release }} (Build #${{ github.run_number }})" + body_path: ${{ github.workspace }}/ReleaseNotes.md + draft: false + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # ========================================================================== + # Build all x86 Linux flavours except Ubuntu 20.04. See next step. + buildLinux: + runs-on: ubuntu-latest + needs: prepareRelease + strategy: + matrix: + distro: [ CentOS/Dockerfile, Debian/Dockerfile_Buster, Debian/Dockerfile_Stretch, Fedora/Dockerfile, OpenSUSE/Dockerfile, Ubuntu/Dockerfile_18_04 ] + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Build binaries + run: > + docker build + -t local + -f Docker/${{ matrix.distro }} + --build-arg BUILD_THREADS=2 + --build-arg GITHUB_CI_TOKEN=${{ secrets.GITHUB_TOKEN }} + --build-arg GIT_COMMIT=${{ needs.prepareRelease.outputs.github_sha_short }} + --build-arg ALIAS_RELEASE=${{ needs.prepareRelease.outputs.alias_release }} + --build-arg REPLACE_EXISTING_ARCHIVE=--replace + --build-arg ALIAS_USER=${{ github.repository_owner }} + --build-arg ALIAS_REPOSITORY=${{ github.event.repository.name }} + . + env: + GITHUB_CI_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # ========================================================================== + # Build Ubuntu 20.04 version, which is also base for Alias Docker image. + # After the Docker build, extract aliaswalletd + Tor/ from the image and + # upload a raw binary zip for the desktop app to consume. + buildLinuxBinariesAlsoForDockerImage: + runs-on: ubuntu-latest + needs: prepareRelease + outputs: + github_sha_short: ${{ needs.prepareRelease.outputs.github_sha_short }} + alias_release: ${{ needs.prepareRelease.outputs.alias_release }} + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Build binaries + run: > + docker build + -t local + -f Docker/Ubuntu/Dockerfile_20_04 + --build-arg BUILD_THREADS=2 + --build-arg GITHUB_CI_TOKEN=${{ secrets.GITHUB_TOKEN }} + --build-arg GIT_COMMIT=${{ needs.prepareRelease.outputs.github_sha_short }} + --build-arg ALIAS_RELEASE=${{ needs.prepareRelease.outputs.alias_release }} + --build-arg REPLACE_EXISTING_ARCHIVE=--replace + --build-arg ALIAS_USER=${{ github.repository_owner }} + --build-arg ALIAS_REPOSITORY=${{ github.event.repository.name }} + . + env: + GITHUB_CI_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # Stage aliaswalletd from the final image. `local` is the stage-1 image + # (FROM github-uploader); Dockerfile_20_04 COPYs the daemon there to + # /filesToUpload/usr/local/bin/aliaswalletd (the build-stage path does not + # exist in this image). Tor is not bundled separately on Linux (the daemon + # loads system Tor); only the daemon binary is needed by the desktop app. + - name: Stage Linux raw binary archive + run: | + mkdir -p /tmp/linux-raw/aliaswalletd-linux + docker create --name alias-extract local + docker cp alias-extract:/filesToUpload/usr/local/bin/aliaswalletd /tmp/linux-raw/aliaswalletd-linux/aliaswalletd + docker rm alias-extract + cd /tmp/linux-raw + zip -r Alias.zip aliaswalletd-linux/ + + - name: Upload Linux raw binary archive + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: /tmp/linux-raw/Alias.zip + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Linux.zip + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + # ========================================================================== + # Build aarch64 version (Raspberry PI ARMv8) + buildARM: + runs-on: ubuntu-latest + needs: prepareRelease + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Set up QEMU + id: qemu + uses: docker/setup-qemu-action@v3 + with: + image: tonistiigi/binfmt:latest + platforms: arm64 + - name: Build binaries + run: > + docker build + -t local + -f Docker/RaspberryPi/Dockerfile_Buster + --build-arg BUILD_THREADS=2 + --build-arg GITHUB_CI_TOKEN=${{ secrets.GITHUB_TOKEN }} + --build-arg GIT_COMMIT=${{ needs.prepareRelease.outputs.github_sha_short }} + --build-arg ALIAS_RELEASE=${{ needs.prepareRelease.outputs.alias_release }} + --build-arg REPLACE_EXISTING_ARCHIVE=--replace + --build-arg ALIAS_USER=${{ github.repository_owner }} + --build-arg ALIAS_REPOSITORY=${{ github.event.repository.name }} + . + env: + GITHUB_CI_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # ========================================================================== + # Build MacOS version + buildMacOS: + runs-on: macos-13 + needs: prepareRelease + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '15.2' + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.12.10' + modules: 'qtwebengine' + + - name: Install dependencies + run: | + brew uninstall --ignore-dependencies berkeley-db + brew install berkeley-db@4 boost openssl + + - name: Cache build dependencies + uses: actions/cache@v4 + env: + cache-name: cache-build-dependencies-mac-v3 + with: + path: | + ${{ github.workspace }}/cmake-build-cmdline-mac/* + !${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet + ~/Archives/Tor/Tor.libraries.MacOS.zip + key: ${{ runner.os }}-${{ env.cache-name }} + + - name: Build MacOS binaries + run: ./scripts/cmake-build-mac.sh -g + env: + MAC_QT_DIR: ${{ env.Qt5_DIR }} + + - name: Create MacOS dmg sha256 checksum file + run: | + shasum -a 256 ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.dmg | awk '{ print $1 }' > ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.sha256 + cat ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.sha256 + + - name: Upload MacOS Build + id: upload-release-asset + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.dmg + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Mac.dmg + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + - name: Upload MacOS checksum file + id: upload-release-checksum + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.sha256 + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Mac.sha256 + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + # Stage aliaswalletd and the Tor bundle for the desktop app. + # cmake-build-mac.sh sets ALIAS_BUILD_DIR=cmake-build-cmdline-mac/aliaswallet. + # aliaswalletd lands in that dir under src/ (OUTPUT_NAME aliaswalletd). + # The Tor bundle is unzipped into Alias.app/Contents/MacOS/Tor/ by the + # cmake POST_BUILD step (see src/CMakeLists.txt line ~624). + # TODO(#73): confirm aliaswalletd and Tor/ output paths on macOS + - name: Stage MacOS raw binary archive + run: | + mkdir -p /tmp/mac-raw/Alias + cp ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/src/aliaswalletd /tmp/mac-raw/Alias/aliaswalletd + cp -R ${{ github.workspace }}/cmake-build-cmdline-mac/aliaswallet/Alias.app/Contents/MacOS/Tor /tmp/mac-raw/Alias/Tor + cd /tmp/mac-raw + zip -r Alias.zip Alias/ + + - name: Upload MacOS raw binary archive + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: /tmp/mac-raw/Alias.zip + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Mac.zip + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + # ========================================================================== + # Build Windows x64 version + buildWindows: + runs-on: windows-latest + needs: prepareRelease + outputs: + upload_url: ${{ needs.prepareRelease.outputs.upload_url }} + github_sha_short: ${{ needs.prepareRelease.outputs.github_sha_short }} + alias_release: ${{ needs.prepareRelease.outputs.alias_release }} + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.12.9' + setup-python: 'false' + modules: 'qtwebengine' + + - name: Install vcpkg and packages with cache + uses: lukka/run-vcpkg@v11 + with: + vcpkgGitCommitId: e8709ee8703328fe121eab33cda73a406a7626b7 + + - name: Build Windows binaries + run: ./scripts/cmake-build-win.bat + env: + VCPKG_DEFAULT_TRIPLET: x64-windows + QTDIR: ${{ env.QT_ROOT_DIR }} + VSDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise' + CMAKEDIR: 'C:\Program Files\CMake\bin' + VCPKGDIR: ${{ github.workspace }}/vcpkg + + - name: Create zip archive and sha256 checksum + run: | + powershell "Copy-Item (Get-ChildItem -Recurse build/src -Filter aliaswalletd.exe | Select-Object -First 1).FullName build/delivery/Alias/" + powershell Compress-Archive build/delivery/Alias Alias.zip + powershell "(Get-FileHash Alias.zip).Hash > Alias.sha256" + powershell "(Get-Content Alias.sha256) | Out-File Alias.sha256 -Encoding ascii" + type Alias.sha256 + + - name: Upload Windows Build + id: upload-release-asset + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/Alias.zip + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Win64.zip + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + - name: Upload Windows checksum file + id: upload-release-checksum + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/Alias.sha256 + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Win64.sha256 + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + # ========================================================================== + # Build Windows x86 version + buildWindowsX86: + runs-on: windows-latest + needs: prepareRelease + outputs: + upload_url: ${{ needs.prepareRelease.outputs.upload_url }} + github_sha_short: ${{ needs.prepareRelease.outputs.github_sha_short }} + alias_release: ${{ needs.prepareRelease.outputs.alias_release }} + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: '5.12.9' + setup-python: 'false' + modules: 'qtwebengine' + arch: 'win32_msvc2017' + + - name: Install vcpkg and packages with cache + uses: lukka/run-vcpkg@v11 + with: + vcpkgGitCommitId: e8709ee8703328fe121eab33cda73a406a7626b7 + + - name: Build Windows binaries + run: ./scripts/cmake-build-win-x86.bat + env: + VCPKG_DEFAULT_TRIPLET: x86-windows + QTDIR_x86: ${{ env.QT_ROOT_DIR }} + VSDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise' + CMAKEDIR_x86: 'C:\Program Files\CMake\bin' + VCPKGDIR: ${{ github.workspace }}/vcpkg + + - name: Create zip archive and sha256 checksum + run: | + powershell Compress-Archive build-x86/delivery/Alias Alias.zip + powershell "(Get-FileHash Alias.zip).Hash > Alias.sha256" + powershell "(Get-Content Alias.sha256) | Out-File Alias.sha256 -Encoding ascii" + type Alias.sha256 + + - name: Upload Windows Build + id: upload-release-asset + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/Alias.zip + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Win32.zip + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + - name: Upload Windows checksum file + id: upload-release-checksum + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/Alias.sha256 + asset_name: Alias-${{ needs.prepareRelease.outputs.alias_release }}-${{ needs.prepareRelease.outputs.github_sha_short }}-Win32.sha256 + tag: ${{ needs.prepareRelease.outputs.alias_release }} + overwrite: true + + # ========================================================================== + # Build Alias Docker image + # Based on the docker-aliaswalletd installer repo content + buildDockerImage: + runs-on: ubuntu-latest + needs: buildLinuxBinariesAlsoForDockerImage + steps: + # Get installer repo content + - uses: actions/checkout@v4 + with: + persist-credentials: false + repository: ${{ github.repository_owner }}/docker-aliaswalletd + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} #use username, not email + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v6 + with: + push: true + context: . + tags: ${{ secrets.DOCKERHUB_USERNAME }}/docker-aliaswalletd:latest,${{ secrets.DOCKERHUB_USERNAME }}/docker-aliaswalletd:${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.alias_release }} + build-args: | + DOWNLOAD_URL=https://github.com/${{ github.repository_owner }}/${{ github.event.repository.name }}/releases/download/${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.alias_release }}/Alias-${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.alias_release }}-${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.github_sha_short }}-Ubuntu-20-04.tgz + #arg2=value2 + + - name: Image digest + run: | + echo ${{ steps.docker_build.outputs.digest }} + echo ${{ steps.docker_build.outputs.digest }} > ${{ github.workspace }}/Dockerimage.sha256 + + # Upload the installer to Github + - name: Store docker image digest at Github release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ github.workspace }}/Dockerimage.sha256 + asset_name: Alias-${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.alias_release }}-${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.github_sha_short }}-Dockerimage.sha256 + tag: ${{ needs.buildLinuxBinariesAlsoForDockerImage.outputs.alias_release }} + overwrite: true diff --git a/.gitignore b/.gitignore index 3800402a03..6502752c3c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,26 @@ +# SPDX-FileCopyrightText: © 2025 ALIAS Developer +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +# Build outputs (per-OS, populated by the docker build scripts). +dist/ +out/ + +# Internal dev notes, planning docs, debug helpers — not for distribution. +dev-notes/ + src/*.exe -src/shadowcoin -src/shadowcoind -src/test_shadow +src/spectrecoin +src/spectrecoind +src/aliaswallet +src/aliaswalletd +src/test_spectre src/build.h +# src/clientversion.h is now a hand-maintained static file in the autotools +# path (the old .h.in templating was orphaned). Keep it tracked. +src/.libs .*.swp *.*~* *.bak @@ -10,20 +28,113 @@ src/build.h *.orig *.o *.P -*.patch *.dat *.autosave -.shadowcoin +.spectrecoin +.aliaswallet #compilation and Qt preprocessor part *.qm -Makefile -shadow +spectre +aliaswallet #resources cpp qrc_*.cpp +#moc +moc_*.cpp +#ui +ui_*.h #qt creator *.pro.user +CMakeLists.txt.user +CMakeSettings.json #mac specific .DS_Store -build +build*/ +db4.8/build_unix +.deps +.dirstamp +Makefile +Makefile.in +config.log +configure +depcomp +missing +install-sh +config.guess +config.status +config.sub +test-driver +aclocal.m4 +autom4te.cache +ar-lib +compile +libtool +ltmain.sh + +!db4.8/build_unix/configure +openssl-1.1.0h +spectre.config +spectre.creator +spectre.creator.user +spectre.files +spectre.includes += +m4/libtool.m4 +m4/ltoptions.m4 +m4/ltsugar.m4 +m4/ltversion.m4 +m4/lt~obsolete.m4 +Spectre.app +boost_1_67_0/ +libevent-2.1.8-stable/ +packages64bit/ +src/spectre.pdb +*.dll +src/x64/ +src/bin/ +src/.vs/ +src/src.vcxproj +src/src.vcxproj.user +src/src.vcxproj.filters +src/spectre.lib +src/spectre.exp +src/mocinclude.opt +src/.qmake.stash +src/debug/ +src/release/moc_predefs.h.cbt +src/release/mocinclude.opt +src/release/moc_predefs.h +src/spectre.ilk +packages64bit.zip +src/src.sln +packages64bit_static/ +doc/Windows build instructions.docx +doc/Windows build instructions.pdf +doc/~$ndows build instructions.docx + +openssl-1\.1\.0h\.tar\.gz + +boost_1_67_0\.tar\.gz + +Makefile\.am\.user +/build-src-Desktop_Qt* +/Prebuild.Spectre.libraries.zip + +# CLion/IntelliJ files +.idea/ +*.iml +cmake-*/ + +moc_predefs.h +/build-tests-Desktop_Qt* + +# Temp build files +releaseNotesToDeploy.txt +Checksum-Aliaswallet-* + +# Visual Studio +.vs/ +*.aps -!src/leveldb/Makefile +# Mac +*.dmg +.qmake.stash diff --git a/.python-version b/.python-version new file mode 100644 index 0000000000..43077b2460 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.9.18 diff --git a/.reuse/dep5 b/.reuse/dep5 new file mode 100644 index 0000000000..9a077f813c --- /dev/null +++ b/.reuse/dep5 @@ -0,0 +1,126 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Alias +Upstream-Contact: Alias Developers +Source: https://github.com/aliascash/alias-wallet + +# ############################################################################ +# MIT Licenses +Files: doc/* Docker/*/*.patch src/qt/forms/* src/qt/locale/* src/qt/res/assets/css/* src/qt/res/assets/fonts/Footable/* +Copyright: 2020 Alias Developers +Copyright: 2016 SpectreCoin Developers +License: MIT + +Files: src/qt/res/assets/fonts/Framework-icon/* src/qt/res/assets/icons/* src/qt/res/assets/img/* src/qt/res/assets/js/* +Copyright: 2020 Alias Developers +Copyright: 2016 SpectreCoin Developers +License: MIT + +Files: src/qt/res/assets/plugins/framework/* src/qt/res/assets/svg/* src/qt/res/icons/* src/qt/res/images/* +Copyright: 2020 Alias Developers +Copyright: 2016 SpectreCoin Developers +License: MIT + +Files: src/qt/res/qml/* src/qt/res/src/* src/src.aps src/osx/app-slide-arrow.png +Copyright: 2020 Alias Developers +Copyright: 2016 SpectreCoin Developers +License: MIT + +Files: external/*/patches/* scripts/patches/* src/qt/res/alias-qt.rc src/qt/res/index.html src/qt/res/qml/main.qml +Copyright: 2020 Alias Developers +Copyright: 2016 SpectreCoin Developers +License: MIT + +Files: src/qt/res/assets/plugins/bootstrapv3/* +Copyright: 2018 Twitter +License: MIT + +Files: src/qt/res/assets/plugins/classie/* +Copyright: 2016 https://github.com/desandro/classie +License: MIT + +Files: src/qt/res/assets/plugins/contextMenu/* +Copyright: 2013 Sudhanshu Yadav +License: MIT + +Files: src/qt/res/assets/plugins/iscroll/* +Copyright: 2008 Matteo Spinelli http://cubiq.org +License: MIT + +Files: src/qt/res/assets/plugins/jdenticon/* +Copyright: 2014 Daniel Mester Pirttijärvi +License: MIT + +Files: src/qt/res/assets/plugins/markdown/* +Copyright: 2014 Simon Waldherr http://simon.waldherr.eu/ +License: MIT + +Files: src/qt/res/assets/plugins/md5/* +Copyright: 2014 Yi-Cyuan Chen +License: MIT + +Files: src/qt/res/assets/plugins/pace/* +Copyright: 2016 https://github.com/HubSpot/pace +License: MIT + +Files: src/qt/res/assets/plugins/qrcode/* +Copyright: 2015 Twitter @davidshimjs +License: MIT + +Files: src/qt/res/assets/plugins/modernizr* +Copyright: 2016 https://modernizr.com/ +License: MIT + +Files: src/qt/res/assets/plugins/jquery* +Copyright: 2014 jQuery Foundation and other contributors +License: MIT + +Files: src/qt/res/assets/plugins/footable/* +Copyright: 2014 Steven Usher & Brad Vincent +License: MIT + +Files: src/test/data/* +Copyright: 2020 Alias Developers +Copyright: 2016 SpectreCoin Developers +License: MIT + +Files: m4/* +Copyright: 2020 Alias Developers +Copyright: 2016 SpectreCoin Developers +License: MIT + +# ############################################################################ +# BSD-2-Clause Licenses +Files: src/lz4/* +Copyright: 2011 Yann Collet +License: BSD-2-Clause + +Files: src/qt/res/assets/plugins/identicon/* +Copyright: 2013 Stewart Lord +License: BSD-2-Clause + +Files: src/qt/res/assets/plugins/shajs/* +Copyright: 2008 Brian Turek +License: BSD-2-Clause + +Files: src/qt/res/assets/plugins/pnglib/* +Copyright: 2010 Robert Eisele +License: BSD-2-Clause + +# ############################################################################ +# GPL-3.0-or-later Licenses +Files: external/berkeleydb-cmake/patches/config.guess external/berkeleydb-cmake/patches/config.sub +Copyright: Per Bothner, Ben Elliston +License: GPL-3.0-or-later + +# ############################################################################ +# OFL-1.1 Licenses +Files: src/qt/res/assets/fonts/FontAwesome/* src/qt/res/assets/fonts/Montserrat/* src/qt/res/assets/fonts/*.otf +Copyright: Dave Gandy http://fontawesome.io +Copyright: Google, Inc. +License: OFL-1.1 + +# ############################################################################ +# CC-BY-4.0 Licenses +Files: src/qt/res/assets/plugins/emojione/* +Copyright: 2016 EmojiOne +License: CC-BY-4.0 diff --git a/.style.yapf b/.style.yapf new file mode 100644 index 0000000000..350ac63855 --- /dev/null +++ b/.style.yapf @@ -0,0 +1,261 @@ +[style] +# Align closing bracket with visual indentation. +align_closing_bracket_with_visual_indent=True + +# Allow dictionary keys to exist on multiple lines. For example: +# +# x = { +# ('this is the first element of a tuple', +# 'this is the second element of a tuple'): +# value, +# } +allow_multiline_dictionary_keys=False + +# Allow lambdas to be formatted on more than one line. +allow_multiline_lambdas=False + +# Allow splits before the dictionary value. +allow_split_before_dict_value=True + +# Number of blank lines surrounding top-level function and class +# definitions. +blank_lines_around_top_level_definition=2 + +# Insert a blank line before a class-level docstring. +blank_line_before_class_docstring=False + +# Insert a blank line before a module docstring. +blank_line_before_module_docstring=False + +# Insert a blank line before a 'def' or 'class' immediately nested +# within another 'def' or 'class'. For example: +# +# class Foo: +# # <------ this blank line +# def method(): +# ... +blank_line_before_nested_class_or_def=False + +# Do not split consecutive brackets. Only relevant when +# dedent_closing_brackets is set. For example: +# +# call_func_that_takes_a_dict( +# { +# 'key1': 'value1', +# 'key2': 'value2', +# } +# ) +# +# would reformat to: +# +# call_func_that_takes_a_dict({ +# 'key1': 'value1', +# 'key2': 'value2', +# }) +coalesce_brackets=False + +# The column limit. +column_limit=160 + +# The style for continuation alignment. Possible values are: +# +# - SPACE: Use spaces for continuation alignment. This is default behavior. +# - FIXED: Use fixed number (CONTINUATION_INDENT_WIDTH) of columns +# (ie: CONTINUATION_INDENT_WIDTH/INDENT_WIDTH tabs) for continuation +# alignment. +# - LESS: Slightly left if cannot vertically align continuation lines with +# indent characters. +# - VALIGN-RIGHT: Vertically align continuation lines with indent +# characters. Slightly right (one more indent character) if cannot +# vertically align continuation lines with indent characters. +# +# For options FIXED, and VALIGN-RIGHT are only available when USE_TABS is +# enabled. +continuation_align_style=SPACE + +# Indent width used for line continuations. +continuation_indent_width=4 + +# Put closing brackets on a separate line, dedented, if the bracketed +# expression can't fit in a single line. Applies to all kinds of brackets, +# including function definitions and calls. For example: +# +# config = { +# 'key1': 'value1', +# 'key2': 'value2', +# } # <--- this bracket is dedented and on a separate line +# +# time_series = self.remote_client.query_entity_counters( +# entity='dev3246.region1', +# key='dns.query_latency_tcp', +# transform=Transformation.AVERAGE(window=timedelta(seconds=60)), +# start_ts=now()-timedelta(days=3), +# end_ts=now(), +# ) # <--- this bracket is dedented and on a separate line +dedent_closing_brackets=False + +# Disable the heuristic which places each list element on a separate line +# if the list is comma-terminated. +disable_ending_comma_heuristic=False + +# Place each dictionary entry onto its own line. +each_dict_entry_on_separate_line=True + +# The regex for an i18n comment. The presence of this comment stops +# reformatting of that line, because the comments are required to be +# next to the string they translate. +i18n_comment= + +# The i18n function call names. The presence of this function stops +# reformatting on that line, because the string it has cannot be moved +# away from the i18n comment. +i18n_function_call= + +# Indent the dictionary value if it cannot fit on the same line as the +# dictionary key. For example: +# +# config = { +# 'key1': +# 'value1', +# 'key2': value1 + +# value2, +# } +indent_dictionary_value=False + +# The number of columns to use for indentation. +indent_width=4 + +# Join short lines into one line. E.g., single line 'if' statements. +join_multiple_lines=True + +# Do not include spaces around selected binary operators. For example: +# +# 1 + 2 * 3 - 4 / 5 +# +# will be formatted as follows when configured with "*,/": +# +# 1 + 2*3 - 4/5 +# +no_spaces_around_selected_binary_operators= + +# Use spaces around default or named assigns. +spaces_around_default_or_named_assign=False + +# Use spaces around the power operator. +spaces_around_power_operator=False + +# The number of spaces required before a trailing comment. +spaces_before_comment=2 + +# Insert a space between the ending comma and closing bracket of a list, +# etc. +space_between_ending_comma_and_closing_bracket=True + +# Split before arguments +split_all_comma_separated_values=False + +# Split before arguments if the argument list is terminated by a +# comma. +split_arguments_when_comma_terminated=False + +# Set to True to prefer splitting before '&', '|' or '^' rather than +# after. +split_before_bitwise_operator=True + +# Split before the closing bracket if a list or dict literal doesn't fit on +# a single line. +split_before_closing_bracket=True + +# Split before a dictionary or set generator (comp_for). For example, note +# the split before the 'for': +# +# foo = { +# variable: 'Hello world, have a nice day!' +# for variable in bar if variable != 42 +# } +split_before_dict_set_generator=True + +# Split before the '.' if we need to split a longer expression: +# +# foo = ('This is a really long string: {}, {}, {}, {}'.format(a, b, c, d)) +# +# would reformat to something like: +# +# foo = ('This is a really long string: {}, {}, {}, {}' +# .format(a, b, c, d)) +split_before_dot=False + +# Split after the opening paren which surrounds an expression if it doesn't +# fit on a single line. +split_before_expression_after_opening_paren=False + +# If an argument / parameter list is going to be split, then split before +# the first argument. +split_before_first_argument=False + +# Set to True to prefer splitting before 'and' or 'or' rather than +# after. +split_before_logical_operator=True + +# Split named assignments onto individual lines. +split_before_named_assigns=True + +# Set to True to split list comprehensions and generators that have +# non-trivial expressions and multiple clauses before each of these +# clauses. For example: +# +# result = [ +# a_long_var + 100 for a_long_var in xrange(1000) +# if a_long_var % 10] +# +# would reformat to something like: +# +# result = [ +# a_long_var + 100 +# for a_long_var in xrange(1000) +# if a_long_var % 10] +split_complex_comprehension=False + +# The penalty for splitting right after the opening bracket. +split_penalty_after_opening_bracket=30 + +# The penalty for splitting the line after a unary operator. +split_penalty_after_unary_operator=10000 + +# The penalty for splitting right before an if expression. +split_penalty_before_if_expr=0 + +# The penalty of splitting the line around the '&', '|', and '^' +# operators. +split_penalty_bitwise_operator=300 + +# The penalty for splitting a list comprehension or generator +# expression. +split_penalty_comprehension=80 + +# The penalty for characters over the column limit. +split_penalty_excess_character=7000 + +# The penalty incurred by adding a line split to the unwrapped line. The +# more line splits added the higher the penalty. +split_penalty_for_added_line_split=30 + +# The penalty of splitting a list of "import as" names. For example: +# +# from a_very_long_or_indented_module_name_yada_yad import (long_argument_1, +# long_argument_2, +# long_argument_3) +# +# would reformat to something like: +# +# from a_very_long_or_indented_module_name_yada_yad import ( +# long_argument_1, long_argument_2, long_argument_3) +split_penalty_import_names=0 + +# The penalty of splitting the line around the 'and' and 'or' +# operators. +split_penalty_logical_operator=300 + +# Use the Tab character for indentation. +use_tabs=False + diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index f4c4c7f567..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,83 +0,0 @@ ---- -language: cpp -compiler: gcc -os: linux -sudo: required -dist: trusty -matrix: - fast_finish: true -env: - global: - - MAKEJOBS=-j3 - - DEPS_URL=https://deps.shadow.cash/ - matrix: - - BUILD=win32 HOST=i686-w64-mingw32 DISTNAME=i686-win PACKAGES="mingw-w64 g++-mingw-w64" BITS=32 MAKEFILE=makefile.linux-mingw BOOST_LIB_SUFFIX="-mt-s" OUTPUT_SUFFIX=".exe" QMAKEOPTS="-xplatform win32-g++" BOOST_THREAD_LIB_SUFFIX="_win32-mt-s" - - BUILD=win64 HOST=x86_64-w64-mingw32 DISTNAME=x86_64-win PACKAGES="mingw-w64 g++-mingw-w64" BITS=64 MAKEFILE=makefile.linux-mingw BOOST_LIB_SUFFIX="-mt-s" OUTPUT_SUFFIX=".exe" QMAKEOPTS="-xplatform win32-g++" BOOST_THREAD_LIB_SUFFIX="_win32-mt-s" - - BUILD=macosx HOST=x86_64-apple-darwin14 DISTNAME=x86_64-darwin PACKAGES="clang llvm-dev" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="-mt-s" DEPS=shadow-deps-osx.tar.xz EXTRADEPS=osxcross.tar.xz - QMAKE_CXXFLAGS="-I/home/vagrant/deps/SDK/MacOSX10.9/usr/include -DBOOST_HAS_INT128=1" QMAKEOPTS="-xplatform macx-clang-linux" OTOOL=${HOST}-otool INSTALLNAMETOOL=${HOST}-install_name_tool STRIP=${HOST}-strip - - BUILD=linux64 MAKEFILE=makefile.unix BOOST_LIB_SUFFIX="-mt" BITS=64 -# - BUILD=macosx MAKEFILE=makefile.osx BOOST_LIB_SUFFIX="-mt" TODO: osx daemon!! - -before_install: - - sudo apt-get -qq update - -install: - - if [ "$DEPS" == "" ]; then export DEPS=shadow-deps-${BUILD}.tar.xz; fi - - export INDIR=$HOME/inputs - - export DEPSDIR=$HOME/deps${BITS} - - export PATH=$DEPSDIR/host/bin:$DEPSDIR:$DEPSDIR/bin:$PATH - - export QTDIR=$TRAVIS_BUILD_DIR - - sudo apt-get install build-essential $PACKAGES - - mkdir -p $INDIR $DEPSDIR - - cd $INDIR && wget --user="$AUTH_USER" --password="$AUTH_PASSWORD" $DEPS_URL/$DEPS `[ $EXTRADEPS != "" ] && echo $DEPS_URL/$EXTRADEPS` - - cd $DEPSDIR && tar xf $INDIR/$DEPS - - if [ $EXTRADEPS != "" ]; then tar xf $INDIR/$EXTRADEPS; fi -script: - - echo 'Build Daemon' && echo -en 'travis_fold:start:script.daemon\\r' - - - cd $TRAVIS_BUILD_DIR/src - - if [ "$MAKEFILE" != "" ]; then make $MAKEJOBS -f $MAKEFILE HOST="$HOST" STATIC=1 OPENSSL_INCLUDE_PATH="$DEPSDIR/include" OPENSSL_LIB_PATH="$DEPSDIR/lib" DEPSDIR="$DEPSDIR" CURDIR="$TRAVIS_BUILD_DIR/src" USE_UPNP=1 BOOST_LIB_SUFFIX="$BOOST_LIB_SUFFIX" DEBUGFLAGS= && install -s shadowcoind${OUTPUT_SUFFIX} $INDIR/; fi - - - echo -en 'travis_fold:end:script.daemon\\r' - - - - echo 'Build Qt' && echo -en 'travis_fold:start:script.qt\\r' - - - cd $TRAVIS_BUILD_DIR - - qmake $QMAKEOPTS QMAKE_LRELEASE="$DEPSDIR/host/bin/lrelease" INCLUDEPATH="$DEPSDIR/include" LIBS="-L$DEPSDIR/lib" BOOST_LIB_SUFFIX="$BOOST_LIB_SUFFIX" BOOST_THREAD_LIB_SUFFIX="$BOOST_THREAD_LIB_SUFFIX" RELEASE=1 DEFINES=BOOST_THREAD_USE_LIB QMAKE_CXXFLAGS="-frandom-seed=shadow $QMAKE_CXXFLAGS" USE_BUILD_INFO=1 USE_O3=1 - - if [[ "$BUILD" =~ "linux" ]]; then sed -i 's^,-whole-archive -lleveldb -Wl,^,-lleveldb,^' Makefile; fi - - make $MAKEJOBS - - - echo -en 'travis_fold:end:script.qt\\r' - - - - echo 'Package executables' && echo -en 'travis_fold:start:script.package\\r' - - - export BUILD=umbra_`if [ "$TRAVIS_TAG" != "" ]; then [ "${TRAVIS_TAG:0:1}" == "v" ] && echo ${TRAVIS_TAG:1}_ || echo ${TRAVIS_TAG}_; fi`${BUILD} - - export UPLOAD=${BUILD}.zip; - - if [ -d release ]; then cd release; fi - - if [ -f umbra${OUTPUT_SUFFIX} ]; then install -s umbra${OUTPUT_SUFFIX} $INDIR/; export UPLOAD=${BUILD}.zip; fi - - if [ -d Umbra.app ]; then contrib/macdeploy/createdmg; mv umbra.macosx.dmg $INDIR/${BUILD}.dmg; export UPLOAD=${BUILD}.dmg; fi - - - cd $INDIR - - if [ -f umbra${OUTPUT_SUFFIX} ]; then zip $INDIR/$UPLOAD umbra${OUTPUT_SUFFIX} shadowcoind${OUTPUT_SUFFIX}; fi - - sha256sum $UPLOAD > $INDIR/${UPLOAD}.sha256sum.txt - - - echo -en 'travis_fold:end:script.package\\r' - - - cd $TRAVIS_BUILD_DIR # Need to be in build dir last - -after_script: - - if [ "$TRAVIS_TAG" = "" ]; then travis_retry curl --max-time 60 --upload $INDIR/$UPLOAD https://transfer.sh/$UPLOAD; fi - -deploy: - - provider: releases - api_key: - secure: qzpItzq8Y5nEh+CIHWvMbygRZsYvdBeU4xOttJRXOuXG4wUzuza1o5xJCkUr+qhm+/XLH01NkFLy8jahTv7JcNa2GCBnvfoI9JGReQIlX3hi7XcrqFZb8VhMmqC7AmOs+igGgt9rusP3ZtsmOd0yjh8kKJui0sRNam3wU0iPpu6b87Gxp9wZ13l0hQm6D89+iAT+hjTkyN4lMJLYIEEin7AXDWltjx11z7tKMEQEL533gVgJ6eBSW0DxBYZ8toE0HySJb9xAW3M8D0EsZfYBRMQe+5q1cLqbNpYVPQIWs2gMFmnCdI4e+jSp0aXyy0Y9YxjBxm17z7MRixG5Tz6XfWc/9qhiBEawklF6fGjR68nky5JqNW31BEEQiBaryfl5O3OWRiM0a2V1qjOb3m90rtl3GdEK8Yu0LutQnvZSnAyut9WuQxaYc4ovdsT0XFbnEfHdego0evAfV/I8mgwTdcChM3aJGPdJZEb81/TvIZZMxVLqFkQ4Z3Cf5RxoqfFZt4DviPg6KT6dMCUTpI3uDs3SQR5gEuBczzKpUVrIuvxi2T3hV1D9VYY2MqZuGa5mu5JlMG7thA0VMeJMAhQm15TdXkmuyZwmaWkLXKfJAwpL1U3MEaQKC0wFFSUZ0km41hAaWgEtZGBQLKQCukIXb21qLR0KX8cMw5OkvBnhRxs= - file: # Linter thinks this is broken? - - $INDIR/$UPLOAD - - $INDIR/${UPLOAD}.sha256sum.txt - overwrite: true - on: - tags: true - diff --git a/.tx/config b/.tx/config index e85f28f0db..520d42aad3 100644 --- a/.tx/config +++ b/.tx/config @@ -1,9 +1,13 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + [main] host = https://www.transifex.com -[shadowcore.umbra_qt] -file_filter = src/qt/locale/umbra_.ts -source_file = src/qt/locale/umbra_en.ts +[alias-wallet.alias_qt] +file_filter = src/qt/locale/alias_.ts +source_file = src/qt/locale/alias_en.ts source_lang = en type = QT - diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..a696f6c01d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,378 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT + +cmake_minimum_required(VERSION 3.13) +project(Alias + VERSION 4.3 + LANGUAGES + CXX + C + ) + +message(STATUS "") +message(STATUS "=== Setting defaults =======================================================") +# The version number. +set(CLIENT_VERSION_MAJOR 4) +set(CLIENT_VERSION_MINOR 4) +set(CLIENT_VERSION_REVISION 0) +set(CLIENT_VERSION_BUILD 0) +set(CLIENT_VERSION_GIT_SHA1 "---") +set(VERSION_STRING "${CLIENT_VERSION_MAJOR}.${CLIENT_VERSION_MINOR}.${CLIENT_VERSION_REVISION}.${CLIENT_VERSION_BUILD}") +#set(CMAKE_VERBOSE_MAKEFILE ON) +set(CMAKE_VERBOSE_MAKEFILE OFF) + +#set(ANDROID 1) +set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/android") + +set(TOR_ARCHIVE_MAC_HASH "733380c234c8a4796d6bfefec536afd6469f8d7d") +set(TOR_ARCHIVE_WIN64_HASH "36ab45ca414795560a4c946fcb49848b919569bf") +set(TOR_ARCHIVE_WIN32_HASH "66cef46b02d6e788840899baca11e2a2f9f5241a") +set(VCRUNTIME_ARCHIVE_WIN64_HASH "85cffbf41e957dcc9c5dd528af84c03474e76b8c") +set(VCRUNTIME_ARCHIVE_WIN32_HASH "9af511350e0772bf1f543abd375304af2e616273") + +# Compiler flags +set(CMAKE_CXX_STANDARD 17) +if (WIN32) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") + + # For compile issues with vcpkg + add_compile_definitions(NOMINMAX) +endif () + +if (ANDROID) + # https://www.jetbrains.com/help/clion/cmake-profile.html + # adding two custom build types to the cached value + # variable CMAKE_CONFIGURATION_TYPES should be defined before other definitions: + set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES};DebugAndroid;ReleaseAndroid" CACHE STRING "" FORCE) + + if(DEFINED ENV{BOOST_ROOT}) + message(STATUS "Getting settings from environment") + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) + set(BOOST_ROOT "$ENV{BOOST_ROOT}") + set(BOOST_INCLUDEDIR "$ENV{BOOST_INCLUDEDIR}") + set(Boost_INCLUDE_DIR "$ENV{BOOST_INCLUDEDIR}") + set(BOOST_LIBRARYDIR "$ENV{BOOST_LIBRARYDIR}") + set(Boost_LIBRARY_DIR "$ENV{BOOST_LIBRARYDIR}") + set(BerkeleyDB_ROOT_DIR "$ENV{BerkeleyDB_ROOT_DIR}") + set(BERKELEYDB_INCLUDE_DIR "$ENV{BERKELEYDB_INCLUDE_DIR}") + set(leveldb_DIR "$ENV{leveldb_DIR}") + set(OPENSSL_ROOT_DIR "$ENV{OPENSSL_ROOT_DIR}") + set(ENABLE_GUI ON) + endif() + message(STATUS "Configuring for Android") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wno-deprecated-declarations -Wno-dangling-else") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") + + # https://github.com/arsenm/sanitizers-cmake/issues/13#issuecomment-315532253 + # Use "-fPIC" / "-fPIE" for all targets by default, including static libs + set(CMAKE_POSITION_INDEPENDENT_CODE ON) + # CMake doesn't add "-pie" by default for executables (CMake issue #14983) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") + +elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") + message(STATUS "Configuring on/for Linux") +# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions -g -Wall") +elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + message(STATUS "Configuring on/for macOS") + + # Handle build type + if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + set(DEPLOY_QT_BINARY_TYPE_OPTION "-use-debug-libs") + else() + set(DEPLOY_QT_BINARY_TYPE_OPTION "") + endif() + + # Handle direct access linker warnings with Boost + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -frtti -fvisibility-inlines-hidden -fvisibility=hidden -Wno-deprecated-declarations") + +elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows") + message(STATUS "Configuring on/for Windows") + # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHc-") + add_definitions(-DBOOST_ALL_DYN_LINK) + add_definitions("/wd4244") + add_definitions("/wd4267") + add_definitions(-DWIN32_LEAN_AND_MEAN) + + # Handle build type + if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + set(DEPLOY_QT_BINARY_TYPE_OPTION "--debug") + set(WINDEPLOYQT_TARGET_FOLDER "Debug") + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/delivery/${WINDEPLOYQT_TARGET_FOLDER}") + else() + set(DEPLOY_QT_BINARY_TYPE_OPTION "--release") + set(WINDEPLOYQT_TARGET_FOLDER "Release") + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/delivery/${WINDEPLOYQT_TARGET_FOLDER}") + endif() + + # Check if unzip is installed + find_program(UNZIP unzip) + if (${UNZIP} STREQUAL "UNZIP-NOTFOUND") + message(FATAL_ERROR "You need to install 'unzip'!") + endif () +elseif (CMAKE_SYSTEM_NAME STREQUAL "AIX") + message(STATUS "Configuring on/for IBM AIX") +else () + message(STATUS "Configuring on/for ${CMAKE_SYSTEM_NAME}") +endif () + +if (POLICY CMP0074) + cmake_policy(SET CMP0074 NEW) +endif () + +message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") + +# ============================================================================================ +message(STATUS "") +message(STATUS "=== Helper functions =======================================================") +# Include own cmake modules +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) + +# Determine current Git hash +include(GetGitRevisionDescription) +get_git_head_revision(GIT_REFSPEC CLIENT_VERSION_GIT_SHA1) + +# Must use GNUInstallDirs to install libraries into correct +# locations on all platforms. +include(GNUInstallDirs) + +message(STATUS "Building in '${CMAKE_BUILD_TYPE}' mode") + +# ============================================================================================ +# Env var BOOST_ROOT should point to local Boost installation +message(STATUS "") +message(STATUS "=== Boost ==================================================================") +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + message(STATUS "Using dynamic Boost libs on Mac") +else() + set(Boost_USE_STATIC_LIBS ON) + set(Boost_USE_STATIC_RUNTIME ON) +endif() +if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + set(Boost_USE_DEBUG_LIBS ON) # only find debug libs and + set(Boost_USE_RELEASE_LIBS OFF) # ignore release libs +else() + set(Boost_USE_DEBUG_LIBS OFF) # ignore debug libs and + set(Boost_USE_RELEASE_LIBS ON) # only find release libs +endif() +set(Boost_USE_MULTITHREADED ON) +set(Boost_NO_SYSTEM_PATHS ON) +#set(Boost_DEBUG ON) + +set(Boost_ARCHITECTURE -x64) +if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + execute_process(COMMAND uname -m OUTPUT_VARIABLE USED_ARCH) +# message(STATUS "Used arch: ${USED_ARCH}") + if (USED_ARCH MATCHES "aarch64") + # We're compiling for ARMv8 like Raspberry Pi + message(STATUS "Found aarch64, setting Boost architecture to -a64") + set(Boost_ARCHITECTURE -a64) + endif() +endif() + +find_package(Boost 1.72.0 REQUIRED COMPONENTS + atomic + chrono + date_time + filesystem + iostreams + program_options + regex + system + thread + ) +message(STATUS "Boost_VERSION: ${Boost_VERSION}") +message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}") +message(STATUS "Boost_LIBRARY_DIRS: ${Boost_LIBRARY_DIRS}") +message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}") + +add_compile_definitions(BOOST_SPIRIT_THREADSAFE) + +# ============================================================================================ +message(STATUS "") +message(STATUS "=== Qt =====================================================================") +if (ENABLE_GUI) + if ("${QT_CMAKE_MODULE_PATH}" STREQUAL "") + message(STATUS "QT_CMAKE_MODULE_PATH not given, using Qt from system") + else() + set(Qt5Core_DIR "${QT_CMAKE_MODULE_PATH}/Qt5Core") + set(Qt5Widgets_DIR "${QT_CMAKE_MODULE_PATH}/Qt5Widgets") + set(Qt5WebView_DIR "${QT_CMAKE_MODULE_PATH}/Qt5WebView") + set(Qt5WebChannel_DIR "${QT_CMAKE_MODULE_PATH}/Qt5WebChannel") + set(Qt5WebSockets_DIR "${QT_CMAKE_MODULE_PATH}/Qt5WebSockets") + set(Qt5QuickWidgets_DIR "${QT_CMAKE_MODULE_PATH}/Qt5QuickWidgets") + set(Qt5Quick_DIR "${QT_CMAKE_MODULE_PATH}/Qt5Quick") + set(Qt5Svg_DIR "${QT_CMAKE_MODULE_PATH}/Qt5Svg") + set(Qt5Concurrent_DIR "${QT_CMAKE_MODULE_PATH}/Qt5Concurrent") + + # Additional entries: + set(Qt5_DIR "${QT_CMAKE_MODULE_PATH}/Qt5") + set(Qt5Gui_DIR "${QT_CMAKE_MODULE_PATH}/Qt5Gui") + set(Qt5Qml_DIR "${QT_CMAKE_MODULE_PATH}/Qt5Qml") + set(Qt5Network_DIR "${QT_CMAKE_MODULE_PATH}/Qt5Network") + set(Qt5QmlModels_DIR "${QT_CMAKE_MODULE_PATH}/Qt5QmlModels") + set(Qt5LinguistTools_DIR "${QT_CMAKE_MODULE_PATH}/Qt5LinguistTools") + endif() + + # Find includes in corresponding build directories + set(CMAKE_INCLUDE_CURRENT_DIR ON) + # Instruct CMake to run moc automatically when needed + set(CMAKE_AUTOMOC ON) + # Create code from a list of Qt designer ui files + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTOUIC_SEARCH_PATHS qt/forms) + # Handle .qrc files added as target sources at build time and invoke rcc accordingly + set(CMAKE_AUTORCC ON) + + find_package(Qt5Core) + message(STATUS "Qt5Core version: ${Qt5Core_VERSION}") + get_target_property(QtCore_location Qt5::Core LOCATION) + + find_package(Qt5Gui) + message(STATUS "Qt5Gui version: ${Qt5Gui_VERSION}") + get_target_property(QtGui_location Qt5::Gui LOCATION) + + find_package(Qt5Widgets) + message(STATUS "Qt5Widgets version: ${Qt5Widgets_VERSION}") + get_target_property(QtWidgets_location Qt5::Widgets LOCATION) + + find_package(Qt5WebView) + message(STATUS "Qt5WebView version: ${Qt5WebView_VERSION}") + get_target_property(QtWebView_location Qt5::WebView LOCATION) + + find_package(Qt5WebChannel) + message(STATUS "Qt5WebChannel version: ${Qt5WebChannel_VERSION}") + get_target_property(Qt5WebChannel_location Qt5::WebChannel LOCATION) + + find_package(Qt5WebSockets) + message(STATUS "Qt5WebSockets version: ${Qt5WebSockets_VERSION}") + get_target_property(Qt5WebSockets_location Qt5::WebSockets LOCATION) + + find_package(Qt5QuickWidgets) + message(STATUS "Qt5QuickWidgets version: ${Qt5QuickWidgets_VERSION}") + get_target_property(QtQuickWidgets_location Qt5::QuickWidgets LOCATION) + + find_package(Qt5Quick) + message(STATUS "Qt5Quick version: ${Qt5Quick_VERSION}") + get_target_property(QtQuick_location Qt5::Quick LOCATION) + + find_package(Qt5Svg) + message(STATUS "Qt5Svg version: ${Qt5Svg_VERSION}") + get_target_property(QtSvg_location Qt5::Svg LOCATION) + + find_package(Qt5Concurrent) + message(STATUS "Qt5Concurrent version: ${Qt5Concurrent_VERSION}") + get_target_property(QtConcurrent_location Qt5::Concurrent LOCATION) + + find_package(Qt5LinguistTools) + message(STATUS "Qt5LinguistTools version: ${Qt5LinguistTools_VERSION}") + + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # Retrieve the absolute path to qmake and then use that path + # to find the macdeployqt binary + get_target_property(_qmake_executable Qt5::qmake IMPORTED_LOCATION) + get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY) + find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${_qt_bin_dir}") + + # Put delivery result into dedicated directory + set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + set(HAVE_SNAPPY 0) + elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") + # Retrieve the absolute path to qmake and then use that path + # to find the windeployqt binary + get_target_property(_qmake_executable Qt5::qmake IMPORTED_LOCATION) + get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY) + find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${_qt_bin_dir}") + + # Put delivery result into dedicated directory + set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/delivery) +endif() + +else() + message(STATUS "Building without UI, skipping Qt detection") +endif () + +message(STATUS "") +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + message(STATUS "=== Tor binary archive =====================================================") + if (NOT TOR_ARCHIVE) + include(DownloadFile) + set(TOR_ARCHIVE "${CMAKE_BINARY_DIR}/Tor.libraries.MacOS.zip") + download_file(https://github.com/aliascash/resources/raw/main/resources/Tor.libraries.MacOS.zip ${TOR_ARCHIVE} SHA1 ${TOR_ARCHIVE_MAC_HASH}) + endif () +elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") + message(STATUS "=== Tor and VCRuntime binary archives ======================================") + if (CMAKE_CL_64) + message(STATUS "Using x64 archives") + set(WINDOWS_ARCH_SUFFIX "Win64") + set(WINDOWS_TOR_ARCHIVE_HASH "${TOR_ARCHIVE_WIN64_HASH}") + set(WINDOWS_VCRUNTIME_ARCHIVE_HASH "${VCRUNTIME_ARCHIVE_WIN64_HASH}") + else() + message(STATUS "Using x86 archives") + set(WINDOWS_ARCH_SUFFIX "Win32") + set(WINDOWS_TOR_ARCHIVE_HASH "${TOR_ARCHIVE_WIN32_HASH}") + set(WINDOWS_VCRUNTIME_ARCHIVE_HASH "${VCRUNTIME_ARCHIVE_WIN32_HASH}") + endif() + if (NOT TOR_ARCHIVE) + message(STATUS "Downloading Tor archive") + include(DownloadFile) + set(TOR_ARCHIVE "${CMAKE_BINARY_DIR}/Tor.libraries.${WINDOWS_ARCH_SUFFIX}.zip") + download_file(https://github.com/aliascash/resources/raw/main/resources/Tor.libraries.${WINDOWS_ARCH_SUFFIX}.zip ${TOR_ARCHIVE} SHA1 ${WINDOWS_TOR_ARCHIVE_HASH}) + else() + message(STATUS "Using Tor archive from given path") + endif() + if (NOT VCRUNTIME_ARCHIVE) + message(STATUS "Downloading VCRuntime archive") + include(DownloadFile) + set(VCRUNTIME_ARCHIVE "${CMAKE_BINARY_DIR}/VCRuntime.libraries.${WINDOWS_ARCH_SUFFIX}.zip") + download_file(https://github.com/aliascash/resources/raw/main/resources/VCRuntime.libraries.${WINDOWS_ARCH_SUFFIX}.zip ${VCRUNTIME_ARCHIVE} SHA1 ${WINDOWS_VCRUNTIME_ARCHIVE_HASH}) + else() + message(STATUS "Using VCRuntime archive from given path") + endif() +endif() + +# ============================================================================================ +# Requires lib and include dir at once, separated by ";": +# -DOPENSSL_ROOT_DIR=${BUILD_DIR}/usr/local/lib;${BUILD_DIR}/usr/local/include +message(STATUS "") +message(STATUS "=== OpenSSL ================================================================") +set(OPENSSL_USE_STATIC_LIBS TRUE) +find_package(OpenSSL) + +message(STATUS "OPENSSL_FOUND: ${OPENSSL_FOUND}") +message(STATUS "OPENSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}") +message(STATUS "OPENSSL_CRYPTO_LIBRARY: ${OPENSSL_CRYPTO_LIBRARY}") +message(STATUS "OPENSSL_SSL_LIBRARY: ${OPENSSL_SSL_LIBRARY}") +message(STATUS "OPENSSL_LIBRARIES: ${OPENSSL_LIBRARIES}") +message(STATUS "OPENSSL_VERSION: ${OPENSSL_VERSION}") + +# ============================================================================================ +# Requires: +# -DBerkeleyDB_ROOT_DIR=${BUILD_DIR}/libdb/libdb-install +# -DBERKELEYDB_INCLUDE_DIR=${BUILD_DIR}/libdb/libdb-install/include +message(STATUS "") +message(STATUS "=== Berkeley DB ============================================================") +find_package(BerkeleyDB 4) + +# ============================================================================================ +# Requires: +# -Dleveldb_DIR=${BUILD_DIR}/usr/local/lib/cmake/leveldb +message(STATUS "") +message(STATUS "=== LevelDB ================================================================") +find_package(leveldb) +message(STATUS "LevelDB directory: ${leveldb_DIR}") +message(STATUS "LevelDB version: ${leveldb_VERSION}") + +# ============================================================================================ +message(STATUS "") +message(STATUS "=== Dive into subdirs... ===================================================") +add_subdirectory(src) + +# ============================================================================================ +#message(STATUS "=== List of all variables ==================================================") +#get_cmake_property(_variableNames VARIABLES) +#list (SORT _variableNames) +#foreach (_variableName ${_variableNames}) +# message(STATUS "${_variableName}=${${_variableName}}") +#endforeach () diff --git a/COPYING b/COPYING deleted file mode 100644 index 3db8df0dd4..0000000000 --- a/COPYING +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2014-2015 ShadowCoin Developers -Copyright (c) 2014 BlackCoin Developers -Copyright (c) 2013-2014 NovaCoin Developers -Copyright (c) 2011-2012 PPCoin Developers -Copyright (c) 2009-2014 Bitcoin Developers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/Docker/CentOS/Dockerfile b/Docker/CentOS/Dockerfile new file mode 100644 index 0000000000..b74b9f623b --- /dev/null +++ b/Docker/CentOS/Dockerfile @@ -0,0 +1,66 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-centos-8:2.6 as build +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet + +### Now upload binaries to GitHub ### +FROM aliascash/github-uploader:latest +MAINTAINER HLXEasy + +ARG GITHUB_CI_TOKEN=1234567 +ARG ALIAS_RELEASE=latest +ARG ALIAS_USER=aliascash +ARG ALIAS_REPOSITORY=alias-wallet +ARG GIT_COMMIT=unknown +ARG REPLACE_EXISTING_ARCHIVE='' +#ENV GITHUB_CI_TOKEN=${GITHUB_CI_TOKEN} +ENV ARCHIVE=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-CentOS.tgz +ENV ARCHIVE_CHKSUM=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-CentOS.sha256 +ENV CHKSUM_FILE=Checksum-Alias-CentOS-8.txt + +RUN mkdir -p /filesToUpload/usr/local/bin + +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd /filesToUpload/usr/local/bin/aliaswalletd +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet /filesToUpload/usr/local/bin/aliaswallet +COPY --from=build /alias-wallet/scripts/createChecksums.sh /tmp/ + +RUN cd /filesToUpload \ + && tar czf ${ARCHIVE} . \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE}" \ + --file "/filesToUpload/${ARCHIVE}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && sha256sum /filesToUpload/${ARCHIVE} | awk '{ print $1 }' > /filesToUpload/${ARCHIVE_CHKSUM} \ + && cat /filesToUpload/${ARCHIVE_CHKSUM} \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE_CHKSUM}" \ + --file "/filesToUpload/${ARCHIVE_CHKSUM}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && chmod +x /tmp/createChecksums.sh \ + && sh /tmp/createChecksums.sh /filesToUpload/${ARCHIVE} ${CHKSUM_FILE} \ + && export GITHUB_CI_TOKEN=--- diff --git a/Docker/CentOS/Dockerfile_noUpload b/Docker/CentOS/Dockerfile_noUpload new file mode 100644 index 0000000000..181e42d2f2 --- /dev/null +++ b/Docker/CentOS/Dockerfile_noUpload @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-centos-8:2.6 +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet diff --git a/Docker/CentOS/QT5BinaryPath.patch b/Docker/CentOS/QT5BinaryPath.patch new file mode 100644 index 0000000000..5247dd02f4 --- /dev/null +++ b/Docker/CentOS/QT5BinaryPath.patch @@ -0,0 +1,17 @@ +--- configure.ac 2018-07-22 22:50:33.225640603 +0200 ++++ configure.ac.fedora 2018-08-03 23:39:28.970937691 +0200 +@@ -78,10 +78,10 @@ + AC_SUBST([QT5_CFLAGS]) + AC_SUBST([QT5_LDFLAGS]) + AC_SUBST([QT5_LIBS]) +- MOC="${with_qt5//\/include\//\/lib\//}/bin/moc" +- UIC="${with_qt5//\/include\//\/lib\//}/bin/uic" +- RCC="${with_qt5//\/include\//\/lib\//}/bin/rcc" +- LRELEASE="${with_qt5//\/include\//\/lib\//}/bin/lrelease" ++ MOC="${with_qt5//\/include\//\/lib64\//}/bin/moc" ++ UIC="${with_qt5//\/include\//\/lib64\//}/bin/uic" ++ RCC="${with_qt5//\/include\//\/lib64\//}/bin/rcc" ++ LRELEASE="${with_qt5//\/include\//\/lib64\//}/bin/lrelease" + AC_SUBST([MOC]) + AC_SUBST([UIC]) + AC_SUBST([RCC]) diff --git a/Docker/Debian/Dockerfile_Buster b/Docker/Debian/Dockerfile_Buster new file mode 100644 index 0000000000..4d30d68421 --- /dev/null +++ b/Docker/Debian/Dockerfile_Buster @@ -0,0 +1,66 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-debian-buster:2.6 as build +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet + +### Now upload binaries to GitHub ### +FROM aliascash/github-uploader:latest +MAINTAINER HLXEasy + +ARG GITHUB_CI_TOKEN=1234567 +ARG ALIAS_RELEASE=latest +ARG ALIAS_USER=aliascash +ARG ALIAS_REPOSITORY=alias-wallet +ARG GIT_COMMIT=unknown +ARG REPLACE_EXISTING_ARCHIVE='' +#ENV GITHUB_CI_TOKEN=${GITHUB_CI_TOKEN} +ENV ARCHIVE=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-Debian-Buster.tgz +ENV ARCHIVE_CHKSUM=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-Debian-Buster.sha256 +ENV CHKSUM_FILE=Checksum-Alias-Debian-Buster.txt + +RUN mkdir -p /filesToUpload/usr/local/bin + +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd /filesToUpload/usr/local/bin/aliaswalletd +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet /filesToUpload/usr/local/bin/aliaswallet +COPY --from=build /alias-wallet/scripts/createChecksums.sh /tmp/ + +RUN cd /filesToUpload \ + && tar czf ${ARCHIVE} . \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE}" \ + --file "/filesToUpload/${ARCHIVE}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && sha256sum /filesToUpload/${ARCHIVE} | awk '{ print $1 }' > /filesToUpload/${ARCHIVE_CHKSUM} \ + && cat /filesToUpload/${ARCHIVE_CHKSUM} \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE_CHKSUM}" \ + --file "/filesToUpload/${ARCHIVE_CHKSUM}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && chmod +x /tmp/createChecksums.sh \ + && sh /tmp/createChecksums.sh /filesToUpload/${ARCHIVE} ${CHKSUM_FILE} \ + && export GITHUB_CI_TOKEN=--- diff --git a/Docker/Debian/Dockerfile_Buster_noUpload b/Docker/Debian/Dockerfile_Buster_noUpload new file mode 100644 index 0000000000..f9a3233112 --- /dev/null +++ b/Docker/Debian/Dockerfile_Buster_noUpload @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-debian-buster:2.6 +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet diff --git a/Docker/Debian/Dockerfile_Stretch b/Docker/Debian/Dockerfile_Stretch new file mode 100644 index 0000000000..6e3058dd2c --- /dev/null +++ b/Docker/Debian/Dockerfile_Stretch @@ -0,0 +1,66 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-debian-stretch:2.6 as build +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet + +### Now upload binaries to GitHub ### +FROM aliascash/github-uploader:latest +MAINTAINER HLXEasy + +ARG GITHUB_CI_TOKEN=1234567 +ARG ALIAS_RELEASE=latest +ARG ALIAS_USER=aliascash +ARG ALIAS_REPOSITORY=alias-wallet +ARG GIT_COMMIT=unknown +ARG REPLACE_EXISTING_ARCHIVE='' +#ENV GITHUB_CI_TOKEN=${GITHUB_CI_TOKEN} +ENV ARCHIVE=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-Debian-Stretch.tgz +ENV ARCHIVE_CHKSUM=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-Debian-Stretch.sha256 +ENV CHKSUM_FILE=Checksum-Alias-Debian-Stretch.txt + +RUN mkdir -p /filesToUpload/usr/local/bin + +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd /filesToUpload/usr/local/bin/aliaswalletd +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet /filesToUpload/usr/local/bin/aliaswallet +COPY --from=build /alias-wallet/scripts/createChecksums.sh /tmp/ + +RUN cd /filesToUpload \ + && tar czf ${ARCHIVE} . \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE}" \ + --file "/filesToUpload/${ARCHIVE}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && sha256sum /filesToUpload/${ARCHIVE} | awk '{ print $1 }' > /filesToUpload/${ARCHIVE_CHKSUM} \ + && cat /filesToUpload/${ARCHIVE_CHKSUM} \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE_CHKSUM}" \ + --file "/filesToUpload/${ARCHIVE_CHKSUM}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && chmod +x /tmp/createChecksums.sh \ + && sh /tmp/createChecksums.sh /filesToUpload/${ARCHIVE} ${CHKSUM_FILE} \ + && export GITHUB_CI_TOKEN=--- diff --git a/Docker/Debian/Dockerfile_Stretch_noUpload b/Docker/Debian/Dockerfile_Stretch_noUpload new file mode 100644 index 0000000000..fdd670f7d4 --- /dev/null +++ b/Docker/Debian/Dockerfile_Stretch_noUpload @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-debian-stretch:2.6 +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet diff --git a/Docker/Fedora/Dockerfile b/Docker/Fedora/Dockerfile new file mode 100644 index 0000000000..8f482cccbb --- /dev/null +++ b/Docker/Fedora/Dockerfile @@ -0,0 +1,66 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-fedora:2.6 as build +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet + +### Now upload binaries to GitHub ### +FROM aliascash/github-uploader:latest +MAINTAINER HLXEasy + +ARG GITHUB_CI_TOKEN=1234567 +ARG ALIAS_RELEASE=latest +ARG ALIAS_USER=aliascash +ARG ALIAS_REPOSITORY=alias-wallet +ARG GIT_COMMIT=unknown +ARG REPLACE_EXISTING_ARCHIVE='' +#ENV GITHUB_CI_TOKEN=${GITHUB_CI_TOKEN} +ENV ARCHIVE=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-Fedora.tgz +ENV ARCHIVE_CHKSUM=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-Fedora.sha256 +ENV CHKSUM_FILE=Checksum-Alias-Fedora.txt + +RUN mkdir -p /filesToUpload/usr/local/bin + +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd /filesToUpload/usr/local/bin/aliaswalletd +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet /filesToUpload/usr/local/bin/aliaswallet +COPY --from=build /alias-wallet/scripts/createChecksums.sh /tmp/ + +RUN cd /filesToUpload \ + && tar czf ${ARCHIVE} . \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE}" \ + --file "/filesToUpload/${ARCHIVE}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && sha256sum /filesToUpload/${ARCHIVE} | awk '{ print $1 }' > /filesToUpload/${ARCHIVE_CHKSUM} \ + && cat /filesToUpload/${ARCHIVE_CHKSUM} \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE_CHKSUM}" \ + --file "/filesToUpload/${ARCHIVE_CHKSUM}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && chmod +x /tmp/createChecksums.sh \ + && sh /tmp/createChecksums.sh /filesToUpload/${ARCHIVE} ${CHKSUM_FILE} \ + && export GITHUB_CI_TOKEN=--- diff --git a/Docker/Fedora/Dockerfile_noUpload b/Docker/Fedora/Dockerfile_noUpload new file mode 100644 index 0000000000..ef982cf774 --- /dev/null +++ b/Docker/Fedora/Dockerfile_noUpload @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-fedora:2.6 +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet diff --git a/Docker/Fedora/QT5BinaryPath.patch b/Docker/Fedora/QT5BinaryPath.patch new file mode 100644 index 0000000000..5247dd02f4 --- /dev/null +++ b/Docker/Fedora/QT5BinaryPath.patch @@ -0,0 +1,17 @@ +--- configure.ac 2018-07-22 22:50:33.225640603 +0200 ++++ configure.ac.fedora 2018-08-03 23:39:28.970937691 +0200 +@@ -78,10 +78,10 @@ + AC_SUBST([QT5_CFLAGS]) + AC_SUBST([QT5_LDFLAGS]) + AC_SUBST([QT5_LIBS]) +- MOC="${with_qt5//\/include\//\/lib\//}/bin/moc" +- UIC="${with_qt5//\/include\//\/lib\//}/bin/uic" +- RCC="${with_qt5//\/include\//\/lib\//}/bin/rcc" +- LRELEASE="${with_qt5//\/include\//\/lib\//}/bin/lrelease" ++ MOC="${with_qt5//\/include\//\/lib64\//}/bin/moc" ++ UIC="${with_qt5//\/include\//\/lib64\//}/bin/uic" ++ RCC="${with_qt5//\/include\//\/lib64\//}/bin/rcc" ++ LRELEASE="${with_qt5//\/include\//\/lib64\//}/bin/lrelease" + AC_SUBST([MOC]) + AC_SUBST([UIC]) + AC_SUBST([RCC]) diff --git a/Docker/OpenSUSE/Dockerfile b/Docker/OpenSUSE/Dockerfile new file mode 100644 index 0000000000..7f6c5d8a33 --- /dev/null +++ b/Docker/OpenSUSE/Dockerfile @@ -0,0 +1,65 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-opensuse-tumbleweed:2.6 as build +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet + +### Now upload binaries to GitHub ### +FROM aliascash/github-uploader:latest +MAINTAINER HLXEasy + +ARG GITHUB_CI_TOKEN=1234567 +ARG ALIAS_RELEASE=latest +ARG ALIAS_USER=aliascash +ARG ALIAS_REPOSITORY=alias-wallet +ARG GIT_COMMIT=unknown +ARG REPLACE_EXISTING_ARCHIVE='' +#ENV GITHUB_CI_TOKEN=${GITHUB_CI_TOKEN} +ENV ARCHIVE=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-OpenSUSE-Tumbleweed.tgz +ENV ARCHIVE_CHKSUM=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-OpenSUSE-Tumbleweed.sha256 +ENV CHKSUM_FILE=Checksum-Alias-OpenSUSE-Tumbleweed.txt + +RUN mkdir -p /filesToUpload/usr/local/bin + +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd /filesToUpload/usr/local/bin/aliaswalletd +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet /filesToUpload/usr/local/bin/aliaswallet +COPY --from=build /alias-wallet/scripts/createChecksums.sh /tmp/ + +RUN cd /filesToUpload \ + && tar czf ${ARCHIVE} . \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE}" \ + --file "/filesToUpload/${ARCHIVE}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && sha256sum /filesToUpload/${ARCHIVE} | awk '{ print $1 }' > /filesToUpload/${ARCHIVE_CHKSUM} \ + && cat /filesToUpload/${ARCHIVE_CHKSUM} \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE_CHKSUM}" \ + --file "/filesToUpload/${ARCHIVE_CHKSUM}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && chmod +x /tmp/createChecksums.sh \ + && sh /tmp/createChecksums.sh /filesToUpload/${ARCHIVE} ${CHKSUM_FILE} \ + && export GITHUB_CI_TOKEN=--- diff --git a/Docker/OpenSUSE/Dockerfile_noUpload b/Docker/OpenSUSE/Dockerfile_noUpload new file mode 100644 index 0000000000..c2729e9744 --- /dev/null +++ b/Docker/OpenSUSE/Dockerfile_noUpload @@ -0,0 +1,20 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-opensuse-tumbleweed:2.6 +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet diff --git a/Docker/RaspberryPi/Dockerfile_Buster b/Docker/RaspberryPi/Dockerfile_Buster new file mode 100644 index 0000000000..178b804781 --- /dev/null +++ b/Docker/RaspberryPi/Dockerfile_Buster @@ -0,0 +1,66 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-raspi-buster:2.6 as build +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet + +### Now upload binaries to GitHub ### +FROM aliascash/github-uploader:latest +MAINTAINER HLXEasy + +ARG GITHUB_CI_TOKEN=1234567 +ARG ALIAS_RELEASE=latest +ARG ALIAS_USER=aliascash +ARG ALIAS_REPOSITORY=alias-wallet +ARG GIT_COMMIT=unknown +ARG REPLACE_EXISTING_ARCHIVE='' +#ENV GITHUB_CI_TOKEN=${GITHUB_CI_TOKEN} +ENV ARCHIVE=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-RaspberryPi-Buster-aarch64.tgz +ENV ARCHIVE_CHKSUM=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-RaspberryPi-Buster-aarch64.sha256 +ENV CHKSUM_FILE=Checksum-Alias-RaspberryPi-Buster-aarch64.txt + +RUN mkdir -p /filesToUpload/usr/local/bin + +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd /filesToUpload/usr/local/bin/aliaswalletd +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet /filesToUpload/usr/local/bin/aliaswallet +COPY --from=build /alias-wallet/scripts/createChecksums.sh /tmp/ + +RUN cd /filesToUpload \ + && tar czf ${ARCHIVE} . \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE}" \ + --file "/filesToUpload/${ARCHIVE}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && sha256sum /filesToUpload/${ARCHIVE} | awk '{ print $1 }' > /filesToUpload/${ARCHIVE_CHKSUM} \ + && cat /filesToUpload/${ARCHIVE_CHKSUM} \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE_CHKSUM}" \ + --file "/filesToUpload/${ARCHIVE_CHKSUM}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && chmod +x /tmp/createChecksums.sh \ + && sh /tmp/createChecksums.sh /filesToUpload/${ARCHIVE} ${CHKSUM_FILE} \ + && export GITHUB_CI_TOKEN=--- diff --git a/Docker/RaspberryPi/Dockerfile_Buster_noUpload b/Docker/RaspberryPi/Dockerfile_Buster_noUpload new file mode 100644 index 0000000000..741c89c885 --- /dev/null +++ b/Docker/RaspberryPi/Dockerfile_Buster_noUpload @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-raspi-buster:2.6 +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet diff --git a/Docker/Ubuntu/Dockerfile_18_04 b/Docker/Ubuntu/Dockerfile_18_04 new file mode 100644 index 0000000000..be638a5899 --- /dev/null +++ b/Docker/Ubuntu/Dockerfile_18_04 @@ -0,0 +1,66 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-ubuntu-18-04:2.6 as build +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet + +### Now upload binaries to GitHub ### +FROM aliascash/github-uploader:latest +MAINTAINER HLXEasy + +ARG GITHUB_CI_TOKEN=1234567 +ARG ALIAS_RELEASE=latest +ARG ALIAS_USER=aliascash +ARG ALIAS_REPOSITORY=alias-wallet +ARG GIT_COMMIT=unknown +ARG REPLACE_EXISTING_ARCHIVE='' +#ENV GITHUB_CI_TOKEN=${GITHUB_CI_TOKEN} +ENV ARCHIVE=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-Ubuntu-18-04.tgz +ENV ARCHIVE_CHKSUM=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-Ubuntu-18-04.sha256 +ENV CHKSUM_FILE=Checksum-Alias-Ubuntu-18-04.txt + +RUN mkdir -p /filesToUpload/usr/local/bin + +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd /filesToUpload/usr/local/bin/aliaswalletd +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet /filesToUpload/usr/local/bin/aliaswallet +COPY --from=build /alias-wallet/scripts/createChecksums.sh /tmp/ + +RUN cd /filesToUpload \ + && tar czf ${ARCHIVE} . \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE}" \ + --file "/filesToUpload/${ARCHIVE}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && sha256sum /filesToUpload/${ARCHIVE} | awk '{ print $1 }' > /filesToUpload/${ARCHIVE_CHKSUM} \ + && cat /filesToUpload/${ARCHIVE_CHKSUM} \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE_CHKSUM}" \ + --file "/filesToUpload/${ARCHIVE_CHKSUM}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && chmod +x /tmp/createChecksums.sh \ + && sh /tmp/createChecksums.sh /filesToUpload/${ARCHIVE} ${CHKSUM_FILE} \ + && export GITHUB_CI_TOKEN=--- diff --git a/Docker/Ubuntu/Dockerfile_18_04_noUpload b/Docker/Ubuntu/Dockerfile_18_04_noUpload new file mode 100644 index 0000000000..60cc64bb91 --- /dev/null +++ b/Docker/Ubuntu/Dockerfile_18_04_noUpload @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-ubuntu-18-04:2.6 +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet diff --git a/Docker/Ubuntu/Dockerfile_20_04 b/Docker/Ubuntu/Dockerfile_20_04 new file mode 100644 index 0000000000..5af24ff98c --- /dev/null +++ b/Docker/Ubuntu/Dockerfile_20_04 @@ -0,0 +1,66 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-ubuntu-20-04:2.6 as build +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet + +### Now upload binaries to GitHub ### +FROM aliascash/github-uploader:latest +MAINTAINER HLXEasy + +ARG GITHUB_CI_TOKEN=1234567 +ARG ALIAS_RELEASE=latest +ARG ALIAS_USER=aliascash +ARG ALIAS_REPOSITORY=alias-wallet +ARG GIT_COMMIT=unknown +ARG REPLACE_EXISTING_ARCHIVE='' +#ENV GITHUB_CI_TOKEN=${GITHUB_CI_TOKEN} +ENV ARCHIVE=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-Ubuntu-20-04.tgz +ENV ARCHIVE_CHKSUM=Alias-${ALIAS_RELEASE}-${GIT_COMMIT}-Ubuntu-20-04.sha256 +ENV CHKSUM_FILE=Checksum-Alias-Ubuntu-20-04.txt + +RUN mkdir -p /filesToUpload/usr/local/bin + +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd /filesToUpload/usr/local/bin/aliaswalletd +COPY --from=build /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet /filesToUpload/usr/local/bin/aliaswallet +COPY --from=build /alias-wallet/scripts/createChecksums.sh /tmp/ + +RUN cd /filesToUpload \ + && tar czf ${ARCHIVE} . \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE}" \ + --file "/filesToUpload/${ARCHIVE}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && sha256sum /filesToUpload/${ARCHIVE} | awk '{ print $1 }' > /filesToUpload/${ARCHIVE_CHKSUM} \ + && cat /filesToUpload/${ARCHIVE_CHKSUM} \ + && github-release upload \ + --user ${ALIAS_USER} \ + --security-token "${GITHUB_CI_TOKEN}" \ + --repo "${ALIAS_REPOSITORY}" \ + --tag "${ALIAS_RELEASE}" \ + --name "${ARCHIVE_CHKSUM}" \ + --file "/filesToUpload/${ARCHIVE_CHKSUM}" \ + ${REPLACE_EXISTING_ARCHIVE} \ + && chmod +x /tmp/createChecksums.sh \ + && sh /tmp/createChecksums.sh /filesToUpload/${ARCHIVE} ${CHKSUM_FILE} \ + && export GITHUB_CI_TOKEN=--- diff --git a/Docker/Ubuntu/Dockerfile_20_04_noUpload b/Docker/Ubuntu/Dockerfile_20_04_noUpload new file mode 100644 index 0000000000..22994e0857 --- /dev/null +++ b/Docker/Ubuntu/Dockerfile_20_04_noUpload @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +### At first perform source build ### +FROM aliascash/alias-wallet-builder-ubuntu-20-04:2.6 +MAINTAINER HLXEasy + +# Build parameters +ARG BUILD_THREADS="6" + +# Runtime parameters +ENV BUILD_THREADS=$BUILD_THREADS + +COPY . /alias-wallet + +RUN cd /alias-wallet \ + && ./scripts/cmake-build.sh -g -o -s -c ${BUILD_THREADS} \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswalletd \ + && strip /alias-wallet/cmake-build-cmdline/aliaswallet/src/aliaswallet diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..89efdb3dff --- /dev/null +++ b/Dockerfile @@ -0,0 +1,127 @@ +# Build the modernized Alias wallet inside a clean Ubuntu 20.04 container. +# +# Why 20.04: matches Alias's expected stack (Qt 5.12.8, OpenSSL 1.1.1, +# Boost 1.71). Ubuntu 22.04+ ships OpenSSL 3 which breaks Alias's +# OpenSSL 1.1 API usage in ringsig.cpp and others. +# +# Build: docker build -t alias-modernized -f Dockerfile . +# Extract: docker run --rm -v "$PWD/dist/linux-x86_64:/host-out" alias-modernized sh -c "cp -v /build-out/* /host-out/" +# +# First build takes ~30 min (deps + leveldb + bdb + wallet). Subsequent +# builds reuse cached layers. + +FROM ubuntu:20.04 + +ARG DEBIAN_FRONTEND=noninteractive +ARG JOBS=4 + +# Layer 1: all build tools and pkg-config-able libraries Alias's +# configure.ac expects. Pinned to Ubuntu 20.04's stock versions which +# happen to match Alias's 5-year-old expected versions. +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + autoconf \ + automake \ + libtool \ + autoconf-archive \ + autotools-dev \ + bsdmainutils \ + pkg-config \ + python3 \ + git \ + ca-certificates \ + curl \ + wget \ + bison \ + flex \ + # Crypto / compression / event + libssl-dev \ + libevent-dev \ + zlib1g-dev \ + liblz4-dev \ + libzstd-dev \ + liblzma-dev \ + libsnappy-dev \ + # Boost (Ubuntu 20.04 ships 1.71, Alias requires >= 1.62) + libboost-system-dev \ + libboost-filesystem-dev \ + libboost-program-options-dev \ + libboost-thread-dev \ + libboost-chrono-dev \ + libboost-test-dev \ + libboost-iostreams-dev \ + libboost-date-time-dev \ + # Qt 5.12 (Ubuntu 20.04 stock is 5.12.8) + qtbase5-dev \ + qttools5-dev \ + qttools5-dev-tools \ + qtdeclarative5-dev \ + qtwebengine5-dev \ + libqt5webchannel5-dev \ + libqt5websockets5-dev \ + libqt5svg5-dev \ + libqt5webview5-dev \ + qml-module-qtwebview \ + qml-module-qtwebengine \ + && rm -rf /var/lib/apt/lists/* + +# Layer 1b: additional packages discovered during the iterative build +# (kept as a separate RUN so the big apt install above stays cached +# across iterations). +RUN apt-get update && apt-get install -y --no-install-recommends \ + libcap-dev \ + libseccomp-dev \ + && rm -rf /var/lib/apt/lists/* + +# Alias's top-level Makefile.am declares `SUBDIRS = db4.8/build_unix +# leveldb src`, so leveldb and db4.8 must live INSIDE the wallet source +# tree, not as siblings. We clone them in place first (cacheable layers +# unaffected by source changes), build them, then COPY the wallet +# source on top (.dockerignore excludes db4.8 and leveldb so the COPY +# doesn't disturb them). +WORKDIR /build/alias-modernized + +# Layer 2: leveldb (aliascash fork) +RUN git clone --depth 1 https://github.com/aliascash/leveldb.git + +# Layer 3: db4.8 (aliascash fork) +RUN git clone --depth 1 https://github.com/aliascash/db4.8.git + +# Layer 4: Build leveldb. Default `all` target produces +# out-static/libleveldb.a and out-static/libmemenv.a, which is exactly +# what src/Makefile.am references via ../leveldb/out-static/. +WORKDIR /build/alias-modernized/leveldb +RUN make -j${JOBS} + +# Layer 5: Build db4.8. Produces libdb_cxx-4.8.a; src/Makefile.am +# expects libdb_cxx.a, so symlink it. +WORKDIR /build/alias-modernized/db4.8/build_unix +RUN ../dist/configure \ + --disable-shared \ + --enable-static \ + --enable-cxx \ + --disable-replication \ + --disable-compression \ + --with-pic \ + && make -j${JOBS} libdb_cxx-4.8.a \ + && ln -sf libdb_cxx-4.8.a libdb_cxx.a + +# Layer 6: Copy the modernized wallet source ON TOP. This is the layer +# that invalidates on every source code change; everything above is +# cached. The .dockerignore excludes leveldb/ and db4.8/ so this COPY +# does not disturb the freshly built libraries above. +WORKDIR /build/alias-modernized +COPY . . + +# Layer 7: Configure and build. +RUN ./autogen.sh +RUN ./configure --enable-gui --with-boost-libdir=/usr/lib/x86_64-linux-gnu +RUN make -j${JOBS} + +# Final layer: stash the build outputs at a stable path for extraction. +RUN mkdir -p /build-out \ + && cp -v src/aliaswalletd /build-out/ 2>/dev/null || true \ + && cp -v src/aliaswallet /build-out/ 2>/dev/null || true + +# Default command lists artifacts. +CMD ["ls", "-la", "/build-out"] diff --git a/Dockerfile.win b/Dockerfile.win new file mode 100644 index 0000000000..b68c4d8f32 --- /dev/null +++ b/Dockerfile.win @@ -0,0 +1,173 @@ +# syntax=docker/dockerfile:1.4 +# Cross-compile the modernized Alias wallet to Windows (x86_64) using +# mingw-w64. Produces aliaswalletd.exe and aliaswallet.exe. +# +# Build: docker build -t alias-modernized-win -f Dockerfile.win . +# Extract: docker run --rm -v "$PWD/dist/windows-x86_64:/host-out" alias-modernized-win sh -c "cp /build-out/* /host-out/" +# +# Time: +# - apt install ~5 min +# - depends build ~60-90 min (Qt5 for mingw is the slow one) +# - leveldb mingw ~2 min +# - db4.8 mingw ~3 min +# - wallet build ~30 min +# total first build ~100-130 min + +FROM ubuntu:20.04 + +ARG DEBIAN_FRONTEND=noninteractive +ARG JOBS=4 +ENV HOST=x86_64-w64-mingw32 + +# Native toolchain + mingw cross-compiler + autotools. +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + autoconf \ + automake \ + libtool \ + autoconf-archive \ + autotools-dev \ + bsdmainutils \ + pkg-config \ + python3 \ + git \ + ca-certificates \ + curl \ + wget \ + bison \ + flex \ + cmake \ + nsis \ + g++-mingw-w64-x86-64 \ + gcc-mingw-w64-x86-64 \ + binutils-mingw-w64-x86-64 \ + zip \ + unzip \ + ccache \ + && rm -rf /var/lib/apt/lists/* + +# Use the POSIX threading model — required by Qt and modern C++. +RUN update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix \ + && update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix + +WORKDIR /build/alias-modernized + +# Layer A: COPY depends/ ONLY first, so the multi-hour mingw deps build +# stays cached when only wallet source changes. +COPY depends ./depends + +# Layer B: Build all mingw dependencies. Qt is the slow one (~45 min). +# NO_QT=0 means Qt IS built. NO_USB=1, NO_ZMQ=1, NO_UPNP=1, NO_NATPMP=1, +# NO_USDT=1, NO_MULTIPROCESS=1: Alias doesn't use these subsystems. +# When qt.mk gains additional source files (e.g. extra Qt submodules), +# depends/'s fetch-cache stamps for qt become stale and prevent re-fetch. +# Nuke them so depends/ refetches fresh; existing already-correct files +# in the cache mount survive (they pass their hash verify). +RUN --mount=type=cache,target=/build/alias-modernized/depends/sources,sharing=locked \ + rm -f /build/alias-modernized/depends/sources/download-stamps/.stamp_fetched-qt-* || true + +RUN --mount=type=cache,target=/build/alias-modernized/depends/sources,sharing=locked \ + cd depends && make -j${JOBS} HOST=${HOST} CXX_STANDARD=c++17 \ + NO_USB=1 NO_ZMQ=1 NO_UPNP=1 NO_NATPMP=1 NO_USDT=1 NO_MULTIPROCESS=1 + +# Layer C: Clone + build Alias-patched leveldb with mingw cross. +RUN git clone --depth 1 https://github.com/aliascash/leveldb.git +RUN cd leveldb && make -j${JOBS} \ + CC=${HOST}-gcc \ + CXX=${HOST}-g++ \ + TARGET_OS=OS_WINDOWS_CROSSCOMPILE \ + OPT="-O2 -fPIC -DNDEBUG" + +# Layer D: Clone + build BDB 4.8 with mingw cross. +RUN git clone --depth 1 https://github.com/aliascash/db4.8.git +RUN cd db4.8/build_unix && \ + ../dist/configure \ + --host=${HOST} \ + --disable-shared \ + --enable-static \ + --enable-cxx \ + --disable-replication \ + --disable-compression \ + --enable-mingw \ + --with-pic \ + && make -j${JOBS} libdb_cxx-4.8.a \ + && ln -sf libdb_cxx-4.8.a libdb_cxx.a + +# Layer E: COPY the rest of the wallet source AFTER deps are built. +# This is the layer that invalidates per code change; everything above +# stays cached. +COPY . . + +# Layer F: Configure + build the wallet for mingw. +# Supplementary mingw cross libs discovered during the iterative wallet +# build (placed here so it does NOT invalidate the depends/ layer above +# when we add more). +RUN apt-get update && apt-get install -y --no-install-recommends \ + libz-mingw-w64-dev \ + && rm -rf /var/lib/apt/lists/* + +# Force fully-static link of libwinpthread and libssp by removing every +# variant the linker could pick: +# - import libs (.dll.a) +# - the DLL itself (so even auto-import can't find it) +# - copies under GCC's per-toolchain runtime dir (9.3-posix + 9.3-win32) +# Leaves the static .a archives in place. +RUN rm -f /usr/x86_64-w64-mingw32/lib/libwinpthread.dll.a \ + /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll \ + /usr/x86_64-w64-mingw32/lib/libssp.dll.a \ + /usr/lib/gcc/x86_64-w64-mingw32/9.3-posix/libssp.dll.a \ + /usr/lib/gcc/x86_64-w64-mingw32/9.3-posix/libssp-0.dll \ + /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libssp.dll.a \ + /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libssp-0.dll + +# libz-mingw-w64-dev ships the lib + header but no pkg-config .pc file, +# so PKG_CHECK_MODULES(ZLIB,...) in configure.ac fails. Write one. +RUN mkdir -p /usr/x86_64-w64-mingw32/lib/pkgconfig && \ + printf 'prefix=/usr/x86_64-w64-mingw32\nexec_prefix=${prefix}\nlibdir=${exec_prefix}/lib\nincludedir=${prefix}/include\n\nName: zlib\nDescription: zlib compression library\nVersion: 1.2.11\n\nLibs: -L${libdir} -lz\nCflags: -I${includedir}\n' \ + > /usr/x86_64-w64-mingw32/lib/pkgconfig/zlib.pc + +# The depends/-generated config.site has a syntax error in our build +# (line 156 unexpected end), so we bypass it and feed configure the +# depends/ paths directly via PKG_CONFIG_PATH and explicit flags. +ENV PKG_CONFIG_PATH=/build/alias-modernized/depends/${HOST}/lib/pkgconfig:/usr/x86_64-w64-mingw32/lib/pkgconfig +ENV PKG_CONFIG_LIBDIR=/build/alias-modernized/depends/${HOST}/lib/pkgconfig:/usr/x86_64-w64-mingw32/lib/pkgconfig +# Qt host tools (moc, uic, rcc, lrelease) for cross-compile live under +# depends//native/bin (the -hostprefix passed in qt.mk). Alias's +# configure.ac hardcodes ${with_qt5}/bin/, so symlink there too. +ENV PATH=/build/alias-modernized/depends/x86_64-w64-mingw32/native/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +RUN mkdir -p /build/alias-modernized/depends/x86_64-w64-mingw32/bin && \ + for t in moc uic rcc lrelease lupdate lconvert; do \ + ln -sf /build/alias-modernized/depends/x86_64-w64-mingw32/native/bin/$t \ + /build/alias-modernized/depends/x86_64-w64-mingw32/bin/$t ; \ + done +RUN ./autogen.sh +RUN ./configure \ + --prefix=/ \ + --host=${HOST} \ + --with-boost=/build/alias-modernized/depends/${HOST} \ + --with-qt5=/build/alias-modernized/depends/${HOST} \ + OPENSSL_LIBS="-L/build/alias-modernized/depends/${HOST}/lib -lssl -lcrypto" \ + OPENSSL_CFLAGS="-I/build/alias-modernized/depends/${HOST}/include" \ + LIBEVENT_LIBS="-L/build/alias-modernized/depends/${HOST}/lib -levent" \ + LIBEVENT_CFLAGS="-I/build/alias-modernized/depends/${HOST}/include" \ + ZLIB_LIBS="-lz" \ + ZLIB_CFLAGS="" \ + CPPFLAGS="-I/build/alias-modernized/depends/${HOST}/include" \ + LDFLAGS="-L/build/alias-modernized/depends/${HOST}/lib -Wl,--allow-multiple-definition -static-libgcc -static-libstdc++" +RUN make -j${JOBS} + +# Layer G: stage the .exe outputs for extraction. +# Pick up the .exe wherever libtool put it: with -all-static the real +# binary lives at src/.exe; with partial linkage it's at +# src/.libs/.exe (and src/.exe is a wrapper script). +RUN mkdir -p /build-out \ + && for name in aliaswalletd aliaswallet; do \ + for p in src/$name.exe src/.libs/$name.exe; do \ + if [ -f "$p" ] && file "$p" | grep -q "PE32"; then \ + cp -v "$p" /build-out/$name.exe && break ; \ + fi ; \ + done ; \ + done \ + && ls -la /build-out/ + +CMD ["ls", "-la", "/build-out"] diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 27001594d9..0000000000 --- a/INSTALL +++ /dev/null @@ -1,9 +0,0 @@ -Building ShadowCoin - -See doc/readme-qt.rst for instructions on building ShadowCoin QT, -the intended-for-end-users, nice-graphical-interface, reference -implementation of ShadowCoin. - -See doc/build-*.txt for instructions on building shadowcoind, -the intended-for-services, no-graphical-interface, reference -implementation of ShadowCoin. diff --git a/Jenkinsfile_disabled b/Jenkinsfile_disabled new file mode 100644 index 0000000000..28d4dab68b --- /dev/null +++ b/Jenkinsfile_disabled @@ -0,0 +1,986 @@ +#!groovy +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// +// SPDX-License-Identifier: MIT + +pipeline { + agent { + label "housekeeping" + } + options { + timestamps() + timeout(time: 4, unit: 'HOURS') + buildDiscarder(logRotator(numToKeepStr: '30', artifactNumToKeepStr: '1')) + disableConcurrentBuilds() + } + environment { + // In case another branch beside master or develop should be deployed, enter it here + BRANCH_TO_DEPLOY = "xyz" + DISCORD_WEBHOOK = credentials('DISCORD_WEBHOOK') + GITHUB_CI_TOKEN = credentials('GITHUB_CI_TOKEN') + CI_URL = credentials('CI_URL') + ACCESS_TOKEN = credentials('ci_read_access') + DEVELOP_TAG = "Build${BUILD_NUMBER}" + RELEASE_TAG = sh( + script: "printf \$(grep CLIENT_VERSION_MAJOR CMakeLists.txt | head -n1 | cut -d ' ' -f2 | sed 's/)//g' | tr -d '\\n' | tr -d '\\r').\$(grep CLIENT_VERSION_MINOR CMakeLists.txt | head -n1 | cut -d ' ' -f2 | sed 's/)//g' | tr -d '\\n' | tr -d '\\r').\$(grep CLIENT_VERSION_REVISION CMakeLists.txt | head -n1 | cut -d ' ' -f2 | sed 's/)//g' | tr -d '\\n' | tr -d '\\r') | sed 's/ //g'", + returnStdout: true + ) + GIT_TAG_TO_USE = "${DEVELOP_TAG}" + GIT_COMMIT_SHORT = sh( + script: "printf \$(git rev-parse --short ${GIT_COMMIT})", + returnStdout: true + ) + CURRENT_DATE = sh( + script: "printf \"\$(date '+%F %T')\"", + returnStdout: true + ) + RELEASE_NAME = "Continuous build #${BUILD_NUMBER} (Branch ${GIT_BRANCH})" + RELEASE_DESCRIPTION = "Build ${BUILD_NUMBER} from ${CURRENT_DATE}" + PRERELEASE = "true" + } + stages { + stage('Notification') { + steps { + // Using result state 'ABORTED' to mark the message on discord with a white border. + // Makes it easier to distinguish job-start from job-finished + discordSend( + description: "Started build #$env.BUILD_NUMBER", + image: '', + //link: "$env.BUILD_URL", + successful: true, + result: "ABORTED", + thumbnail: 'https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png', + title: "$env.JOB_NAME", + webhookURL: DISCORD_WEBHOOK + ) + } + } + stage('Cleanup') { + steps { + sh "git clean -fd" + } + } + stage('Feature branch') { + when { + not { + anyOf { branch 'develop'; branch 'master'; branch "${BRANCH_TO_DEPLOY}" } + } + } + //noinspection GroovyAssignabilityCheck + parallel { + stage('Raspberry Pi Buster arm64') { + agent { + label "raspi" + } + steps { + script { + buildFeatureBranch( + dockerfile: 'Docker/RaspberryPi/Dockerfile_Buster_noUpload', + dockerTag: "aliascash/alias-wallet-raspi-buster:${GIT_TAG_TO_USE}", + ) + sh "docker rmi aliascash/alias-wallet-raspi-buster:${GIT_TAG_TO_USE}" + } + } + } + stage('CentOS 8') { + agent { + label "docker" + } + steps { + script { + buildFeatureBranch( + dockerfile: 'Docker/CentOS/Dockerfile_noUpload', + dockerTag: "aliascash/alias-wallet-centos-8:${GIT_TAG_TO_USE}" + ) + sh "docker rmi aliascash/alias-wallet-centos-8:${GIT_TAG_TO_USE}" + } + } + } + stage('Debian Stretch') { + agent { + label "docker" + } + steps { + script { + buildFeatureBranch( + dockerfile: 'Docker/Debian/Dockerfile_Stretch_noUpload', + dockerTag: "aliascash/alias-wallet-debian-stretch:${GIT_TAG_TO_USE}" + ) + sh "docker rmi aliascash/alias-wallet-debian-stretch:${GIT_TAG_TO_USE}" + } + } + } + stage('Debian Buster') { + agent { + label "docker" + } + steps { + script { + buildFeatureBranch( + dockerfile: 'Docker/Debian/Dockerfile_Buster_noUpload', + dockerTag: "aliascash/alias-wallet-debian-buster:${GIT_TAG_TO_USE}" + ) + sh "docker rmi aliascash/alias-wallet-debian-buster:${GIT_TAG_TO_USE}" + } + } + } + stage('Fedora') { + agent { + label "docker" + } + steps { + script { + buildFeatureBranch( + dockerfile: 'Docker/Fedora/Dockerfile_noUpload', + dockerTag: "aliascash/alias-wallet-fedora:${GIT_TAG_TO_USE}" + ) + sh "docker rmi aliascash/alias-wallet-fedora:${GIT_TAG_TO_USE}" + } + } + } + stage('OpenSUSE') { + agent { + label "docker" + } + steps { + script { + buildFeatureBranch( + dockerfile: 'Docker/OpenSUSE/Dockerfile_noUpload', + dockerTag: "aliascash/alias-wallet-opensuse-tumbleweed:${GIT_TAG_TO_USE}" + ) + sh "docker rmi aliascash/alias-wallet-opensuse-tumbleweed:${GIT_TAG_TO_USE}" + } + } + } + stage('Ubuntu 18.04') { + agent { + label "docker" + } + steps { + script { + buildFeatureBranch( + dockerfile: 'Docker/Ubuntu/Dockerfile_18_04_noUpload', + dockerTag: "aliascash/alias-wallet-ubuntu-18-04:${GIT_TAG_TO_USE}" + ) + sh "docker rmi aliascash/alias-wallet-ubuntu-18-04:${GIT_TAG_TO_USE}" + } + } + } + stage('Ubuntu 20.04') { + agent { + label "docker" + } + steps { + script { + buildFeatureBranch( + dockerfile: 'Docker/Ubuntu/Dockerfile_20_04_noUpload', + dockerTag: "aliascash/alias-wallet-ubuntu-20-04:${GIT_TAG_TO_USE}" + ) + sh "docker rmi aliascash/alias-wallet-ubuntu-20-04:${GIT_TAG_TO_USE}" + } + } + } + stage('Mac') { + agent { + label "mac" + } + environment { + BOOST_PATH = "${BOOST_PATH_MAC}" + OPENSSL_PATH = "${OPENSSL_PATH_MAC}" + QT_PATH = "${QT_PATH_MAC_512}" + PATH = "/usr/local/bin:${QT_PATH}/bin:$PATH" + MACOSX_DEPLOYMENT_TARGET = 10.12 + } + steps { + script { + sh( + script: """ + pwd + ./scripts/cmake-build-mac.sh -g + cp ./cmake-build-cmdline-mac/aliaswallet/Alias.dmg Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Mac.dmg + """ + ) + archiveArtifacts allowEmptyArchive: true, artifacts: "Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Mac.dmg" + } + } + } + stage('Windows Qt5.12.x') { + stages { +// stage('Start Windows slave') { +// steps { +// withCredentials([[ +// $class : 'AmazonWebServicesCredentialsBinding', +// credentialsId : '91c4a308-07cd-4468-896c-3d75d086190d', +// accessKeyVariable: 'AWS_ACCESS_KEY_ID', +// secretKeyVariable: 'AWS_SECRET_ACCESS_KEY' +// ]]) { +// sh( +// script: """ +// docker run \ +// --rm \ +// --env AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \ +// --env AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \ +// --env AWS_DEFAULT_REGION=eu-west-1 \ +// garland/aws-cli-docker \ +// aws ec2 start-instances --instance-ids i-06fb7942772e77e55 +// """ +// ) +// } +// } +// } + stage('Win + Qt5.12.x') { + agent { + label "windows" + } + environment { + QTDIR = "${QT_DIR_WIN_512}" + VSDIR = "${VS2019_DIR}" + CMAKEDIR = "${CMAKE_DIR}" + VCPKGDIR = "${VCPKG_DIR}" + } + steps { + script { + bat 'scripts/cmake-build-win.bat' + } + } + } + } + } +// stage('Windows Qt5.15.x') { +// stages { +// stage('Start Windows slave') { +// steps { +// withCredentials([[ +// $class : 'AmazonWebServicesCredentialsBinding', +// credentialsId : '91c4a308-07cd-4468-896c-3d75d086190d', +// accessKeyVariable: 'AWS_ACCESS_KEY_ID', +// secretKeyVariable: 'AWS_SECRET_ACCESS_KEY' +// ]]) { +// sh( +// script: """ +// docker run \ +// --rm \ +// --env AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \ +// --env AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \ +// --env AWS_DEFAULT_REGION=eu-west-1 \ +// garland/aws-cli-docker \ +// aws ec2 start-instances --instance-ids i-06fb7942772e77e55 +// """ +// ) +// } +// } +// } +// stage('Win + Qt5.15.x') { +// agent { +// label "windows2" +// } +// environment { +// QTDIR = "${QT_DIR_WIN}" +// VSDIR = "${VS2019_DIR}" +// CMAKEDIR = "${CMAKE_DIR}" +// VCPKGDIR = "${VCPKG_DIR}" +// } +// steps { +// script { +// bat 'scripts/cmake-build-win.bat' +// } +// } +// } +// } +// } + } + } + stage('Prepare master branch build') { + when { + branch 'master' + } + stages { + stage('Setup env vars to use') { + steps { + script { + GIT_TAG_TO_USE = "${RELEASE_TAG}" + RELEASE_NAME = "Release ${GIT_TAG_TO_USE}" + RELEASE_DESCRIPTION = "${WORKSPACE}/ReleaseNotes.md" + PRERELEASE = "false" + } + } + } + } + } + stage('Git tag handling') { + when { + anyOf { branch 'master'; branch 'develop'; branch "${BRANCH_TO_DEPLOY}" } + } + stages { + stage('Create Git tag') { + steps { + sshagent(credentials: ['Github-SSH-Login']) { + createTag( + tag: "${GIT_TAG_TO_USE}", + commit: "${GIT_COMMIT_SHORT}", + comment: "Created tag ${GIT_TAG_TO_USE}" + ) + } + } + } + stage('Remove Github release if already existing') { + when { + expression { + return isReleaseExisting( + githubCIToken: GITHUB_CI_TOKEN, + user: 'aliascash', + repository: 'alias-wallet', + tag: "${GIT_TAG_TO_USE}" + ) ==~ true + } + } + steps { + script { + removeRelease( + githubCIToken: GITHUB_CI_TOKEN, + user: 'aliascash', + repository: 'alias-wallet', + tag: "${GIT_TAG_TO_USE}" + ) + } + } + } + stage('Create Github release') { + when { + expression { + return isReleaseExisting( + githubCIToken: GITHUB_CI_TOKEN, + user: 'aliascash', + repository: 'alias-wallet', + tag: "${GIT_TAG_TO_USE}" + ) ==~ false + } + } + steps { + script { + createRelease( + githubCIToken: GITHUB_CI_TOKEN, + user: 'aliascash', + repository: 'alias-wallet', + tag: "${GIT_TAG_TO_USE}", + name: "${RELEASE_NAME}", + description: "${RELEASE_DESCRIPTION}", + preRelease: "${PRERELEASE}" + ) + } + } + } + } + } + stage('Develop/Master') { + when { + anyOf { branch 'master'; branch 'develop'; branch "${BRANCH_TO_DEPLOY}" } + } + //noinspection GroovyAssignabilityCheck + parallel { + stage('Raspberry Pi Buster') { + agent { + label "raspi" + } + stages { + stage('Raspberry Pi Buster') { + steps { + script { + buildBranch( + githubCIToken: GITHUB_CI_TOKEN, + dockerfile: 'Docker/RaspberryPi/Dockerfile_Buster', + dockerTag: "aliascash/alias-wallet-raspi-buster:${GIT_TAG_TO_USE}", + gitTag: "${GIT_TAG_TO_USE}", + gitCommit: "${GIT_COMMIT_SHORT}" + ) + getChecksumfileFromImage( + dockerTag: "aliascash/alias-wallet-raspi-buster:${GIT_TAG_TO_USE}", + checksumfile: "Checksum-Alias-RaspberryPi-Buster-aarch64.txt" + ) + archiveArtifacts allowEmptyArchive: true, artifacts: "Checksum-Alias-RaspberryPi-Buster-aarch64.txt" + sh "docker rmi aliascash/alias-wallet-raspi-buster:${GIT_TAG_TO_USE}" + } + } + } + stage('Trigger image build') { + steps { + build( + job: 'Alias/pi-gen/alias_arm64', + parameters: [ + string( + name: 'ALIAS_RELEASE', + value: "${GIT_TAG_TO_USE}" + ), + string( + name: 'GIT_COMMIT_SHORT', + value: "${GIT_COMMIT_SHORT}" + ) + ], + wait: false + ) + } + } + } + } + stage('CentOS 8') { + agent { + label "docker" + } + stages { + stage('CentOS 8') { + steps { + script { + buildBranch( + githubCIToken: GITHUB_CI_TOKEN, + dockerfile: 'Docker/CentOS/Dockerfile', + dockerTag: "aliascash/alias-wallet-centos-8:${GIT_TAG_TO_USE}", + gitTag: "${GIT_TAG_TO_USE}", + gitCommit: "${GIT_COMMIT_SHORT}" + ) + getChecksumfileFromImage( + dockerTag: "aliascash/alias-wallet-centos-8:${GIT_TAG_TO_USE}", + checksumfile: "Checksum-Alias-CentOS-8.txt" + ) + archiveArtifacts allowEmptyArchive: true, artifacts: "Checksum-Alias-CentOS-8.txt" + sh "docker rmi aliascash/alias-wallet-centos-8:${GIT_TAG_TO_USE}" + } + } + } + } + } + stage('Debian Stretch') { + agent { + label "docker" + } + stages { + stage('Debian Stretch') { + steps { + script { + buildBranch( + githubCIToken: GITHUB_CI_TOKEN, + dockerfile: 'Docker/Debian/Dockerfile_Stretch', + dockerTag: "aliascash/alias-wallet-debian-stretch:${GIT_TAG_TO_USE}", + gitTag: "${GIT_TAG_TO_USE}", + gitCommit: "${GIT_COMMIT_SHORT}" + ) + getChecksumfileFromImage( + dockerTag: "aliascash/alias-wallet-debian-stretch:${GIT_TAG_TO_USE}", + checksumfile: "Checksum-Alias-Debian-Stretch.txt" + ) + archiveArtifacts allowEmptyArchive: true, artifacts: "Checksum-Alias-Debian-Stretch.txt" + sh "docker rmi aliascash/alias-wallet-debian-stretch:${GIT_TAG_TO_USE}" + } + } + } + } + } + stage('Debian Buster') { + agent { + label "docker" + } + stages { + stage('Debian Buster') { + steps { + script { + buildBranch( + githubCIToken: GITHUB_CI_TOKEN, + dockerfile: 'Docker/Debian/Dockerfile_Buster', + dockerTag: "aliascash/alias-wallet-debian-buster:${GIT_TAG_TO_USE}", + gitTag: "${GIT_TAG_TO_USE}", + gitCommit: "${GIT_COMMIT_SHORT}" + ) + getChecksumfileFromImage( + dockerTag: "aliascash/alias-wallet-debian-buster:${GIT_TAG_TO_USE}", + checksumfile: "Checksum-Alias-Debian-Buster.txt" + ) + archiveArtifacts allowEmptyArchive: true, artifacts: "Checksum-Alias-Debian-Buster.txt" + sh "docker rmi aliascash/alias-wallet-debian-buster:${GIT_TAG_TO_USE}" + } + } + } + } + } + stage('Fedora') { + agent { + label "docker" + } + steps { + script { + buildBranch( + githubCIToken: GITHUB_CI_TOKEN, + dockerfile: 'Docker/Fedora/Dockerfile', + dockerTag: "aliascash/alias-wallet-fedora:${GIT_TAG_TO_USE}", + gitTag: "${GIT_TAG_TO_USE}", + gitCommit: "${GIT_COMMIT_SHORT}" + ) + getChecksumfileFromImage( + dockerTag: "aliascash/alias-wallet-fedora:${GIT_TAG_TO_USE}", + checksumfile: "Checksum-Alias-Fedora.txt" + ) + archiveArtifacts allowEmptyArchive: true, artifacts: "Checksum-Alias-Fedora.txt" + sh "docker rmi aliascash/alias-wallet-fedora:${GIT_TAG_TO_USE}" + } + } + } + stage('OpenSUSE') { + agent { + label "docker" + } + steps { + script { + buildBranch( + githubCIToken: GITHUB_CI_TOKEN, + dockerfile: 'Docker/OpenSUSE/Dockerfile', + dockerTag: "aliascash/alias-wallet-opensuse-tumbleweed:${GIT_TAG_TO_USE}", + gitTag: "${GIT_TAG_TO_USE}", + gitCommit: "${GIT_COMMIT_SHORT}" + ) + getChecksumfileFromImage( + dockerTag: "aliascash/alias-wallet-opensuse-tumbleweed:${GIT_TAG_TO_USE}", + checksumfile: "Checksum-Alias-OpenSUSE-Tumbleweed.txt" + ) + archiveArtifacts allowEmptyArchive: true, artifacts: "Checksum-Alias-OpenSUSE-Tumbleweed.txt" + sh "docker rmi aliascash/alias-wallet-opensuse-tumbleweed:${GIT_TAG_TO_USE}" + } + } + } + stage('Ubuntu 18.04') { + agent { + label "docker" + } + stages { + stage('Ubuntu 18.04') { + steps { + script { + buildBranch( + githubCIToken: GITHUB_CI_TOKEN, + dockerfile: 'Docker/Ubuntu/Dockerfile_18_04', + dockerTag: "aliascash/alias-wallet-ubuntu-18-04:${GIT_TAG_TO_USE}", + gitTag: "${GIT_TAG_TO_USE}", + gitCommit: "${GIT_COMMIT_SHORT}" + ) + getChecksumfileFromImage( + dockerTag: "aliascash/alias-wallet-ubuntu-18-04:${GIT_TAG_TO_USE}", + checksumfile: "Checksum-Alias-Ubuntu-18-04.txt" + ) + archiveArtifacts allowEmptyArchive: true, artifacts: "Checksum-Alias-Ubuntu-18-04.txt" + sh "docker rmi aliascash/alias-wallet-ubuntu-18-04:${GIT_TAG_TO_USE}" + } + } + } + } + } + stage('Ubuntu 20.04') { + agent { + label "docker" + } + stages { + stage('Ubuntu 20.04') { + steps { + script { + buildBranch( + githubCIToken: GITHUB_CI_TOKEN, + dockerfile: 'Docker/Ubuntu/Dockerfile_20_04', + dockerTag: "aliascash/alias-wallet-ubuntu-20-04:${GIT_TAG_TO_USE}", + gitTag: "${GIT_TAG_TO_USE}", + gitCommit: "${GIT_COMMIT_SHORT}" + ) + getChecksumfileFromImage( + dockerTag: "aliascash/alias-wallet-ubuntu-20-04:${GIT_TAG_TO_USE}", + checksumfile: "Checksum-Alias-Ubuntu-20-04.txt" + ) + archiveArtifacts allowEmptyArchive: true, artifacts: "Checksum-Alias-Ubuntu-20-04.txt" + sh "docker rmi aliascash/alias-wallet-ubuntu-20-04:${GIT_TAG_TO_USE}" + } + } + } + stage('Trigger Docker image build') { + steps { + build( + job: "Alias/docker-aliaswalletd/${GIT_BRANCH}", + parameters: [ + string( + name: 'ALIAS_RELEASE', + value: "${GIT_TAG_TO_USE}" + ), + string( + name: 'GIT_COMMIT_SHORT', + value: "${GIT_COMMIT_SHORT}" + ) + ], + wait: false + ) + } + } + } + } + stage('Mac') { + agent { + label "mac" + } + environment { + BOOST_PATH = "${BOOST_PATH_MAC}" + OPENSSL_PATH = "${OPENSSL_PATH_MAC}" + QT_PATH = "${QT_PATH_MAC_512}" + PATH = "/usr/local/bin:${QT_PATH}/bin:$PATH" + MACOSX_DEPLOYMENT_TARGET = 10.12 + } + stages { + stage('MacOS build') { + steps { + script { + sh( + script: """ + pwd + ./scripts/cmake-build-mac.sh -g + cp ./cmake-build-cmdline-mac/aliaswallet/Alias.dmg Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Mac.dmg + """ + ) + archiveArtifacts allowEmptyArchive: true, artifacts: "Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Mac.dmg" + } + } + } + stage('Upload deliveries') { + agent { + label "housekeeping" + } + steps { + script { + sh( + script: """ + rm -f Alias*.dmg* + curl -L \ + --user "${ACCESS_TOKEN}" \ + ${CI_URL}/job/Alias/job/alias-wallet/job/${GIT_BRANCH}/${BUILD_NUMBER}/artifact/Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Mac.dmg \ + --output Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Mac.dmg || true + """ + ) + uploadArtifactToGitHub( + user: 'aliascash', + repository: 'alias-wallet', + tag: "${GIT_TAG_TO_USE}", + artifactNameRemote: "Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Mac.dmg", + ) + createAndArchiveChecksumFile( + filename: "Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Mac.dmg", + checksumfile: "Checksum-Alias-Mac.txt" + ) + sh "rm -f Alias*.dmg* Checksum-Alias*" + } + } + } + } + } + stage('Windows Qt5.12.x') { + stages { +// stage('Start Windows slave') { +// steps { +// withCredentials([[ +// $class : 'AmazonWebServicesCredentialsBinding', +// credentialsId : '91c4a308-07cd-4468-896c-3d75d086190d', +// accessKeyVariable: 'AWS_ACCESS_KEY_ID', +// secretKeyVariable: 'AWS_SECRET_ACCESS_KEY' +// ]]) { +// sh( +// script: """ +// docker run \ +// --rm \ +// --env AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \ +// --env AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \ +// --env AWS_DEFAULT_REGION=eu-west-1 \ +// garland/aws-cli-docker \ +// aws ec2 start-instances --instance-ids i-06fb7942772e77e55 +// """ +// ) +// } +// } +// } + stage('Win + Qt5.12.x') { + agent { + label "windows" + } + environment { + QTDIR = "${QT_DIR_WIN_512}" + VSDIR = "${VS2019_DIR}" + CMAKEDIR = "${CMAKE_DIR}" + VCPKGDIR = "${VCPKG_DIR}" + } + steps { + script { + bat( + script: """ + if exist build\\Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64-Qt5.12.zip del build\\Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64-Qt5.12.zip + scripts/cmake-build-win.bat + """ + ) + zip( + zipFile: "${WORKSPACE}/build/Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64-Qt5.12.zip", + dir: "${WORKSPACE}/build", + glob: "Alias/**" + ) + bat( + script: """ + if exist build\\Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64-Qt5.12.zip copy build\\Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64-Qt5.12.zip Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64-Qt5.12.zip + """ + ) + archiveArtifacts allowEmptyArchive: true, artifacts: "Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64-Qt5.12.zip" + build( + job: 'Alias/installer/master', + parameters: [ + string( + name: 'ARCHIVE_LOCATION', + value: "${WORKSPACE}/build" + ), + string( + name: 'ARCHIVE_NAME', + value: "Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64-Qt5.12.zip" + ), + string( + name: 'GIT_TAG_TO_USE', + value: "${GIT_TAG_TO_USE}" + ), + string( + name: 'GIT_COMMIT_SHORT', + value: "${GIT_COMMIT_SHORT}" + ) + ], + wait: false + ) + } + } + } + stage('Upload deliveries') { + steps { + uploadDeliveries("-Qt5.12") + } + } + } + } +// stage('Windows Qt5.15.x') { +// stages { +// stage('Start Windows slave') { +// steps { +// withCredentials([[ +// $class : 'AmazonWebServicesCredentialsBinding', +// credentialsId : '91c4a308-07cd-4468-896c-3d75d086190d', +// accessKeyVariable: 'AWS_ACCESS_KEY_ID', +// secretKeyVariable: 'AWS_SECRET_ACCESS_KEY' +// ]]) { +// sh( +// script: """ +// docker run \ +// --rm \ +// --env AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \ +// --env AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \ +// --env AWS_DEFAULT_REGION=eu-west-1 \ +// garland/aws-cli-docker \ +// aws ec2 start-instances --instance-ids i-06fb7942772e77e55 +// """ +// ) +// } +// } +// } +// stage('Win + Qt5.15.x') { +// agent { +// label "windows2" +// } +// environment { +// QTDIR = "${QT_DIR_WIN}" +// VSDIR = "${VS2019_DIR}" +// CMAKEDIR = "${CMAKE_DIR}" +// VCPKGDIR = "${VCPKG_DIR}" +// } +// steps { +// script { +// bat( +// script: """ +// if exist build\\Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64.zip del build\\Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64.zip +// scripts/cmake-build-win.bat +// """ +// ) +// zip( +// zipFile: "${WORKSPACE}/build/Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64.zip", +// dir: "${WORKSPACE}/build", +// glob: "Alias/**" +// ) +// bat( +// script: """ +// if exist build\\Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64.zip copy build\\Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64.zip Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64.zip +// """ +// ) +// archiveArtifacts allowEmptyArchive: true, artifacts: "Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64.zip" +// } +// } +// } +// stage('Upload deliveries') { +// steps { +// uploadDeliveries("") +// } +// } +// } +// } + } + post { + always { + script { + sh( + script: """ + ${WORKSPACE}/scripts/createChecksumSummary.sh \ + "${RELEASE_DESCRIPTION}" \ + "${WORKSPACE}" \ + "${CI_URL}/job/Alias/job/alias-wallet/job/${GIT_BRANCH}/${BUILD_NUMBER}" \ + "${ACCESS_TOKEN}" + """ + ) + editRelease( + user: 'aliascash', + repository: 'alias-wallet', + tag: "${GIT_TAG_TO_USE}", + name: "${RELEASE_NAME}", + description: "${WORKSPACE}/releaseNotesToDeploy.txt", + preRelease: "${PRERELEASE}" + ) + uploadArtifactToGitHub( + user: 'aliascash', + repository: 'alias-wallet', + tag: "${GIT_TAG_TO_USE}", + artifactNameLocal: "releaseNotesToDeploy.txt", + artifactNameRemote: "RELEASENOTES.txt", + ) + } + } + } + } + stage('Update download links') { + when { + branch 'master' + } + steps { + echo "Update of download links currently disabled" +// build( +// job: 'updateDownloadURLs', +// parameters: [ +// string( +// name: 'RELEASE_VERSION', +// value: "${GIT_TAG_TO_USE}" +// ), +// string( +// name: 'GIT_COMMIT_SHORT', +// value: "${GIT_COMMIT_SHORT}" +// ) +// ], +// wait: false +// ) + } + } + } + post { + success { + script { + if (!hudson.model.Result.SUCCESS.equals(currentBuild.getPreviousBuild()?.getResult())) { + emailext( + subject: "GREEN: '${env.JOB_NAME} [${env.BUILD_NUMBER}]'", + body: '${JELLY_SCRIPT,template="html"}', + recipientProviders: [[$class: 'DevelopersRecipientProvider'], [$class: 'RequesterRecipientProvider']], +// to: "to@be.defined", +// replyTo: "to@be.defined" + ) + } + discordSend( + description: "Build #$env.BUILD_NUMBER finished successfully", + image: '', + //link: "$env.BUILD_URL", + successful: true, + thumbnail: 'https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png', + title: "$env.JOB_NAME", + webhookURL: DISCORD_WEBHOOK + ) + } + } + unstable { + emailext( + subject: "YELLOW: '${env.JOB_NAME} [${env.BUILD_NUMBER}]'", + body: '${JELLY_SCRIPT,template="html"}', + recipientProviders: [[$class: 'DevelopersRecipientProvider'], [$class: 'RequesterRecipientProvider']], +// to: "to@be.defined", +// replyTo: "to@be.defined" + ) + discordSend( + description: "Build #$env.BUILD_NUMBER finished unstable", + image: '', + //link: "$env.BUILD_URL", + successful: true, + result: "UNSTABLE", + thumbnail: 'https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png', + title: "$env.JOB_NAME", + webhookURL: DISCORD_WEBHOOK + ) + } + failure { + emailext( + subject: "RED: '${env.JOB_NAME} [${env.BUILD_NUMBER}]'", + body: '${JELLY_SCRIPT,template="html"}', + recipientProviders: [[$class: 'DevelopersRecipientProvider'], [$class: 'RequesterRecipientProvider']], +// to: "to@be.defined", +// replyTo: "to@be.defined" + ) + discordSend( + description: "Build #$env.BUILD_NUMBER failed!", + image: '', + //link: "$env.BUILD_URL", + successful: false, + thumbnail: 'https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png', + title: "$env.JOB_NAME", + webhookURL: DISCORD_WEBHOOK + ) + } + aborted { + discordSend( + description: "Build #$env.BUILD_NUMBER was aborted", + image: '', + //link: "$env.BUILD_URL", + successful: true, + result: "ABORTED", + thumbnail: 'https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png', + title: "$env.JOB_NAME", + webhookURL: DISCORD_WEBHOOK + ) + } + } +} + +def buildWindows(def suffix) { + prepareWindowsBuild() + bat 'scripts\\win-genbuild.bat' + bat 'scripts\\win-build.bat' + createWindowsDelivery( + version: "${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}", + suffix: "${suffix}" + ) +} + +def uploadDeliveries(def suffix) { + script { + sh( + script: """ + rm -f Alias-*-Win64${suffix}.zip + curl -L \\ + --user "${ACCESS_TOKEN}" \\ + ${CI_URL}/job/Alias/job/alias-wallet/job/${GIT_BRANCH}/${BUILD_NUMBER}/artifact/Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64${suffix}.zip \\ + --output Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64${suffix}.zip || true + """ + ) + uploadArtifactToGitHub( + user: 'aliascash', + repository: 'alias-wallet', + tag: "${GIT_TAG_TO_USE}", + artifactNameRemote: "Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64${suffix}.zip", + ) + createAndArchiveChecksumFile( + filename: "Alias-${GIT_TAG_TO_USE}-${GIT_COMMIT_SHORT}-Win64${suffix}.zip", + checksumfile: "Checksum-Alias-Win64${suffix}.txt" + ) + sh "rm -f Alias-*-Win64${suffix}.zip Checksum-Alias-Win64${suffix}.txt" + } +} \ No newline at end of file diff --git a/LICENSES/BSD-2-Clause.txt b/LICENSES/BSD-2-Clause.txt new file mode 100644 index 0000000000..b566df3035 --- /dev/null +++ b/LICENSES/BSD-2-Clause.txt @@ -0,0 +1,24 @@ +LZ4 Library +Copyright (c) 2011-2014, Yann Collet +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/LICENSES/BSD-4-Clause.txt b/LICENSES/BSD-4-Clause.txt new file mode 100644 index 0000000000..67dea8b275 --- /dev/null +++ b/LICENSES/BSD-4-Clause.txt @@ -0,0 +1,10 @@ +Copyright (c) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, . All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software must display the following acknowledgement: +This product includes software developed by the organization. +4. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/LICENSES/BSL-1.0.txt b/LICENSES/BSL-1.0.txt new file mode 100644 index 0000000000..f52b77a2e1 --- /dev/null +++ b/LICENSES/BSL-1.0.txt @@ -0,0 +1,7 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/LICENSES/CC-BY-4.0.txt b/LICENSES/CC-BY-4.0.txt new file mode 100644 index 0000000000..c43ce7174c --- /dev/null +++ b/LICENSES/CC-BY-4.0.txt @@ -0,0 +1,99 @@ +Creative Commons Attribution 4.0 International + +Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. + +Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors + +Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public : wiki.creativecommons.org/Considerations_for_licensees + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions. + +a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. +b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. +c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. +d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. +e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. +f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. +g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. +h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. +i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. +j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. +k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. +Section 2 – Scope. + +a. License grant. +1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: +A. reproduce and Share the Licensed Material, in whole or in part; and +B. produce, reproduce, and Share Adapted Material. +2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. +3. Term. The term of this Public License is specified in Section 6(a). +4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. +5. Downstream recipients. +A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. +B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. +6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). +b. Other rights. +1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. +2. Patent and trademark rights are not licensed under this Public License. +3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + +a. Attribution. +1. If You Share the Licensed Material (including in modified form), You must: +A. retain the following if it is supplied by the Licensor with the Licensed Material: +i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); +ii. a copyright notice; +iii. a notice that refers to this Public License; +iv. a notice that refers to the disclaimer of warranties; +v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; +B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and +C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. +2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. +3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. +4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + +a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; +b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and +c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + +a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. +b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. +c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. +Section 6 – Term and Termination. + +a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. +b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: +1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or +2. upon express reinstatement by the Licensor. +c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. +d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. +e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. +Section 7 – Other Terms and Conditions. + +a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. +b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. +Section 8 – Interpretation. + +a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. +b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. +c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. +d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. +Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the "Licensor." The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/LICENSES/GPL-2.0-or-later.txt b/LICENSES/GPL-2.0-or-later.txt new file mode 100644 index 0000000000..7c11a6acc4 --- /dev/null +++ b/LICENSES/GPL-2.0-or-later.txt @@ -0,0 +1,71 @@ +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. diff --git a/LICENSES/GPL-3.0-or-later.txt b/LICENSES/GPL-3.0-or-later.txt new file mode 100644 index 0000000000..6f248655f4 --- /dev/null +++ b/LICENSES/GPL-3.0-or-later.txt @@ -0,0 +1,200 @@ +GNU GENERAL PUBLIC LICENSE +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The GNU General Public License is a free, copyleft license for software and other kinds of works. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. + +TERMS AND CONDITIONS + +0. Definitions. +"This License" refers to version 3 of the GNU General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based on the Program. + +To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + +1. Source Code. +The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. +A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + +2. Basic Permissions. +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. + +4. Conveying Verbatim Copies. +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: +a) The work must carry prominent notices stating that you modified it, and giving a relevant date. +b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". +c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. +d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. + +6. Conveying Non-Source Forms. +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: +a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. +b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. +c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. +d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. +e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. + +7. Additional Terms. +"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: + +a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or +b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or +c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or +d) Limiting the use for publicity purposes of names of licensors or authors of the material; or +e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or +f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. +All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. + +8. Termination. +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. + +9. Acceptance Not Required for Having Copies. +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. +10. Automatic Licensing of Downstream Recipients. +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. +An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. + +11. Patents. +A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". +A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. + +A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. +13. Use with the GNU Affero General Public License. +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. +14. Revised Versions of this License. +The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. + +15. Disclaimer of Warranty. +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +16. Limitation of Liability. +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +17. Interpretation of Sections 15 and 16. +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + + +Copyright (C) + +This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: + + Copyright (C) +This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". + +You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . + +The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . \ No newline at end of file diff --git a/LICENSES/ISC.txt b/LICENSES/ISC.txt new file mode 100644 index 0000000000..96720afb3c --- /dev/null +++ b/LICENSES/ISC.txt @@ -0,0 +1,8 @@ +ISC License + +Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") +Copyright (c) 1995-2003 by Internet Software Consortium + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt new file mode 100644 index 0000000000..1da20c4848 --- /dev/null +++ b/LICENSES/MIT.txt @@ -0,0 +1,25 @@ +Copyright (c) 2020 Alias Developers +Copyright (c) 2016 SpectreCoin Developers +Copyright (c) 2014 ShadowCoin Developers +Copyright (c) 2014 BlackCoin Developers +Copyright (c) 2013 NovaCoin Developers +Copyright (c) 2011 PPCoin Developers +Copyright (c) 2009 Bitcoin Developers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/LICENSES/OFL-1.1.txt b/LICENSES/OFL-1.1.txt new file mode 100644 index 0000000000..131165ec60 --- /dev/null +++ b/LICENSES/OFL-1.1.txt @@ -0,0 +1,45 @@ +Copyright (c) , (), +with Reserved Font Name . + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + +SIL OPEN FONT LICENSE + +Version 1.1 - 26 February 2007 + +PREAMBLE + +The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. + +DEFINITIONS + +"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the copyright statement(s). + +"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or substituting — in part or in whole — any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS + +Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. +2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. +3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. +5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. +TERMINATION + +This license becomes null and void if any of the above conditions are not met. + +DISCLAIMER + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/LICENSES/Unlicense.txt b/LICENSES/Unlicense.txt new file mode 100644 index 0000000000..fdcbed0835 --- /dev/null +++ b/LICENSES/Unlicense.txt @@ -0,0 +1,10 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. + +In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000000..cd1feaa680 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +ACLOCAL_AMFLAGS = -I m4 + +if OS_WINDOWS_CROSSCOMPILE +# for leveldb +AM_MAKEFLAGS = TARGET_OS=OS_WINDOWS_CROSSCOMPILE +endif + +export CC CXX AR LD +SUBDIRS = db4.8/build_unix leveldb src + +Aliaswallet.app: all-am + mkdir -p Aliaswallet.app/Contents/{MacOS,Resources} + cp Info.plist Aliaswallet.app/Contents + cp aliaswallet.icns Aliaswallet.app/Contents/Resources + cp src/aliaswallet Aliaswallet.app/Contents/MacOS/Aliaswallet + echo "APPL????" > Aliaswallet.app/Contents/PkgInfo + @MACDEPLOYQT@ Aliaswallet.app @MACDEPLOYQT_LIBPATH@ + +.PHONY: Aliaswallet.app diff --git a/README b/README deleted file mode 120000 index 42061c01a1..0000000000 --- a/README +++ /dev/null @@ -1 +0,0 @@ -README.md \ No newline at end of file diff --git a/README.md b/README.md index 6043f395c1..ba38d0203c 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,77 @@ -![ShadowCash Logo](https://i.imgur.com/ovemJA3.png) - -[![Slack](https://slack.shadowproject.io/badge.svg)](https://slack.shadowproject.io/) -[![Gitter](https://badges.gitter.im/shadowproject/shadow.svg)](https://gitter.im/shadowproject/shadow?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=body_badge) [![Build Status](https://travis-ci.org/shadowproject/shadow.svg?branch=master)](https://travis-ci.org/shadowproject/shadow) [![Code Climate](https://codeclimate.com/github/shadowproject/shadow/badges/gpa.svg)](https://codeclimate.com/github/shadowproject/shadow) [![Test Coverage](https://codeclimate.com/github/shadowproject/shadow/badges/coverage.svg)](https://codeclimate.com/github/shadowproject/shadow/coverage) [![Issue Count](https://codeclimate.com/github/shadowproject/shadow/badges/issue_count.svg)](https://codeclimate.com/github/shadowproject/shadow) - -Introduction -=========================== - -The Shadow Project is a decentralized peer-to-peer platform, created under an open source license, featuring a built-in cryptocurrency, end-to-end encrypted messaging and decentralized marketplace. The decentralized network aims to provide anonymity and privacy for everyone through a simple user-friendly interface by taking care of all the advanced cryptography in the background. - -* [Website](https://shadowproject.io/) -* [Blog](https://blog.shadowproject.io/) -* [Documentation](https://doc.shadowproject.io/) -* [Forum](https://talk.shadowproject.io/) - -"They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety." - -Releases -=========================== -[Click on this link to go to the latest release - 1.4.0.3](https://github.com/shadowproject/shadow/releases/latest) - -Supported Operating Systems: -* Linux (64 bit) -* ~~Linux (32 bit)~~ -* Windows (32 bit) -* Windows (64 bit) -* OSX - - -Linux releases will not work out of the box on the Raspberry Pi, you'll have to compile from source. - -Development process -=========================== - -Developers work in their own trees, then submit pull requests when -they think their feature or bug fix is ready. - -The patch will be accepted if there is broad consensus that it is a -good thing. Developers should expect to rework and resubmit patches -if they don't match the project's coding conventions (see coding.txt) -or are controversial. - -The master branch is regularly built and tested, but is not guaranteed -to be completely stable. Tags are regularly created to indicate new -stable release versions of ShadowCash. - -Feature branches are created when there are major new features being -worked on by several people. - -From time to time a pull request will become outdated. If this occurs, and -the pull is no longer automatically mergeable; a comment on the pull will -be used to issue a warning of closure. The pull will be closed 15 days -after the warning if action is not taken by the author. Pull requests closed -in this manner will have their corresponding issue labeled 'stagnant'. - -Issues with no commits will be given a similar warning, and closed after -15 days from their last activity. Issues closed in this manner will be -labeled 'stale'. - -Building Shadow -=========================== - -See [doc/readme-qt.rst](https://github.com/shadowproject/shadow/blob/master/doc/readme-qt.rst) for instructions on building **ShadowCoin QT** | *the intended-for-end-users, nice-graphical-interface, reference implementation of ShadowCash.* - -See [doc/build-msw.txt](https://github.com/shadowproject/shadow/blob/master/doc/build-msw.txt) for instructions on building **shadowcoind (Windows)** | *the intended-for-services, no-graphical-interface, reference implementation of ShadowCash.* - -See [doc/build-osx.txt](https://github.com/shadowproject/shadow/blob/master/doc/build-osx.txt) for instructions on building **shadowcoind (Mac)** - -See [doc/build-unix.txt](https://github.com/shadowproject/shadow/blob/master/doc/build-unix.txt) for instructions on building **shadowcoind (UNIX)** - - -> For guides and technical documentation please refer to [doc.shadowproject.io (en)](https://shadowproject.io/en/documentation) +# ALIAS +[![Latest develop build](https://img.shields.io/github/v/release/aliascash/alias-wallet?include_prereleases&label=Develop-Build)](https://github.com/aliascash/alias-wallet/releases) +[![Build Status Master](https://github.com/aliascash/alias-wallet/actions/workflows/build-master.yml/badge.svg)](https://github.com/aliascash/alias-wallet/actions) +[![Build Status Develop](https://github.com/aliascash/alias-wallet/actions/workflows/build-develop.yml/badge.svg)](https://github.com/aliascash/alias-wallet/actions) + +ALIAS is a Secure Proof-of-Stake (PoSv3) Network with Anonymous Transaction Capability. + +ALIAS utilizes a range of proven cryptographic techniques to achieve un-linkable, +un-traceable and anonymous transactions on its underlaying blockchain and also protects +the users identity by running all the network nodes as Tor hidden services. + +# Licensing + +- SPDX-FileCopyrightText: © 2025 ALIAS Developer +- SPDX-FileCopyrightText: © 2020 Alias Developers +- SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +- SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +- SPDX-FileCopyrightText: © 2014 BlackCoin Developers +- SPDX-FileCopyrightText: © 2013 NovaCoin Developers +- SPDX-FileCopyrightText: © 2011 PPCoin Developers +- SPDX-FileCopyrightText: © 2009 Bitcoin Developers + +SPDX-License-Identifier: MIT + +# Social +- Visit our [Telegram](https://t.me/StakingALIAS) group + +## Key Privacy Technology + +Anonymous token creation: Through the use of dual key stealth technology, ALIAS provides +the ability to generate ‘private coins’ by consuming 'public coins'. Private coins can then be +sent through an implementation of ring signatures based on the Cryptonote protocol +to eliminate any transaction history. The wallet offers the opportunity to transfer your +balance between public coins and private coins. We are currently working +on improving this technology for better functionality and privacy. + +Built in Tor: The ALIAS software offers a full integration of [Tor](https://www.torproject.org/) +so that the ALIAS client runs exclusively as a Tor hidden service using a .onion +address to connect to other clients in the network. Your real IP address is +therefore protected at all times. + +## Basic Coin Specs V3/V4 + + + + + + + + + + + + +
AlgoPoSv3/PoAS
Block Time96 Seconds
Difficulty RetargetingEvery Block (Moving average of last 24 hours)
Initial Coin Supply20,000,000 ALIAS
Funding Coin Supply3,000,000 ALIAS
Max Coin Supply (PoS Phase)3 private or 2 public coins reward per block, depending on what you're staking
Min Stake Maturity450 blocks (~12 hours)
Min ALIAS Confirmations10 blocks
Base Fee0.0001 ALIAS
Max Anon Output1000
Ring Sizefix 10
+ +## Further documentation + +For detailed description and further documentation have a look at our [Wiki](https://github.com/aliascash/documentation/wiki). + + Like to build from source? Go straight to these pages there: +* Build on and for [Windows](https://github.com/aliascash/documentation/wiki/Build-Windows) +* Build on and for [Mac](https://github.com/aliascash/documentation/wiki/Build-Mac) +* Separate pages for different flavours of Linux are also available there + +CI/CD: the GitHub Actions secrets and variables required by the build workflows are +documented in [doc/CI-SECRETS.md](doc/CI-SECRETS.md). + +#### UI development + +The following files where maintained on the separate Git repository +[alias-wallet-ui](https://github.com/aliascash/alias-wallet-ui): +* src/qt/res/assets/* +* src/qt/res/index.html +* spectre.qrc + +**Do not modify them here!** diff --git a/REVIEWERS b/REVIEWERS new file mode 100644 index 0000000000..777559ce84 --- /dev/null +++ b/REVIEWERS @@ -0,0 +1,38 @@ +# ============================================================================== +# ALIAS Wallet CODEOWNERS +# ============================================================================== +# +# Configuration of code ownership and review approvals for the +# alias-wallet repository. +# +# Order is not important; if a modified file or directory matches a +# fnmatch, the listed reviewer will be mentioned in a PR comment +# requesting a review. +# +# Regular contributors are free to add their names to specific +# directories or files provided that they are willing to provide a +# review. +# +# Absence from this list should not be interpreted as a discouragement +# to review a pull request. Peer review is always welcome and is a +# critical component of the progress of the codebase. Information on +# peer review guidelines can be found in .github/CONTRIBUTING.md. + + +# Maintainers +# TODO: list current maintainer GitHub handles here, e.g. +# * @maintainer-handle + + +# Subsystem owners +# +# Once the modernization lands the subdir layout described in the +# migration plan, add per-subsystem ownership here. For example: +# +# /src/kernel/ @consensus-reviewer +# /src/pos/ @pos-reviewer +# /src/qt/ @ui-reviewer +# /src/ringsig.cpp @privacy-reviewer +# /src/anonymize.cpp @privacy-reviewer +# /src/stealth.cpp @privacy-reviewer +# /src/smessage.cpp @smessage-reviewer diff --git a/ReleaseNotes.md b/ReleaseNotes.md new file mode 100644 index 0000000000..0dfe104efa --- /dev/null +++ b/ReleaseNotes.md @@ -0,0 +1,174 @@ +## ALIAS V4 + +> By downloading and using this software, you agree that 1/6 of the staking +> rewards are contributed to a development fund. The development fund aims +> to support the long term development and value of ALIAS. The fund is managed +> by the ALIAS core team. + +This is a major release and a **MANDATORY** update to the ALIAS software! +This update involves consensus changes (_details below_) and **you MUST +update** your wallet software before: + +2019-09-27 (_27th September 2019_) @ 2000 hours (GMT) + +If you do not update your wallet software you will no longer be able to connect +to the ALIAS network and you will no longer be able to conduct transactions on +the network and you will no longer be able to deposit or withdraw your funds +(public a/o private ALIAS) from the exchanges. + +### Development Contribution Blocks (DCB) +After 21/08/2018 @ 2200 hours (GMT) one in six (1 in 6) block rewards will be +a designated DCB and will be sent to the ALIAS team development fund wallet. +This fund will ensure a future for ALIAS and will enable us to pay for certain +services, to hire contractors and to pay ALIAS core team members in ALIAS +to enable them to work full time on the project. The further development +depend on a source of steady funding. We believe this will give us the opportunity +to produce better software and will create value for investors. We currently +have some very skilled developers working for us and we want to keep it that way. + +### Replay Protection +We have implemented a check for DCBs and we have implemented a replay protection +mechanism. This means that after 17/05/2019 @ 2000 hours (GMT) any wallets not +updated will not be able to create transactions on the ALIAS V3 network. + +### Licensing + +- SPDX-FileCopyrightText: © 2025 ALIAS Developer +- SPDX-FileCopyrightText: © 2020 Alias Developers +- SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +- SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +- SPDX-FileCopyrightText: © 2014 BlackCoin Developers +- SPDX-FileCopyrightText: © 2013 NovaCoin Developers +- SPDX-FileCopyrightText: © 2011 PPCoin Developers +- SPDX-FileCopyrightText: © 2009 Bitcoin Developers + +SPDX-License-Identifier: MIT + +### Changelog +## 4.4.0 (released 2021-08-25) +- [#14](https://github.com/aliascash/alias-wallet-archive/issues/14) Localization of main wallet +- Localization of Windows installer and Shell-UI +- [#280](https://github.com/aliascash/alias-wallet-archive/issues/280) Fixed cmdline option `-help` (`-h`) +- Update of Fedora build to Fedora 33 +- Update of minimal Mac version to 10.14 (Mojave) +- Update used Boost version to 1.75.0 +- Replaced old Tor v2 seednode addresses with new v3 addresses. For details see [v2 deprecation timeline](https://blog.torproject.org/v2-deprecation-timeline). +- [#3](https://github.com/aliascash/alias-wallet/issues/3) 32Bit Windows (x86) version available now +- [#27](https://github.com/aliascash/alias-wallet/issues/27) Fixed thread safety issue which leads to wallet crash during heavy load on the RPC interface. Thx @Gandalf for the finding! + +## 4.3.1 (released 2020-12-08) +- Update to Qt 5.12.10 (Mac) +- [#227](https://github.com/aliascash/alias-wallet-archive/issues/227) On startup, always require password if wallet is encrypted. +- SetupWalletWizard + - Encryption of wallet.dat is now part of the wizard and mandatory. + - [#248](https://github.com/aliascash/alias-wallet-archive/issues/248) Added password verification field next to password. +- RPC method `listsinceblock`: add attribute `vout` for public outputs +- UI changes: + - Increase icon size of buttons in send page. + - Default select first address in addressbook and receive addresses. + (Fixes invalid QR code.) + - Fix: make sure address is selected when clicking in detail row. + (Ensure right address is picked for QR code.) + - Fix: address lookup in addressbook on address paste. +- Refactored the whole build to CMake as basement. + - For all supported operating systems, there are corresponding helper + scripts on `scripts/cmake-build*`. + - All Linux binaries now have Tor and Qt as the only dependencies. All + other components are compiled right into the binaries. +- Added build for OpenSUSE Tumbleweed +- Switched to ARMv8 on Raspberry Pi binaries. That means Raspberry Pi is + migrated from 32Bit to 64Bit, which also means a complete new setup of + the Raspberry Pi is required. + +## 4.3.0 (released 2020-10-01) +- Update to Qt 5.12.9 (Windows / Mac) +- Streamlined licensing headers a.s.o. to make the whole project compliant to [REUSE Software](https://reuse.software/) +- Refactored overall namings according to project rebranding +- Refactored naming of some RPC methods according to project rebranding: + - `sendspectoanon` > `sendpublictoprivate` + - `sendanontoanon` > `sendprivate` + - `sendanontospec` > `sendprivatetopublic` + - `estimateanonfee` > `estimateprivatefee` +- Renamed some fields on RPC results: + - `anonbalance` > `balance_private` + - `spectrestake` > `stake_private` + - `spectrestakeweight` > `stakeweight_private` + - `unconfirmedanonbalance` > `unconfirmedbalance_private` + - `spectrestakeweight` > `stakeweight_private` + - `anonsupply` > `moneysupply_private` +- Added new fields to RPC results: + - `balance_public` + - `stake_public` + - `stakeweight_public` + - `unconfirmedbalance_public` + - `stakeweight_public` + - `moneysupply_public` +- Complete UI revision based on new style and with many UX improvements +- Fix: private transaction did cost twice as much fee as effectivly required and shown in confirmation dialog +- Updated Fedora build to Fedora 32 +- Added build for Ubuntu 20.04 +- Wipe out build for Ubuntu 19.x as it's EOL + +## 4.2.0 (released 2020-05-02) +- Update to Qt 5.12.8 +- Replace QtWebEngine with QtWebView to support mobile platforms. +- Open 'Unlock Wallet' Dialog on incoming anon staking reward with unknown sender. +- Allow to select parts of the transaction detail dialog text. +- Improve staking indicator tooltip: + - 'Not staking, staking is disabled' was never shown. + - 'Initializing staking...' is now shown instead 'Not staking because you don't have mature coins' during staker thread initialization +- Improve synchronization tooltip: blockchain synchronization state is now updated every 500ms. (Tooltips in general are now updated when open and underlying data changes) +- Improve splash screen with progress messages to reduce UI freezes during startup. +- [#183](https://github.com/aliascash/alias-wallet-archive/issues/183) Reduce UI freezes during blockchain sync. + +## 4.1.0 (released 2019-10-13) +- [#82](https://github.com/aliascash/alias-wallet-archive/issues/82) Wallet.dat creation with mnemonic seed words (BIP39). + If no `wallet.dat` file was detected during startup, the wallet opens a wizard with these three options: + - Create new `wallet.dat` file based on mnemonic seed words. + - Restore `wallet.dat` from mnemonic seed words. + - Import existing `wallet.dat` file. + + For further details see [here](https://medium.com/coinmonks/mnemonic-generation-bip39-simply-explained-e9ac18db9477). + Duplicated by [#115](https://github.com/aliascash/alias-wallet-archive/issues/115) + +- [#214](https://github.com/aliascash/alias-wallet-archive/issues/214) Migrate Debian/Raspbian build to Buster. + Binaries for both Stretch and Buster will be provided. + +- [#216](https://github.com/aliascash/alias-wallet-archive/issues/216) Tor Hidden Service v3 implementation + minor Tor improvements. + - Implementation of Tor Hidden Service v3. + - Creation of launch argument `-onionv2`, allowing the usage of legacy v2 addresses. + - Creation of an torrc-defaults file on Linux. + - By default, Tor will now use hardware crypto acceleration if available, only connect to Hidden Services, + and will write to disk less frequently, preserving the lifespan of SD cards on Raspbian. + +- [#218](https://github.com/aliascash/alias-wallet-archive/issues/218) Provide binaries for Ubuntu 19.04. + Binaries for both Ubuntu 18.04 and 19.04 will be provided. + +- Updated packaged Tor for MacOS and Windows to 0.4.1.5 + +## 4.0.0 (released 2019-09-08) +**V4 blockchain fork consensus changes / Fork time is GMT: Friday, 27. September 2019 20:00:00 (1569614400 unix epoch time)** +- One-time 3'000'000 XSPEC staking reward for foundation address SSGCEMb6xESgmuGXkx7yozGDxhVSXzBP3a + +## 3.x release notes + +See [ReleaseNotes for Pre-4.x](./ReleaseNotes_Pre4.0.md) + +## 2.x release notes + +See [ReleaseNotes for Pre-3.x](./ReleaseNotes_Pre3.0.md) + +# Checksums +## Verify MacOS +``` +openssl sha -sha256 +``` +## Verify Windows +``` +certUtil -hashfile "" SHA256 +``` +## Verify Linux +``` +sha256sum +``` +## List of sha256 checksums diff --git a/ReleaseNotes_Pre3.0.md b/ReleaseNotes_Pre3.0.md new file mode 100644 index 0000000000..8701aaab9d --- /dev/null +++ b/ReleaseNotes_Pre3.0.md @@ -0,0 +1,97 @@ +## SPECTRECOIN V2 + +```By downloading and using this software, you agree that 1/6 of the staking rewards are contributed to a development fund. The development fund aims to support the long term development and value of Spectrecoin. The fund is managed by the Spectrecoin core team.``` + +This is a major release and a **MANDATORY** update to the Spectrecoin software! This update involves consensus changes (_details below_) and **you MUST update** your wallet software before: + +21/08/2018 (_21th August 2018_) @ 2200 hours (GMT) + +If you do not update your wallet software you will no longer be able to connect to the Spectrecoin network and you will no longer be able to conduct transactions on the network and you will no longer be able to deposit or withdraw your funds (XSPEC) from the exchanges. + +### Development Contribution Blocks (DCB) +After 21/08/2018 @ 2200 hours (GMT) one in six (1 in 6) block rewards will be designated DCBs and will be sent to the Spectrecoin team development fund wallet. This fund will ensure a future for Spectrecoin and will enable us to pay for certain services and to hire contractors and to pay Spectrecoin core team members in XSPEC to enable them to work full time on the project. We have some long term projects and concepts to implement such as a new proof-of-stake algorithm we call Proof-of-Stealth to enable so called "stealth staking". These developments depend on a source of steady funding. We believe this will give us the opportunity to produce better software and will create value for investors. We currently have some very skilled developers working for us and we want to keep it that way. + +### Replay Protection +We have implemented a check for DCBs and we have implemented a replay protection mechanism. This means that after 21/08/2018 @ 2200 hours (GMT) any wallets not updated will not be able to create transactions on the Spectrecoin V2 network. + +### Licensing + +- SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +- SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +- SPDX-FileCopyrightText: © 2014 BlackCoin Developers +- SPDX-FileCopyrightText: © 2013 NovaCoin Developers +- SPDX-FileCopyrightText: © 2011 PPCoin Developers +- SPDX-FileCopyrightText: © 2009 Bitcoin Developers + +SPDX-License-Identifier: MIT + +### Changelog +## 2.2.2 +- New: Added cmdline option `-version` to show wallet version as usual +- Fix: Removed obsolete debug output on stdout + +## 2.2.1 +- Fix: Lookup for possible stealth addresses in addressbook bloated logfile and decreased performance +- Fix: Bug in fee calculation could prevent spending of SPECTRE + +## 2.2.0 +**Please note that to make the various changes and fixes regarding SPECTRE effective, a complete rescan of the Blockchain is required. The wallet will automatically initiate a rescan on startup.** +- Minimum ring size increased to 10 (enforced) +- Allow SPECTRE <> XSPEC transfers only within account (destination address must be owned) +- Disallow sending XSPEC to a stealth address +- Chat functionality removed +- RPC method `listransactions`: + - Consolidate ATXOs under the stealth address + - New field currency with value 'XSPEC' or 'SPECTRE' + - New field narration + - Dont list SPECTRE change +- RPC method `reloadanondata` removed and logic integrated in `scanforalltxns` +- Improved transactions list in UI: + - If available show stealth address or addressbook entry for SPECTRE transactions + - Transaction type now always includes currency (XSPEC or SPECTRE) + - Transfers between XSPEC and SPECTRE are shown with a distinguished type + - Show corresponding narration of multiple recipients if available +- Improved Make Payment and Balance Transfer form in UI: + - Revised 'From/To Account' input fields to reflect new transaction restrictions + - Show curreny SPECTRE or XSPEC depending on transaction type + - Remove advance mode, integrate 'Add Recipient' in basic mode +- Addressbook fixes and improvements +- CoinControl dialog now groups stealth derived addresses under the stealth address +- New 3D application icon for macOS +- Progress indicator for load block index, clear cache and rescanning. Fixes the "disconnected UI" problem after startup. +- Fix: Rescanning of ATXO (Also fixes [#45](https://github.com/aliascash/alias-wallet-archive/issues/45)) +- Fix: Tor was not started for windows if wallet path contained a space +- Update to Qt 5.12 for Windows and MacOS (Fixes Mojave dark theme issues) +- Automatic Build improvements: + - All wallets show now their build commit hash in the about dialog and on the main window title. ([#117](https://github.com/aliascash/alias-wallet-archive/issues/117)) + - Build from develop branch also have the build number and the commit hash in their archive name. +- Changed language level to C++17 + +## 2.1.0 +- Tor is now integrated as a separate process. This provides the same level of privacy but enables Spectrecoin to always use the latest version of TOR and to use the TOR plugins / bridges more effectively. **Note:** Linux users must install **tor** and obfs4proxy (if required) separately using their package manager. +- [#7](https://github.com/aliascash/alias-wallet-archive/issues/7) For MacOS and Windows, a separate OBFS4 release is now available with preconfigured OBFS4 bridges. Note that the only difference between the OBFS4 release and the standard release is the file **torrc-defaults** in the tor subfolder which configures OBFS4. + +## 2.0.7 +- Change BIP44 ID from 35 (shadowcash) to 213 (spectrecoin). See https://github.com/satoshilabs/slips/blob/master/slip-0044.md. +Attention: Mnemonic seed words used for sub-wallet creation pre 2.0.7 will not work post 2.0.7. +- remove faulty RPC method 'scanforstealthtxns'; scanforalltxns also scans for stealth trxs +- Fix: Add all required libraries for Mac wallet +- Fix: already processed anon transactions were not added to wallet after key change/import + +## 2.0.6 +- UI sidebar behavior improved. Automatically select appropiate mode depending on viewport. +- External blockexplorer address URL updated. +- Prevent open of default context menu with browser actions. +- [#26](https://github.com/aliascash/alias-wallet-archive/issues/26) Fix status icon tooltips offscreen when scrolled down past header text +- [#31](https://github.com/aliascash/alias-wallet-archive/issues/31) Fix Connectivity bar not visible on high DPI settings +- [#65](https://github.com/aliascash/alias-wallet-archive/issues/65) Fix wallet immediately closed after walletpassphrase via console Win 8.1 +- [#69](https://github.com/aliascash/alias-wallet-archive/issues/69) Fix Transaction ID in transaction detail dialog: link behavior error +- [#74](https://github.com/aliascash/alias-wallet-archive/issues/74) Change 'Spectre' to 'Spectrecoin'; update logo images +- [#75](https://github.com/aliascash/alias-wallet-archive/issues/75) Fix Wrong fee calculation when transfer from private to public + +## 2.0.5 +- [#40](https://github.com/aliascash/alias-wallet-archive/issues/40) / [#53](https://github.com/aliascash/alias-wallet-archive/issues/53) support cyrillic usernames by using the unicode function of windows to fetch the pathname (Windows) +- [#42](https://github.com/aliascash/alias-wallet-archive/issues/42) Remove additional UI id chars from transaction ID when copy/paste +- [#50](https://github.com/aliascash/alias-wallet-archive/issues/50) Change text 'No combination of coins matches amount and ring size' to 'No combination of (mature) coins matches amount and ring size.' +- [#64](https://github.com/aliascash/alias-wallet-archive/issues/64) DCB staking rewards are labeled 'Contributed' +- Change text of donation setting diff --git a/ReleaseNotes_Pre4.0.md b/ReleaseNotes_Pre4.0.md new file mode 100644 index 0000000000..44b74e0db3 --- /dev/null +++ b/ReleaseNotes_Pre4.0.md @@ -0,0 +1,102 @@ +## SPECTRECOIN V3 + +`By downloading and using this software, you agree that 1/6 of the staking rewards are contributed to a development fund. The development fund aims to support the long term development and value of Spectrecoin. The fund is managed by the Spectrecoin core team.` + +This is a major release and a **MANDATORY** update to the Spectrecoin software! This update involves consensus changes (_details below_) and **you MUST update** your wallet software before: + +2019-09-27 (_27th September 2019_) @ 2000 hours (GMT) + +If you do not update your wallet software you will no longer be able to connect to the Spectrecoin network and you will no longer be able to conduct transactions on the network and you will no longer be able to deposit or withdraw your funds (XSPEC) from the exchanges. + +### Development Contribution Blocks (DCB) +After 21/08/2018 @ 2200 hours (GMT) one in six (1 in 6) block rewards will be designated DCBs and will be sent to the Spectrecoin team development fund wallet. This fund will ensure a future for Spectrecoin and will enable us to pay for certain services and to hire contractors and to pay Spectrecoin core team members in XSPEC to enable them to work full time on the project. We have some long term projects and concepts to implement such as a new proof-of-stake algorithm we call Proof-of-Stealth to enable so called "stealth staking". These developments depend on a source of steady funding. We believe this will give us the opportunity to produce better software and will create value for investors. We currently have some very skilled developers working for us and we want to keep it that way. + +### Replay Protection +We have implemented a check for DCBs and we have implemented a replay protection mechanism. This means that after 17/05/2019 @ 2000 hours (GMT) any wallets not updated will not be able to create transactions on the Spectrecoin V3 network. + +### Licensing + +- SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +- SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +- SPDX-FileCopyrightText: © 2014 BlackCoin Developers +- SPDX-FileCopyrightText: © 2013 NovaCoin Developers +- SPDX-FileCopyrightText: © 2011 PPCoin Developers +- SPDX-FileCopyrightText: © 2009 Bitcoin Developers + +SPDX-License-Identifier: MIT + +### Changelog +## 3.0.14 (released 2019-08-11) +- Improved orphan handling + +## 3.0.12 (released 2019-08-04) +- Fix unintentional chain fork possibility in fake stake block spam prevention implementation +- Added block checkpoints every 100000 block and at height 1232433 and 1237500 +- Remove due ckeckpoint invalid orphans from memory +- Disconnect from misbehaving nodes with local address (inbound tor connection) +- Improve expected time to staking reward logic. During network staking weight changes, expected time was calculated wrong. + RPC: add new field 'netstakeweightrecent' for getstakinginfo and getmininginfo which shows network weight of last 72 blocks +- Increase address lookahead from 10 to 100 + +## 3.0.11 (released 2019-06-30) +- UI: [#185](https://github.com/aliascash/alias-wallet-archive/issues/185) Fix shown staking transaction reward after wallet unlock + +## 3.0.10 (released 2019-06-10) +- [#184](https://github.com/aliascash/alias-wallet-archive/issues/184) Fix fake stake block spam attack vector +- [#173](https://github.com/aliascash/alias-wallet-archive/issues/173) Tor process is not cleanly shutting down + +## 3.0.9 (released 2019-05-05) +- UI: [#178](https://github.com/aliascash/alias-wallet-archive/issues/178) Tooltip for SPECTRE->XSPEC balance transfer +- UI: Add grouping feature of transactions in TRANSACTION view +- UI: Show immature instead mature coins in CHAIN DATA view +- UI & RPC: Fix column least depth in CHAIN DATA view and RPC method anoninfo. (show depth consistently) + +## 3.0 (released 2019-04-28) +**V3 blockchain fork consensus changes / Fork time is GMT: Friday, 17. May 2019 20:00:00 (1558123200 unix epoch time)** +- Target block time increased from 64 to 96 seconds +- XSPEC staking reward lowered to fixed 2 XSPEC per block +- Minimum ring size increased from 1 to fix 10 +- Minimum maturity for staking and for spending stakes is increased from 288 to 450 blocks (approximately 96 seconds * 450 = 12 hours) +- 8 hours maturity rules for staking is removed (Fixes [#79](https://github.com/aliascash/alias-wallet-archive/issues/79)) +- Base fee for spending SPECTRE is lowered from 0.01 to 0.0001 +- Support for SPECTRE staking (aka Stealth Staking, aka PoAS) + - Staking reward per block fixed 3 SPECTRE + - Same maturity rules as for XSPEC (450 blocks) but for all ring signature members + - Maximal ATXO stake output value of 1'000 (same as max anon output) + - Consolidation of up to 50 ATXOs in staking transaction + - If number of unspent anons per denomination is below defined minimum, split staked ATXO to create up to 1 new ATXO of that denomination + +Immediate changes: +- Change max anon output from 10'000 to 1'000 +- Increase default block size created from 250K to 999K +- ATXOs compromised by an All Spent situation are no longer considered as mixins for new transactions +- New mixin picking algorithm: + - ATXOs are only read once per transaction + - handles ATXO_TX_SET problem by adding mixins of same transaction + - 33% of mixins are picked from last 2700 blocks if possible + - an ATXO is only used once as mixin per transaction + - pick all mixins for a vin/ringsignature from different transactions +- Increase levelDB version to 70512 to force reindex: + - new attribute fCoinStake in CAnonOutput + - new attribute nBlockHeight in CKeyImageSpent + - new compromisedanonheights map for detected All Spent +- Anon cache is now updated each block with the new mature ATXOs and with the available mixins for spending and staking +- Fix wallet.dat corruption problem on Windows (On Windows shutdown wallet is safely closed) +- UI: [#149](https://github.com/aliascash/alias-wallet-archive/issues/149) Fixed notifications +- UI: Contributions and donations are shown without separate stake entry; show in overview if stakes are contributed or staked +- UI: Show generated but not accepted stakes as 'Orphan' in overview +- UI: Change TransactionRecord sort order to consider nTime first (Fixes UI trx update when more than 200 unrecorded trx exist) +- UI: Show different balance types for SPECTRE and XSPEC separately +- UI: Change CHAIN DATA view columns to Unspent (Mature), Mixins (Mature), System (Compromised) +- UI: Rebased all UI changes since initial commit back to separate UI repository [alias-wallet-ui](https://github.com/aliascash/alias-wallet-ui) +- UI & RPC: Optimize getStakeWeight (remove obsolete code; make sure stake weight matches actual staked coins) +- RPC: [#2](https://github.com/aliascash/alias-wallet-archive/issues/2) Integrate API method gettxout +- RPC: method anoninfo shows new stats per denomination: + - No.Mixins: the number of uncompromised ATXOs available as mixins for spending + - No.MixinsStaking: the number of uncompromised ATXOs available as mixins for staking + - Compromised Height: the last block height an All Spent situation occured + - Compromised: does count mixins compromised by ring signature one AND all spent + +## 2.x release notes + +See [ReleaseNotes for Pre-3.x](./ReleaseNotes_Pre3.0.md) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..3a6ca22239 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,47 @@ +# Security Policy + +## Supported Versions + +Versions of ALIAS Wallet that are currently supported with security updates: + +| Version | Supported | +| ------- | ------------------ | +| 4.4.x | :white_check_mark: | +| < 4.4 | :x: | + +## Reporting a Vulnerability + +To report a security vulnerability in ALIAS Wallet, please contact the +ALIAS development team privately rather than opening a public issue. + + + +Please do **not** open a public GitHub issue, post in Discord, or +discuss the vulnerability on Reddit / BitcoinTalk before the ALIAS +team has had a chance to respond and ship a fix. + +The following keys may be used to communicate sensitive information +to maintainers: + +| Name | Fingerprint | +|------|-------------| +| _placeholder — to be filled in by the ALIAS team_ | _TBD_ | + +You can import a key by running the following command with the +maintainer's fingerprint: + + gpg --keyserver hkps://keys.openpgp.org --recv-keys "" + +Quote fingerprints containing spaces. diff --git a/Spectre.pro b/Spectre.pro new file mode 100644 index 0000000000..31504e7c86 --- /dev/null +++ b/Spectre.pro @@ -0,0 +1,26 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +TEMPLATE = app +TARGET = spectre +#find . -type d +QT += testlib webenginewidgets webchannel + +TEMPLATE = subdirs + +macx { +SUBDIRS = \ + src \ # sub-project names +} + +win32 { +SUBDIRS = \ + tor \ # sub-project names + leveldb \ # sub-project names + db4.8 \ # sub-project names + src \ # sub-project names + +src.depends = tor leveldb db4.8 +} diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000000..56d4e2e76b --- /dev/null +++ b/autogen.sh @@ -0,0 +1,25 @@ +#!/bin/bash -e +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# =========================================================================== +# +# Generates the autotools build files (./configure + Makefile.in's) from +# configure.ac and src/Makefile.am. Required once after a fresh checkout +# and after any change to configure.ac or *.am files. +# +# Run from the repository root: +# ./autogen.sh +# ./configure --enable-gui +# make +# +# The legacy CMake build under scripts/cmake-build*.{sh,bat} is being +# retired in favor of this autotools flow. + +ownLocation="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +cd "${ownLocation}" + +autoreconf --install --force --warnings=all diff --git a/cmake/CMakeLists_db5.x.txt b/cmake/CMakeLists_db5.x.txt new file mode 100644 index 0000000000..9344c084b8 --- /dev/null +++ b/cmake/CMakeLists_db5.x.txt @@ -0,0 +1,211 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT + +############################################################################## +##### Some helper stuff to build BerkeleyDB 5.0.32 ########################### + +# Create dummy file since we want an empty shared library before linking +set(DUMMY_SOURCE ${CMAKE_BINARY_DIR}/dummy.c) +file(WRITE ${DUMMY_SOURCE} "") + + + +############################################################################## +##### Setup library build #################################################### + +add_library(db5x ${DUMMY_SOURCE}) + +target_include_directories(db5x + SYSTEM PUBLIC + $ + $ + ) +#target_compile_options(db5x PRIVATE +# $<$,$,$>: +# -Wno-error=error-implicit-function-declaration> +# $<$: +# -W4> +# ) +if (Android) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=error-implicit-function-declaration") +endif() + +target_sources(db5x + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/dbinc/mutex_int.h + + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_compact.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_compare.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_compress.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_conv.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_curadj.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_cursor.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_delete.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_method.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_open.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_put.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_rec.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_reclaim.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_recno.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_rsearch.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_search.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_split.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_stat.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/bt_upgrade.c + ${CMAKE_CURRENT_SOURCE_DIR}/btree/btree_auto.c + ${CMAKE_CURRENT_SOURCE_DIR}/clib/rand.c + ${CMAKE_CURRENT_SOURCE_DIR}/clib/snprintf.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/clock.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/crypto_stub.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/db_byteorder.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/db_compint.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/db_err.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/db_getlong.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/db_idspace.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/db_log2.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/db_shash.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/dbt.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/mkpath.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/os_method.c + ${CMAKE_CURRENT_SOURCE_DIR}/common/zerofill.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/crdel_auto.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/crdel_rec.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_am.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_auto.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_cam.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_cds.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_compact.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_conv.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_dispatch.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_dup.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_iface.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_join.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_meta.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_method.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_open.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_overflow.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_pr.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_rec.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_reclaim.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_remove.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_rename.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_ret.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_setid.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_setlsn.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_sort_multiple.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_stati.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_truncate.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_upg.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_upg_opd.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/db_vrfy_stub.c + ${CMAKE_CURRENT_SOURCE_DIR}/db/partition.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_alloc.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_config.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_failchk.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_file.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_globals.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_method.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_name.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_open.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_recover.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_region.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_register.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_sig.c + ${CMAKE_CURRENT_SOURCE_DIR}/env/env_stat.c + ${CMAKE_CURRENT_SOURCE_DIR}/fileops/fileops_auto.c + ${CMAKE_CURRENT_SOURCE_DIR}/fileops/fop_basic.c + ${CMAKE_CURRENT_SOURCE_DIR}/fileops/fop_rec.c + ${CMAKE_CURRENT_SOURCE_DIR}/fileops/fop_util.c + ${CMAKE_CURRENT_SOURCE_DIR}/hash/hash_func.c + ${CMAKE_CURRENT_SOURCE_DIR}/hash/hash_stub.c + ${CMAKE_CURRENT_SOURCE_DIR}/hmac/hmac.c + ${CMAKE_CURRENT_SOURCE_DIR}/hmac/sha1.c + ${CMAKE_CURRENT_SOURCE_DIR}/lock/lock.c + ${CMAKE_CURRENT_SOURCE_DIR}/lock/lock_deadlock.c + ${CMAKE_CURRENT_SOURCE_DIR}/lock/lock_failchk.c + ${CMAKE_CURRENT_SOURCE_DIR}/lock/lock_id.c + ${CMAKE_CURRENT_SOURCE_DIR}/lock/lock_list.c + ${CMAKE_CURRENT_SOURCE_DIR}/lock/lock_method.c + ${CMAKE_CURRENT_SOURCE_DIR}/lock/lock_region.c + ${CMAKE_CURRENT_SOURCE_DIR}/lock/lock_stat.c + ${CMAKE_CURRENT_SOURCE_DIR}/lock/lock_timer.c + ${CMAKE_CURRENT_SOURCE_DIR}/lock/lock_util.c + ${CMAKE_CURRENT_SOURCE_DIR}/log/log.c + ${CMAKE_CURRENT_SOURCE_DIR}/log/log_archive.c + ${CMAKE_CURRENT_SOURCE_DIR}/log/log_compare.c + ${CMAKE_CURRENT_SOURCE_DIR}/log/log_debug.c + ${CMAKE_CURRENT_SOURCE_DIR}/log/log_get.c + ${CMAKE_CURRENT_SOURCE_DIR}/log/log_method.c + ${CMAKE_CURRENT_SOURCE_DIR}/log/log_print.c + ${CMAKE_CURRENT_SOURCE_DIR}/log/log_put.c + ${CMAKE_CURRENT_SOURCE_DIR}/log/log_stat.c + ${CMAKE_CURRENT_SOURCE_DIR}/log/log_verify_stub.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_alloc.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_bh.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_fget.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_fmethod.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_fopen.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_fput.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_fset.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_method.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_mvcc.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_region.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_register.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_resize.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_stat.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_sync.c + ${CMAKE_CURRENT_SOURCE_DIR}/mp/mp_trickle.c + ${CMAKE_CURRENT_SOURCE_DIR}/mutex/mut_alloc.c + ${CMAKE_CURRENT_SOURCE_DIR}/mutex/mut_failchk.c + ${CMAKE_CURRENT_SOURCE_DIR}/mutex/mut_method.c + ${CMAKE_CURRENT_SOURCE_DIR}/mutex/mut_region.c + ${CMAKE_CURRENT_SOURCE_DIR}/mutex/mut_stat.c + ${CMAKE_CURRENT_SOURCE_DIR}/mutex/mut_tas.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_abort.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_abs.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_alloc.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_clock.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_config.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_cpu.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_ctime.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_dir.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_errno.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_fid.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_flock.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_fsync.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_getenv.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_handle.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_map.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_mkdir.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_open.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_pid.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_rename.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_root.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_rpath.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_rw.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_seek.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_stack.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_stat.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_tmpdir.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_truncate.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_uid.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_unlink.c + ${CMAKE_CURRENT_SOURCE_DIR}/os/os_yield.c + ${CMAKE_CURRENT_SOURCE_DIR}/qam/qam_stub.c + ${CMAKE_CURRENT_SOURCE_DIR}/rep/rep_stub.c + ${CMAKE_CURRENT_SOURCE_DIR}/repmgr/repmgr_stub.c + ${CMAKE_CURRENT_SOURCE_DIR}/sequence/seq_stat.c + ${CMAKE_CURRENT_SOURCE_DIR}/sequence/sequence.c + ${CMAKE_CURRENT_SOURCE_DIR}/txn/txn.c + ${CMAKE_CURRENT_SOURCE_DIR}/txn/txn_auto.c + ${CMAKE_CURRENT_SOURCE_DIR}/txn/txn_chkpt.c + ${CMAKE_CURRENT_SOURCE_DIR}/txn/txn_failchk.c + ${CMAKE_CURRENT_SOURCE_DIR}/txn/txn_method.c + ${CMAKE_CURRENT_SOURCE_DIR}/txn/txn_rec.c + ${CMAKE_CURRENT_SOURCE_DIR}/txn/txn_recover.c + ${CMAKE_CURRENT_SOURCE_DIR}/txn/txn_region.c + ${CMAKE_CURRENT_SOURCE_DIR}/txn/txn_stat.c + ${CMAKE_CURRENT_SOURCE_DIR}/txn/txn_util.c + ) diff --git a/cmake/DownloadFile.cmake b/cmake/DownloadFile.cmake new file mode 100644 index 0000000000..5c1f6e63a0 --- /dev/null +++ b/cmake/DownloadFile.cmake @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT + +function(download_file url filename hash_type hash) + if (NOT EXISTS ${filename}) + file(DOWNLOAD ${url} ${filename} + TIMEOUT 60 # seconds + EXPECTED_HASH ${hash_type}=${hash} + TLS_VERIFY ON) + endif () +endfunction(download_file) diff --git a/cmake/FindBerkeleyDB.cmake b/cmake/FindBerkeleyDB.cmake new file mode 100644 index 0000000000..cffa218519 --- /dev/null +++ b/cmake/FindBerkeleyDB.cmake @@ -0,0 +1,184 @@ +# Author: sum01 +# Git: https://github.com/sum01/FindBerkeleyDB +# Read the README.md for the full info. +# +# SPDX-FileCopyrightText: © 2018 +# SPDX-License-Identifier: Unlicense + +# NOTE: If Berkeley DB ever gets a Pkg-config ".pc" file, add pkg_check_modules() here + +# Checks if environment paths are empty, set them if they aren't +if(NOT "$ENV{BERKELEYDB_ROOT}" STREQUAL "") + set(_BERKELEYDB_HINTS "$ENV{BERKELEYDB_ROOT}") +elseif(NOT "$ENV{Berkeleydb_ROOT}" STREQUAL "") + set(_BERKELEYDB_HINTS "$ENV{Berkeleydb_ROOT}") +elseif(NOT "$ENV{BERKELEYDBROOT}" STREQUAL "") + set(_BERKELEYDB_HINTS "$ENV{BERKELEYDBROOT}") +else() + # Set just in case, as it's used regardless if it's empty or not + set(_BERKELEYDB_HINTS "") +endif() + +if(NOT "$ENV{BerkeleyDB_ROOT_DIR}" STREQUAL "") + set(BerkeleyDB_ROOT_DIR "$ENV{BerkeleyDB_ROOT_DIR}") +endif() + +# Allow user to pass a path instead of guessing +if(BerkeleyDB_ROOT_DIR) + set(_BERKELEYDB_PATHS "${BerkeleyDB_ROOT_DIR}") +elseif(CMAKE_SYSTEM_NAME MATCHES ".*[wW]indows.*") + # MATCHES is used to work on any devies with windows in the name + # Shameless copy-paste from FindOpenSSL.cmake v3.8 + file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles) + list(APPEND _BERKELEYDB_HINTS "${_programfiles}") + + # There's actually production release and version numbers in the file path. + # For example, if they're on v6.2.32: C:/Program Files/Oracle/Berkeley DB 12cR1 6.2.32/ + # But this still works to find it, so I'm guessing it can accept partial path matches. + + foreach(_TARGET_BERKELEYDB_PATH "Oracle/Berkeley DB" "Berkeley DB") + list(APPEND _BERKELEYDB_PATHS + "${_programfiles}/${_TARGET_BERKELEYDB_PATH}" + "C:/Program Files (x86)/${_TARGET_BERKELEYDB_PATH}" + "C:/Program Files/${_TARGET_BERKELEYDB_PATH}" + "C:/${_TARGET_BERKELEYDB_PATH}" + ) + endforeach() +else() + # Paths for anything other than Windows + # Cellar/berkeley-db is for macOS from homebrew installation + list(APPEND _BERKELEYDB_PATHS + "/usr" + "/usr/local" + "/usr/local/Cellar/berkeley-db" + "/opt" + "/opt/local" + ) +endif() + +# Find includes path +find_path(BerkeleyDB_INCLUDE_DIRS + NAMES "db_cxx.h" + HINTS ${_BERKELEYDB_HINTS} + PATH_SUFFIXES "include" "includes" + PATHS ${_BERKELEYDB_PATHS} + ) + +# Checks if the version file exists, save the version file to a var, and fail if there's no version file +if(BerkeleyDB_INCLUDE_DIRS) + # Read the version file db.h into a variable + file(READ "${BerkeleyDB_INCLUDE_DIRS}/db.h" _BERKELEYDB_DB_HEADER) + # Parse the DB version into variables to be used in the lib names + string(REGEX REPLACE ".*DB_VERSION_MAJOR ([0-9]+).*" "\\1" BerkeleyDB_VERSION_MAJOR "${_BERKELEYDB_DB_HEADER}") + string(REGEX REPLACE ".*DB_VERSION_MINOR ([0-9]+).*" "\\1" BerkeleyDB_VERSION_MINOR "${_BERKELEYDB_DB_HEADER}") + # Patch version example on non-crypto installs: x.x.xNC + string(REGEX REPLACE ".*DB_VERSION_PATCH ([0-9]+(NC)?).*" "\\1" BerkeleyDB_VERSION_PATCH "${_BERKELEYDB_DB_HEADER}") +else() + if(BerkeleyDB_FIND_REQUIRED) + # If the find_package(BerkeleyDB REQUIRED) was used, fail since we couldn't find the header + message(FATAL_ERROR "Failed to find Berkeley DB's header file \"db.h\"! Try setting \"BerkeleyDB_ROOT_DIR\" when initiating Cmake.") + elseif(NOT BerkeleyDB_FIND_QUIETLY) + message(WARNING "Failed to find Berkeley DB's header file \"db.h\"! Try setting \"BerkeleyDB_ROOT_DIR\" when initiating Cmake.") + endif() + # Set some garbage values to the versions since we didn't find a file to read + set(BerkeleyDB_VERSION_MAJOR "0") + set(BerkeleyDB_VERSION_MINOR "0") + set(BerkeleyDB_VERSION_PATCH "0") +endif() + +# The actual returned/output version variable (the others can be used if needed) +set(BerkeleyDB_VERSION "${BerkeleyDB_VERSION_MAJOR}.${BerkeleyDB_VERSION_MINOR}.${BerkeleyDB_VERSION_PATCH}") + +# Finds the target library for berkeley db, since they all follow the same naming conventions +macro(_berkeleydb_get_lib _BERKELEYDB_OUTPUT_VARNAME _TARGET_BERKELEYDB_LIB) + # Different systems sometimes have a version in the lib name... + # and some have a dash or underscore before the versions. + # CMake recommends to put unversioned names before versioned names + find_library(${_BERKELEYDB_OUTPUT_VARNAME} + NAMES + "${_TARGET_BERKELEYDB_LIB}" + "lib${_TARGET_BERKELEYDB_LIB}" + "lib${_TARGET_BERKELEYDB_LIB}${BerkeleyDB_VERSION_MAJOR}.${BerkeleyDB_VERSION_MINOR}" + "lib${_TARGET_BERKELEYDB_LIB}-${BerkeleyDB_VERSION_MAJOR}.${BerkeleyDB_VERSION_MINOR}" + "lib${_TARGET_BERKELEYDB_LIB}_${BerkeleyDB_VERSION_MAJOR}.${BerkeleyDB_VERSION_MINOR}" + "lib${_TARGET_BERKELEYDB_LIB}${BerkeleyDB_VERSION_MAJOR}${BerkeleyDB_VERSION_MINOR}" + "lib${_TARGET_BERKELEYDB_LIB}-${BerkeleyDB_VERSION_MAJOR}${BerkeleyDB_VERSION_MINOR}" + "lib${_TARGET_BERKELEYDB_LIB}_${BerkeleyDB_VERSION_MAJOR}${BerkeleyDB_VERSION_MINOR}" + "lib${_TARGET_BERKELEYDB_LIB}${BerkeleyDB_VERSION_MAJOR}" + "lib${_TARGET_BERKELEYDB_LIB}-${BerkeleyDB_VERSION_MAJOR}" + "lib${_TARGET_BERKELEYDB_LIB}_${BerkeleyDB_VERSION_MAJOR}" + HINTS ${_BERKELEYDB_HINTS} + PATH_SUFFIXES + "lib" + "lib64" + "libs" + "libs64" + PATHS ${_BERKELEYDB_PATHS} + ) + # If the library was found, add it to our list of libraries + if(${_BERKELEYDB_OUTPUT_VARNAME}) + # If found, append to our libraries variable + # The ${{}} is because the first expands to target the real variable, the second expands the variable's contents... + # and the real variable's contents is the path to the lib. Thus, it appends the path of the lib to BerkeleyDB_LIBRARIES. + list(APPEND BerkeleyDB_LIBRARIES "${${_BERKELEYDB_OUTPUT_VARNAME}}") + endif() +endmacro() + +if (WIN32) + set(LIB_EXTENSION "") +else() + set(LIB_EXTENSION ".a") +endif() + +# Find and set the paths of the specific library to the variable +_berkeleydb_get_lib(BerkeleyDB_LIBRARY "db${LIB_EXTENSION}") +# NOTE: Windows doesn't have a db_cxx lib, but instead compiles the cxx code into the "db" lib +_berkeleydb_get_lib(BerkeleyDB_Cxx_LIBRARY "db_cxx${LIB_EXTENSION}") +# NOTE: I don't think Linux/Unix gets an SQL lib +_berkeleydb_get_lib(BerkeleyDB_Sql_LIBRARY "db_sql") +_berkeleydb_get_lib(BerkeleyDB_Stl_LIBRARY "db_stl") + +# Needed for find_package_handle_standard_args() +include(FindPackageHandleStandardArgs) +# Fails if required vars aren't found, or if the version doesn't meet specifications. +find_package_handle_standard_args(BerkeleyDB + FOUND_VAR BerkeleyDB_FOUND + REQUIRED_VARS + BerkeleyDB_INCLUDE_DIRS + BerkeleyDB_LIBRARY + BerkeleyDB_LIBRARIES + VERSION_VAR BerkeleyDB_VERSION + ) + +# Only show the variables in the GUI if they click "advanced". +# Does nothing when using the CLI +mark_as_advanced(FORCE + BerkeleyDB_FOUND + BerkeleyDB_INCLUDE_DIRS + BerkeleyDB_LIBRARIES + BerkeleyDB_VERSION + BerkeleyDB_VERSION_MAJOR + BerkeleyDB_VERSION_MINOR + BerkeleyDB_VERSION_PATCH + BerkeleyDB_LIBRARY + BerkeleyDB_Cxx_LIBRARY + BerkeleyDB_Stl_LIBRARY + BerkeleyDB_Sql_LIBRARY + ) + +# Create an imported lib for easy linking by external projects +if(BerkeleyDB_FOUND AND BerkeleyDB_LIBRARIES AND NOT TARGET Oracle::BerkeleyDB) + add_library(Oracle::BerkeleyDB UNKNOWN IMPORTED) + set_target_properties(Oracle::BerkeleyDB PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${BerkeleyDB_INCLUDE_DIRS}" + IMPORTED_LOCATION "${BerkeleyDB_LIBRARY}" + INTERFACE_LINK_LIBRARIES "${BerkeleyDB_LIBRARIES}" + ) +endif() + +include(FindPackageMessage) +# A message that tells the user what includes/libs were found, and obeys the QUIET command. +find_package_message(BerkeleyDB + "Found BerkeleyDB libraries: ${BerkeleyDB_LIBRARIES}" + "[${BerkeleyDB_LIBRARIES}[${BerkeleyDB_INCLUDE_DIRS}]]" + ) diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake new file mode 100644 index 0000000000..8906c622af --- /dev/null +++ b/cmake/GetGitRevisionDescription.cmake @@ -0,0 +1,172 @@ +# SPDX-FileCopyrightText: © 2009 Iowa State University +# +# SPDX-License-Identifier: BSL-1.0 + +# - Returns a version string from Git +# +# These functions force a re-configure on each git commit so that you can +# trust the values of the variables in your build system. +# +# get_git_head_revision( [ ...]) +# +# Returns the refspec and sha hash of the current head revision +# +# git_describe( [ ...]) +# +# Returns the results of git describe on the source tree, and adjusting +# the output so that it tests false if an error occurs. +# +# git_get_exact_tag( [ ...]) +# +# Returns the results of git describe --exact-match on the source tree, +# and adjusting the output so that it tests false if there was no exact +# matching tag. +# +# git_local_changes() +# +# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes. +# Uses the return code of "git diff-index --quiet HEAD --". +# Does not regard untracked files. +# +# Requires CMake 2.6 or newer (uses the 'function' command) +# +# Original Author: +# 2009-2010 Ryan Pavlik +# http://academic.cleardefinition.com +# Iowa State University HCI Graduate Program/VRAC +# +# Copyright Iowa State University 2009-2010. +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +if(__get_git_revision_description) + return() +endif() +set(__get_git_revision_description YES) + +# We must run the following at "include" time, not at function call time, +# to find the path to this module rather than the path to a calling list file +get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH) + +function(get_git_head_revision _refspecvar _hashvar) + set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}") + set(GIT_DIR "${GIT_PARENT_DIR}/.git") + while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories + set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}") + get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH) + if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT) + # We have reached the root directory, we are not in git + set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE) + set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE) + return() + endif() + set(GIT_DIR "${GIT_PARENT_DIR}/.git") + endwhile() + # check if this is a submodule + if(NOT IS_DIRECTORY ${GIT_DIR}) + file(READ ${GIT_DIR} submodule) + string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule}) + get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH) + get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE) + endif() + set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data") + if(NOT EXISTS "${GIT_DATA}") + file(MAKE_DIRECTORY "${GIT_DATA}") + endif() + + if(NOT EXISTS "${GIT_DIR}/HEAD") + return() + endif() + set(HEAD_FILE "${GIT_DATA}/HEAD") + configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY) + + configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in" + "${GIT_DATA}/grabRef.cmake" + @ONLY) + include("${GIT_DATA}/grabRef.cmake") + + set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE) + set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE) +endfunction() + +function(git_describe _var) + if(NOT GIT_FOUND) + find_package(Git QUIET) + endif() + get_git_head_revision(refspec hash) + if(NOT GIT_FOUND) + set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) + return() + endif() + if(NOT hash) + set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) + return() + endif() + + # TODO sanitize + #if((${ARGN}" MATCHES "&&") OR + # (ARGN MATCHES "||") OR + # (ARGN MATCHES "\\;")) + # message("Please report the following error to the project!") + # message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}") + #endif() + + #message(STATUS "Arguments to execute_process: ${ARGN}") + + execute_process(COMMAND + "${GIT_EXECUTABLE}" + describe + ${hash} + ${ARGN} + WORKING_DIRECTORY + "${CMAKE_CURRENT_SOURCE_DIR}" + RESULT_VARIABLE + res + OUTPUT_VARIABLE + out + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(NOT res EQUAL 0) + set(out "${out}-${res}-NOTFOUND") + endif() + + set(${_var} "${out}" PARENT_SCOPE) +endfunction() + +function(git_get_exact_tag _var) + git_describe(out --exact-match ${ARGN}) + set(${_var} "${out}" PARENT_SCOPE) +endfunction() + +function(git_local_changes _var) + if(NOT GIT_FOUND) + find_package(Git QUIET) + endif() + get_git_head_revision(refspec hash) + if(NOT GIT_FOUND) + set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) + return() + endif() + if(NOT hash) + set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) + return() + endif() + + execute_process(COMMAND + "${GIT_EXECUTABLE}" + diff-index --quiet HEAD -- + WORKING_DIRECTORY + "${CMAKE_CURRENT_SOURCE_DIR}" + RESULT_VARIABLE + res + OUTPUT_VARIABLE + out + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(res EQUAL 0) + set(${_var} "CLEAN" PARENT_SCOPE) + else() + set(${_var} "DIRTY" PARENT_SCOPE) + endif() +endfunction() diff --git a/cmake/GetGitRevisionDescription.cmake.in b/cmake/GetGitRevisionDescription.cmake.in new file mode 100644 index 0000000000..720a8206ac --- /dev/null +++ b/cmake/GetGitRevisionDescription.cmake.in @@ -0,0 +1,44 @@ +# SPDX-FileCopyrightText: © 2009 Iowa State University +# +# SPDX-License-Identifier: BSL-1.0 +# +# Internal file for GetGitRevisionDescription.cmake +# +# Requires CMake 2.6 or newer (uses the 'function' command) +# +# Original Author: +# 2009-2010 Ryan Pavlik +# http://academic.cleardefinition.com +# Iowa State University HCI Graduate Program/VRAC +# +# Copyright Iowa State University 2009-2010. +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +set(HEAD_HASH) + +file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024) + +string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) +if(HEAD_CONTENTS MATCHES "ref") + # named branch + string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}") + if(EXISTS "@GIT_DIR@/${HEAD_REF}") + configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY) + else() + configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY) + file(READ "@GIT_DATA@/packed-refs" PACKED_REFS) + if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}") + set(HEAD_HASH "${CMAKE_MATCH_1}") + endif() + endif() +else() + # detached HEAD + configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY) +endif() + +if(NOT HEAD_HASH) + file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024) + string(STRIP "${HEAD_HASH}" HEAD_HASH) +endif() diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000000..bb59f04090 --- /dev/null +++ b/configure.ac @@ -0,0 +1,139 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +AC_INIT([aliaswalletd], [5.1.0]) +AC_CONFIG_SRCDIR([src/main.cpp]) +AC_CONFIG_AUX_DIR([.]) +AM_INIT_AUTOMAKE([foreign 1.13 subdir-objects -Wall -Werror -Wno-portability]) +AC_CONFIG_MACRO_DIRS([m4]) +AM_PROG_AS +AM_PROG_AR +AC_PROG_MKDIR_P +AC_PROG_CC +AC_PROG_CXX +AC_PROG_OBJCXX +AC_PROG_LIBTOOL +AC_CANONICAL_HOST +build_linux=no +build_windows=no +build_mac=no +case "${host_os}" in + linux*) + build_linux=yes + ;; + cygwin*|mingw*) + build_windows=yes + ;; + darwin*) + build_mac=yes + ;; + *) + AC_MSG_ERROR(["OS $host_os is not supported"]) + ;; +esac +AM_CONDITIONAL([OS_LINUX], [test "$build_linux" = "yes"]) +AM_CONDITIONAL([OS_WINDOWS_CROSSCOMPILE], [test "$build_windows" = "yes"]) +AM_CONDITIONAL([OS_MACOS], [test "$build_mac" = "yes"]) +AX_CXX_COMPILE_STDCXX(17, noext, mandatory) +AC_CONFIG_FILES([Makefile src/Makefile]) +PKG_PROG_PKG_CONFIG +PKG_CHECK_MODULES(OPENSSL, [openssl >= 1.1], [], [AC_MSG_ERROR([OpenSSL 1.1 not found])]) +PKG_CHECK_MODULES(LIBEVENT, [libevent], [], [AC_MSG_ERROR([libevent not found])]) +#AX_SUBDIRS_CONFIGURE([tor], [[--disable-unittests], [--disable-system-torrc], [--disable-systemd], [--disable-asciidoc], [--with-openssl-dir=$($PKG_CONFIG --variable=libdir openssl)], [CFLAGS=$($PKG_CONFIG --cflags openssl) -O2]]) +if test "x$build_windows" = "xyes" ; then + AX_SUBDIRS_CONFIGURE([db4.8/build_unix], [[--disable-cryptography], [--disable-partition], [--disable-compression], [--disable-replication], [--enable-cxx], [--enable-static], [--disable-shared], [--enable-mingw], [CFLAGS=-fPIC -fstack-protector -O2 -D_FORTIFY_SOURCE=1], [CPPFLAGS=-fPIC -fstack-protector -O2 -D_FORTIFY_SOURCE=1]]) +else + AX_SUBDIRS_CONFIGURE([db4.8/build_unix], [[--disable-cryptography], [--disable-partition], [--disable-compression], [--disable-replication], [--enable-cxx], [--enable-static], [--disable-shared], [CFLAGS=-fPIC -fstack-protector -O2 -D_FORTIFY_SOURCE=1], [CPPFLAGS=-fPIC -fstack-protector -O2 -D_FORTIFY_SOURCE=1]]) +fi +PKG_CHECK_MODULES(ZLIB, [zlib], [], [AC_MSG_ERROR([zlib not found])]) +PKG_CHECK_MODULES(ZSTD, [libzstd], [], [AC_MSG_NOTICE([libzstd not found])]) +PKG_CHECK_MODULES(LZMA, [liblzma], [], [AC_MSG_NOTICE([liblzma not found])]) +AC_CHECK_LIB([snappy], [main], , [AC_MSG_NOTICE([snappy not found])]) +AC_CHECK_LIB([pthread], [pthread_self], , [AC_MSG_ERROR([libpthread not found])]) +AC_LANG_CPLUSPLUS +# TODO investigate whether earlier Boost versions will still work. +BOOST_REQUIRE([1.62]) +BOOST_SYSTEM([]) +BOOST_CHRONO([]) +BOOST_FILESYSTEM([]) +BOOST_PROGRAM_OPTIONS([]) +BOOST_THREAD([]) +BOOST_ASIO +BOOST_DATE_TIME([]) +BOOST_IOSTREAMS([]) +MACOS_RPATH="" +AC_ARG_ENABLE([gui], [AS_HELP_STRING([--enable-gui], [Build the Qt GUI wallet])]) +if test "x$enable_gui" = "xyes" ; then + AC_ARG_WITH([qt5], [AS_HELP_STRING([--with-qt5], [Manually specify the path to a stand-alone Qt5 installation (pkg-config will be used if not set). This has no effect if --enable-gui is not also specified.])], [ + if test "x$build_mac" = "xyes" ; then + QT5_LIBDIR="$with_qt5/lib" + MACOS_RPATH="-Wl,-rpath,$QT5_LIBDIR" + QT5_LDFLAGS="-F$QT5_LIBDIR" + QT5_CFLAGS="$QT5_LDFLAGS -I$QT5_LIBDIR/QtCore.framework/Headers -I$QT5_LIBDIR/QtGui.framework/Headers -I$QT5_LIBDIR/QtWidgets.framework/Headers -I$QT5_LIBDIR/QtNetwork.framework/Headers -I$QT5_LIBDIR/QtWebChannel.framework/Headers -I$QT5_LIBDIR/QtQuick.framework/Headers -I$QT5_LIBDIR/QtQuickWidgets.framework/Headers -I$QT5_LIBDIR/QtWebView.framework/Headers -I$QT5_LIBDIR/QtWebSockets.framework/Headers -I$QT5_LIBDIR/QtSvg.framework/Headers" + QT5_LIBS="-framework QtCore -framework QtGui -framework QtWidgets -framework QtNetwork -framework QtWebChannel -framework QtQuick -framework QtQuickWidgets -framework QtWebView -framework QtWebSockets -framework QtSvg" + + MACDEPLOYQT="$with_qt5/bin/macdeployqt" + AC_SUBST([MACDEPLOYQT]) + else + QT5_CFLAGS="-I$with_qt5/include -I$with_qt5/include/QtGui -I$with_qt5/include/QtWidgets -I$with_qt5/include/QtCore -I$with_qt5/include/QtWebChannel -I$with_qt5/include/QtNetwork -I$with_qt5/include/QtQuick -I$with_qt5/include/QtQuickWidgets -I$with_qt5/include/QtWebSockets -I$with_qt5/include/QtSvg" + QT5_LDFLAGS="-L$with_qt5/lib" + QT5_LIBS="-lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network -lQt5WebChannel -lQt5Quick -lQt5QuickWidgets -lQt5WebSockets -lQt5Svg" + fi + AC_SUBST([QT5_CFLAGS]) + AC_SUBST([QT5_LDFLAGS]) + AC_SUBST([QT5_LIBS]) + MOC="${with_qt5//\/include\//\/lib\//}/bin/moc" + UIC="${with_qt5//\/include\//\/lib\//}/bin/uic" + RCC="${with_qt5//\/include\//\/lib\//}/bin/rcc" + LRELEASE="${with_qt5//\/include\//\/lib\//}/bin/lrelease" + AC_SUBST([MOC]) + AC_SUBST([UIC]) + AC_SUBST([RCC]) + AC_SUBST([LRELEASE]) + AC_MSG_NOTICE([Using Qt5 at $with_qt5]) + ], [ + PKG_CHECK_MODULES(QT5, [Qt5Core Qt5Gui Qt5Widgets Qt5Network Qt5WebChannel Qt5Quick Qt5QuickWidgets Qt5WebSockets Qt5Svg Qt5Concurrent], [AC_MSG_NOTICE([Found Qt5 using pkg-config.])], [ + PKG_CHECK_MODULES(QT5, [QtCore >= 5 QtGui >= 5 QtWidgets >= 5 QtNetwork >= 5 QtWebChannel >= 5 QtQuick >= 5 QtQuickWidgets >= 5 QtWebView >= 5 QtWebSockets >= 5 QtSvg >= 5], [AC_MSG_NOTICE([Found Qt >= 5 using pkg-config.])], [ + AC_MSG_ERROR([Qt5 not found.]) + ]) + ]) + ]) + MACDEPLOYQT_LIBPATH="" + AC_SUBST([MACDEPLOYQT_LIBPATH]) + notbeginswith() { case $2 in "$1"*) true;; *) false;; esac; } + if test "x$MOC" = "x" ; then + AC_CHECK_TOOLS(MOC, [moc-qt5 moc]) + fi + if notbeginswith "$($MOC -v)" "$MOC 5." ; then + AC_MSG_ERROR([Cannot find Qt5 tool "moc" - please install the Qt5 development tools.]) + fi + if test "x$UIC" = "x" ; then + AC_CHECK_TOOLS(UIC, [uic-qt5 uic]) + fi + if notbeginswith "$($UIC -v)" "$UIC 5." ; then + AC_MSG_ERROR([Cannot find Qt5 tool "uic" - please install the Qt5 development tools.]) + fi + if test "x$RCC" = "x" ; then + AC_CHECK_TOOLS(RCC, [rcc-qt5 rcc]) + fi + if notbeginswith "$($RCC -v)" "$RCC 5." ; then + AC_MSG_ERROR([Cannot find Qt5 tool "rcc" - please install the Qt5 development tools.]) + fi + if test "x$LRELEASE" = "x" ; then + AC_CHECK_TOOLS(LRELEASE, [lrelease-qt5 lrelease]) + fi + if notbeginswith "$($LRELEASE -version)" "lrelease version 5." ; then + AC_MSG_ERROR([Cannot find Qt5 tool "lrelease" - please install the Qt5 translation tools.]) + fi + if test "x$build_mac" = "xyes" ; then + if test "x$MACDEPLOYQT" = "x" ; then + AC_CHECK_TOOLS(MACDEPLOYQT, [macdeployqt-qt5 macdeployqt]) + fi + fi +fi +CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO" +AC_SUBST([MACOS_RPATH]) +AM_CONDITIONAL([ENABLE_GUI], [test "$enable_gui" = "yes"]) +AC_OUTPUT diff --git a/contrib/bip39/chinese_simplified.txt b/contrib/bip39/chinese_simplified.txt deleted file mode 100644 index b90f1ed85b..0000000000 --- a/contrib/bip39/chinese_simplified.txt +++ /dev/null @@ -1,2048 +0,0 @@ -的 -一 -是 -在 -不 -了 -有 -和 -人 -这 -中 -大 -为 -上 -个 -国 -我 -以 -要 -他 -时 -来 -用 -们 -生 -到 -作 -地 -于 -出 -就 -分 -对 -成 -会 -可 -主 -发 -年 -动 -同 -工 -也 -能 -下 -过 -子 -说 -产 -种 -面 -而 -方 -后 -多 -定 -行 -学 -法 -所 -民 -得 -经 -十 -三 -之 -进 -着 -等 -部 -度 -家 -电 -力 -里 -如 -水 -化 -高 -自 -二 -理 -起 -小 -物 -现 -实 -加 -量 -都 -两 -体 -制 -机 -当 -使 -点 -从 -业 -本 -去 -把 -性 -好 -应 -开 -它 -合 -还 -因 -由 -其 -些 -然 -前 -外 -天 -政 -四 -日 -那 -社 -义 -事 -平 -形 -相 -全 -表 -间 -样 -与 -关 -各 -重 -新 -线 -内 -数 -正 -心 -反 -你 -明 -看 -原 -又 -么 -利 -比 -或 -但 -质 -气 -第 -向 -道 -命 -此 -变 -条 -只 -没 -结 -解 -问 -意 -建 -月 -公 -无 -系 -军 -很 -情 -者 -最 -立 -代 -想 -已 -通 -并 -提 -直 -题 -党 -程 -展 -五 -果 -料 -象 -员 -革 -位 -入 -常 -文 -总 -次 -品 -式 -活 -设 -及 -管 -特 -件 -长 -求 -老 -头 -基 -资 -边 -流 -路 -级 -少 -图 -山 -统 -接 -知 -较 -将 -组 -见 -计 -别 -她 -手 -角 -期 -根 -论 -运 -农 -指 -几 -九 -区 -强 -放 -决 -西 -被 -干 -做 -必 -战 -先 -回 -则 -任 -取 -据 -处 -队 -南 -给 -色 -光 -门 -即 -保 -治 -北 -造 -百 -规 -热 -领 -七 -海 -口 -东 -导 -器 -压 -志 -世 -金 -增 -争 -济 -阶 -油 -思 -术 -极 -交 -受 -联 -什 -认 -六 -共 -权 -收 -证 -改 -清 -美 -再 -采 -转 -更 -单 -风 -切 -打 -白 -教 -速 -花 -带 -安 -场 -身 -车 -例 -真 -务 -具 -万 -每 -目 -至 -达 -走 -积 -示 -议 -声 -报 -斗 -完 -类 -八 -离 -华 -名 -确 -才 -科 -张 -信 -马 -节 -话 -米 -整 -空 -元 -况 -今 -集 -温 -传 -土 -许 -步 -群 -广 -石 -记 -需 -段 -研 -界 -拉 -林 -律 -叫 -且 -究 -观 -越 -织 -装 -影 -算 -低 -持 -音 -众 -书 -布 -复 -容 -儿 -须 -际 -商 -非 -验 -连 -断 -深 -难 -近 -矿 -千 -周 -委 -素 -技 -备 -半 -办 -青 -省 -列 -习 -响 -约 -支 -般 -史 -感 -劳 -便 -团 -往 -酸 -历 -市 -克 -何 -除 -消 -构 -府 -称 -太 -准 -精 -值 -号 -率 -族 -维 -划 -选 -标 -写 -存 -候 -毛 -亲 -快 -效 -斯 -院 -查 -江 -型 -眼 -王 -按 -格 -养 -易 -置 -派 -层 -片 -始 -却 -专 -状 -育 -厂 -京 -识 -适 -属 -圆 -包 -火 -住 -调 -满 -县 -局 -照 -参 -红 -细 -引 -听 -该 -铁 -价 -严 -首 -底 -液 -官 -德 -随 -病 -苏 -失 -尔 -死 -讲 -配 -女 -黄 -推 -显 -谈 -罪 -神 -艺 -呢 -席 -含 -企 -望 -密 -批 -营 -项 -防 -举 -球 -英 -氧 -势 -告 -李 -台 -落 -木 -帮 -轮 -破 -亚 -师 -围 -注 -远 -字 -材 -排 -供 -河 -态 -封 -另 -施 -减 -树 -溶 -怎 -止 -案 -言 -士 -均 -武 -固 -叶 -鱼 -波 -视 -仅 -费 -紧 -爱 -左 -章 -早 -朝 -害 -续 -轻 -服 -试 -食 -充 -兵 -源 -判 -护 -司 -足 -某 -练 -差 -致 -板 -田 -降 -黑 -犯 -负 -击 -范 -继 -兴 -似 -余 -坚 -曲 -输 -修 -故 -城 -夫 -够 -送 -笔 -船 -占 -右 -财 -吃 -富 -春 -职 -觉 -汉 -画 -功 -巴 -跟 -虽 -杂 -飞 -检 -吸 -助 -升 -阳 -互 -初 -创 -抗 -考 -投 -坏 -策 -古 -径 -换 -未 -跑 -留 -钢 -曾 -端 -责 -站 -简 -述 -钱 -副 -尽 -帝 -射 -草 -冲 -承 -独 -令 -限 -阿 -宣 -环 -双 -请 -超 -微 -让 -控 -州 -良 -轴 -找 -否 -纪 -益 -依 -优 -顶 -础 -载 -倒 -房 -突 -坐 -粉 -敌 -略 -客 -袁 -冷 -胜 -绝 -析 -块 -剂 -测 -丝 -协 -诉 -念 -陈 -仍 -罗 -盐 -友 -洋 -错 -苦 -夜 -刑 -移 -频 -逐 -靠 -混 -母 -短 -皮 -终 -聚 -汽 -村 -云 -哪 -既 -距 -卫 -停 -烈 -央 -察 -烧 -迅 -境 -若 -印 -洲 -刻 -括 -激 -孔 -搞 -甚 -室 -待 -核 -校 -散 -侵 -吧 -甲 -游 -久 -菜 -味 -旧 -模 -湖 -货 -损 -预 -阻 -毫 -普 -稳 -乙 -妈 -植 -息 -扩 -银 -语 -挥 -酒 -守 -拿 -序 -纸 -医 -缺 -雨 -吗 -针 -刘 -啊 -急 -唱 -误 -训 -愿 -审 -附 -获 -茶 -鲜 -粮 -斤 -孩 -脱 -硫 -肥 -善 -龙 -演 -父 -渐 -血 -欢 -械 -掌 -歌 -沙 -刚 -攻 -谓 -盾 -讨 -晚 -粒 -乱 -燃 -矛 -乎 -杀 -药 -宁 -鲁 -贵 -钟 -煤 -读 -班 -伯 -香 -介 -迫 -句 -丰 -培 -握 -兰 -担 -弦 -蛋 -沉 -假 -穿 -执 -答 -乐 -谁 -顺 -烟 -缩 -征 -脸 -喜 -松 -脚 -困 -异 -免 -背 -星 -福 -买 -染 -井 -概 -慢 -怕 -磁 -倍 -祖 -皇 -促 -静 -补 -评 -翻 -肉 -践 -尼 -衣 -宽 -扬 -棉 -希 -伤 -操 -垂 -秋 -宜 -氢 -套 -督 -振 -架 -亮 -末 -宪 -庆 -编 -牛 -触 -映 -雷 -销 -诗 -座 -居 -抓 -裂 -胞 -呼 -娘 -景 -威 -绿 -晶 -厚 -盟 -衡 -鸡 -孙 -延 -危 -胶 -屋 -乡 -临 -陆 -顾 -掉 -呀 -灯 -岁 -措 -束 -耐 -剧 -玉 -赵 -跳 -哥 -季 -课 -凯 -胡 -额 -款 -绍 -卷 -齐 -伟 -蒸 -殖 -永 -宗 -苗 -川 -炉 -岩 -弱 -零 -杨 -奏 -沿 -露 -杆 -探 -滑 -镇 -饭 -浓 -航 -怀 -赶 -库 -夺 -伊 -灵 -税 -途 -灭 -赛 -归 -召 -鼓 -播 -盘 -裁 -险 -康 -唯 -录 -菌 -纯 -借 -糖 -盖 -横 -符 -私 -努 -堂 -域 -枪 -润 -幅 -哈 -竟 -熟 -虫 -泽 -脑 -壤 -碳 -欧 -遍 -侧 -寨 -敢 -彻 -虑 -斜 -薄 -庭 -纳 -弹 -饲 -伸 -折 -麦 -湿 -暗 -荷 -瓦 -塞 -床 -筑 -恶 -户 -访 -塔 -奇 -透 -梁 -刀 -旋 -迹 -卡 -氯 -遇 -份 -毒 -泥 -退 -洗 -摆 -灰 -彩 -卖 -耗 -夏 -择 -忙 -铜 -献 -硬 -予 -繁 -圈 -雪 -函 -亦 -抽 -篇 -阵 -阴 -丁 -尺 -追 -堆 -雄 -迎 -泛 -爸 -楼 -避 -谋 -吨 -野 -猪 -旗 -累 -偏 -典 -馆 -索 -秦 -脂 -潮 -爷 -豆 -忽 -托 -惊 -塑 -遗 -愈 -朱 -替 -纤 -粗 -倾 -尚 -痛 -楚 -谢 -奋 -购 -磨 -君 -池 -旁 -碎 -骨 -监 -捕 -弟 -暴 -割 -贯 -殊 -释 -词 -亡 -壁 -顿 -宝 -午 -尘 -闻 -揭 -炮 -残 -冬 -桥 -妇 -警 -综 -招 -吴 -付 -浮 -遭 -徐 -您 -摇 -谷 -赞 -箱 -隔 -订 -男 -吹 -园 -纷 -唐 -败 -宋 -玻 -巨 -耕 -坦 -荣 -闭 -湾 -键 -凡 -驻 -锅 -救 -恩 -剥 -凝 -碱 -齿 -截 -炼 -麻 -纺 -禁 -废 -盛 -版 -缓 -净 -睛 -昌 -婚 -涉 -筒 -嘴 -插 -岸 -朗 -庄 -街 -藏 -姑 -贸 -腐 -奴 -啦 -惯 -乘 -伙 -恢 -匀 -纱 -扎 -辩 -耳 -彪 -臣 -亿 -璃 -抵 -脉 -秀 -萨 -俄 -网 -舞 -店 -喷 -纵 -寸 -汗 -挂 -洪 -贺 -闪 -柬 -爆 -烯 -津 -稻 -墙 -软 -勇 -像 -滚 -厘 -蒙 -芳 -肯 -坡 -柱 -荡 -腿 -仪 -旅 -尾 -轧 -冰 -贡 -登 -黎 -削 -钻 -勒 -逃 -障 -氨 -郭 -峰 -币 -港 -伏 -轨 -亩 -毕 -擦 -莫 -刺 -浪 -秘 -援 -株 -健 -售 -股 -岛 -甘 -泡 -睡 -童 -铸 -汤 -阀 -休 -汇 -舍 -牧 -绕 -炸 -哲 -磷 -绩 -朋 -淡 -尖 -启 -陷 -柴 -呈 -徒 -颜 -泪 -稍 -忘 -泵 -蓝 -拖 -洞 -授 -镜 -辛 -壮 -锋 -贫 -虚 -弯 -摩 -泰 -幼 -廷 -尊 -窗 -纲 -弄 -隶 -疑 -氏 -宫 -姐 -震 -瑞 -怪 -尤 -琴 -循 -描 -膜 -违 -夹 -腰 -缘 -珠 -穷 -森 -枝 -竹 -沟 -催 -绳 -忆 -邦 -剩 -幸 -浆 -栏 -拥 -牙 -贮 -礼 -滤 -钠 -纹 -罢 -拍 -咱 -喊 -袖 -埃 -勤 -罚 -焦 -潜 -伍 -墨 -欲 -缝 -姓 -刊 -饱 -仿 -奖 -铝 -鬼 -丽 -跨 -默 -挖 -链 -扫 -喝 -袋 -炭 -污 -幕 -诸 -弧 -励 -梅 -奶 -洁 -灾 -舟 -鉴 -苯 -讼 -抱 -毁 -懂 -寒 -智 -埔 -寄 -届 -跃 -渡 -挑 -丹 -艰 -贝 -碰 -拔 -爹 -戴 -码 -梦 -芽 -熔 -赤 -渔 -哭 -敬 -颗 -奔 -铅 -仲 -虎 -稀 -妹 -乏 -珍 -申 -桌 -遵 -允 -隆 -螺 -仓 -魏 -锐 -晓 -氮 -兼 -隐 -碍 -赫 -拨 -忠 -肃 -缸 -牵 -抢 -博 -巧 -壳 -兄 -杜 -讯 -诚 -碧 -祥 -柯 -页 -巡 -矩 -悲 -灌 -龄 -伦 -票 -寻 -桂 -铺 -圣 -恐 -恰 -郑 -趣 -抬 -荒 -腾 -贴 -柔 -滴 -猛 -阔 -辆 -妻 -填 -撤 -储 -签 -闹 -扰 -紫 -砂 -递 -戏 -吊 -陶 -伐 -喂 -疗 -瓶 -婆 -抚 -臂 -摸 -忍 -虾 -蜡 -邻 -胸 -巩 -挤 -偶 -弃 -槽 -劲 -乳 -邓 -吉 -仁 -烂 -砖 -租 -乌 -舰 -伴 -瓜 -浅 -丙 -暂 -燥 -橡 -柳 -迷 -暖 -牌 -秧 -胆 -详 -簧 -踏 -瓷 -谱 -呆 -宾 -糊 -洛 -辉 -愤 -竞 -隙 -怒 -粘 -乃 -绪 -肩 -籍 -敏 -涂 -熙 -皆 -侦 -悬 -掘 -享 -纠 -醒 -狂 -锁 -淀 -恨 -牲 -霸 -爬 -赏 -逆 -玩 -陵 -祝 -秒 -浙 -貌 -役 -彼 -悉 -鸭 -趋 -凤 -晨 -畜 -辈 -秩 -卵 -署 -梯 -炎 -滩 -棋 -驱 -筛 -峡 -冒 -啥 -寿 -译 -浸 -泉 -帽 -迟 -硅 -疆 -贷 -漏 -稿 -冠 -嫩 -胁 -芯 -牢 -叛 -蚀 -奥 -鸣 -岭 -羊 -凭 -串 -塘 -绘 -酵 -融 -盆 -锡 -庙 -筹 -冻 -辅 -摄 -袭 -筋 -拒 -僚 -旱 -钾 -鸟 -漆 -沈 -眉 -疏 -添 -棒 -穗 -硝 -韩 -逼 -扭 -侨 -凉 -挺 -碗 -栽 -炒 -杯 -患 -馏 -劝 -豪 -辽 -勃 -鸿 -旦 -吏 -拜 -狗 -埋 -辊 -掩 -饮 -搬 -骂 -辞 -勾 -扣 -估 -蒋 -绒 -雾 -丈 -朵 -姆 -拟 -宇 -辑 -陕 -雕 -偿 -蓄 -崇 -剪 -倡 -厅 -咬 -驶 -薯 -刷 -斥 -番 -赋 -奉 -佛 -浇 -漫 -曼 -扇 -钙 -桃 -扶 -仔 -返 -俗 -亏 -腔 -鞋 -棱 -覆 -框 -悄 -叔 -撞 -骗 -勘 -旺 -沸 -孤 -吐 -孟 -渠 -屈 -疾 -妙 -惜 -仰 -狠 -胀 -谐 -抛 -霉 -桑 -岗 -嘛 -衰 -盗 -渗 -脏 -赖 -涌 -甜 -曹 -阅 -肌 -哩 -厉 -烃 -纬 -毅 -昨 -伪 -症 -煮 -叹 -钉 -搭 -茎 -笼 -酷 -偷 -弓 -锥 -恒 -杰 -坑 -鼻 -翼 -纶 -叙 -狱 -逮 -罐 -络 -棚 -抑 -膨 -蔬 -寺 -骤 -穆 -冶 -枯 -册 -尸 -凸 -绅 -坯 -牺 -焰 -轰 -欣 -晋 -瘦 -御 -锭 -锦 -丧 -旬 -锻 -垄 -搜 -扑 -邀 -亭 -酯 -迈 -舒 -脆 -酶 -闲 -忧 -酚 -顽 -羽 -涨 -卸 -仗 -陪 -辟 -惩 -杭 -姚 -肚 -捉 -飘 -漂 -昆 -欺 -吾 -郎 -烷 -汁 -呵 -饰 -萧 -雅 -邮 -迁 -燕 -撒 -姻 -赴 -宴 -烦 -债 -帐 -斑 -铃 -旨 -醇 -董 -饼 -雏 -姿 -拌 -傅 -腹 -妥 -揉 -贤 -拆 -歪 -葡 -胺 -丢 -浩 -徽 -昂 -垫 -挡 -览 -贪 -慰 -缴 -汪 -慌 -冯 -诺 -姜 -谊 -凶 -劣 -诬 -耀 -昏 -躺 -盈 -骑 -乔 -溪 -丛 -卢 -抹 -闷 -咨 -刮 -驾 -缆 -悟 -摘 -铒 -掷 -颇 -幻 -柄 -惠 -惨 -佳 -仇 -腊 -窝 -涤 -剑 -瞧 -堡 -泼 -葱 -罩 -霍 -捞 -胎 -苍 -滨 -俩 -捅 -湘 -砍 -霞 -邵 -萄 -疯 -淮 -遂 -熊 -粪 -烘 -宿 -档 -戈 -驳 -嫂 -裕 -徙 -箭 -捐 -肠 -撑 -晒 -辨 -殿 -莲 -摊 -搅 -酱 -屏 -疫 -哀 -蔡 -堵 -沫 -皱 -畅 -叠 -阁 -莱 -敲 -辖 -钩 -痕 -坝 -巷 -饿 -祸 -丘 -玄 -溜 -曰 -逻 -彭 -尝 -卿 -妨 -艇 -吞 -韦 -怨 -矮 -歇 diff --git a/contrib/bip39/chinese_traditional.txt b/contrib/bip39/chinese_traditional.txt deleted file mode 100644 index 9b02047921..0000000000 --- a/contrib/bip39/chinese_traditional.txt +++ /dev/null @@ -1,2048 +0,0 @@ -的 -一 -是 -在 -不 -了 -有 -和 -人 -這 -中 -大 -為 -上 -個 -國 -我 -以 -要 -他 -時 -來 -用 -們 -生 -到 -作 -地 -於 -出 -就 -分 -對 -成 -會 -可 -主 -發 -年 -動 -同 -工 -也 -能 -下 -過 -子 -說 -產 -種 -面 -而 -方 -後 -多 -定 -行 -學 -法 -所 -民 -得 -經 -十 -三 -之 -進 -著 -等 -部 -度 -家 -電 -力 -裡 -如 -水 -化 -高 -自 -二 -理 -起 -小 -物 -現 -實 -加 -量 -都 -兩 -體 -制 -機 -當 -使 -點 -從 -業 -本 -去 -把 -性 -好 -應 -開 -它 -合 -還 -因 -由 -其 -些 -然 -前 -外 -天 -政 -四 -日 -那 -社 -義 -事 -平 -形 -相 -全 -表 -間 -樣 -與 -關 -各 -重 -新 -線 -內 -數 -正 -心 -反 -你 -明 -看 -原 -又 -麼 -利 -比 -或 -但 -質 -氣 -第 -向 -道 -命 -此 -變 -條 -只 -沒 -結 -解 -問 -意 -建 -月 -公 -無 -系 -軍 -很 -情 -者 -最 -立 -代 -想 -已 -通 -並 -提 -直 -題 -黨 -程 -展 -五 -果 -料 -象 -員 -革 -位 -入 -常 -文 -總 -次 -品 -式 -活 -設 -及 -管 -特 -件 -長 -求 -老 -頭 -基 -資 -邊 -流 -路 -級 -少 -圖 -山 -統 -接 -知 -較 -將 -組 -見 -計 -別 -她 -手 -角 -期 -根 -論 -運 -農 -指 -幾 -九 -區 -強 -放 -決 -西 -被 -幹 -做 -必 -戰 -先 -回 -則 -任 -取 -據 -處 -隊 -南 -給 -色 -光 -門 -即 -保 -治 -北 -造 -百 -規 -熱 -領 -七 -海 -口 -東 -導 -器 -壓 -志 -世 -金 -增 -爭 -濟 -階 -油 -思 -術 -極 -交 -受 -聯 -什 -認 -六 -共 -權 -收 -證 -改 -清 -美 -再 -採 -轉 -更 -單 -風 -切 -打 -白 -教 -速 -花 -帶 -安 -場 -身 -車 -例 -真 -務 -具 -萬 -每 -目 -至 -達 -走 -積 -示 -議 -聲 -報 -鬥 -完 -類 -八 -離 -華 -名 -確 -才 -科 -張 -信 -馬 -節 -話 -米 -整 -空 -元 -況 -今 -集 -溫 -傳 -土 -許 -步 -群 -廣 -石 -記 -需 -段 -研 -界 -拉 -林 -律 -叫 -且 -究 -觀 -越 -織 -裝 -影 -算 -低 -持 -音 -眾 -書 -布 -复 -容 -兒 -須 -際 -商 -非 -驗 -連 -斷 -深 -難 -近 -礦 -千 -週 -委 -素 -技 -備 -半 -辦 -青 -省 -列 -習 -響 -約 -支 -般 -史 -感 -勞 -便 -團 -往 -酸 -歷 -市 -克 -何 -除 -消 -構 -府 -稱 -太 -準 -精 -值 -號 -率 -族 -維 -劃 -選 -標 -寫 -存 -候 -毛 -親 -快 -效 -斯 -院 -查 -江 -型 -眼 -王 -按 -格 -養 -易 -置 -派 -層 -片 -始 -卻 -專 -狀 -育 -廠 -京 -識 -適 -屬 -圓 -包 -火 -住 -調 -滿 -縣 -局 -照 -參 -紅 -細 -引 -聽 -該 -鐵 -價 -嚴 -首 -底 -液 -官 -德 -隨 -病 -蘇 -失 -爾 -死 -講 -配 -女 -黃 -推 -顯 -談 -罪 -神 -藝 -呢 -席 -含 -企 -望 -密 -批 -營 -項 -防 -舉 -球 -英 -氧 -勢 -告 -李 -台 -落 -木 -幫 -輪 -破 -亞 -師 -圍 -注 -遠 -字 -材 -排 -供 -河 -態 -封 -另 -施 -減 -樹 -溶 -怎 -止 -案 -言 -士 -均 -武 -固 -葉 -魚 -波 -視 -僅 -費 -緊 -愛 -左 -章 -早 -朝 -害 -續 -輕 -服 -試 -食 -充 -兵 -源 -判 -護 -司 -足 -某 -練 -差 -致 -板 -田 -降 -黑 -犯 -負 -擊 -范 -繼 -興 -似 -餘 -堅 -曲 -輸 -修 -故 -城 -夫 -夠 -送 -筆 -船 -佔 -右 -財 -吃 -富 -春 -職 -覺 -漢 -畫 -功 -巴 -跟 -雖 -雜 -飛 -檢 -吸 -助 -昇 -陽 -互 -初 -創 -抗 -考 -投 -壞 -策 -古 -徑 -換 -未 -跑 -留 -鋼 -曾 -端 -責 -站 -簡 -述 -錢 -副 -盡 -帝 -射 -草 -衝 -承 -獨 -令 -限 -阿 -宣 -環 -雙 -請 -超 -微 -讓 -控 -州 -良 -軸 -找 -否 -紀 -益 -依 -優 -頂 -礎 -載 -倒 -房 -突 -坐 -粉 -敵 -略 -客 -袁 -冷 -勝 -絕 -析 -塊 -劑 -測 -絲 -協 -訴 -念 -陳 -仍 -羅 -鹽 -友 -洋 -錯 -苦 -夜 -刑 -移 -頻 -逐 -靠 -混 -母 -短 -皮 -終 -聚 -汽 -村 -雲 -哪 -既 -距 -衛 -停 -烈 -央 -察 -燒 -迅 -境 -若 -印 -洲 -刻 -括 -激 -孔 -搞 -甚 -室 -待 -核 -校 -散 -侵 -吧 -甲 -遊 -久 -菜 -味 -舊 -模 -湖 -貨 -損 -預 -阻 -毫 -普 -穩 -乙 -媽 -植 -息 -擴 -銀 -語 -揮 -酒 -守 -拿 -序 -紙 -醫 -缺 -雨 -嗎 -針 -劉 -啊 -急 -唱 -誤 -訓 -願 -審 -附 -獲 -茶 -鮮 -糧 -斤 -孩 -脫 -硫 -肥 -善 -龍 -演 -父 -漸 -血 -歡 -械 -掌 -歌 -沙 -剛 -攻 -謂 -盾 -討 -晚 -粒 -亂 -燃 -矛 -乎 -殺 -藥 -寧 -魯 -貴 -鐘 -煤 -讀 -班 -伯 -香 -介 -迫 -句 -豐 -培 -握 -蘭 -擔 -弦 -蛋 -沉 -假 -穿 -執 -答 -樂 -誰 -順 -煙 -縮 -徵 -臉 -喜 -松 -腳 -困 -異 -免 -背 -星 -福 -買 -染 -井 -概 -慢 -怕 -磁 -倍 -祖 -皇 -促 -靜 -補 -評 -翻 -肉 -踐 -尼 -衣 -寬 -揚 -棉 -希 -傷 -操 -垂 -秋 -宜 -氫 -套 -督 -振 -架 -亮 -末 -憲 -慶 -編 -牛 -觸 -映 -雷 -銷 -詩 -座 -居 -抓 -裂 -胞 -呼 -娘 -景 -威 -綠 -晶 -厚 -盟 -衡 -雞 -孫 -延 -危 -膠 -屋 -鄉 -臨 -陸 -顧 -掉 -呀 -燈 -歲 -措 -束 -耐 -劇 -玉 -趙 -跳 -哥 -季 -課 -凱 -胡 -額 -款 -紹 -卷 -齊 -偉 -蒸 -殖 -永 -宗 -苗 -川 -爐 -岩 -弱 -零 -楊 -奏 -沿 -露 -桿 -探 -滑 -鎮 -飯 -濃 -航 -懷 -趕 -庫 -奪 -伊 -靈 -稅 -途 -滅 -賽 -歸 -召 -鼓 -播 -盤 -裁 -險 -康 -唯 -錄 -菌 -純 -借 -糖 -蓋 -橫 -符 -私 -努 -堂 -域 -槍 -潤 -幅 -哈 -竟 -熟 -蟲 -澤 -腦 -壤 -碳 -歐 -遍 -側 -寨 -敢 -徹 -慮 -斜 -薄 -庭 -納 -彈 -飼 -伸 -折 -麥 -濕 -暗 -荷 -瓦 -塞 -床 -築 -惡 -戶 -訪 -塔 -奇 -透 -梁 -刀 -旋 -跡 -卡 -氯 -遇 -份 -毒 -泥 -退 -洗 -擺 -灰 -彩 -賣 -耗 -夏 -擇 -忙 -銅 -獻 -硬 -予 -繁 -圈 -雪 -函 -亦 -抽 -篇 -陣 -陰 -丁 -尺 -追 -堆 -雄 -迎 -泛 -爸 -樓 -避 -謀 -噸 -野 -豬 -旗 -累 -偏 -典 -館 -索 -秦 -脂 -潮 -爺 -豆 -忽 -托 -驚 -塑 -遺 -愈 -朱 -替 -纖 -粗 -傾 -尚 -痛 -楚 -謝 -奮 -購 -磨 -君 -池 -旁 -碎 -骨 -監 -捕 -弟 -暴 -割 -貫 -殊 -釋 -詞 -亡 -壁 -頓 -寶 -午 -塵 -聞 -揭 -炮 -殘 -冬 -橋 -婦 -警 -綜 -招 -吳 -付 -浮 -遭 -徐 -您 -搖 -谷 -贊 -箱 -隔 -訂 -男 -吹 -園 -紛 -唐 -敗 -宋 -玻 -巨 -耕 -坦 -榮 -閉 -灣 -鍵 -凡 -駐 -鍋 -救 -恩 -剝 -凝 -鹼 -齒 -截 -煉 -麻 -紡 -禁 -廢 -盛 -版 -緩 -淨 -睛 -昌 -婚 -涉 -筒 -嘴 -插 -岸 -朗 -莊 -街 -藏 -姑 -貿 -腐 -奴 -啦 -慣 -乘 -夥 -恢 -勻 -紗 -扎 -辯 -耳 -彪 -臣 -億 -璃 -抵 -脈 -秀 -薩 -俄 -網 -舞 -店 -噴 -縱 -寸 -汗 -掛 -洪 -賀 -閃 -柬 -爆 -烯 -津 -稻 -牆 -軟 -勇 -像 -滾 -厘 -蒙 -芳 -肯 -坡 -柱 -盪 -腿 -儀 -旅 -尾 -軋 -冰 -貢 -登 -黎 -削 -鑽 -勒 -逃 -障 -氨 -郭 -峰 -幣 -港 -伏 -軌 -畝 -畢 -擦 -莫 -刺 -浪 -秘 -援 -株 -健 -售 -股 -島 -甘 -泡 -睡 -童 -鑄 -湯 -閥 -休 -匯 -舍 -牧 -繞 -炸 -哲 -磷 -績 -朋 -淡 -尖 -啟 -陷 -柴 -呈 -徒 -顏 -淚 -稍 -忘 -泵 -藍 -拖 -洞 -授 -鏡 -辛 -壯 -鋒 -貧 -虛 -彎 -摩 -泰 -幼 -廷 -尊 -窗 -綱 -弄 -隸 -疑 -氏 -宮 -姐 -震 -瑞 -怪 -尤 -琴 -循 -描 -膜 -違 -夾 -腰 -緣 -珠 -窮 -森 -枝 -竹 -溝 -催 -繩 -憶 -邦 -剩 -幸 -漿 -欄 -擁 -牙 -貯 -禮 -濾 -鈉 -紋 -罷 -拍 -咱 -喊 -袖 -埃 -勤 -罰 -焦 -潛 -伍 -墨 -欲 -縫 -姓 -刊 -飽 -仿 -獎 -鋁 -鬼 -麗 -跨 -默 -挖 -鏈 -掃 -喝 -袋 -炭 -污 -幕 -諸 -弧 -勵 -梅 -奶 -潔 -災 -舟 -鑑 -苯 -訟 -抱 -毀 -懂 -寒 -智 -埔 -寄 -屆 -躍 -渡 -挑 -丹 -艱 -貝 -碰 -拔 -爹 -戴 -碼 -夢 -芽 -熔 -赤 -漁 -哭 -敬 -顆 -奔 -鉛 -仲 -虎 -稀 -妹 -乏 -珍 -申 -桌 -遵 -允 -隆 -螺 -倉 -魏 -銳 -曉 -氮 -兼 -隱 -礙 -赫 -撥 -忠 -肅 -缸 -牽 -搶 -博 -巧 -殼 -兄 -杜 -訊 -誠 -碧 -祥 -柯 -頁 -巡 -矩 -悲 -灌 -齡 -倫 -票 -尋 -桂 -鋪 -聖 -恐 -恰 -鄭 -趣 -抬 -荒 -騰 -貼 -柔 -滴 -猛 -闊 -輛 -妻 -填 -撤 -儲 -簽 -鬧 -擾 -紫 -砂 -遞 -戲 -吊 -陶 -伐 -餵 -療 -瓶 -婆 -撫 -臂 -摸 -忍 -蝦 -蠟 -鄰 -胸 -鞏 -擠 -偶 -棄 -槽 -勁 -乳 -鄧 -吉 -仁 -爛 -磚 -租 -烏 -艦 -伴 -瓜 -淺 -丙 -暫 -燥 -橡 -柳 -迷 -暖 -牌 -秧 -膽 -詳 -簧 -踏 -瓷 -譜 -呆 -賓 -糊 -洛 -輝 -憤 -競 -隙 -怒 -粘 -乃 -緒 -肩 -籍 -敏 -塗 -熙 -皆 -偵 -懸 -掘 -享 -糾 -醒 -狂 -鎖 -淀 -恨 -牲 -霸 -爬 -賞 -逆 -玩 -陵 -祝 -秒 -浙 -貌 -役 -彼 -悉 -鴨 -趨 -鳳 -晨 -畜 -輩 -秩 -卵 -署 -梯 -炎 -灘 -棋 -驅 -篩 -峽 -冒 -啥 -壽 -譯 -浸 -泉 -帽 -遲 -矽 -疆 -貸 -漏 -稿 -冠 -嫩 -脅 -芯 -牢 -叛 -蝕 -奧 -鳴 -嶺 -羊 -憑 -串 -塘 -繪 -酵 -融 -盆 -錫 -廟 -籌 -凍 -輔 -攝 -襲 -筋 -拒 -僚 -旱 -鉀 -鳥 -漆 -沈 -眉 -疏 -添 -棒 -穗 -硝 -韓 -逼 -扭 -僑 -涼 -挺 -碗 -栽 -炒 -杯 -患 -餾 -勸 -豪 -遼 -勃 -鴻 -旦 -吏 -拜 -狗 -埋 -輥 -掩 -飲 -搬 -罵 -辭 -勾 -扣 -估 -蔣 -絨 -霧 -丈 -朵 -姆 -擬 -宇 -輯 -陝 -雕 -償 -蓄 -崇 -剪 -倡 -廳 -咬 -駛 -薯 -刷 -斥 -番 -賦 -奉 -佛 -澆 -漫 -曼 -扇 -鈣 -桃 -扶 -仔 -返 -俗 -虧 -腔 -鞋 -棱 -覆 -框 -悄 -叔 -撞 -騙 -勘 -旺 -沸 -孤 -吐 -孟 -渠 -屈 -疾 -妙 -惜 -仰 -狠 -脹 -諧 -拋 -黴 -桑 -崗 -嘛 -衰 -盜 -滲 -臟 -賴 -湧 -甜 -曹 -閱 -肌 -哩 -厲 -烴 -緯 -毅 -昨 -偽 -症 -煮 -嘆 -釘 -搭 -莖 -籠 -酷 -偷 -弓 -錐 -恆 -傑 -坑 -鼻 -翼 -綸 -敘 -獄 -逮 -罐 -絡 -棚 -抑 -膨 -蔬 -寺 -驟 -穆 -冶 -枯 -冊 -屍 -凸 -紳 -坯 -犧 -焰 -轟 -欣 -晉 -瘦 -禦 -錠 -錦 -喪 -旬 -鍛 -壟 -搜 -撲 -邀 -亭 -酯 -邁 -舒 -脆 -酶 -閒 -憂 -酚 -頑 -羽 -漲 -卸 -仗 -陪 -闢 -懲 -杭 -姚 -肚 -捉 -飄 -漂 -昆 -欺 -吾 -郎 -烷 -汁 -呵 -飾 -蕭 -雅 -郵 -遷 -燕 -撒 -姻 -赴 -宴 -煩 -債 -帳 -斑 -鈴 -旨 -醇 -董 -餅 -雛 -姿 -拌 -傅 -腹 -妥 -揉 -賢 -拆 -歪 -葡 -胺 -丟 -浩 -徽 -昂 -墊 -擋 -覽 -貪 -慰 -繳 -汪 -慌 -馮 -諾 -姜 -誼 -兇 -劣 -誣 -耀 -昏 -躺 -盈 -騎 -喬 -溪 -叢 -盧 -抹 -悶 -諮 -刮 -駕 -纜 -悟 -摘 -鉺 -擲 -頗 -幻 -柄 -惠 -慘 -佳 -仇 -臘 -窩 -滌 -劍 -瞧 -堡 -潑 -蔥 -罩 -霍 -撈 -胎 -蒼 -濱 -倆 -捅 -湘 -砍 -霞 -邵 -萄 -瘋 -淮 -遂 -熊 -糞 -烘 -宿 -檔 -戈 -駁 -嫂 -裕 -徙 -箭 -捐 -腸 -撐 -曬 -辨 -殿 -蓮 -攤 -攪 -醬 -屏 -疫 -哀 -蔡 -堵 -沫 -皺 -暢 -疊 -閣 -萊 -敲 -轄 -鉤 -痕 -壩 -巷 -餓 -禍 -丘 -玄 -溜 -曰 -邏 -彭 -嘗 -卿 -妨 -艇 -吞 -韋 -怨 -矮 -歇 diff --git a/contrib/bip39/english.txt b/contrib/bip39/english.txt deleted file mode 100644 index 942040ed50..0000000000 --- a/contrib/bip39/english.txt +++ /dev/null @@ -1,2048 +0,0 @@ -abandon -ability -able -about -above -absent -absorb -abstract -absurd -abuse -access -accident -account -accuse -achieve -acid -acoustic -acquire -across -act -action -actor -actress -actual -adapt -add -addict -address -adjust -admit -adult -advance -advice -aerobic -affair -afford -afraid -again -age -agent -agree -ahead -aim -air -airport -aisle -alarm -album -alcohol -alert -alien -all -alley -allow -almost -alone -alpha -already -also -alter -always -amateur -amazing -among -amount -amused -analyst -anchor -ancient -anger -angle -angry -animal -ankle -announce -annual -another -answer -antenna -antique -anxiety -any -apart -apology -appear -apple -approve -april -arch -arctic -area -arena -argue -arm -armed -armor -army -around -arrange -arrest -arrive -arrow -art -artefact -artist -artwork -ask -aspect -assault -asset -assist -assume -asthma -athlete -atom -attack -attend -attitude -attract -auction -audit -august -aunt -author -auto -autumn -average -avocado -avoid -awake -aware -away -awesome -awful -awkward -axis -baby -bachelor -bacon -badge -bag -balance -balcony -ball -bamboo -banana -banner -bar -barely -bargain -barrel -base -basic -basket -battle -beach -bean -beauty -because -become -beef -before -begin -behave -behind -believe -below -belt -bench -benefit -best -betray -better -between -beyond -bicycle -bid -bike -bind -biology -bird -birth -bitter -black -blade -blame -blanket -blast -bleak -bless -blind -blood -blossom -blouse -blue -blur -blush -board -boat -body -boil -bomb -bone -bonus -book -boost -border -boring -borrow -boss -bottom -bounce -box -boy -bracket -brain -brand -brass -brave -bread -breeze -brick -bridge -brief -bright -bring -brisk -broccoli -broken -bronze -broom -brother -brown -brush -bubble -buddy -budget -buffalo -build -bulb -bulk -bullet -bundle -bunker -burden -burger -burst -bus -business -busy -butter -buyer -buzz -cabbage -cabin -cable -cactus -cage -cake -call -calm -camera -camp -can -canal -cancel -candy -cannon -canoe -canvas -canyon -capable -capital -captain -car -carbon -card -cargo -carpet -carry -cart -case -cash -casino -castle -casual -cat -catalog -catch -category -cattle -caught -cause -caution -cave -ceiling -celery -cement -census -century -cereal -certain -chair -chalk -champion -change -chaos -chapter -charge -chase -chat -cheap -check -cheese -chef -cherry -chest -chicken -chief -child -chimney -choice -choose -chronic -chuckle -chunk -churn -cigar -cinnamon -circle -citizen -city -civil -claim -clap -clarify -claw -clay -clean -clerk -clever -click -client -cliff -climb -clinic -clip -clock -clog -close -cloth -cloud -clown -club -clump -cluster -clutch -coach -coast -coconut -code -coffee -coil -coin -collect -color -column -combine -come -comfort -comic -common -company -concert -conduct -confirm -congress -connect -consider -control -convince -cook -cool -copper -copy -coral -core -corn -correct -cost -cotton -couch -country -couple -course -cousin -cover -coyote -crack -cradle -craft -cram -crane -crash -crater -crawl -crazy -cream -credit -creek -crew -cricket -crime -crisp -critic -crop -cross -crouch -crowd -crucial -cruel -cruise -crumble -crunch -crush -cry -crystal -cube -culture -cup -cupboard -curious -current -curtain -curve -cushion -custom -cute -cycle -dad -damage -damp -dance -danger -daring -dash -daughter -dawn -day -deal -debate -debris -decade -december -decide -decline -decorate -decrease -deer -defense -define -defy -degree -delay -deliver -demand -demise -denial -dentist -deny -depart -depend -deposit -depth -deputy -derive -describe -desert -design -desk -despair -destroy -detail -detect -develop -device -devote -diagram -dial -diamond -diary -dice -diesel -diet -differ -digital -dignity -dilemma -dinner -dinosaur -direct -dirt -disagree -discover -disease -dish -dismiss -disorder -display -distance -divert -divide -divorce -dizzy -doctor -document -dog -doll -dolphin -domain -donate -donkey -donor -door -dose -double -dove -draft -dragon -drama -drastic -draw -dream -dress -drift -drill -drink -drip -drive -drop -drum -dry -duck -dumb -dune -during -dust -dutch -duty -dwarf -dynamic -eager -eagle -early -earn -earth -easily -east -easy -echo -ecology -economy -edge -edit -educate -effort -egg -eight -either -elbow -elder -electric -elegant -element -elephant -elevator -elite -else -embark -embody -embrace -emerge -emotion -employ -empower -empty -enable -enact -end -endless -endorse -enemy -energy -enforce -engage -engine -enhance -enjoy -enlist -enough -enrich -enroll -ensure -enter -entire -entry -envelope -episode -equal -equip -era -erase -erode -erosion -error -erupt -escape -essay -essence -estate -eternal -ethics -evidence -evil -evoke -evolve -exact -example -excess -exchange -excite -exclude -excuse -execute -exercise -exhaust -exhibit -exile -exist -exit -exotic -expand -expect -expire -explain -expose -express -extend -extra -eye -eyebrow -fabric -face -faculty -fade -faint -faith -fall -false -fame -family -famous -fan -fancy -fantasy -farm -fashion -fat -fatal -father -fatigue -fault -favorite -feature -february -federal -fee -feed -feel -female -fence -festival -fetch -fever -few -fiber -fiction -field -figure -file -film -filter -final -find -fine -finger -finish -fire -firm -first -fiscal -fish -fit -fitness -fix -flag -flame -flash -flat -flavor -flee -flight -flip -float -flock -floor -flower -fluid -flush -fly -foam -focus -fog -foil -fold -follow -food -foot -force -forest -forget -fork -fortune -forum -forward -fossil -foster -found -fox -fragile -frame -frequent -fresh -friend -fringe -frog -front -frost -frown -frozen -fruit -fuel -fun -funny -furnace -fury -future -gadget -gain -galaxy -gallery -game -gap -garage -garbage -garden -garlic -garment -gas -gasp -gate -gather -gauge -gaze -general -genius -genre -gentle -genuine -gesture -ghost -giant -gift -giggle -ginger -giraffe -girl -give -glad -glance -glare -glass -glide -glimpse -globe -gloom -glory -glove -glow -glue -goat -goddess -gold -good -goose -gorilla -gospel -gossip -govern -gown -grab -grace -grain -grant -grape -grass -gravity -great -green -grid -grief -grit -grocery -group -grow -grunt -guard -guess -guide -guilt -guitar -gun -gym -habit -hair -half -hammer -hamster -hand -happy -harbor -hard -harsh -harvest -hat -have -hawk -hazard -head -health -heart -heavy -hedgehog -height -hello -helmet -help -hen -hero -hidden -high -hill -hint -hip -hire -history -hobby -hockey -hold -hole -holiday -hollow -home -honey -hood -hope -horn -horror -horse -hospital -host -hotel -hour -hover -hub -huge -human -humble -humor -hundred -hungry -hunt -hurdle -hurry -hurt -husband -hybrid -ice -icon -idea -identify -idle -ignore -ill -illegal -illness -image -imitate -immense -immune -impact -impose -improve -impulse -inch -include -income -increase -index -indicate -indoor -industry -infant -inflict -inform -inhale -inherit -initial -inject -injury -inmate -inner -innocent -input -inquiry -insane -insect -inside -inspire -install -intact -interest -into -invest -invite -involve -iron -island -isolate -issue -item -ivory -jacket -jaguar -jar -jazz -jealous -jeans -jelly -jewel -job -join -joke -journey -joy -judge -juice -jump -jungle -junior -junk -just -kangaroo -keen -keep -ketchup -key -kick -kid -kidney -kind -kingdom -kiss -kit -kitchen -kite -kitten -kiwi -knee -knife -knock -know -lab -label -labor -ladder -lady -lake -lamp -language -laptop -large -later -latin -laugh -laundry -lava -law -lawn -lawsuit -layer -lazy -leader -leaf -learn -leave -lecture -left -leg -legal -legend -leisure -lemon -lend -length -lens -leopard -lesson -letter -level -liar -liberty -library -license -life -lift -light -like -limb -limit -link -lion -liquid -list -little -live -lizard -load -loan -lobster -local -lock -logic -lonely -long -loop -lottery -loud -lounge -love -loyal -lucky -luggage -lumber -lunar -lunch -luxury -lyrics -machine -mad -magic -magnet -maid -mail -main -major -make -mammal -man -manage -mandate -mango -mansion -manual -maple -marble -march -margin -marine -market -marriage -mask -mass -master -match -material -math -matrix -matter -maximum -maze -meadow -mean -measure -meat -mechanic -medal -media -melody -melt -member -memory -mention -menu -mercy -merge -merit -merry -mesh -message -metal -method -middle -midnight -milk -million -mimic -mind -minimum -minor -minute -miracle -mirror -misery -miss -mistake -mix -mixed -mixture -mobile -model -modify -mom -moment -monitor -monkey -monster -month -moon -moral -more -morning -mosquito -mother -motion -motor -mountain -mouse -move -movie -much -muffin -mule -multiply -muscle -museum -mushroom -music -must -mutual -myself -mystery -myth -naive -name -napkin -narrow -nasty -nation -nature -near -neck -need -negative -neglect -neither -nephew -nerve -nest -net -network -neutral -never -news -next -nice -night -noble -noise -nominee -noodle -normal -north -nose -notable -note -nothing -notice -novel -now -nuclear -number -nurse -nut -oak -obey -object -oblige -obscure -observe -obtain -obvious -occur -ocean -october -odor -off -offer -office -often -oil -okay -old -olive -olympic -omit -once -one -onion -online -only -open -opera -opinion -oppose -option -orange -orbit -orchard -order -ordinary -organ -orient -original -orphan -ostrich -other -outdoor -outer -output -outside -oval -oven -over -own -owner -oxygen -oyster -ozone -pact -paddle -page -pair -palace -palm -panda -panel -panic -panther -paper -parade -parent -park -parrot -party -pass -patch -path -patient -patrol -pattern -pause -pave -payment -peace -peanut -pear -peasant -pelican -pen -penalty -pencil -people -pepper -perfect -permit -person -pet -phone -photo -phrase -physical -piano -picnic -picture -piece -pig -pigeon -pill -pilot -pink -pioneer -pipe -pistol -pitch -pizza -place -planet -plastic -plate -play -please -pledge -pluck -plug -plunge -poem -poet -point -polar -pole -police -pond -pony -pool -popular -portion -position -possible -post -potato -pottery -poverty -powder -power -practice -praise -predict -prefer -prepare -present -pretty -prevent -price -pride -primary -print -priority -prison -private -prize -problem -process -produce -profit -program -project -promote -proof -property -prosper -protect -proud -provide -public -pudding -pull -pulp -pulse -pumpkin -punch -pupil -puppy -purchase -purity -purpose -purse -push -put -puzzle -pyramid -quality -quantum -quarter -question -quick -quit -quiz -quote -rabbit -raccoon -race -rack -radar -radio -rail -rain -raise -rally -ramp -ranch -random -range -rapid -rare -rate -rather -raven -raw -razor -ready -real -reason -rebel -rebuild -recall -receive -recipe -record -recycle -reduce -reflect -reform -refuse -region -regret -regular -reject -relax -release -relief -rely -remain -remember -remind -remove -render -renew -rent -reopen -repair -repeat -replace -report -require -rescue -resemble -resist -resource -response -result -retire -retreat -return -reunion -reveal -review -reward -rhythm -rib -ribbon -rice -rich -ride -ridge -rifle -right -rigid -ring -riot -ripple -risk -ritual -rival -river -road -roast -robot -robust -rocket -romance -roof -rookie -room -rose -rotate -rough -round -route -royal -rubber -rude -rug -rule -run -runway -rural -sad -saddle -sadness -safe -sail -salad -salmon -salon -salt -salute -same -sample -sand -satisfy -satoshi -sauce -sausage -save -say -scale -scan -scare -scatter -scene -scheme -school -science -scissors -scorpion -scout -scrap -screen -script -scrub -sea -search -season -seat -second -secret -section -security -seed -seek -segment -select -sell -seminar -senior -sense -sentence -series -service -session -settle -setup -seven -shadow -shaft -shallow -share -shed -shell -sheriff -shield -shift -shine -ship -shiver -shock -shoe -shoot -shop -short -shoulder -shove -shrimp -shrug -shuffle -shy -sibling -sick -side -siege -sight -sign -silent -silk -silly -silver -similar -simple -since -sing -siren -sister -situate -six -size -skate -sketch -ski -skill -skin -skirt -skull -slab -slam -sleep -slender -slice -slide -slight -slim -slogan -slot -slow -slush -small -smart -smile -smoke -smooth -snack -snake -snap -sniff -snow -soap -soccer -social -sock -soda -soft -solar -soldier -solid -solution -solve -someone -song -soon -sorry -sort -soul -sound -soup -source -south -space -spare -spatial -spawn -speak -special -speed -spell -spend -sphere -spice -spider -spike -spin -spirit -split -spoil -sponsor -spoon -sport -spot -spray -spread -spring -spy -square -squeeze -squirrel -stable -stadium -staff -stage -stairs -stamp -stand -start -state -stay -steak -steel -stem -step -stereo -stick -still -sting -stock -stomach -stone -stool -story -stove -strategy -street -strike -strong -struggle -student -stuff -stumble -style -subject -submit -subway -success -such -sudden -suffer -sugar -suggest -suit -summer -sun -sunny -sunset -super -supply -supreme -sure -surface -surge -surprise -surround -survey -suspect -sustain -swallow -swamp -swap -swarm -swear -sweet -swift -swim -swing -switch -sword -symbol -symptom -syrup -system -table -tackle -tag -tail -talent -talk -tank -tape -target -task -taste -tattoo -taxi -teach -team -tell -ten -tenant -tennis -tent -term -test -text -thank -that -theme -then -theory -there -they -thing -this -thought -three -thrive -throw -thumb -thunder -ticket -tide -tiger -tilt -timber -time -tiny -tip -tired -tissue -title -toast -tobacco -today -toddler -toe -together -toilet -token -tomato -tomorrow -tone -tongue -tonight -tool -tooth -top -topic -topple -torch -tornado -tortoise -toss -total -tourist -toward -tower -town -toy -track -trade -traffic -tragic -train -transfer -trap -trash -travel -tray -treat -tree -trend -trial -tribe -trick -trigger -trim -trip -trophy -trouble -truck -true -truly -trumpet -trust -truth -try -tube -tuition -tumble -tuna -tunnel -turkey -turn -turtle -twelve -twenty -twice -twin -twist -two -type -typical -ugly -umbrella -unable -unaware -uncle -uncover -under -undo -unfair -unfold -unhappy -uniform -unique -unit -universe -unknown -unlock -until -unusual -unveil -update -upgrade -uphold -upon -upper -upset -urban -urge -usage -use -used -useful -useless -usual -utility -vacant -vacuum -vague -valid -valley -valve -van -vanish -vapor -various -vast -vault -vehicle -velvet -vendor -venture -venue -verb -verify -version -very -vessel -veteran -viable -vibrant -vicious -victory -video -view -village -vintage -violin -virtual -virus -visa -visit -visual -vital -vivid -vocal -voice -void -volcano -volume -vote -voyage -wage -wagon -wait -walk -wall -walnut -want -warfare -warm -warrior -wash -wasp -waste -water -wave -way -wealth -weapon -wear -weasel -weather -web -wedding -weekend -weird -welcome -west -wet -whale -what -wheat -wheel -when -where -whip -whisper -wide -width -wife -wild -will -win -window -wine -wing -wink -winner -winter -wire -wisdom -wise -wish -witness -wolf -woman -wonder -wood -wool -word -work -world -worry -worth -wrap -wreck -wrestle -wrist -write -wrong -yard -year -yellow -you -young -youth -zebra -zero -zone -zoo diff --git a/contrib/bip39/french.txt b/contrib/bip39/french.txt deleted file mode 100644 index 8600949dda..0000000000 --- a/contrib/bip39/french.txt +++ /dev/null @@ -1,2048 +0,0 @@ -abaisser -abandon -abdiquer -abeille -abolir -aborder -aboutir -aboyer -abrasif -abreuver -abriter -abroger -abrupt -absence -absolu -absurde -abusif -abyssal -académie -acajou -acarien -accabler -accepter -acclamer -accolade -accroche -accuser -acerbe -achat -acheter -aciduler -acier -acompte -acquérir -acronyme -acteur -actif -actuel -adepte -adéquat -adhésif -adjectif -adjuger -admettre -admirer -adopter -adorer -adoucir -adresse -adroit -adulte -adverbe -aérer -aéronef -affaire -affecter -affiche -affreux -affubler -agacer -agencer -agile -agiter -agrafer -agréable -agrume -aider -aiguille -ailier -aimable -aisance -ajouter -ajuster -alarmer -alchimie -alerte -algèbre -algue -aliéner -aliment -alléger -alliage -allouer -allumer -alourdir -alpaga -altesse -alvéole -amateur -ambigu -ambre -aménager -amertume -amidon -amiral -amorcer -amour -amovible -amphibie -ampleur -amusant -analyse -anaphore -anarchie -anatomie -ancien -anéantir -angle -angoisse -anguleux -animal -annexer -annonce -annuel -anodin -anomalie -anonyme -anormal -antenne -antidote -anxieux -apaiser -apéritif -aplanir -apologie -appareil -appeler -apporter -appuyer -aquarium -aqueduc -arbitre -arbuste -ardeur -ardoise -argent -arlequin -armature -armement -armoire -armure -arpenter -arracher -arriver -arroser -arsenic -artériel -article -aspect -asphalte -aspirer -assaut -asservir -assiette -associer -assurer -asticot -astre -astuce -atelier -atome -atrium -atroce -attaque -attentif -attirer -attraper -aubaine -auberge -audace -audible -augurer -aurore -automne -autruche -avaler -avancer -avarice -avenir -averse -aveugle -aviateur -avide -avion -aviser -avoine -avouer -avril -axial -axiome -badge -bafouer -bagage -baguette -baignade -balancer -balcon -baleine -balisage -bambin -bancaire -bandage -banlieue -bannière -banquier -barbier -baril -baron -barque -barrage -bassin -bastion -bataille -bateau -batterie -baudrier -bavarder -belette -bélier -belote -bénéfice -berceau -berger -berline -bermuda -besace -besogne -bétail -beurre -biberon -bicycle -bidule -bijou -bilan -bilingue -billard -binaire -biologie -biopsie -biotype -biscuit -bison -bistouri -bitume -bizarre -blafard -blague -blanchir -blessant -blinder -blond -bloquer -blouson -bobard -bobine -boire -boiser -bolide -bonbon -bondir -bonheur -bonifier -bonus -bordure -borne -botte -boucle -boueux -bougie -boulon -bouquin -bourse -boussole -boutique -boxeur -branche -brasier -brave -brebis -brèche -breuvage -bricoler -brigade -brillant -brioche -brique -brochure -broder -bronzer -brousse -broyeur -brume -brusque -brutal -bruyant -buffle -buisson -bulletin -bureau -burin -bustier -butiner -butoir -buvable -buvette -cabanon -cabine -cachette -cadeau -cadre -caféine -caillou -caisson -calculer -calepin -calibre -calmer -calomnie -calvaire -camarade -caméra -camion -campagne -canal -caneton -canon -cantine -canular -capable -caporal -caprice -capsule -capter -capuche -carabine -carbone -caresser -caribou -carnage -carotte -carreau -carton -cascade -casier -casque -cassure -causer -caution -cavalier -caverne -caviar -cédille -ceinture -céleste -cellule -cendrier -censurer -central -cercle -cérébral -cerise -cerner -cerveau -cesser -chagrin -chaise -chaleur -chambre -chance -chapitre -charbon -chasseur -chaton -chausson -chavirer -chemise -chenille -chéquier -chercher -cheval -chien -chiffre -chignon -chimère -chiot -chlorure -chocolat -choisir -chose -chouette -chrome -chute -cigare -cigogne -cimenter -cinéma -cintrer -circuler -cirer -cirque -citerne -citoyen -citron -civil -clairon -clameur -claquer -classe -clavier -client -cligner -climat -clivage -cloche -clonage -cloporte -cobalt -cobra -cocasse -cocotier -coder -codifier -coffre -cogner -cohésion -coiffer -coincer -colère -colibri -colline -colmater -colonel -combat -comédie -commande -compact -concert -conduire -confier -congeler -connoter -consonne -contact -convexe -copain -copie -corail -corbeau -cordage -corniche -corpus -correct -cortège -cosmique -costume -coton -coude -coupure -courage -couteau -couvrir -coyote -crabe -crainte -cravate -crayon -créature -créditer -crémeux -creuser -crevette -cribler -crier -cristal -critère -croire -croquer -crotale -crucial -cruel -crypter -cubique -cueillir -cuillère -cuisine -cuivre -culminer -cultiver -cumuler -cupide -curatif -curseur -cyanure -cycle -cylindre -cynique -daigner -damier -danger -danseur -dauphin -débattre -débiter -déborder -débrider -débutant -décaler -décembre -déchirer -décider -déclarer -décorer -décrire -décupler -dédale -déductif -déesse -défensif -défiler -défrayer -dégager -dégivrer -déglutir -dégrafer -déjeuner -délice -déloger -demander -demeurer -démolir -dénicher -dénouer -dentelle -dénuder -départ -dépenser -déphaser -déplacer -déposer -déranger -dérober -désastre -descente -désert -désigner -désobéir -dessiner -destrier -détacher -détester -détourer -détresse -devancer -devenir -deviner -devoir -diable -dialogue -diamant -dicter -différer -digérer -digital -digne -diluer -dimanche -diminuer -dioxyde -directif -diriger -discuter -disposer -dissiper -distance -divertir -diviser -docile -docteur -dogme -doigt -domaine -domicile -dompter -donateur -donjon -donner -dopamine -dortoir -dorure -dosage -doseur -dossier -dotation -douanier -double -douceur -douter -doyen -dragon -draper -dresser -dribbler -droiture -duperie -duplexe -durable -durcir -dynastie -éblouir -écarter -écharpe -échelle -éclairer -éclipse -éclore -écluse -école -économie -écorce -écouter -écraser -écrémer -écrivain -écrou -écume -écureuil -édifier -éduquer -effacer -effectif -effigie -effort -effrayer -effusion -égaliser -égarer -éjecter -élaborer -élargir -électron -élégant -éléphant -élève -éligible -élitisme -éloge -élucider -éluder -emballer -embellir -embryon -émeraude -émission -emmener -émotion -émouvoir -empereur -employer -emporter -emprise -émulsion -encadrer -enchère -enclave -encoche -endiguer -endosser -endroit -enduire -énergie -enfance -enfermer -enfouir -engager -engin -englober -énigme -enjamber -enjeu -enlever -ennemi -ennuyeux -enrichir -enrobage -enseigne -entasser -entendre -entier -entourer -entraver -énumérer -envahir -enviable -envoyer -enzyme -éolien -épaissir -épargne -épatant -épaule -épicerie -épidémie -épier -épilogue -épine -épisode -épitaphe -époque -épreuve -éprouver -épuisant -équerre -équipe -ériger -érosion -erreur -éruption -escalier -espadon -espèce -espiègle -espoir -esprit -esquiver -essayer -essence -essieu -essorer -estime -estomac -estrade -étagère -étaler -étanche -étatique -éteindre -étendoir -éternel -éthanol -éthique -ethnie -étirer -étoffer -étoile -étonnant -étourdir -étrange -étroit -étude -euphorie -évaluer -évasion -éventail -évidence -éviter -évolutif -évoquer -exact -exagérer -exaucer -exceller -excitant -exclusif -excuse -exécuter -exemple -exercer -exhaler -exhorter -exigence -exiler -exister -exotique -expédier -explorer -exposer -exprimer -exquis -extensif -extraire -exulter -fable -fabuleux -facette -facile -facture -faiblir -falaise -fameux -famille -farceur -farfelu -farine -farouche -fasciner -fatal -fatigue -faucon -fautif -faveur -favori -fébrile -féconder -fédérer -félin -femme -fémur -fendoir -féodal -fermer -féroce -ferveur -festival -feuille -feutre -février -fiasco -ficeler -fictif -fidèle -figure -filature -filetage -filière -filleul -filmer -filou -filtrer -financer -finir -fiole -firme -fissure -fixer -flairer -flamme -flasque -flatteur -fléau -flèche -fleur -flexion -flocon -flore -fluctuer -fluide -fluvial -folie -fonderie -fongible -fontaine -forcer -forgeron -formuler -fortune -fossile -foudre -fougère -fouiller -foulure -fourmi -fragile -fraise -franchir -frapper -frayeur -frégate -freiner -frelon -frémir -frénésie -frère -friable -friction -frisson -frivole -froid -fromage -frontal -frotter -fruit -fugitif -fuite -fureur -furieux -furtif -fusion -futur -gagner -galaxie -galerie -gambader -garantir -gardien -garnir -garrigue -gazelle -gazon -géant -gélatine -gélule -gendarme -général -génie -genou -gentil -géologie -géomètre -géranium -germe -gestuel -geyser -gibier -gicler -girafe -givre -glace -glaive -glisser -globe -gloire -glorieux -golfeur -gomme -gonfler -gorge -gorille -goudron -gouffre -goulot -goupille -gourmand -goutte -graduel -graffiti -graine -grand -grappin -gratuit -gravir -grenat -griffure -griller -grimper -grogner -gronder -grotte -groupe -gruger -grutier -gruyère -guépard -guerrier -guide -guimauve -guitare -gustatif -gymnaste -gyrostat -habitude -hachoir -halte -hameau -hangar -hanneton -haricot -harmonie -harpon -hasard -hélium -hématome -herbe -hérisson -hermine -héron -hésiter -heureux -hiberner -hibou -hilarant -histoire -hiver -homard -hommage -homogène -honneur -honorer -honteux -horde -horizon -horloge -hormone -horrible -houleux -housse -hublot -huileux -humain -humble -humide -humour -hurler -hydromel -hygiène -hymne -hypnose -idylle -ignorer -iguane -illicite -illusion -image -imbiber -imiter -immense -immobile -immuable -impact -impérial -implorer -imposer -imprimer -imputer -incarner -incendie -incident -incliner -incolore -indexer -indice -inductif -inédit -ineptie -inexact -infini -infliger -informer -infusion -ingérer -inhaler -inhiber -injecter -injure -innocent -inoculer -inonder -inscrire -insecte -insigne -insolite -inspirer -instinct -insulter -intact -intense -intime -intrigue -intuitif -inutile -invasion -inventer -inviter -invoquer -ironique -irradier -irréel -irriter -isoler -ivoire -ivresse -jaguar -jaillir -jambe -janvier -jardin -jauger -jaune -javelot -jetable -jeton -jeudi -jeunesse -joindre -joncher -jongler -joueur -jouissif -journal -jovial -joyau -joyeux -jubiler -jugement -junior -jupon -juriste -justice -juteux -juvénile -kayak -kimono -kiosque -label -labial -labourer -lacérer -lactose -lagune -laine -laisser -laitier -lambeau -lamelle -lampe -lanceur -langage -lanterne -lapin -largeur -larme -laurier -lavabo -lavoir -lecture -légal -léger -légume -lessive -lettre -levier -lexique -lézard -liasse -libérer -libre -licence -licorne -liège -lièvre -ligature -ligoter -ligue -limer -limite -limonade -limpide -linéaire -lingot -lionceau -liquide -lisière -lister -lithium -litige -littoral -livreur -logique -lointain -loisir -lombric -loterie -louer -lourd -loutre -louve -loyal -lubie -lucide -lucratif -lueur -lugubre -luisant -lumière -lunaire -lundi -luron -lutter -luxueux -machine -magasin -magenta -magique -maigre -maillon -maintien -mairie -maison -majorer -malaxer -maléfice -malheur -malice -mallette -mammouth -mandater -maniable -manquant -manteau -manuel -marathon -marbre -marchand -mardi -maritime -marqueur -marron -marteler -mascotte -massif -matériel -matière -matraque -maudire -maussade -mauve -maximal -méchant -méconnu -médaille -médecin -méditer -méduse -meilleur -mélange -mélodie -membre -mémoire -menacer -mener -menhir -mensonge -mentor -mercredi -mérite -merle -messager -mesure -métal -météore -méthode -métier -meuble -miauler -microbe -miette -mignon -migrer -milieu -million -mimique -mince -minéral -minimal -minorer -minute -miracle -miroiter -missile -mixte -mobile -moderne -moelleux -mondial -moniteur -monnaie -monotone -monstre -montagne -monument -moqueur -morceau -morsure -mortier -moteur -motif -mouche -moufle -moulin -mousson -mouton -mouvant -multiple -munition -muraille -murène -murmure -muscle -muséum -musicien -mutation -muter -mutuel -myriade -myrtille -mystère -mythique -nageur -nappe -narquois -narrer -natation -nation -nature -naufrage -nautique -navire -nébuleux -nectar -néfaste -négation -négliger -négocier -neige -nerveux -nettoyer -neurone -neutron -neveu -niche -nickel -nitrate -niveau -noble -nocif -nocturne -noirceur -noisette -nomade -nombreux -nommer -normatif -notable -notifier -notoire -nourrir -nouveau -novateur -novembre -novice -nuage -nuancer -nuire -nuisible -numéro -nuptial -nuque -nutritif -obéir -objectif -obliger -obscur -observer -obstacle -obtenir -obturer -occasion -occuper -océan -octobre -octroyer -octupler -oculaire -odeur -odorant -offenser -officier -offrir -ogive -oiseau -oisillon -olfactif -olivier -ombrage -omettre -onctueux -onduler -onéreux -onirique -opale -opaque -opérer -opinion -opportun -opprimer -opter -optique -orageux -orange -orbite -ordonner -oreille -organe -orgueil -orifice -ornement -orque -ortie -osciller -osmose -ossature -otarie -ouragan -ourson -outil -outrager -ouvrage -ovation -oxyde -oxygène -ozone -paisible -palace -palmarès -palourde -palper -panache -panda -pangolin -paniquer -panneau -panorama -pantalon -papaye -papier -papoter -papyrus -paradoxe -parcelle -paresse -parfumer -parler -parole -parrain -parsemer -partager -parure -parvenir -passion -pastèque -paternel -patience -patron -pavillon -pavoiser -payer -paysage -peigne -peintre -pelage -pélican -pelle -pelouse -peluche -pendule -pénétrer -pénible -pensif -pénurie -pépite -péplum -perdrix -perforer -période -permuter -perplexe -persil -perte -peser -pétale -petit -pétrir -peuple -pharaon -phobie -phoque -photon -phrase -physique -piano -pictural -pièce -pierre -pieuvre -pilote -pinceau -pipette -piquer -pirogue -piscine -piston -pivoter -pixel -pizza -placard -plafond -plaisir -planer -plaque -plastron -plateau -pleurer -plexus -pliage -plomb -plonger -pluie -plumage -pochette -poésie -poète -pointe -poirier -poisson -poivre -polaire -policier -pollen -polygone -pommade -pompier -ponctuel -pondérer -poney -portique -position -posséder -posture -potager -poteau -potion -pouce -poulain -poumon -pourpre -poussin -pouvoir -prairie -pratique -précieux -prédire -préfixe -prélude -prénom -présence -prétexte -prévoir -primitif -prince -prison -priver -problème -procéder -prodige -profond -progrès -proie -projeter -prologue -promener -propre -prospère -protéger -prouesse -proverbe -prudence -pruneau -psychose -public -puceron -puiser -pulpe -pulsar -punaise -punitif -pupitre -purifier -puzzle -pyramide -quasar -querelle -question -quiétude -quitter -quotient -racine -raconter -radieux -ragondin -raideur -raisin -ralentir -rallonge -ramasser -rapide -rasage -ratisser -ravager -ravin -rayonner -réactif -réagir -réaliser -réanimer -recevoir -réciter -réclamer -récolter -recruter -reculer -recycler -rédiger -redouter -refaire -réflexe -réformer -refrain -refuge -régalien -région -réglage -régulier -réitérer -rejeter -rejouer -relatif -relever -relief -remarque -remède -remise -remonter -remplir -remuer -renard -renfort -renifler -renoncer -rentrer -renvoi -replier -reporter -reprise -reptile -requin -réserve -résineux -résoudre -respect -rester -résultat -rétablir -retenir -réticule -retomber -retracer -réunion -réussir -revanche -revivre -révolte -révulsif -richesse -rideau -rieur -rigide -rigoler -rincer -riposter -risible -risque -rituel -rival -rivière -rocheux -romance -rompre -ronce -rondin -roseau -rosier -rotatif -rotor -rotule -rouge -rouille -rouleau -routine -royaume -ruban -rubis -ruche -ruelle -rugueux -ruiner -ruisseau -ruser -rustique -rythme -sabler -saboter -sabre -sacoche -safari -sagesse -saisir -salade -salive -salon -saluer -samedi -sanction -sanglier -sarcasme -sardine -saturer -saugrenu -saumon -sauter -sauvage -savant -savonner -scalpel -scandale -scélérat -scénario -sceptre -schéma -science -scinder -score -scrutin -sculpter -séance -sécable -sécher -secouer -sécréter -sédatif -séduire -seigneur -séjour -sélectif -semaine -sembler -semence -séminal -sénateur -sensible -sentence -séparer -séquence -serein -sergent -sérieux -serrure -sérum -service -sésame -sévir -sevrage -sextuple -sidéral -siècle -siéger -siffler -sigle -signal -silence -silicium -simple -sincère -sinistre -siphon -sirop -sismique -situer -skier -social -socle -sodium -soigneux -soldat -soleil -solitude -soluble -sombre -sommeil -somnoler -sonde -songeur -sonnette -sonore -sorcier -sortir -sosie -sottise -soucieux -soudure -souffle -soulever -soupape -source -soutirer -souvenir -spacieux -spatial -spécial -sphère -spiral -stable -station -sternum -stimulus -stipuler -strict -studieux -stupeur -styliste -sublime -substrat -subtil -subvenir -succès -sucre -suffixe -suggérer -suiveur -sulfate -superbe -supplier -surface -suricate -surmener -surprise -sursaut -survie -suspect -syllabe -symbole -symétrie -synapse -syntaxe -système -tabac -tablier -tactile -tailler -talent -talisman -talonner -tambour -tamiser -tangible -tapis -taquiner -tarder -tarif -tartine -tasse -tatami -tatouage -taupe -taureau -taxer -témoin -temporel -tenaille -tendre -teneur -tenir -tension -terminer -terne -terrible -tétine -texte -thème -théorie -thérapie -thorax -tibia -tiède -timide -tirelire -tiroir -tissu -titane -titre -tituber -toboggan -tolérant -tomate -tonique -tonneau -toponyme -torche -tordre -tornade -torpille -torrent -torse -tortue -totem -toucher -tournage -tousser -toxine -traction -trafic -tragique -trahir -train -trancher -travail -trèfle -tremper -trésor -treuil -triage -tribunal -tricoter -trilogie -triomphe -tripler -triturer -trivial -trombone -tronc -tropical -troupeau -tuile -tulipe -tumulte -tunnel -turbine -tuteur -tutoyer -tuyau -tympan -typhon -typique -tyran -ubuesque -ultime -ultrason -unanime -unifier -union -unique -unitaire -univers -uranium -urbain -urticant -usage -usine -usuel -usure -utile -utopie -vacarme -vaccin -vagabond -vague -vaillant -vaincre -vaisseau -valable -valise -vallon -valve -vampire -vanille -vapeur -varier -vaseux -vassal -vaste -vecteur -vedette -végétal -véhicule -veinard -véloce -vendredi -vénérer -venger -venimeux -ventouse -verdure -vérin -vernir -verrou -verser -vertu -veston -vétéran -vétuste -vexant -vexer -viaduc -viande -victoire -vidange -vidéo -vignette -vigueur -vilain -village -vinaigre -violon -vipère -virement -virtuose -virus -visage -viseur -vision -visqueux -visuel -vital -vitesse -viticole -vitrine -vivace -vivipare -vocation -voguer -voile -voisin -voiture -volaille -volcan -voltiger -volume -vorace -vortex -voter -vouloir -voyage -voyelle -wagon -xénon -yacht -zèbre -zénith -zeste -zoologie \ No newline at end of file diff --git a/contrib/bip39/japanese.txt b/contrib/bip39/japanese.txt deleted file mode 100644 index fb8501a6ed..0000000000 --- a/contrib/bip39/japanese.txt +++ /dev/null @@ -1,2048 +0,0 @@ -あいこくしん -あいさつ -あいだ -あおぞら -あかちゃん -あきる -あけがた -あける -あこがれる -あさい -あさひ -あしあと -あじわう -あずかる -あずき -あそぶ -あたえる -あたためる -あたりまえ -あたる -あつい -あつかう -あっしゅく -あつまり -あつめる -あてな -あてはまる -あひる -あぶら -あぶる -あふれる -あまい -あまど -あまやかす -あまり -あみもの -あめりか -あやまる -あゆむ -あらいぐま -あらし -あらすじ -あらためる -あらゆる -あらわす -ありがとう -あわせる -あわてる -あんい -あんがい -あんこ -あんぜん -あんてい -あんない -あんまり -いいだす -いおん -いがい -いがく -いきおい -いきなり -いきもの -いきる -いくじ -いくぶん -いけばな -いけん -いこう -いこく -いこつ -いさましい -いさん -いしき -いじゅう -いじょう -いじわる -いずみ -いずれ -いせい -いせえび -いせかい -いせき -いぜん -いそうろう -いそがしい -いだい -いだく -いたずら -いたみ -いたりあ -いちおう -いちじ -いちど -いちば -いちぶ -いちりゅう -いつか -いっしゅん -いっせい -いっそう -いったん -いっち -いってい -いっぽう -いてざ -いてん -いどう -いとこ -いない -いなか -いねむり -いのち -いのる -いはつ -いばる -いはん -いびき -いひん -いふく -いへん -いほう -いみん -いもうと -いもたれ -いもり -いやがる -いやす -いよかん -いよく -いらい -いらすと -いりぐち -いりょう -いれい -いれもの -いれる -いろえんぴつ -いわい -いわう -いわかん -いわば -いわゆる -いんげんまめ -いんさつ -いんしょう -いんよう -うえき -うえる -うおざ -うがい -うかぶ -うかべる -うきわ -うくらいな -うくれれ -うけたまわる -うけつけ -うけとる -うけもつ -うける -うごかす -うごく -うこん -うさぎ -うしなう -うしろがみ -うすい -うすぎ -うすぐらい -うすめる -うせつ -うちあわせ -うちがわ -うちき -うちゅう -うっかり -うつくしい -うったえる -うつる -うどん -うなぎ -うなじ -うなずく -うなる -うねる -うのう -うぶげ -うぶごえ -うまれる -うめる -うもう -うやまう -うよく -うらがえす -うらぐち -うらない -うりあげ -うりきれ -うるさい -うれしい -うれゆき -うれる -うろこ -うわき -うわさ -うんこう -うんちん -うんてん -うんどう -えいえん -えいが -えいきょう -えいご -えいせい -えいぶん -えいよう -えいわ -えおり -えがお -えがく -えきたい -えくせる -えしゃく -えすて -えつらん -えのぐ -えほうまき -えほん -えまき -えもじ -えもの -えらい -えらぶ -えりあ -えんえん -えんかい -えんぎ -えんげき -えんしゅう -えんぜつ -えんそく -えんちょう -えんとつ -おいかける -おいこす -おいしい -おいつく -おうえん -おうさま -おうじ -おうせつ -おうたい -おうふく -おうべい -おうよう -おえる -おおい -おおう -おおどおり -おおや -おおよそ -おかえり -おかず -おがむ -おかわり -おぎなう -おきる -おくさま -おくじょう -おくりがな -おくる -おくれる -おこす -おこなう -おこる -おさえる -おさない -おさめる -おしいれ -おしえる -おじぎ -おじさん -おしゃれ -おそらく -おそわる -おたがい -おたく -おだやか -おちつく -おっと -おつり -おでかけ -おとしもの -おとなしい -おどり -おどろかす -おばさん -おまいり -おめでとう -おもいで -おもう -おもたい -おもちゃ -おやつ -おやゆび -およぼす -おらんだ -おろす -おんがく -おんけい -おんしゃ -おんせん -おんだん -おんちゅう -おんどけい -かあつ -かいが -がいき -がいけん -がいこう -かいさつ -かいしゃ -かいすいよく -かいぜん -かいぞうど -かいつう -かいてん -かいとう -かいふく -がいへき -かいほう -かいよう -がいらい -かいわ -かえる -かおり -かかえる -かがく -かがし -かがみ -かくご -かくとく -かざる -がぞう -かたい -かたち -がちょう -がっきゅう -がっこう -がっさん -がっしょう -かなざわし -かのう -がはく -かぶか -かほう -かほご -かまう -かまぼこ -かめれおん -かゆい -かようび -からい -かるい -かろう -かわく -かわら -がんか -かんけい -かんこう -かんしゃ -かんそう -かんたん -かんち -がんばる -きあい -きあつ -きいろ -ぎいん -きうい -きうん -きえる -きおう -きおく -きおち -きおん -きかい -きかく -きかんしゃ -ききて -きくばり -きくらげ -きけんせい -きこう -きこえる -きこく -きさい -きさく -きさま -きさらぎ -ぎじかがく -ぎしき -ぎじたいけん -ぎじにってい -ぎじゅつしゃ -きすう -きせい -きせき -きせつ -きそう -きぞく -きぞん -きたえる -きちょう -きつえん -ぎっちり -きつつき -きつね -きてい -きどう -きどく -きない -きなが -きなこ -きぬごし -きねん -きのう -きのした -きはく -きびしい -きひん -きふく -きぶん -きぼう -きほん -きまる -きみつ -きむずかしい -きめる -きもだめし -きもち -きもの -きゃく -きやく -ぎゅうにく -きよう -きょうりゅう -きらい -きらく -きりん -きれい -きれつ -きろく -ぎろん -きわめる -ぎんいろ -きんかくじ -きんじょ -きんようび -ぐあい -くいず -くうかん -くうき -くうぐん -くうこう -ぐうせい -くうそう -ぐうたら -くうふく -くうぼ -くかん -くきょう -くげん -ぐこう -くさい -くさき -くさばな -くさる -くしゃみ -くしょう -くすのき -くすりゆび -くせげ -くせん -ぐたいてき -くださる -くたびれる -くちこみ -くちさき -くつした -ぐっすり -くつろぐ -くとうてん -くどく -くなん -くねくね -くのう -くふう -くみあわせ -くみたてる -くめる -くやくしょ -くらす -くらべる -くるま -くれる -くろう -くわしい -ぐんかん -ぐんしょく -ぐんたい -ぐんて -けあな -けいかく -けいけん -けいこ -けいさつ -げいじゅつ -けいたい -げいのうじん -けいれき -けいろ -けおとす -けおりもの -げきか -げきげん -げきだん -げきちん -げきとつ -げきは -げきやく -げこう -げこくじょう -げざい -けさき -げざん -けしき -けしごむ -けしょう -げすと -けたば -けちゃっぷ -けちらす -けつあつ -けつい -けつえき -けっこん -けつじょ -けっせき -けってい -けつまつ -げつようび -げつれい -けつろん -げどく -けとばす -けとる -けなげ -けなす -けなみ -けぬき -げねつ -けねん -けはい -げひん -けぶかい -げぼく -けまり -けみかる -けむし -けむり -けもの -けらい -けろけろ -けわしい -けんい -けんえつ -けんお -けんか -げんき -けんげん -けんこう -けんさく -けんしゅう -けんすう -げんそう -けんちく -けんてい -けんとう -けんない -けんにん -げんぶつ -けんま -けんみん -けんめい -けんらん -けんり -こあくま -こいぬ -こいびと -ごうい -こうえん -こうおん -こうかん -ごうきゅう -ごうけい -こうこう -こうさい -こうじ -こうすい -ごうせい -こうそく -こうたい -こうちゃ -こうつう -こうてい -こうどう -こうない -こうはい -ごうほう -ごうまん -こうもく -こうりつ -こえる -こおり -ごかい -ごがつ -ごかん -こくご -こくさい -こくとう -こくない -こくはく -こぐま -こけい -こける -ここのか -こころ -こさめ -こしつ -こすう -こせい -こせき -こぜん -こそだて -こたい -こたえる -こたつ -こちょう -こっか -こつこつ -こつばん -こつぶ -こてい -こてん -ことがら -ことし -ことば -ことり -こなごな -こねこね -このまま -このみ -このよ -ごはん -こひつじ -こふう -こふん -こぼれる -ごまあぶら -こまかい -ごますり -こまつな -こまる -こむぎこ -こもじ -こもち -こもの -こもん -こやく -こやま -こゆう -こゆび -こよい -こよう -こりる -これくしょん -ころっけ -こわもて -こわれる -こんいん -こんかい -こんき -こんしゅう -こんすい -こんだて -こんとん -こんなん -こんびに -こんぽん -こんまけ -こんや -こんれい -こんわく -ざいえき -さいかい -さいきん -ざいげん -ざいこ -さいしょ -さいせい -ざいたく -ざいちゅう -さいてき -ざいりょう -さうな -さかいし -さがす -さかな -さかみち -さがる -さぎょう -さくし -さくひん -さくら -さこく -さこつ -さずかる -ざせき -さたん -さつえい -ざつおん -ざっか -ざつがく -さっきょく -ざっし -さつじん -ざっそう -さつたば -さつまいも -さてい -さといも -さとう -さとおや -さとし -さとる -さのう -さばく -さびしい -さべつ -さほう -さほど -さます -さみしい -さみだれ -さむけ -さめる -さやえんどう -さゆう -さよう -さよく -さらだ -ざるそば -さわやか -さわる -さんいん -さんか -さんきゃく -さんこう -さんさい -ざんしょ -さんすう -さんせい -さんそ -さんち -さんま -さんみ -さんらん -しあい -しあげ -しあさって -しあわせ -しいく -しいん -しうち -しえい -しおけ -しかい -しかく -じかん -しごと -しすう -じだい -したうけ -したぎ -したて -したみ -しちょう -しちりん -しっかり -しつじ -しつもん -してい -してき -してつ -じてん -じどう -しなぎれ -しなもの -しなん -しねま -しねん -しのぐ -しのぶ -しはい -しばかり -しはつ -しはらい -しはん -しひょう -しふく -じぶん -しへい -しほう -しほん -しまう -しまる -しみん -しむける -じむしょ -しめい -しめる -しもん -しゃいん -しゃうん -しゃおん -じゃがいも -しやくしょ -しゃくほう -しゃけん -しゃこ -しゃざい -しゃしん -しゃせん -しゃそう -しゃたい -しゃちょう -しゃっきん -じゃま -しゃりん -しゃれい -じゆう -じゅうしょ -しゅくはく -じゅしん -しゅっせき -しゅみ -しゅらば -じゅんばん -しょうかい -しょくたく -しょっけん -しょどう -しょもつ -しらせる -しらべる -しんか -しんこう -じんじゃ -しんせいじ -しんちく -しんりん -すあげ -すあし -すあな -ずあん -すいえい -すいか -すいとう -ずいぶん -すいようび -すうがく -すうじつ -すうせん -すおどり -すきま -すくう -すくない -すける -すごい -すこし -ずさん -すずしい -すすむ -すすめる -すっかり -ずっしり -ずっと -すてき -すてる -すねる -すのこ -すはだ -すばらしい -ずひょう -ずぶぬれ -すぶり -すふれ -すべて -すべる -ずほう -すぼん -すまい -すめし -すもう -すやき -すらすら -するめ -すれちがう -すろっと -すわる -すんぜん -すんぽう -せあぶら -せいかつ -せいげん -せいじ -せいよう -せおう -せかいかん -せきにん -せきむ -せきゆ -せきらんうん -せけん -せこう -せすじ -せたい -せたけ -せっかく -せっきゃく -ぜっく -せっけん -せっこつ -せっさたくま -せつぞく -せつだん -せつでん -せっぱん -せつび -せつぶん -せつめい -せつりつ -せなか -せのび -せはば -せびろ -せぼね -せまい -せまる -せめる -せもたれ -せりふ -ぜんあく -せんい -せんえい -せんか -せんきょ -せんく -せんげん -ぜんご -せんさい -せんしゅ -せんすい -せんせい -せんぞ -せんたく -せんちょう -せんてい -せんとう -せんぬき -せんねん -せんぱい -ぜんぶ -ぜんぽう -せんむ -せんめんじょ -せんもん -せんやく -せんゆう -せんよう -ぜんら -ぜんりゃく -せんれい -せんろ -そあく -そいとげる -そいね -そうがんきょう -そうき -そうご -そうしん -そうだん -そうなん -そうび -そうめん -そうり -そえもの -そえん -そがい -そげき -そこう -そこそこ -そざい -そしな -そせい -そせん -そそぐ -そだてる -そつう -そつえん -そっかん -そつぎょう -そっけつ -そっこう -そっせん -そっと -そとがわ -そとづら -そなえる -そなた -そふぼ -そぼく -そぼろ -そまつ -そまる -そむく -そむりえ -そめる -そもそも -そよかぜ -そらまめ -そろう -そんかい -そんけい -そんざい -そんしつ -そんぞく -そんちょう -ぞんび -ぞんぶん -そんみん -たあい -たいいん -たいうん -たいえき -たいおう -だいがく -たいき -たいぐう -たいけん -たいこ -たいざい -だいじょうぶ -だいすき -たいせつ -たいそう -だいたい -たいちょう -たいてい -だいどころ -たいない -たいねつ -たいのう -たいはん -だいひょう -たいふう -たいへん -たいほ -たいまつばな -たいみんぐ -たいむ -たいめん -たいやき -たいよう -たいら -たいりょく -たいる -たいわん -たうえ -たえる -たおす -たおる -たおれる -たかい -たかね -たきび -たくさん -たこく -たこやき -たさい -たしざん -だじゃれ -たすける -たずさわる -たそがれ -たたかう -たたく -ただしい -たたみ -たちばな -だっかい -だっきゃく -だっこ -だっしゅつ -だったい -たてる -たとえる -たなばた -たにん -たぬき -たのしみ -たはつ -たぶん -たべる -たぼう -たまご -たまる -だむる -ためいき -ためす -ためる -たもつ -たやすい -たよる -たらす -たりきほんがん -たりょう -たりる -たると -たれる -たれんと -たろっと -たわむれる -だんあつ -たんい -たんおん -たんか -たんき -たんけん -たんご -たんさん -たんじょうび -だんせい -たんそく -たんたい -だんち -たんてい -たんとう -だんな -たんにん -だんねつ -たんのう -たんぴん -だんぼう -たんまつ -たんめい -だんれつ -だんろ -だんわ -ちあい -ちあん -ちいき -ちいさい -ちえん -ちかい -ちから -ちきゅう -ちきん -ちけいず -ちけん -ちこく -ちさい -ちしき -ちしりょう -ちせい -ちそう -ちたい -ちたん -ちちおや -ちつじょ -ちてき -ちてん -ちぬき -ちぬり -ちのう -ちひょう -ちへいせん -ちほう -ちまた -ちみつ -ちみどろ -ちめいど -ちゃんこなべ -ちゅうい -ちゆりょく -ちょうし -ちょさくけん -ちらし -ちらみ -ちりがみ -ちりょう -ちるど -ちわわ -ちんたい -ちんもく -ついか -ついたち -つうか -つうじょう -つうはん -つうわ -つかう -つかれる -つくね -つくる -つけね -つける -つごう -つたえる -つづく -つつじ -つつむ -つとめる -つながる -つなみ -つねづね -つのる -つぶす -つまらない -つまる -つみき -つめたい -つもり -つもる -つよい -つるぼ -つるみく -つわもの -つわり -てあし -てあて -てあみ -ていおん -ていか -ていき -ていけい -ていこく -ていさつ -ていし -ていせい -ていたい -ていど -ていねい -ていひょう -ていへん -ていぼう -てうち -ておくれ -てきとう -てくび -でこぼこ -てさぎょう -てさげ -てすり -てそう -てちがい -てちょう -てつがく -てつづき -でっぱ -てつぼう -てつや -でぬかえ -てぬき -てぬぐい -てのひら -てはい -てぶくろ -てふだ -てほどき -てほん -てまえ -てまきずし -てみじか -てみやげ -てらす -てれび -てわけ -てわたし -でんあつ -てんいん -てんかい -てんき -てんぐ -てんけん -てんごく -てんさい -てんし -てんすう -でんち -てんてき -てんとう -てんない -てんぷら -てんぼうだい -てんめつ -てんらんかい -でんりょく -でんわ -どあい -といれ -どうかん -とうきゅう -どうぐ -とうし -とうむぎ -とおい -とおか -とおく -とおす -とおる -とかい -とかす -ときおり -ときどき -とくい -とくしゅう -とくてん -とくに -とくべつ -とけい -とける -とこや -とさか -としょかん -とそう -とたん -とちゅう -とっきゅう -とっくん -とつぜん -とつにゅう -とどける -ととのえる -とない -となえる -となり -とのさま -とばす -どぶがわ -とほう -とまる -とめる -ともだち -ともる -どようび -とらえる -とんかつ -どんぶり -ないかく -ないこう -ないしょ -ないす -ないせん -ないそう -なおす -ながい -なくす -なげる -なこうど -なさけ -なたでここ -なっとう -なつやすみ -ななおし -なにごと -なにもの -なにわ -なのか -なふだ -なまいき -なまえ -なまみ -なみだ -なめらか -なめる -なやむ -ならう -ならび -ならぶ -なれる -なわとび -なわばり -にあう -にいがた -にうけ -におい -にかい -にがて -にきび -にくしみ -にくまん -にげる -にさんかたんそ -にしき -にせもの -にちじょう -にちようび -にっか -にっき -にっけい -にっこう -にっさん -にっしょく -にっすう -にっせき -にってい -になう -にほん -にまめ -にもつ -にやり -にゅういん -にりんしゃ -にわとり -にんい -にんか -にんき -にんげん -にんしき -にんずう -にんそう -にんたい -にんち -にんてい -にんにく -にんぷ -にんまり -にんむ -にんめい -にんよう -ぬいくぎ -ぬかす -ぬぐいとる -ぬぐう -ぬくもり -ぬすむ -ぬまえび -ぬめり -ぬらす -ぬんちゃく -ねあげ -ねいき -ねいる -ねいろ -ねぐせ -ねくたい -ねくら -ねこぜ -ねこむ -ねさげ -ねすごす -ねそべる -ねだん -ねつい -ねっしん -ねつぞう -ねったいぎょ -ねぶそく -ねふだ -ねぼう -ねほりはほり -ねまき -ねまわし -ねみみ -ねむい -ねむたい -ねもと -ねらう -ねわざ -ねんいり -ねんおし -ねんかん -ねんきん -ねんぐ -ねんざ -ねんし -ねんちゃく -ねんど -ねんぴ -ねんぶつ -ねんまつ -ねんりょう -ねんれい -のいず -のおづま -のがす -のきなみ -のこぎり -のこす -のこる -のせる -のぞく -のぞむ -のたまう -のちほど -のっく -のばす -のはら -のべる -のぼる -のみもの -のやま -のらいぬ -のらねこ -のりもの -のりゆき -のれん -のんき -ばあい -はあく -ばあさん -ばいか -ばいく -はいけん -はいご -はいしん -はいすい -はいせん -はいそう -はいち -ばいばい -はいれつ -はえる -はおる -はかい -ばかり -はかる -はくしゅ -はけん -はこぶ -はさみ -はさん -はしご -ばしょ -はしる -はせる -ぱそこん -はそん -はたん -はちみつ -はつおん -はっかく -はづき -はっきり -はっくつ -はっけん -はっこう -はっさん -はっしん -はったつ -はっちゅう -はってん -はっぴょう -はっぽう -はなす -はなび -はにかむ -はぶらし -はみがき -はむかう -はめつ -はやい -はやし -はらう -はろうぃん -はわい -はんい -はんえい -はんおん -はんかく -はんきょう -ばんぐみ -はんこ -はんしゃ -はんすう -はんだん -ぱんち -ぱんつ -はんてい -はんとし -はんのう -はんぱ -はんぶん -はんぺん -はんぼうき -はんめい -はんらん -はんろん -ひいき -ひうん -ひえる -ひかく -ひかり -ひかる -ひかん -ひくい -ひけつ -ひこうき -ひこく -ひさい -ひさしぶり -ひさん -びじゅつかん -ひしょ -ひそか -ひそむ -ひたむき -ひだり -ひたる -ひつぎ -ひっこし -ひっし -ひつじゅひん -ひっす -ひつぜん -ぴったり -ぴっちり -ひつよう -ひてい -ひとごみ -ひなまつり -ひなん -ひねる -ひはん -ひびく -ひひょう -ひほう -ひまわり -ひまん -ひみつ -ひめい -ひめじし -ひやけ -ひやす -ひよう -びょうき -ひらがな -ひらく -ひりつ -ひりょう -ひるま -ひるやすみ -ひれい -ひろい -ひろう -ひろき -ひろゆき -ひんかく -ひんけつ -ひんこん -ひんしゅ -ひんそう -ぴんち -ひんぱん -びんぼう -ふあん -ふいうち -ふうけい -ふうせん -ぷうたろう -ふうとう -ふうふ -ふえる -ふおん -ふかい -ふきん -ふくざつ -ふくぶくろ -ふこう -ふさい -ふしぎ -ふじみ -ふすま -ふせい -ふせぐ -ふそく -ぶたにく -ふたん -ふちょう -ふつう -ふつか -ふっかつ -ふっき -ふっこく -ぶどう -ふとる -ふとん -ふのう -ふはい -ふひょう -ふへん -ふまん -ふみん -ふめつ -ふめん -ふよう -ふりこ -ふりる -ふるい -ふんいき -ぶんがく -ぶんぐ -ふんしつ -ぶんせき -ふんそう -ぶんぽう -へいあん -へいおん -へいがい -へいき -へいげん -へいこう -へいさ -へいしゃ -へいせつ -へいそ -へいたく -へいてん -へいねつ -へいわ -へきが -へこむ -べにいろ -べにしょうが -へらす -へんかん -べんきょう -べんごし -へんさい -へんたい -べんり -ほあん -ほいく -ぼうぎょ -ほうこく -ほうそう -ほうほう -ほうもん -ほうりつ -ほえる -ほおん -ほかん -ほきょう -ぼきん -ほくろ -ほけつ -ほけん -ほこう -ほこる -ほしい -ほしつ -ほしゅ -ほしょう -ほせい -ほそい -ほそく -ほたて -ほたる -ぽちぶくろ -ほっきょく -ほっさ -ほったん -ほとんど -ほめる -ほんい -ほんき -ほんけ -ほんしつ -ほんやく -まいにち -まかい -まかせる -まがる -まける -まこと -まさつ -まじめ -ますく -まぜる -まつり -まとめ -まなぶ -まぬけ -まねく -まほう -まもる -まゆげ -まよう -まろやか -まわす -まわり -まわる -まんが -まんきつ -まんぞく -まんなか -みいら -みうち -みえる -みがく -みかた -みかん -みけん -みこん -みじかい -みすい -みすえる -みせる -みっか -みつかる -みつける -みてい -みとめる -みなと -みなみかさい -みねらる -みのう -みのがす -みほん -みもと -みやげ -みらい -みりょく -みわく -みんか -みんぞく -むいか -むえき -むえん -むかい -むかう -むかえ -むかし -むぎちゃ -むける -むげん -むさぼる -むしあつい -むしば -むじゅん -むしろ -むすう -むすこ -むすぶ -むすめ -むせる -むせん -むちゅう -むなしい -むのう -むやみ -むよう -むらさき -むりょう -むろん -めいあん -めいうん -めいえん -めいかく -めいきょく -めいさい -めいし -めいそう -めいぶつ -めいれい -めいわく -めぐまれる -めざす -めした -めずらしい -めだつ -めまい -めやす -めんきょ -めんせき -めんどう -もうしあげる -もうどうけん -もえる -もくし -もくてき -もくようび -もちろん -もどる -もらう -もんく -もんだい -やおや -やける -やさい -やさしい -やすい -やすたろう -やすみ -やせる -やそう -やたい -やちん -やっと -やっぱり -やぶる -やめる -ややこしい -やよい -やわらかい -ゆうき -ゆうびんきょく -ゆうべ -ゆうめい -ゆけつ -ゆしゅつ -ゆせん -ゆそう -ゆたか -ゆちゃく -ゆでる -ゆにゅう -ゆびわ -ゆらい -ゆれる -ようい -ようか -ようきゅう -ようじ -ようす -ようちえん -よかぜ -よかん -よきん -よくせい -よくぼう -よけい -よごれる -よさん -よしゅう -よそう -よそく -よっか -よてい -よどがわく -よねつ -よやく -よゆう -よろこぶ -よろしい -らいう -らくがき -らくご -らくさつ -らくだ -らしんばん -らせん -らぞく -らたい -らっか -られつ -りえき -りかい -りきさく -りきせつ -りくぐん -りくつ -りけん -りこう -りせい -りそう -りそく -りてん -りねん -りゆう -りゅうがく -りよう -りょうり -りょかん -りょくちゃ -りょこう -りりく -りれき -りろん -りんご -るいけい -るいさい -るいじ -るいせき -るすばん -るりがわら -れいかん -れいぎ -れいせい -れいぞうこ -れいとう -れいぼう -れきし -れきだい -れんあい -れんけい -れんこん -れんさい -れんしゅう -れんぞく -れんらく -ろうか -ろうご -ろうじん -ろうそく -ろくが -ろこつ -ろじうら -ろしゅつ -ろせん -ろてん -ろめん -ろれつ -ろんぎ -ろんぱ -ろんぶん -ろんり -わかす -わかめ -わかやま -わかれる -わしつ -わじまし -わすれもの -わらう -われる diff --git a/contrib/bip39/spanish.txt b/contrib/bip39/spanish.txt deleted file mode 100644 index fdbc23c73a..0000000000 --- a/contrib/bip39/spanish.txt +++ /dev/null @@ -1,2048 +0,0 @@ -ábaco -abdomen -abeja -abierto -abogado -abono -aborto -abrazo -abrir -abuelo -abuso -acabar -academia -acceso -acción -aceite -acelga -acento -aceptar -ácido -aclarar -acné -acoger -acoso -activo -acto -actriz -actuar -acudir -acuerdo -acusar -adicto -admitir -adoptar -adorno -aduana -adulto -aéreo -afectar -afición -afinar -afirmar -ágil -agitar -agonía -agosto -agotar -agregar -agrio -agua -agudo -águila -aguja -ahogo -ahorro -aire -aislar -ajedrez -ajeno -ajuste -alacrán -alambre -alarma -alba -álbum -alcalde -aldea -alegre -alejar -alerta -aleta -alfiler -alga -algodón -aliado -aliento -alivio -alma -almeja -almíbar -altar -alteza -altivo -alto -altura -alumno -alzar -amable -amante -amapola -amargo -amasar -ámbar -ámbito -ameno -amigo -amistad -amor -amparo -amplio -ancho -anciano -ancla -andar -andén -anemia -ángulo -anillo -ánimo -anís -anotar -antena -antiguo -antojo -anual -anular -anuncio -añadir -añejo -año -apagar -aparato -apetito -apio -aplicar -apodo -aporte -apoyo -aprender -aprobar -apuesta -apuro -arado -araña -arar -árbitro -árbol -arbusto -archivo -arco -arder -ardilla -arduo -área -árido -aries -armonía -arnés -aroma -arpa -arpón -arreglo -arroz -arruga -arte -artista -asa -asado -asalto -ascenso -asegurar -aseo -asesor -asiento -asilo -asistir -asno -asombro -áspero -astilla -astro -astuto -asumir -asunto -atajo -ataque -atar -atento -ateo -ático -atleta -átomo -atraer -atroz -atún -audaz -audio -auge -aula -aumento -ausente -autor -aval -avance -avaro -ave -avellana -avena -avestruz -avión -aviso -ayer -ayuda -ayuno -azafrán -azar -azote -azúcar -azufre -azul -baba -babor -bache -bahía -baile -bajar -balanza -balcón -balde -bambú -banco -banda -baño -barba -barco -barniz -barro -báscula -bastón -basura -batalla -batería -batir -batuta -baúl -bazar -bebé -bebida -bello -besar -beso -bestia -bicho -bien -bingo -blanco -bloque -blusa -boa -bobina -bobo -boca -bocina -boda -bodega -boina -bola -bolero -bolsa -bomba -bondad -bonito -bono -bonsái -borde -borrar -bosque -bote -botín -bóveda -bozal -bravo -brazo -brecha -breve -brillo -brinco -brisa -broca -broma -bronce -brote -bruja -brusco -bruto -buceo -bucle -bueno -buey -bufanda -bufón -búho -buitre -bulto -burbuja -burla -burro -buscar -butaca -buzón -caballo -cabeza -cabina -cabra -cacao -cadáver -cadena -caer -café -caída -caimán -caja -cajón -cal -calamar -calcio -caldo -calidad -calle -calma -calor -calvo -cama -cambio -camello -camino -campo -cáncer -candil -canela -canguro -canica -canto -caña -cañón -caoba -caos -capaz -capitán -capote -captar -capucha -cara -carbón -cárcel -careta -carga -cariño -carne -carpeta -carro -carta -casa -casco -casero -caspa -castor -catorce -catre -caudal -causa -cazo -cebolla -ceder -cedro -celda -célebre -celoso -célula -cemento -ceniza -centro -cerca -cerdo -cereza -cero -cerrar -certeza -césped -cetro -chacal -chaleco -champú -chancla -chapa -charla -chico -chiste -chivo -choque -choza -chuleta -chupar -ciclón -ciego -cielo -cien -cierto -cifra -cigarro -cima -cinco -cine -cinta -ciprés -circo -ciruela -cisne -cita -ciudad -clamor -clan -claro -clase -clave -cliente -clima -clínica -cobre -cocción -cochino -cocina -coco -código -codo -cofre -coger -cohete -cojín -cojo -cola -colcha -colegio -colgar -colina -collar -colmo -columna -combate -comer -comida -cómodo -compra -conde -conejo -conga -conocer -consejo -contar -copa -copia -corazón -corbata -corcho -cordón -corona -correr -coser -cosmos -costa -cráneo -cráter -crear -crecer -creído -crema -cría -crimen -cripta -crisis -cromo -crónica -croqueta -crudo -cruz -cuadro -cuarto -cuatro -cubo -cubrir -cuchara -cuello -cuento -cuerda -cuesta -cueva -cuidar -culebra -culpa -culto -cumbre -cumplir -cuna -cuneta -cuota -cupón -cúpula -curar -curioso -curso -curva -cutis -dama -danza -dar -dardo -dátil -deber -débil -década -decir -dedo -defensa -definir -dejar -delfín -delgado -delito -demora -denso -dental -deporte -derecho -derrota -desayuno -deseo -desfile -desnudo -destino -desvío -detalle -detener -deuda -día -diablo -diadema -diamante -diana -diario -dibujo -dictar -diente -dieta -diez -difícil -digno -dilema -diluir -dinero -directo -dirigir -disco -diseño -disfraz -diva -divino -doble -doce -dolor -domingo -don -donar -dorado -dormir -dorso -dos -dosis -dragón -droga -ducha -duda -duelo -dueño -dulce -dúo -duque -durar -dureza -duro -ébano -ebrio -echar -eco -ecuador -edad -edición -edificio -editor -educar -efecto -eficaz -eje -ejemplo -elefante -elegir -elemento -elevar -elipse -élite -elixir -elogio -eludir -embudo -emitir -emoción -empate -empeño -empleo -empresa -enano -encargo -enchufe -encía -enemigo -enero -enfado -enfermo -engaño -enigma -enlace -enorme -enredo -ensayo -enseñar -entero -entrar -envase -envío -época -equipo -erizo -escala -escena -escolar -escribir -escudo -esencia -esfera -esfuerzo -espada -espejo -espía -esposa -espuma -esquí -estar -este -estilo -estufa -etapa -eterno -ética -etnia -evadir -evaluar -evento -evitar -exacto -examen -exceso -excusa -exento -exigir -exilio -existir -éxito -experto -explicar -exponer -extremo -fábrica -fábula -fachada -fácil -factor -faena -faja -falda -fallo -falso -faltar -fama -familia -famoso -faraón -farmacia -farol -farsa -fase -fatiga -fauna -favor -fax -febrero -fecha -feliz -feo -feria -feroz -fértil -fervor -festín -fiable -fianza -fiar -fibra -ficción -ficha -fideo -fiebre -fiel -fiera -fiesta -figura -fijar -fijo -fila -filete -filial -filtro -fin -finca -fingir -finito -firma -flaco -flauta -flecha -flor -flota -fluir -flujo -flúor -fobia -foca -fogata -fogón -folio -folleto -fondo -forma -forro -fortuna -forzar -fosa -foto -fracaso -frágil -franja -frase -fraude -freír -freno -fresa -frío -frito -fruta -fuego -fuente -fuerza -fuga -fumar -función -funda -furgón -furia -fusil -fútbol -futuro -gacela -gafas -gaita -gajo -gala -galería -gallo -gamba -ganar -gancho -ganga -ganso -garaje -garza -gasolina -gastar -gato -gavilán -gemelo -gemir -gen -género -genio -gente -geranio -gerente -germen -gesto -gigante -gimnasio -girar -giro -glaciar -globo -gloria -gol -golfo -goloso -golpe -goma -gordo -gorila -gorra -gota -goteo -gozar -grada -gráfico -grano -grasa -gratis -grave -grieta -grillo -gripe -gris -grito -grosor -grúa -grueso -grumo -grupo -guante -guapo -guardia -guerra -guía -guiño -guion -guiso -guitarra -gusano -gustar -haber -hábil -hablar -hacer -hacha -hada -hallar -hamaca -harina -haz -hazaña -hebilla -hebra -hecho -helado -helio -hembra -herir -hermano -héroe -hervir -hielo -hierro -hígado -higiene -hijo -himno -historia -hocico -hogar -hoguera -hoja -hombre -hongo -honor -honra -hora -hormiga -horno -hostil -hoyo -hueco -huelga -huerta -hueso -huevo -huida -huir -humano -húmedo -humilde -humo -hundir -huracán -hurto -icono -ideal -idioma -ídolo -iglesia -iglú -igual -ilegal -ilusión -imagen -imán -imitar -impar -imperio -imponer -impulso -incapaz -índice -inerte -infiel -informe -ingenio -inicio -inmenso -inmune -innato -insecto -instante -interés -íntimo -intuir -inútil -invierno -ira -iris -ironía -isla -islote -jabalí -jabón -jamón -jarabe -jardín -jarra -jaula -jazmín -jefe -jeringa -jinete -jornada -joroba -joven -joya -juerga -jueves -juez -jugador -jugo -juguete -juicio -junco -jungla -junio -juntar -júpiter -jurar -justo -juvenil -juzgar -kilo -koala -labio -lacio -lacra -lado -ladrón -lagarto -lágrima -laguna -laico -lamer -lámina -lámpara -lana -lancha -langosta -lanza -lápiz -largo -larva -lástima -lata -látex -latir -laurel -lavar -lazo -leal -lección -leche -lector -leer -legión -legumbre -lejano -lengua -lento -leña -león -leopardo -lesión -letal -letra -leve -leyenda -libertad -libro -licor -líder -lidiar -lienzo -liga -ligero -lima -límite -limón -limpio -lince -lindo -línea -lingote -lino -linterna -líquido -liso -lista -litera -litio -litro -llaga -llama -llanto -llave -llegar -llenar -llevar -llorar -llover -lluvia -lobo -loción -loco -locura -lógica -logro -lombriz -lomo -lonja -lote -lucha -lucir -lugar -lujo -luna -lunes -lupa -lustro -luto -luz -maceta -macho -madera -madre -maduro -maestro -mafia -magia -mago -maíz -maldad -maleta -malla -malo -mamá -mambo -mamut -manco -mando -manejar -manga -maniquí -manjar -mano -manso -manta -mañana -mapa -máquina -mar -marco -marea -marfil -margen -marido -mármol -marrón -martes -marzo -masa -máscara -masivo -matar -materia -matiz -matriz -máximo -mayor -mazorca -mecha -medalla -medio -médula -mejilla -mejor -melena -melón -memoria -menor -mensaje -mente -menú -mercado -merengue -mérito -mes -mesón -meta -meter -método -metro -mezcla -miedo -miel -miembro -miga -mil -milagro -militar -millón -mimo -mina -minero -mínimo -minuto -miope -mirar -misa -miseria -misil -mismo -mitad -mito -mochila -moción -moda -modelo -moho -mojar -molde -moler -molino -momento -momia -monarca -moneda -monja -monto -moño -morada -morder -moreno -morir -morro -morsa -mortal -mosca -mostrar -motivo -mover -móvil -mozo -mucho -mudar -mueble -muela -muerte -muestra -mugre -mujer -mula -muleta -multa -mundo -muñeca -mural -muro -músculo -museo -musgo -música -muslo -nácar -nación -nadar -naipe -naranja -nariz -narrar -nasal -natal -nativo -natural -náusea -naval -nave -navidad -necio -néctar -negar -negocio -negro -neón -nervio -neto -neutro -nevar -nevera -nicho -nido -niebla -nieto -niñez -niño -nítido -nivel -nobleza -noche -nómina -noria -norma -norte -nota -noticia -novato -novela -novio -nube -nuca -núcleo -nudillo -nudo -nuera -nueve -nuez -nulo -número -nutria -oasis -obeso -obispo -objeto -obra -obrero -observar -obtener -obvio -oca -ocaso -océano -ochenta -ocho -ocio -ocre -octavo -octubre -oculto -ocupar -ocurrir -odiar -odio -odisea -oeste -ofensa -oferta -oficio -ofrecer -ogro -oído -oír -ojo -ola -oleada -olfato -olivo -olla -olmo -olor -olvido -ombligo -onda -onza -opaco -opción -ópera -opinar -oponer -optar -óptica -opuesto -oración -orador -oral -órbita -orca -orden -oreja -órgano -orgía -orgullo -oriente -origen -orilla -oro -orquesta -oruga -osadía -oscuro -osezno -oso -ostra -otoño -otro -oveja -óvulo -óxido -oxígeno -oyente -ozono -pacto -padre -paella -página -pago -país -pájaro -palabra -palco -paleta -pálido -palma -paloma -palpar -pan -panal -pánico -pantera -pañuelo -papá -papel -papilla -paquete -parar -parcela -pared -parir -paro -párpado -parque -párrafo -parte -pasar -paseo -pasión -paso -pasta -pata -patio -patria -pausa -pauta -pavo -payaso -peatón -pecado -pecera -pecho -pedal -pedir -pegar -peine -pelar -peldaño -pelea -peligro -pellejo -pelo -peluca -pena -pensar -peñón -peón -peor -pepino -pequeño -pera -percha -perder -pereza -perfil -perico -perla -permiso -perro -persona -pesa -pesca -pésimo -pestaña -pétalo -petróleo -pez -pezuña -picar -pichón -pie -piedra -pierna -pieza -pijama -pilar -piloto -pimienta -pino -pintor -pinza -piña -piojo -pipa -pirata -pisar -piscina -piso -pista -pitón -pizca -placa -plan -plata -playa -plaza -pleito -pleno -plomo -pluma -plural -pobre -poco -poder -podio -poema -poesía -poeta -polen -policía -pollo -polvo -pomada -pomelo -pomo -pompa -poner -porción -portal -posada -poseer -posible -poste -potencia -potro -pozo -prado -precoz -pregunta -premio -prensa -preso -previo -primo -príncipe -prisión -privar -proa -probar -proceso -producto -proeza -profesor -programa -prole -promesa -pronto -propio -próximo -prueba -público -puchero -pudor -pueblo -puerta -puesto -pulga -pulir -pulmón -pulpo -pulso -puma -punto -puñal -puño -pupa -pupila -puré -quedar -queja -quemar -querer -queso -quieto -química -quince -quitar -rábano -rabia -rabo -ración -radical -raíz -rama -rampa -rancho -rango -rapaz -rápido -rapto -rasgo -raspa -rato -rayo -raza -razón -reacción -realidad -rebaño -rebote -recaer -receta -rechazo -recoger -recreo -recto -recurso -red -redondo -reducir -reflejo -reforma -refrán -refugio -regalo -regir -regla -regreso -rehén -reino -reír -reja -relato -relevo -relieve -relleno -reloj -remar -remedio -remo -rencor -rendir -renta -reparto -repetir -reposo -reptil -res -rescate -resina -respeto -resto -resumen -retiro -retorno -retrato -reunir -revés -revista -rey -rezar -rico -riego -rienda -riesgo -rifa -rígido -rigor -rincón -riñón -río -riqueza -risa -ritmo -rito -rizo -roble -roce -rociar -rodar -rodeo -rodilla -roer -rojizo -rojo -romero -romper -ron -ronco -ronda -ropa -ropero -rosa -rosca -rostro -rotar -rubí -rubor -rudo -rueda -rugir -ruido -ruina -ruleta -rulo -rumbo -rumor -ruptura -ruta -rutina -sábado -saber -sabio -sable -sacar -sagaz -sagrado -sala -saldo -salero -salir -salmón -salón -salsa -salto -salud -salvar -samba -sanción -sandía -sanear -sangre -sanidad -sano -santo -sapo -saque -sardina -sartén -sastre -satán -sauna -saxofón -sección -seco -secreto -secta -sed -seguir -seis -sello -selva -semana -semilla -senda -sensor -señal -señor -separar -sepia -sequía -ser -serie -sermón -servir -sesenta -sesión -seta -setenta -severo -sexo -sexto -sidra -siesta -siete -siglo -signo -sílaba -silbar -silencio -silla -símbolo -simio -sirena -sistema -sitio -situar -sobre -socio -sodio -sol -solapa -soldado -soledad -sólido -soltar -solución -sombra -sondeo -sonido -sonoro -sonrisa -sopa -soplar -soporte -sordo -sorpresa -sorteo -sostén -sótano -suave -subir -suceso -sudor -suegra -suelo -sueño -suerte -sufrir -sujeto -sultán -sumar -superar -suplir -suponer -supremo -sur -surco -sureño -surgir -susto -sutil -tabaco -tabique -tabla -tabú -taco -tacto -tajo -talar -talco -talento -talla -talón -tamaño -tambor -tango -tanque -tapa -tapete -tapia -tapón -taquilla -tarde -tarea -tarifa -tarjeta -tarot -tarro -tarta -tatuaje -tauro -taza -tazón -teatro -techo -tecla -técnica -tejado -tejer -tejido -tela -teléfono -tema -temor -templo -tenaz -tender -tener -tenis -tenso -teoría -terapia -terco -término -ternura -terror -tesis -tesoro -testigo -tetera -texto -tez -tibio -tiburón -tiempo -tienda -tierra -tieso -tigre -tijera -tilde -timbre -tímido -timo -tinta -tío -típico -tipo -tira -tirón -titán -títere -título -tiza -toalla -tobillo -tocar -tocino -todo -toga -toldo -tomar -tono -tonto -topar -tope -toque -tórax -torero -tormenta -torneo -toro -torpedo -torre -torso -tortuga -tos -tosco -toser -tóxico -trabajo -tractor -traer -tráfico -trago -traje -tramo -trance -trato -trauma -trazar -trébol -tregua -treinta -tren -trepar -tres -tribu -trigo -tripa -triste -triunfo -trofeo -trompa -tronco -tropa -trote -trozo -truco -trueno -trufa -tubería -tubo -tuerto -tumba -tumor -túnel -túnica -turbina -turismo -turno -tutor -ubicar -úlcera -umbral -unidad -unir -universo -uno -untar -uña -urbano -urbe -urgente -urna -usar -usuario -útil -utopía -uva -vaca -vacío -vacuna -vagar -vago -vaina -vajilla -vale -válido -valle -valor -válvula -vampiro -vara -variar -varón -vaso -vecino -vector -vehículo -veinte -vejez -vela -velero -veloz -vena -vencer -venda -veneno -vengar -venir -venta -venus -ver -verano -verbo -verde -vereda -verja -verso -verter -vía -viaje -vibrar -vicio -víctima -vida -vídeo -vidrio -viejo -viernes -vigor -vil -villa -vinagre -vino -viñedo -violín -viral -virgo -virtud -visor -víspera -vista -vitamina -viudo -vivaz -vivero -vivir -vivo -volcán -volumen -volver -voraz -votar -voto -voz -vuelo -vulgar -yacer -yate -yegua -yema -yerno -yeso -yodo -yoga -yogur -zafiro -zanja -zapato -zarza -zona -zorro -zumo -zurdo diff --git a/contrib/bitrpc/bitrpc.py b/contrib/bitrpc/bitrpc.py deleted file mode 100644 index b02b299177..0000000000 --- a/contrib/bitrpc/bitrpc.py +++ /dev/null @@ -1,324 +0,0 @@ -from jsonrpc import ServiceProxy -import sys -import string - -# ===== BEGIN USER SETTINGS ===== -# if you do not set these you will be prompted for a password for every command -rpcuser = "" -rpcpass = "" -# ====== END USER SETTINGS ====== - - -if rpcpass == "": - access = ServiceProxy("http://127.0.0.1:8332") -else: - access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:8332") -cmd = sys.argv[1].lower() - -if cmd == "backupwallet": - try: - path = raw_input("Enter destination path/filename: ") - print access.backupwallet(path) - except: - print "\n---An error occurred---\n" - -elif cmd == "getaccount": - try: - addr = raw_input("Enter a Bitcoin address: ") - print access.getaccount(addr) - except: - print "\n---An error occurred---\n" - -elif cmd == "getaccountaddress": - try: - acct = raw_input("Enter an account name: ") - print access.getaccountaddress(acct) - except: - print "\n---An error occurred---\n" - -elif cmd == "getaddressesbyaccount": - try: - acct = raw_input("Enter an account name: ") - print access.getaddressesbyaccount(acct) - except: - print "\n---An error occurred---\n" - -elif cmd == "getbalance": - try: - acct = raw_input("Enter an account (optional): ") - mc = raw_input("Minimum confirmations (optional): ") - try: - print access.getbalance(acct, mc) - except: - print access.getbalance() - except: - print "\n---An error occurred---\n" - -elif cmd == "getblockbycount": - try: - height = raw_input("Height: ") - print access.getblockbycount(height) - except: - print "\n---An error occurred---\n" - -elif cmd == "getblockcount": - try: - print access.getblockcount() - except: - print "\n---An error occurred---\n" - -elif cmd == "getblocknumber": - try: - print access.getblocknumber() - except: - print "\n---An error occurred---\n" - -elif cmd == "getconnectioncount": - try: - print access.getconnectioncount() - except: - print "\n---An error occurred---\n" - -elif cmd == "getdifficulty": - try: - print access.getdifficulty() - except: - print "\n---An error occurred---\n" - -elif cmd == "getgenerate": - try: - print access.getgenerate() - except: - print "\n---An error occurred---\n" - -elif cmd == "gethashespersec": - try: - print access.gethashespersec() - except: - print "\n---An error occurred---\n" - -elif cmd == "getinfo": - try: - print access.getinfo() - except: - print "\n---An error occurred---\n" - -elif cmd == "getnewaddress": - try: - acct = raw_input("Enter an account name: ") - try: - print access.getnewaddress(acct) - except: - print access.getnewaddress() - except: - print "\n---An error occurred---\n" - -elif cmd == "getreceivedbyaccount": - try: - acct = raw_input("Enter an account (optional): ") - mc = raw_input("Minimum confirmations (optional): ") - try: - print access.getreceivedbyaccount(acct, mc) - except: - print access.getreceivedbyaccount() - except: - print "\n---An error occurred---\n" - -elif cmd == "getreceivedbyaddress": - try: - addr = raw_input("Enter a Bitcoin address (optional): ") - mc = raw_input("Minimum confirmations (optional): ") - try: - print access.getreceivedbyaddress(addr, mc) - except: - print access.getreceivedbyaddress() - except: - print "\n---An error occurred---\n" - -elif cmd == "gettransaction": - try: - txid = raw_input("Enter a transaction ID: ") - print access.gettransaction(txid) - except: - print "\n---An error occurred---\n" - -elif cmd == "getwork": - try: - data = raw_input("Data (optional): ") - try: - print access.gettransaction(data) - except: - print access.gettransaction() - except: - print "\n---An error occurred---\n" - -elif cmd == "help": - try: - cmd = raw_input("Command (optional): ") - try: - print access.help(cmd) - except: - print access.help() - except: - print "\n---An error occurred---\n" - -elif cmd == "listaccounts": - try: - mc = raw_input("Minimum confirmations (optional): ") - try: - print access.listaccounts(mc) - except: - print access.listaccounts() - except: - print "\n---An error occurred---\n" - -elif cmd == "listreceivedbyaccount": - try: - mc = raw_input("Minimum confirmations (optional): ") - incemp = raw_input("Include empty? (true/false, optional): ") - try: - print access.listreceivedbyaccount(mc, incemp) - except: - print access.listreceivedbyaccount() - except: - print "\n---An error occurred---\n" - -elif cmd == "listreceivedbyaddress": - try: - mc = raw_input("Minimum confirmations (optional): ") - incemp = raw_input("Include empty? (true/false, optional): ") - try: - print access.listreceivedbyaddress(mc, incemp) - except: - print access.listreceivedbyaddress() - except: - print "\n---An error occurred---\n" - -elif cmd == "listtransactions": - try: - acct = raw_input("Account (optional): ") - count = raw_input("Number of transactions (optional): ") - frm = raw_input("Skip (optional):") - try: - print access.listtransactions(acct, count, frm) - except: - print access.listtransactions() - except: - print "\n---An error occurred---\n" - -elif cmd == "move": - try: - frm = raw_input("From: ") - to = raw_input("To: ") - amt = raw_input("Amount:") - mc = raw_input("Minimum confirmations (optional): ") - comment = raw_input("Comment (optional): ") - try: - print access.move(frm, to, amt, mc, comment) - except: - print access.move(frm, to, amt) - except: - print "\n---An error occurred---\n" - -elif cmd == "sendfrom": - try: - frm = raw_input("From: ") - to = raw_input("To: ") - amt = raw_input("Amount:") - mc = raw_input("Minimum confirmations (optional): ") - comment = raw_input("Comment (optional): ") - commentto = raw_input("Comment-to (optional): ") - try: - print access.sendfrom(frm, to, amt, mc, comment, commentto) - except: - print access.sendfrom(frm, to, amt) - except: - print "\n---An error occurred---\n" - -elif cmd == "sendmany": - try: - frm = raw_input("From: ") - to = raw_input("To (in format address1:amount1,address2:amount2,...): ") - mc = raw_input("Minimum confirmations (optional): ") - comment = raw_input("Comment (optional): ") - try: - print access.sendmany(frm,to,mc,comment) - except: - print access.sendmany(frm,to) - except: - print "\n---An error occurred---\n" - -elif cmd == "sendtoaddress": - try: - to = raw_input("To (in format address1:amount1,address2:amount2,...): ") - amt = raw_input("Amount:") - comment = raw_input("Comment (optional): ") - commentto = raw_input("Comment-to (optional): ") - try: - print access.sendtoaddress(to,amt,comment,commentto) - except: - print access.sendtoaddress(to,amt) - except: - print "\n---An error occurred---\n" - -elif cmd == "setaccount": - try: - addr = raw_input("Address: ") - acct = raw_input("Account:") - print access.setaccount(addr,acct) - except: - print "\n---An error occurred---\n" - -elif cmd == "setgenerate": - try: - gen= raw_input("Generate? (true/false): ") - cpus = raw_input("Max processors/cores (-1 for unlimited, optional):") - try: - print access.setgenerate(gen, cpus) - except: - print access.setgenerate(gen) - except: - print "\n---An error occurred---\n" - -elif cmd == "settxfee": - try: - amt = raw_input("Amount:") - print access.settxfee(amt) - except: - print "\n---An error occurred---\n" - -elif cmd == "stop": - try: - print access.stop() - except: - print "\n---An error occurred---\n" - -elif cmd == "validateaddress": - try: - addr = raw_input("Address: ") - print access.validateaddress(addr) - except: - print "\n---An error occurred---\n" - -elif cmd == "walletpassphrase": - try: - pwd = raw_input("Enter wallet passphrase: ") - access.walletpassphrase(pwd, 60) - print "\n---Wallet unlocked---\n" - except: - print "\n---An error occurred---\n" - -elif cmd == "walletpassphrasechange": - try: - pwd = raw_input("Enter old wallet passphrase: ") - pwd2 = raw_input("Enter new wallet passphrase: ") - access.walletpassphrasechange(pwd, pwd2) - print - print "\n---Passphrase changed---\n" - except: - print - print "\n---An error occurred---\n" - print - -else: - print "Command not found or not supported" \ No newline at end of file diff --git a/contrib/debian/bin/novacoin-qt b/contrib/debian/bin/novacoin-qt deleted file mode 100755 index b3bc973501..0000000000 --- a/contrib/debian/bin/novacoin-qt +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -set -e - -umask 077 - -basedir=~/.novacoin -dbfile="$basedir/DB_CONFIG" -cfgfile="$basedir/novacoin.conf" - -[ -e "$basedir" ] || mkdir "$basedir" - -# Novacoin does not clean up DB log files by default -[ -e "$dbfile" ] || echo 'set_flags DB_LOG_AUTOREMOVE' > "$dbfile" - -exec /usr/lib/novacoin/novacoin-qt "$@" diff --git a/contrib/debian/bin/novacoind b/contrib/debian/bin/novacoind deleted file mode 100755 index a4f3fb808b..0000000000 --- a/contrib/debian/bin/novacoind +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -set -e - -umask 077 - -basedir=~/.novacoin -cfgfile="$basedir/novacoin.conf" - -[ -e "$basedir" ] || mkdir "$basedir" - -[ -e "$cfgfile" ] || perl -le 'print"rpcpassword=",map{(a..z,A..Z,0..9)[rand 62]}0..9' > "$cfgfile" - -exec /usr/lib/novacoin/novacoind "$@" diff --git a/contrib/debian/changelog b/contrib/debian/changelog deleted file mode 100644 index 64ceac0046..0000000000 --- a/contrib/debian/changelog +++ /dev/null @@ -1,6 +0,0 @@ -novacoin (0.4.0~dfsg-1) unstable; urgency=low - - [ Balthazar ] - * Initial release. - - -- Balthazar Mon, 15 Apr 2013 22:15:22 +0100 diff --git a/contrib/debian/compat b/contrib/debian/compat deleted file mode 100644 index 7f8f011eb7..0000000000 --- a/contrib/debian/compat +++ /dev/null @@ -1 +0,0 @@ -7 diff --git a/contrib/debian/control b/contrib/debian/control deleted file mode 100644 index 44fa62c826..0000000000 --- a/contrib/debian/control +++ /dev/null @@ -1,59 +0,0 @@ -Source: novacoin -Section: utils -Priority: optional -Maintainer: Jonas Smedegaard -Uploaders: Micah Anderson -Build-Depends: debhelper, - devscripts, - bash-completion, - libboost-system-dev (>> 1.35) | libboost-system1.35-dev, - libdb4.8++-dev, - libssl-dev, - pkg-config, - libminiupnpc8-dev, - libboost-filesystem-dev (>> 1.35) | libboost-filesystem1.35-dev, - libboost-program-options-dev (>> 1.35) | libboost-program-options1.35-dev, - libboost-thread-dev (>> 1.35) | libboost-thread1.35-dev, - libboost-test-dev (>> 1.35) | libboost-test1.35-dev, - qt4-qmake, - libqt4-dev, - libqrencode-dev -Standards-Version: 3.9.2 -Homepage: http://www.novacoin.su/ -Vcs-Git: git://github.com/CryptoManiac/novacoin.git -Vcs-Browser: http://github.com/CryptoManiac/novacoin - -Package: novacoind -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: peer-to-peer network based digital currency - daemon - Novacoin is a free open source peer-to-peer electronic cash system that - is completely decentralized, without the need for a central server or - trusted parties. Users hold the crypto keys to their own money and - transact directly with each other, with the help of a P2P network to - check for double-spending. - . - By default connects to an IRC network to discover other peers. - . - Full transaction history is stored locally at each client. This - requires 2+ GB of space, slowly growing. - . - This package provides novacoind, a combined daemon and CLI tool to - interact with the daemon. - -Package: novacoin-qt -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: peer-to-peer network based digital currency - Qt GUI - Novacoin is a free open source peer-to-peer electronic cash system that - is completely decentralized, without the need for a central server or - trusted parties. Users hold the crypto keys to their own money and - transact directly with each other, with the help of a P2P network to - check for double-spending. - . - By default connects to an IRC network to discover other peers. - . - Full transaction history is stored locally at each client. This - requires 2+ GB of space, slowly growing. - . - This package provides Novacoin-Qt, a GUI for Novacoin based on Qt. diff --git a/contrib/debian/copyright b/contrib/debian/copyright deleted file mode 100644 index b99604913c..0000000000 --- a/contrib/debian/copyright +++ /dev/null @@ -1,166 +0,0 @@ -Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?rev=174 -Upstream-Name: Bitcoin -Upstream-Contact: Satoshi Nakamoto - irc://#bitcoin@freenode.net -Source: http://sourceforge.net/projects/bitcoin/files/ - https://github.com/bitcoin/bitcoin - -Files: * -Copyright: 2009-2012, Bitcoin Developers -License: Expat -Comment: The Bitcoin Developers encompasses the current developers listed on bitcoin.org, - as well as the numerous contributors to the project. - -Files: src/json/* -Copyright: 2007-2009, John W. Wilkinson -License: Expat - -Files: src/strlcpy.h -Copyright: 1998, Todd C. Miller -License: ISC - -Files: debian/* -Copyright: 2010-2011, Jonas Smedegaard - 2011, Matt Corallo -License: GPL-2+ - -Files: debian/manpages/* -Copyright: Micah Anderson -License: GPL-3+ - -Files: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, - src/qt/res/src/*.svg -Copyright: Wladimir van der Laan -License: Expat - -Files: src/qt/res/icons/address-book.png, src/qt/res/icons/export.png, - src/qt/res/icons/history.png, src/qt/res/icons/key.png, - src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png, - src/qt/res/icons/receive.png, src/qt/res/icons/send.png, - src/qt/res/icons/synced.png, src/qt/res/icons/filesave.png -Copyright: David Vignoni (david@icon-king.com) - ICON KING - www.icon-king.com -License: LGPL -Comment: NUVOLA ICON THEME for KDE 3.x - Original icons: kaddressbook, klipper_dock, view-list-text, - key-password, encrypted/decrypted, go-home, go-down, - go-next, dialog-ok - Site: http://www.icon-king.com/projects/nuvola/ - -Files: src/qt/res/icons/connect*.png -Copyright: schollidesign -License: GPL-3+ -Comment: Icon Pack: Human-O2 - Site: http://findicons.com/icon/93743/blocks_gnome_netstatus_0 - -Files: src/qt/res/icons/transaction*.png -Copyright: md2k7 -License: Expat -Comment: Site: https://bitcointalk.org/index.php?topic=15276.0 - -Files: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png, - src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png, - src/qt/res/icons/add.png, src/qt/res/icons/edit.png, - src/qt/res/icons/remove.png -Copyright: http://www.everaldo.com -License: LGPL -Comment: Icon Pack: Crystal SVG - -Files: src/qt/res/icons/bitcoin.png, src/qt/res/icons/toolbar.png -Copyright: Bitboy (optimized for 16x16 by Wladimir van der Laan) -License: PUB-DOM -Comment: Site: https://bitcointalk.org/?topic=1756.0 - -Files: scripts/img/reload.xcf, src/qt/res/movies/update_spinner.mng -Copyright: Everaldo (Everaldo Coelho) -License: GPL-3+ -Comment: Icon Pack: Kids - Site: http://findicons.com/icon/17102/reload?id=17102 - -Files: src/qt/res/images/splash2.jpg -License: PUB-DOM -Copyright: Crobbo (forum) -Comment: Site: https://bitcointalk.org/index.php?topic=32273.0 - - -License: Expat - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - . - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - . - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -License: ISC - Permission to use, copy, modify, and distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - . - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR - BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES - OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, - ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - SOFTWARE. - -License: GPL-2+ - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - . - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. -Comment: - On Debian systems the GNU General Public License (GPL) version 2 is - located in '/usr/share/common-licenses/GPL-2'. - . - You should have received a copy of the GNU General Public License along - with this program. If not, see . - -License: GPL-3+ - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU General Public License, Version 3 or any - later version published by the Free Software Foundation. -Comment: - On Debian systems the GNU General Public License (GPL) version 3 is - located in '/usr/share/common-licenses/GPL-3'. - . - You should have received a copy of the GNU General Public License along - with this program. If not, see . - -License: LGPL - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - . - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. -Comment: - On Debian systems the GNU Lesser General Public License (LGPL) is - located in '/usr/share/common-licenses/LGPL'. - . - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -License: PUB-DOM - This work is in the public domain. diff --git a/contrib/debian/examples/novacoin.conf b/contrib/debian/examples/novacoin.conf deleted file mode 100644 index ed19aa00ff..0000000000 --- a/contrib/debian/examples/novacoin.conf +++ /dev/null @@ -1,81 +0,0 @@ -# novacoin.conf configuration file. Lines beginning with # are comments. - - -# Network-related settings: - -# Run on the test network instead of the real novacoin network. -#testnet=1 - -# Connect via a socks4 proxy -#proxy=127.0.0.1:9050 - -# Use as many addnode= settings as you like to connect to specific peers -#addnode=188.120.246.137:51737 - -# ... or use as many connect= settings as you like to connect ONLY -# to specific peers: -#connect=188.120.246.137:51737 - -# Do not use Internet Relay Chat (irc.lfnet.org #novacoin channel) to -# find other peers. -#noirc=1 - -# Maximum number of inbound+outbound connections. -#maxconnections= - - -# JSON-RPC options (for controlling a running process) - -# server=1 tells NovaCoin to accept JSON-RPC commands. -#server=1 - -# You must set rpcuser and rpcpassword to secure the JSON-RPC api -#rpcuser=Ulysseys -#rpcpassword=YourSuperGreatPasswordNumber_385593 - -# By default, only RPC connections from localhost are allowed. Specify -# as many rpcallowip= settings as you like to allow connections from -# other hosts (and you may use * as a wildcard character): -#rpcallowip=10.1.1.34 -#rpcallowip=192.168.1.* - -# Listen for RPC connections on this TCP port: -rpcport=8332 - -# You can use NovaCoin or novacoind to send commands to Bitcoin/bitcoindNovaCoin/novacoind -# running on another host using this option: -rpcconnect=127.0.0.1 - -# Use Secure Sockets Layer (also known as TLS or HTTPS) to communicate -# with NovaCoin -server or novacoind -#rpcssl=1 - -# OpenSSL settings used when rpcssl=1 -rpcsslciphers=TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH -rpcsslcertificatechainfile=server.cert -rpcsslprivatekeyfile=server.pem - - -# Miscellaneous options - -# Set gen=1 to attempt to generate novacoins -gen=0 - -# Pre-generate this many public/private key pairs, so wallet backups will be valid for -# both prior transactions and several dozen future transactions. -keypool=100 - -# Pay an optional transaction fee every time you send novacoins. -paytxfee=0.01 - -# Allow direct connections for the 'pay via IP address' feature. -#allowreceivebyip=1 - - -# User interface options - -# Start NovaCoin minimized -#min=1 - -# Minimize to the system tray -#minimizetotray=1 diff --git a/contrib/debian/gbp.conf b/contrib/debian/gbp.conf deleted file mode 100644 index a7281f94b2..0000000000 --- a/contrib/debian/gbp.conf +++ /dev/null @@ -1,5 +0,0 @@ -# Configuration file for git-buildpackage and friends - -[DEFAULT] -pristine-tar = True -sign-tags = True diff --git a/contrib/debian/manpages/novacoin.conf.5 b/contrib/debian/manpages/novacoin.conf.5 deleted file mode 100644 index 1901e16ee5..0000000000 --- a/contrib/debian/manpages/novacoin.conf.5 +++ /dev/null @@ -1,91 +0,0 @@ -.TH NOVACOIN.CONF "8" "April 2013" "novacoin.conf 3.19" -.SH NAME -novacoin.conf \- novacoin configuration file -.SH SYNOPSIS -All command-line options (except for '-datadir' and '-conf') may be specified in a configuration file, and all configuration file options may also be specified on the command line. Command-line options override values set in the configuration file. -.TP -The configuration file is a list of 'setting=value' pairs, one per line, with optional comments starting with the '#' character. -.TP -The configuration file is not automatically created; you can create it using your favorite plain-text editor. By default, novacoind(1) will look for a file named novacoin.conf(5) in the novacoin data directory, but both the data directory and the configuration file path may be changed using the '-datadir' and '-conf' command-line arguments. -.SH LOCATION -novacoin.conf should be located in $HOME/.novacoin -.SH NETWORK-RELATED SETTINGS -.TP -.TP -\fBtestnet=\fR[\fI'1'\fR|\fI'0'\fR] -Enable or disable run on the test network instead of the real *novacoin* network. -.TP -\fBproxy=\fR\fI'127.0.0.1:9050'\fR -Connect via a socks4 proxy. -.TP -\fBaddnode=\fR\fI'10.0.0.2:8333'\fR -Use as many *addnode=* settings as you like to connect to specific peers. -.TP -\fBconnect=\fR\fI'10.0.0.1:8333'\fR -Use as many *connect=* settings as you like to connect ONLY to specific peers. -.TP -\fBnoirc=\fR[\fI'1'\fR|\fI'0'\fR] -Use or Do not use Internet Relay Chat (irc.lfnet.org #novacoin channel) to find other peers. -.TP -\fRmaxconnections=\fR\fI'value'\fR -Maximum number of inbound+outbound connections. -.SH JSON-RPC OPTIONS -.TP -\fBserver=\fR[\fI'1'\fR|\fI'0'\fR] -Tells *novacoin* to accept or not accept JSON-RPC commands. -.TP -\fBrpcuser=\fR\fI'username'\fR -You must set *rpcuser* to secure the JSON-RPC api. -.TP -\fBrpcpassword=\fR\fI'password'\fR -You must set *rpcpassword* to secure the JSON-RPC api. -.TP -\fBrpctimeout=\fR\fI'30'\fR -How many seconds *novacoin* will wait for a complete RPC HTTP request, after the HTTP connection is established. -.TP -\fBrpcallowip=\fR\fI'192.168.1.*'\fR -By default, only RPC connections from localhost are allowed. Specify as many *rpcallowip=* settings as you like to allow connections from other hosts (and you may use * as a wildcard character). -.TP -\fBrpcport=\fR\fI'8332'\fR -Listen for RPC connections on this TCP port. -.TP -\fBrpcconnect=\fR\fI'127.0.0.1'\fR -You can use *novacoin* or *novacoind(1)* to send commands to *novacoin*/*novacoind(1)* running on another host using this option. -.TP -\fBrpcssl=\fR\fI'1'\fR -Use Secure Sockets Layer (also known as TLS or HTTPS) to communicate with *novacoin* '-server' or *novacoind(1)*. Example of OpenSSL settings used when *rpcssl*='1': -.TP -\fBrpcsslciphers=\fR\fI'TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH'\fR -.TP -\fBrpcsslcertificatechainfile=\fR\fI'server.cert'\fR -.TP -\fBrpcsslprivatekeyfile=\fR\fI'server.pem'\fR -.TP -.SH MISCELLANEOUS OPTIONS -.TP -\fBgen=\fR[\fI'0'\fR|\fI'1'\fR] -Enable or disable attempt to generate novacoins. -.TP -\fBkeypool=\fR\fI'100'\fR -Pre-generate this many public/private key pairs, so wallet backups will be valid for both prior transactions and several dozen future transactions. -.TP -\fBpaytxfee=\fR\fI'0.00'\fR -Pay an optional transaction fee every time you send novacoins. Transactions with fees are more likely than free transactions to be included in generated blocks, so may be validated sooner. -.TP -\fBallowreceivebyip=\fR\fI'1'\fR -Allow direct connections for the 'pay via IP address' feature. -.TP -.SH USER INTERFACE OPTIONS -.TP -\fBmin=\fR[\fI'0'\fR|\fI'1'\fR] -Enable or disable start novacoind minimized. -.TP -\fBminimizetotray=\fR[\fI'0'\fR|\fI'1'\fR] -Enable or disable minimize to the system tray. -.SH "SEE ALSO" -novacoind(1) -.SH AUTHOR -This manual page was written by Micah Anderson for the Debian system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 3 or any later version published by the Free Software Foundation. - -On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL. - diff --git a/contrib/debian/manpages/novacoind.1 b/contrib/debian/manpages/novacoind.1 deleted file mode 100644 index b8199c2102..0000000000 --- a/contrib/debian/manpages/novacoind.1 +++ /dev/null @@ -1,206 +0,0 @@ -.TH NOVACOIND "7" "April 2013" "novacoind 3.19" -.SH NAME -novacoind \- peer-to-peer network based digital currency -.SH SYNOPSIS -novacoin [options] [params] -.TP -novacoin [options] help - Get help for a command -.SH DESCRIPTION -This manual page documents the novacoind program. Novacoin is a peer-to-peer digital currency. Peer-to-peer (P2P) means that there is no central authority to issue new money or keep track of transactions. Instead, these tasks are managed collectively by the nodes of the network. Advantages: - -Novacoins can be sent easily through the Internet, without having to trust middlemen. Transactions are designed to be irreversible. Be safe from instability caused by fractional reserve banking and central banks. The limited inflation of the Novacoin system’s money supply is distributed evenly (by CPU power) throughout the network, not monopolized by banks. - -.SH OPTIONS -.TP -\fB\-conf=\fR -Specify configuration file (default: novacoin.conf) -.TP -\fB\-gen\fR -Generate coins -.TP -\fB\-gen\fR=\fI0\fR -Don't generate coins -.TP -\fB\-min\fR -Start minimized -.TP -\fB\-datadir=\fR -Specify data directory -.TP -\fB\-proxy=\fR -Connect through socks4 proxy -.TP -\fB\-addnode=\fR -Add a node to connect to -.TP -\fB\-connect=\fR -Connect only to the specified node -.TP -\fB\-paytxfee=\fR -Fee per KB to add to transactions you send -.TP -\fB\-server\fR -Accept command line and JSON\-RPC commands -.TP -\fB\-daemon\fR -Run in the background as a daemon and accept commands -.TP -\fB\-testnet\fR -Use the test network -.TP -\fB\-rpcuser=\fR -Username for JSON\-RPC connections -.TP -\fB\-rpcpassword=\fR -Password for JSON\-RPC connections -.TP -\fB\-rpcport=\fR -Listen for JSON\-RPC connections on -.TP -\fB\-rpcallowip=\fR -Allow JSON\-RPC connections from specified IP address -.TP -\fB\-rpcconnect=\fR -Send commands to node running on -.PP -SSL options: (see the Bitcoin Wiki for SSL setup instructions) -.TP -\fB\-rpcssl\fR=\fI1\fR -Use OpenSSL (https) for JSON\-RPC connections -.TP -\fB\-rpcsslcertificatchainfile=\fR -Server certificate file (default: server.cert) -.TP -\fB\-rpcsslprivatekeyfile=\fR -Server private key (default: server.pem) -.TP -\fB\-rpcsslciphers=\fR -Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) -.TP -\-? -This help message -.SH COMMANDS -.TP -\fBbackupwallet 'destination'\fR -Safely copies *wallet.dat* to 'destination', which can be a directory or a path with filename. -.TP -\fBgetaccount 'novacoinaddress'\fR -Returns the account associated with the given address. -.TP -\fBsetaccount 'novacoinaddress' ['account']\fR -Sets the ['account'] associated with the given address. ['account'] may be omitted to remove an address from ['account']. -.TP -\fBgetaccountaddress 'account'\fR -Returns a new novacoin address for 'account'. -.TP -\fBgetaddressesbyaccount 'account'\fR -Returns the list of addresses associated with the given 'account'. -.TP -\fBgetbalance 'account'\fR -Returns the server's available balance, or the balance for 'account'. -.TP -\fBgetblockcount\fR -Returns the number of blocks in the longest block chain. -.TP -\fBgetblocknumber\fR -Returns the block number of the latest block in the longest block chain. -.TP -\fBgetconnectioncount\fR -Returns the number of connections to other nodes. -.TP -\fBgetdifficulty\fR -Returns the proof-of-work difficulty as a multiple of the minimum difficulty. -.TP -\fBgetgenerate\fR -Returns boolean true if server is trying to generate novacoins, false otherwise. -.TP -\fBsetgenerate 'generate' ['genproclimit']\fR -Generation is limited to ['genproclimit'] processors, -1 is unlimited. -.TP -\fBgethashespersec\fR -Returns a recent hashes per second performance measurement while generating. -.TP -\fBgetinfo\fR -Returns an object containing server information. -.TP -\fBgetnewaddress 'account'\fR -Returns a new novacoin address for receiving payments. If 'account' is specified (recommended), it is added to the address book so payments received with the address will be credited to 'account'. -.TP -\fBgetreceivedbyaccount 'account' ['minconf=1']\fR -Returns the total amount received by addresses associated with 'account' in transactions with at least ['minconf'] confirmations. -.TP -\fBgetreceivedbyaddress 'novacoinaddress' ['minconf=1']\fR -Returns the total amount received by 'novacoinaddress' in transactions with at least ['minconf'] confirmations. -.TP -\fBgettransaction 'txid'\fR -Returns information about a specific transaction, given hexadecimal transaction ID. -.TP -\fBgetwork 'data'\fR -If 'data' is specified, tries to solve the block and returns true if it was successful. If 'data' is not specified, returns formatted hash 'data' to work on: - - "midstate" : precomputed hash state after hashing the first half of the data. - "data" : block data. - "hash1" : formatted hash buffer for second hash. - "target" : little endian hash target. -.TP -\fBhelp 'command'\fR -List commands, or get help for a command. -.TP -\fBlistaccounts ['minconf=1']\fR -List accounts and their current balances. -.TP -\fBlistreceivedbyaccount ['minconf=1'] ['includeempty=false']\fR -['minconf'] is the minimum number of confirmations before payments are included. ['includeempty'] whether to include addresses that haven't received any payments. Returns an array of objects containing: - - "account" : the account of the receiving address. - "amount" : total amount received by the address. - "confirmations" : number of confirmations of the most recent transaction included. -.TP -\fBlistreceivedbyaddress ['minconf=1'] ['includeempty=false']\fR -['minconf'] is the minimum number of confirmations before payments are included. ['includeempty'] whether to include addresses that haven't received any payments. Returns an array of objects containing: - - "address" : receiving address. - "account" : the account of the receiving address. - "amount" : total amount received by the address. - "confirmations" : number of confirmations of the most recent transaction included. -.TP -\fBlisttransactions 'account' ['count=10']\fR -Returns a list of the last ['count'] transactions for 'account' - for all accounts if 'account' is not specified or is "*". Each entry in the list may contain: - - "category" : will be generate, send, receive, or move. - "amount" : amount of transaction. - "fee" : Fee (if any) paid (only for send transactions). - "confirmations" : number of confirmations (only for generate/send/receive). - "txid" : transaction ID (only for generate/send/receive). - "otheraccount" : account funds were moved to or from (only for move). - "message" : message associated with transaction (only for send). - "to" : message-to associated with transaction (only for send). -.TP -\fBmove <'fromaccount'> <'toaccount'> <'amount'> ['minconf=1'] ['comment']\fR -Moves funds between accounts. -.TP -\fBsendfrom* <'account'> <'novacoinaddress'> <'amount'> ['minconf=1'] ['comment'] ['comment-to']\fR -Sends amount from account's balance to 'novacoinaddress'. This method will fail if there is less than amount novacoins with ['minconf'] confirmations in the account's balance (unless account is the empty-string-named default account; it behaves like the *sendtoaddress* method). Returns transaction ID on success. -.TP -\fBsendtoaddress 'novacoinaddress' 'amount' ['comment'] ['comment-to']\fR -Sends amount from the server's available balance to 'novacoinaddress'. amount is a real and is rounded to the nearest 0.01. Returns transaction id on success. -.TP -\fBstop\fR -Stops the novacoin server. -.TP -\fBvalidateaddress 'novacoinaddress'\fR -Checks that 'novacoinaddress' looks like a proper novacoin address. Returns an object containing: - - "isvalid" : true or false. - "ismine" : true if the address is in the server's wallet. - "address" : novacoinaddress. - - *note: ismine and address are only returned if the address is valid. - -.SH "SEE ALSO" -novacoin.conf(5) -.SH AUTHOR -This manual page was written by Micah Anderson for the Debian system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 3 or any later version published by the Free Software Foundation. - -On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL. - diff --git a/contrib/debian/novacoin-qt.desktop b/contrib/debian/novacoin-qt.desktop deleted file mode 100644 index a299232d25..0000000000 --- a/contrib/debian/novacoin-qt.desktop +++ /dev/null @@ -1,12 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=NovaCoin -Comment=NovaCoin P2P Cryptocurrency -Comment[fr]=NovaCoin, monnaie virtuelle cryptographique pair à pair -Comment[tr]=NovaCoin, eşten eşe kriptografik sanal para birimi -Exec=/usr/bin/novacoin-qt -Terminal=false -Type=Application -Icon=/usr/share/pixmaps/bitcoin80.xpm -MimeType=x-scheme-handler/novacoin; -Categories=Office; diff --git a/contrib/debian/novacoin-qt.install b/contrib/debian/novacoin-qt.install deleted file mode 100644 index 403fb4e2c4..0000000000 --- a/contrib/debian/novacoin-qt.install +++ /dev/null @@ -1,5 +0,0 @@ -novacoin-qt usr/bin -share/pixmaps/bitcoin32.xpm usr/share/pixmaps -share/pixmaps/bitcoin80.xpm usr/share/pixmaps -debian/novacoin-qt.desktop usr/share/applications -debian/novacoin-qt.protocol usr/share/kde4/services/ diff --git a/contrib/debian/novacoin-qt.lintian-overrides b/contrib/debian/novacoin-qt.lintian-overrides deleted file mode 100644 index 3e159d38fd..0000000000 --- a/contrib/debian/novacoin-qt.lintian-overrides +++ /dev/null @@ -1,2 +0,0 @@ -# Linked code is Expat - only Debian packaging is GPL-2+ -novacoin-qt: possible-gpl-code-linked-with-openssl diff --git a/contrib/debian/novacoin-qt.protocol b/contrib/debian/novacoin-qt.protocol deleted file mode 100644 index 29a45469f4..0000000000 --- a/contrib/debian/novacoin-qt.protocol +++ /dev/null @@ -1,11 +0,0 @@ -[Protocol] -exec=novacoin-qt '%u' -protocol=novacoin -input=none -output=none -helper=true -listing= -reading=false -writing=false -makedir=false -deleting=false diff --git a/contrib/debian/novacoind.examples b/contrib/debian/novacoind.examples deleted file mode 100644 index 3728af9dd7..0000000000 --- a/contrib/debian/novacoind.examples +++ /dev/null @@ -1 +0,0 @@ -debian/examples/novacoin.conf diff --git a/contrib/debian/novacoind.install b/contrib/debian/novacoind.install deleted file mode 100644 index b44acca382..0000000000 --- a/contrib/debian/novacoind.install +++ /dev/null @@ -1,2 +0,0 @@ -debian/bin/novacoind usr/bin -src/novacoind usr/lib/novacoin diff --git a/contrib/debian/novacoind.lintian-overrides b/contrib/debian/novacoind.lintian-overrides deleted file mode 100644 index e44a58f992..0000000000 --- a/contrib/debian/novacoind.lintian-overrides +++ /dev/null @@ -1,2 +0,0 @@ -# Linked code is Expat - only Debian packaging is GPL-2+ -novacoind: possible-gpl-code-linked-with-openssl diff --git a/contrib/debian/novacoind.manpages b/contrib/debian/novacoind.manpages deleted file mode 100644 index 15116c8db6..0000000000 --- a/contrib/debian/novacoind.manpages +++ /dev/null @@ -1,2 +0,0 @@ -debian/manpages/novacoind.1 -debian/manpages/novacoin.conf.5 diff --git a/contrib/debian/patches/README b/contrib/debian/patches/README deleted file mode 100644 index 80c1584376..0000000000 --- a/contrib/debian/patches/README +++ /dev/null @@ -1,3 +0,0 @@ -0xxx: Grabbed from upstream development. -1xxx: Possibly relevant for upstream adoption. -2xxx: Only relevant for official Debian release. diff --git a/contrib/debian/patches/series b/contrib/debian/patches/series deleted file mode 100644 index 8b13789179..0000000000 --- a/contrib/debian/patches/series +++ /dev/null @@ -1 +0,0 @@ - diff --git a/contrib/debian/rules b/contrib/debian/rules deleted file mode 100755 index 239dcf21bf..0000000000 --- a/contrib/debian/rules +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/make -f -# -*- mode: makefile; coding: utf-8 -*- - -#DEB_MAKE_CHECK_TARGET = test_bitcoin -#build/bitcoind:: -# $(if $(filter nocheck,$(DEB_BUILD_OPTIONS)),,src/test_bitcoin) - -DEB_INSTALL_EXAMPLES_novacoind += debian/examples/* -DEB_INSTALL_MANPAGES_novacoind += debian/manpages/* - -%: - dh --with bash-completion $@ - -override_dh_auto_build: - cd src; $(MAKE) -f makefile.unix novacoind - $(MAKE) - -override_dh_auto_clean: - if [ -f Makefile ]; then $(MAKE) clean; else rm -rf build/; rm -f novacoin-qt; fi - cd src; $(MAKE) -f makefile.unix clean - -override_dh_auto_configure: - qmake novacoin-qt.pro USE_QRCODE=1 - -override_dh_auto_test: - cd src; $(MAKE) -f makefile.unix test_novacoin - src/test_novacoin - -# Ensure wrapper is set executable -binary-post-install/novacoind: - chmod +x $(cdbs_curdestdir)usr/bin/novacoind -binary-post-install/novacoin-qt: - chmod +x $(cdbs_curdestdir)usr/bin/novacoin-qt diff --git a/contrib/debian/source/format b/contrib/debian/source/format deleted file mode 100644 index 163aaf8d82..0000000000 --- a/contrib/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/contrib/debian/watch b/contrib/debian/watch deleted file mode 100644 index 5da4e007a7..0000000000 --- a/contrib/debian/watch +++ /dev/null @@ -1,4 +0,0 @@ -# Run the "uscan" command to check for upstream updates and more. -version=4 -opts=uversionmangle=s/(\d)(alpha|beta|rc)/$1~$2/,dversionmangle=s/~dfsg\d*// \ - http://githubredir.debian.net/github/CryptoManiac/novacoin v(.*).tar.gz diff --git a/contrib/gitian-descriptors/README b/contrib/gitian-descriptors/README deleted file mode 100644 index 9407d137c7..0000000000 --- a/contrib/gitian-descriptors/README +++ /dev/null @@ -1,233 +0,0 @@ -Download a 64bit debian netinstall iso from : http://cdimage.debian.org/debian-cd/ -I used debian-8.1.0-amd64-netinst.iso - - -Follow this guide part way: -https://github.com/bitcoin/bitcoin/blob/master/doc/gitian-building.md#setting-up-debian-for-gitian-building -( up to cloning gitian-builder ) -Or follow these text only instructions: -Create a new VirtualBox VM - -Name: gitianbuild -Type: Linux (64bit) -Version: Debian - -Memory: 1400MB or more -Hard Drive: Create a virtual hard drive now -Hard drive file type: VDI ( Virtualbox disk image ) -Storage on physical hard drive : Dynamically allocated -File location and size: 40GB (20GB should work) - - - -After creating the VM, we need to configure it. - - Click the Settings button, then go to the Network tab. Adapter 1 should be attached to NAT - - - - Click Advanced, then Port Forwarding. We want to set up a port through which we can reach the VM to get files in and out. - Create a new rule by clicking the plus icon. - - Set up the new rule the following way: - Name: SSH - Protocol: TCP - Leave Host IP empty - Host Port: 22222 - Leave Guest IP empty - Guest Port: 22 - - Click Ok twice to save. - -Then start the VM. On the first launch you will be asked for a CD or DVD image. Choose the downloaded iso. - -Choose the non-graphical installer. We do not need the graphical environment; it will only increase installation time and disk usage. -Choose locale and keyboard settings (doesn't matter, you can just go with the defaults or select your own information) -The VM will detect network settings using DHCP, this should all proceed automatically - Configure the network: - System name debian. - Leave domain name empty. - -Choose a root password and enter it twice (remember it for later) - -Name the new user debian (the full name doesn't matter, you can leave it empty) -Choose a user password and enter it twice (remember it for later) - -The installer will set up the clock using a time server; this process should be automatic -Set up the clock: choose a time zone (depends on the locale settings that you picked earlier; specifics don't matter) - -Disk setup - Partitioning method: Guided - Use the entire disk - -Select disk to partition: SCSI1 (0,0,0) -Partitioning scheme: All files in one partition -Finish partitioning and write changes to disk -> Yes - - -The base system will be installed, this will take a minute or so - Choose a mirror (any will do - preferably one that is close to you and you should get the best download speeds) - -Enter proxy information (unless you are on an intranet, you can leave this empty) - - -Wait a bit while 'Select and install software' runs -Participate in popularity contest -> No - Choose software to install. We need just the base system. Make sure only 'SSH server' and 'Standard System Utilities' are checked. Uncheck 'Debian Desktop Environment' and 'Print Server' - - -Install the GRUB boot loader to the master boot record? -> Yes - - -Installation Complete -> Continue -After installation, the VM will reboot and you will have a working Debian VM. - -Congratulations! - - -On your debian virtual machine log in as root and run the following commands to get the show on the road. - -Install base packages: -# apt-get install git ruby sudo apt-cacher-ng qemu-utils debootstrap lxc python-cheetah parted kpartx bridge-utils -Add the debian user to the superusers list: -# adduser debian sudo - -When you get a colorful screen with a question about the 'LXC directory', just go with the default (/var/lib/lxc). -Then set up LXC and the rest with the following, which is a complex jumble of settings and workarounds: - -Add the following to a script and execute it: - -# make sure the build script can exectute it without providing a password -echo "%sudo ALL=NOPASSWD: /usr/bin/lxc-start" > /etc/sudoers.d/gitian-lxc -# add cgroup for LXC -echo "cgroup /sys/fs/cgroup cgroup defaults 0 0" >> /etc/fstab -# make /etc/rc.local script that sets up bridge between guest and host -echo '#!/bin/sh -e' > /etc/rc.local -echo 'brctl addbr br0' >> /etc/rc.local -echo 'ifconfig br0 10.0.3.2/24 up' >> /etc/rc.local -echo 'exit 0' >> /etc/rc.local -# make sure that USE_LXC is always set when logging in as debian, -# and configure LXC IP addresses -echo 'export USE_LXC=1' >> /home/debian/.profile -echo 'export GITIAN_HOST_IP=10.0.3.2' >> /home/debian/.profile -echo 'export LXC_GUEST_IP=10.0.3.5' >> /home/debian/.profile - - -reboot - -The debian box will be rebooted and our setup should be complete - -************************ THIS IS WHERE YOU CAN STOP USING THE LINKED GUIDE ******************************* - - -ssh debian@localhost -p 22222 - -git clone https://github.com/devrandom/gitian-builder.git -git clone https://github.com/SDCDev/shadowcoin - -cd gitian-builder - -May be necessary to edit bin/make-base-vm - add sudo before mkfs. - -./bin/make-base-vm --lxc --arch amd64 --suite trusty -./bin/make-base-vm --lxc --arch i386 --suite trusty - -mkdir inputs; -cd inputs; -wget http://liquidtelecom.dl.sourceforge.net/project/flex/flex-2.5.38.tar.gz; -wget http://download.icu-project.org/files/icu4c/55.1/icu4c-55_1-src.tgz; -wget http://wtogami.fedorapeople.org/boost-mingw-gas-cross-compile-2013-03-03.patch; -wget http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.20151008.tar.gz -Ominiupnpc-1.9.20151008.tar.gz; -wget http://www.openssl.org/source/openssl-1.0.2d.tar.gz; -wget http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz; -wget http://download.qt.io/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.tar.xz -wget http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.bz2/download -Oboost_1_55_0.tar.bz2; - -Mirror - http://mindstalk.net/host/boost-mingw-gas-cross-compile-2013-03-03.patch - - -$ cd ..; -$ LXC_EXECUTE=lxc-execute; PATH="$(pwd)/libexec/:$PATH"; - -$ ./bin/gbuild ../shadowcoin/contrib/gitian-descriptors/boost-linux.yml -$ mv build/out/boost-*.zip inputs/ - -$ ./bin/gbuild ../shadowcoin/contrib/gitian-descriptors/deps-linux.yml -$ mv build/out/shadow-deps-*.zip inputs/ - -$ ./bin/gbuild --commit shadowcoin=HEAD ../shadowcoin/contrib/gitian-descriptors/gitian-linux.yml -$ mkdir -p ../compiled/linux -$ mv build/out/* ../compiled/linux/ - -$ ./bin/gbuild ../shadowcoin/contrib/gitian-descriptors/boost-win.yml -$ mv build/out/boost-*.zip inputs/ - -$ ./bin/gbuild ../shadowcoin/contrib/gitian-descriptors/deps-win.yml -$ mv build/out/shadow-deps-*.zip inputs/ - -$ ./bin/gbuild ../shadowcoin/contrib/gitian-descriptors/qt-win.yml -$ mv build/out/qt-win*.zip inputs/ - -$ ./bin/gbuild --commit shadowcoin=HEAD ../shadowcoin/contrib/gitian-descriptors/gitian-win.yml -$ mkdir -p ../compiled/win -$ mv build/out/* ../compiled/win/ - -$ ./bin/gbuild --commit osxcross=master,libdmg-hfsplus=master ../shadowcoin/contrib/gitian-descriptors/osxcross.yml -$ mv build/out/osxcross.tar.xz inputs/ - -$ ./bin/gbuild ../shadowcoin/contrib/gitian-descriptors/deps-osx.yml -$ mv build/out/shadow-deps-osx-gitian inputs/ - -$ ./bin/gbuild ../shadowcoin/contrib/gitian-descriptors/qt-osx.yml -$ mv build/out/qt-osx*.tar.xz inputs/ - -$ ./bin/gbuild --commit shadowcoin=HEAD ../shadowcoin/contrib/gitian-descriptors/gitian-osx.yml -$ mkdir -p ../compiled/osx -$ mv build/out/* ../compiled/osx/ - -Notes: - To check the progress of the script: - login to the vm on a new terminal (ssh debian@localhost -p 22222) - cd gitian-builder - tail -f var/install.log - or - tail -f var/build.log - - - - - - - - -Gavin's notes on getting gitian builds up and running: - -You need the right hardware: you need a 64-bit-capable CPU with hardware virtualization support (Intel VT-x or AMD-V). Not all modern CPUs support hardware virtualization. - -You probably need to enable hardware virtualization in your machine's BIOS. - -You need to be running a recent version of 64-bit-Ubuntu, and you need to install several prerequisites: - sudo apt-get install apache2 git apt-cacher-ng python-vm-builder qemu-kvm - -Sanity checks: - sudo service apt-cacher-ng status # Should return apt-cacher-ng is running - ls -l /dev/kvm # Should show a /dev/kvm device - -Once you've got the right hardware and software: - - git clone git://github.com/bitcoin/bitcoin.git - git clone git://github.com/devrandom/gitian-builder.git - mkdir gitian-builder/inputs - wget 'http://miniupnp.tuxfamily.org/files/download.php?file=miniupnpc-1.6.tar.gz' -O gitian-builder/inputs/miniupnpc-1.6.tar.gz - - cd gitian-builder - bin/make-base-vm --arch i386 - bin/make-base-vm --arch amd64 - cd .. - - # To build - cd bitcoin - git pull - cd ../gitian-builder - git pull - ./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian.yml - diff --git a/contrib/gitian-descriptors/deps-linux.yml b/contrib/gitian-descriptors/deps-linux.yml deleted file mode 100644 index 25123edbf9..0000000000 --- a/contrib/gitian-descriptors/deps-linux.yml +++ /dev/null @@ -1,105 +0,0 @@ ---- -name: "shadow-deps" -suites: -- "trusty" -architectures: -- "i386" -- "amd64" -packages: -- "g++" -- "pkg-config" -- "libtool" -- "faketime" -- "bsdmainutils" -reference_datetime: "2015-10-01 00:00:00" -remotes: [] -files: -- "openssl-1.0.2d.tar.gz" -- "miniupnpc-1.9.20151008.tar.gz" -- "db-4.8.30.NC.tar.gz" -- "boost_1_55_0.tar.bz2" -script: | - STAGING="$HOME/install" - TEMPDIR="$HOME/tmp" - OPTFLAGS='-O2' - if [ "$GBUILD_BITS" == "32" ]; then - export LD_PRELOAD=/usr/lib/i386-linux-gnu/faketime/libfaketime.so.1; - else - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1; - fi - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - export LIBRARY_PATH="$STAGING/lib" - # Integrity Check - echo "671c36487785628a703374c652ad2cebea45fa920ae5681515df25d9f2c9a8c8 openssl-1.0.2d.tar.gz" | sha256sum -c - echo "e444ac3b587ce82709c4d0cfca1fe71f44f9fc433e9f946b12b9e1bfe667a633 miniupnpc-1.9.20151008.tar.gz" | sha256sum -c - echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz" | sha256sum -c - echo "fff00023dd79486d444c8e29922f4072e1d451fc5a4d2b6075852ead7f2b7b52 boost_1_55_0.tar.bz2" | sha256sum -c - - # - tar xzf openssl-1.0.2d.tar.gz - cd openssl-1.0.2d - # need -fPIC to avoid relocation error in 64 bit builds - ./config no-shared no-zlib no-dso no-krb5 --openssldir=$STAGING -fPIC - # need to build OpenSSL with faketime because a timestamp is embedded into cversion.o - make - make install_sw - cd .. - # - tar xzf miniupnpc-1.9.20151008.tar.gz - cd miniupnpc-1.9.20151008 - # miniupnpc is always built with -fPIC - INSTALLPREFIX=$STAGING make $MAKEOPTS libminiupnpc.a install - ls $STAGING/lib/libminiupnpc.so* - rm -f $STAGING/lib/libminiupnpc.so* # no way to skip shared lib build - cd .. - # - - # - #tar xjf protobuf-2.5.0.tar.bz2 - #cd protobuf-2.5.0 - #mkdir -p $STAGING/host/bin - #unset FAKETIME # unset fake time during configure, as it does some clock sanity tests - # need --with-pic to avoid relocation error in 64 bit builds - #./configure --prefix=$STAGING --bindir=$STAGING/host/bin --enable-static --disable-shared --with-pic --without-zlib - # Workaround to prevent re-configuring by make; make all files have a date in the past - #find . -print0 | xargs -r0 touch -t 200001010000 - #export FAKETIME=$REFERENCE_DATETIME - #make $MAKEOPTS install - #cd .. - # - tar xzf db-4.8.30.NC.tar.gz - cd db-4.8.30.NC/build_unix - # need --with-pic to avoid relocation error in 64 bit builds - ../dist/configure --prefix=$STAGING --enable-cxx --disable-shared --with-pic - # Workaround to prevent re-configuring by make; make all files have a date in the past - find . -print0 | xargs -r0 touch -t 200001010000 - make $MAKEOPTS library_build - make install_lib install_include - cd ../.. - - # Input Integrity Check - tar --warning=no-timestamp -xjf boost_1_55_0.tar.bz2 - cd boost_1_55_0 - GCCVERSION=$(g++ -E -dM $(mktemp --suffix=.h) | grep __VERSION__ | cut -d ' ' -f 3 | cut -d '"' -f 2) - # note: bjam with -d+2 reveals that -O3 is implied by default, no need to provide it in cxxflags - echo "using gcc : $GCCVERSION : g++ - : - \"-frandom-seed=boost1 -fPIC\" - ;" > user-config.jam - - ./bootstrap.sh --without-icu - - ./bjam toolset=gcc threadapi=pthread threading=multi variant=release link=static runtime-link=shared --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 --layout=tagged --build-type=complete --prefix="$STAGING" $MAKEOPTS -d+2 install - - # post-process all generated libraries to be deterministic - # extract them to a temporary directory then re-build them deterministically - for LIB in $(find $STAGING -name \*.a); do - rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR - ar xv $LIB | cut -b5- > /tmp/list.txt - rm $LIB - ar crsD $LIB $(cat /tmp/list.txt) - done - # - cd $STAGING - find include lib | sort | tar --no-recursion -cJf $OUTDIR/shadow-deps-linux${GBUILD_BITS}-gitian.tar.xz -T - diff --git a/contrib/gitian-descriptors/deps-osx.yml b/contrib/gitian-descriptors/deps-osx.yml deleted file mode 100644 index 2313fb5e3b..0000000000 --- a/contrib/gitian-descriptors/deps-osx.yml +++ /dev/null @@ -1,112 +0,0 @@ ---- -name: "shadow-deps" -suites: -- "trusty" -architectures: -- "amd64" -packages: -- "git-core" -- "clang" -- "llvm-dev" -- "faketime" -- "psmisc" -reference_datetime: "2011-01-30 00:00:00" -remotes: [] -files: -- "openssl-1.0.2d.tar.gz" -- "db-4.8.30.NC.tar.gz" -- "miniupnpc-1.9.20151008.tar.gz" -- "zlib-1.2.8.tar.gz" -- "icu4c-55_1-src.tgz" -- "boost_1_55_0.tar.bz2" -- "osxcross.tar.xz" -script: | - # - # Input Integrity Check - echo "671c36487785628a703374c652ad2cebea45fa920ae5681515df25d9f2c9a8c8 openssl-1.0.2d.tar.gz" | sha256sum -c - echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz" | sha256sum -c - echo "e444ac3b587ce82709c4d0cfca1fe71f44f9fc433e9f946b12b9e1bfe667a633 miniupnpc-1.9.20151008.tar.gz" | sha256sum -c - echo "36658cb768a54c1d4dec43c3116c27ed893e88b02ecfcb44f2166f9c0b7f2a0d zlib-1.2.8.tar.gz" | sha256sum -c - echo "e16b22cbefdd354bec114541f7849a12f8fc2015320ca5282ee4fd787571457b icu4c-55_1-src.tgz" | sha256sum -c - echo "fff00023dd79486d444c8e29922f4072e1d451fc5a4d2b6075852ead7f2b7b52 boost_1_55_0.tar.bz2" | shasum -c - # - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - BUILDDIR=$HOME/build - INSTALLPREFIX=$HOME/install - TEMPDIR=$HOME/tmp - DEPSDIR=$HOME/deps - SDK=$DEPSDIR/SDK/MacOSX10.9.sdk - HOST=x86_64-apple-darwin13 - MIN_VERSION=10.6 - # - mkdir -p $INSTALLPREFIX $BUILDDIR $DEPSDIR - cd $DEPSDIR - tar xf $BUILDDIR/osxcross.tar.xz - PATH=$PATH:$DEPSDIR/bin - # - cd $BUILDDIR - tar xzf openssl-1.0.2d.tar.gz - cd openssl-1.0.2d - CC=cc ./Configure --cross-compile-prefix=$HOST- darwin64-x86_64-cc no-shared no-dso --openssldir=$INSTALLPREFIX - make - make install_sw - # - cd $BUILDDIR - tar xzf db-4.8.30.NC.tar.gz - cd db-4.8.30.NC/build_unix - sed -i 's/__atomic_compare_exchange/__atomic_compare_exchange_db/g' ../dbinc/atomic.h - ../dist/configure --prefix=$INSTALLPREFIX --enable-cxx --host=$HOST --disable-shared --disable-replication - make $MAKEOPTS library_build - make install_lib install_include - cd ../.. - # - tar xzf miniupnpc-1.9.20151008.tar.gz - cd miniupnpc-1.9.20151008 - make -f Makefile OS=Darwin CC=$HOST-cc AR=$HOST-ar libminiupnpc.a - install -d $INSTALLPREFIX/include/miniupnpc - install *.h $INSTALLPREFIX/include/miniupnpc - install libminiupnpc.a $INSTALLPREFIX/lib - # - cd $BUILDDIR - mkdir -p icuCross - cd icuCross - tar xzf $BUILDDIR/icu4c-55_1-src.tgz - cd icu/source - mkdir -p $TEMPDIR/icu - ./runConfigureICU MacOSX --prefix=$TEMPDIR/icu --enable-static --disable-shared - make - make install - #rm -rf icu - cd $BUILDDIR - tar xzf icu4c-55_1-src.tgz - cd icu/source - ./runConfigureICU MacOSX --host=$HOST --with-cross-build=$BUILDDIR/icuCross/icu/source --prefix=$INSTALLPREFIX --enable-static --disable-shared - make - make install - # - cd $BUILDDIR - tar --warning=no-timestamp -xjf boost_1_55_0.tar.bz2 - cd boost_1_55_0 - ./bootstrap.sh --with-libraries=chrono,filesystem,program_options,system,thread,test - echo "using darwin : : ${HOST}-clang++ - : - \"-target ${HOST} -mmacosx-version-min=${MIN_VERSION} --sysroot ${SDK} -msse2 -Qunused-arguments -I${INSTALLPREFIX}/include -DBOOST_HAS_INT128=1\" - \"-L${INSTALLPREFIX}/lib -B${DEPSDIR}/bin\" - \"${HOST}-libtool\" - \"${HOST}-strip\" : - ;" > user-config.jam - ./b2 -d2 --layout=tagged --build-type=complete --prefix="${INSTALLPREFIX}" --toolset=darwin-4.2.1 --user-config=user-config.jam variant=release threading=multi link=static install - # - # post-process all generated libraries to be deterministic - # extract them to a temporary directory then re-build them deterministically - #for LIB in $(find $INSTALLPREFIX -name \*.a); do - # rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR - # $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt - # rm $LIB - # $HOST-ar crs $LIB $(cat /tmp/list.txt) - #done - # - cd $INSTALLPREFIX - find include lib | sort | tar --no-recursion -cJf $OUTDIR/shadow-deps-osx-gitian.tar.xz -T - diff --git a/contrib/gitian-descriptors/deps-win.yml b/contrib/gitian-descriptors/deps-win.yml deleted file mode 100644 index b40942cb39..0000000000 --- a/contrib/gitian-descriptors/deps-win.yml +++ /dev/null @@ -1,175 +0,0 @@ ---- -name: "shadow-deps" -suites: -- "trusty" -architectures: -- "amd64" -packages: -- "mingw-w64" -- "g++-mingw-w64" -- "git-core" -- "faketime" -- "psmisc" -reference_datetime: "2011-01-30 00:00:00" -remotes: [] -files: -- "openssl-1.0.2d.tar.gz" -- "db-4.8.30.NC.tar.gz" -- "miniupnpc-1.9.20151008.tar.gz" -- "zlib-1.2.8.tar.gz" -- "libpng-1.6.10.tar.gz" -- "icu4c-55_1-src.tgz" -- "boost_1_55_0.tar.bz2" -- "boost-mingw-gas-cross-compile-2013-03-03.patch" -script: | - # - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - INDIR=$HOME/build - TEMPDIR=$HOME/tmp - # Input Integrity Check - echo "671c36487785628a703374c652ad2cebea45fa920ae5681515df25d9f2c9a8c8 openssl-1.0.2d.tar.gz" | sha256sum -c - echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz" | sha256sum -c - echo "e444ac3b587ce82709c4d0cfca1fe71f44f9fc433e9f946b12b9e1bfe667a633 miniupnpc-1.9.20151008.tar.gz" | sha256sum -c - echo "36658cb768a54c1d4dec43c3116c27ed893e88b02ecfcb44f2166f9c0b7f2a0d zlib-1.2.8.tar.gz" | sha256sum -c - echo "b0206a22b49c91fc5521b2cfb1c251433a37aed0a645bc504ab3d061f27e4d51 libpng-1.6.10.tar.gz" | sha256sum -c - echo "e16b22cbefdd354bec114541f7849a12f8fc2015320ca5282ee4fd787571457b icu4c-55_1-src.tgz" | sha256sum -c - echo "fff00023dd79486d444c8e29922f4072e1d451fc5a4d2b6075852ead7f2b7b52 boost_1_55_0.tar.bz2" | sha256sum -c - echo "d2b7f6a1d7051faef3c9cf41a92fa3671d905ef1e1da920d07651a43299f6268 boost-mingw-gas-cross-compile-2013-03-03.patch" \ - | sha256sum -c - # - for BITS in 32 64; do # for architectures - # - INSTALLPREFIX=$HOME/staging${BITS} - BUILDDIR=$HOME/build${BITS} - if [ "$BITS" == "32" ]; then - HOST=i686-w64-mingw32 - else - HOST=x86_64-w64-mingw32 - fi - # - mkdir -p $INSTALLPREFIX $BUILDDIR - cd $BUILDDIR - # - tar xzf $INDIR/openssl-1.0.2d.tar.gz - cd openssl-1.0.2d - if [ "$BITS" == "32" ]; then - OPENSSL_TGT=mingw - else - OPENSSL_TGT=mingw64 - fi - ./Configure --cross-compile-prefix=$HOST- ${OPENSSL_TGT} no-shared no-dso --openssldir=$INSTALLPREFIX - make - make install_sw - cd .. - # - tar xzf $INDIR/db-4.8.30.NC.tar.gz - cd db-4.8.30.NC/build_unix - ../dist/configure --prefix=$INSTALLPREFIX --enable-mingw --enable-cxx --host=$HOST --disable-shared --disable-replication - make $MAKEOPTS library_build - make install_lib install_include - cd ../.. - # - tar xzf $INDIR/miniupnpc-1.9.20151008.tar.gz - cd miniupnpc-1.9.20151008 - echo " - --- miniupnpc-1.9/Makefile.mingw.orig 2013-09-29 18:52:51.014087958 -1000 - +++ miniupnpc-1.9/Makefile.mingw 2013-09-29 19:09:29.663318691 -1000 - @@ -67,8 +67,8 @@ - - wingenminiupnpcstrings.o: wingenminiupnpcstrings.c - - -miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings - - wingenminiupnpcstrings \$< \$@ - +miniupnpcstrings.h: miniupnpcstrings.h.in - + sed -e 's|OS/version|MSWindows/5.1.2600|' -e 's|MINIUPNPC_VERSION_STRING \"version\"|MINIUPNPC_VERSION_STRING \"VERSIONHERE\"|' \$< > \$@ - - minixml.o: minixml.c minixml.h miniupnpcstrings.h - - " | sed "s/VERSIONHERE/$(cat VERSION)/" | patch -p1 - mkdir -p dll - make -f Makefile.mingw CC=$HOST-gcc AR=$HOST-ar libminiupnpc.a - install -d $INSTALLPREFIX/include/miniupnpc - install *.h $INSTALLPREFIX/include/miniupnpc - install libminiupnpc.a $INSTALLPREFIX/lib - cd .. - # - # - tar xzf $INDIR/zlib-1.2.8.tar.gz - cd zlib-1.2.8 - CROSS_PREFIX=$HOST- ./configure --prefix=$INSTALLPREFIX --static - make - make install - cd .. - # - tar xzf $INDIR/libpng-1.6.10.tar.gz - cd libpng-1.6.10 - OPT="-O2" - CPPFLAGS="${OPT} -I$INSTALLPREFIX/include" CFLAGS="${OPT} -I$INSTALLPREFIX/include" LDFLAGS="${OPT} -L$INSTALLPREFIX/lib" ./configure --disable-shared --prefix=$INSTALLPREFIX --host=$HOST - make $MAKEOPTS - make install - cd .. - # - mkdir icuCross - cd icuCross - tar xzf $INDIR/icu4c-55_1-src.tgz - cd icu/source - mkdir -p $TEMPDIR/icu - ./runConfigureICU MinGW --prefix=$TEMPDIR/icu --enable-static --disable-shared - make - make install - cd ../../.. - #rm -rf icu - tar xzf $INDIR/icu4c-55_1-src.tgz - cd icu/source - ./runConfigureICU MinGW --host=$HOST --with-cross-build=$BUILDDIR/icuCross/icu/source --prefix=$INSTALLPREFIX --enable-static --disable-shared - make - make install - cd ../.. - # - tar --warning=no-timestamp -xjf $INDIR/boost_1_55_0.tar.bz2 - cd boost_1_55_0 - GCCVERSION=$($HOST-g++ -E -dM $(mktemp --suffix=.h) | grep __VERSION__ | cut -d ' ' -f 3 | cut -d '"' -f 2) - echo "using gcc : $GCCVERSION : $HOST-g++ - : - $HOST-windres - $HOST-ar - -frandom-seed=boost1 - $HOST-ranlib - ;" > user-config.jam - ./bootstrap.sh --without-icu - - # Workaround: Upstream boost dev refuses to include patch that would allow Free Software cross-compile toolchain to work - # This patch was authored by the Fedora package developer and ships in Fedora's mingw32-boost. - # Please obtain the exact patch that matches the above sha256sum from one of the following mirrors. - # - # Read History: https://svn.boost.org/trac/boost/ticket/7262 - # History Mirror: http://rose.makesad.us/~paulproteus/mirrors/7262%20Boost.Context%20fails%20to%20build%20using%20MinGW.html - # - # Patch: https://svn.boost.org/trac/boost/raw-attachment/ticket/7262/boost-mingw.patch - # Patch Mirror: http://wtogami.fedorapeople.org/boost-mingw-gas-cross-compile-2013-03-03.patch - # Patch Mirror: http://mindstalk.net/host/boost-mingw-gas-cross-compile-2013-03-03.patch - # Patch Mirror: http://rose.makesad.us/~paulproteus/mirrors/boost-mingw-gas-cross-compile-2013-03-03.patch - patch -p0 < $INDIR/boost-mingw-gas-cross-compile-2013-03-03.patch - - # Bug Workaround: boost-1.54.0 broke the ability to disable zlib, still broken in 1.55 - # https://svn.boost.org/trac/boost/ticket/9156 - sed -i 's^\[ ac.check-library /zlib//zlib : /zlib//zlib^^' libs/iostreams/build/Jamfile.v2 - sed -i 's^zlib.cpp gzip.cpp \]^^' libs/iostreams/build/Jamfile.v2 - - # http://statmt.org/~s0565741/software/boost_1_52_0/libs/context/doc/html/context/requirements.html - # "For cross-compiling the lib you must specify certain additional properties at bjam command line: target-os, abi, binary-format, architecture and address-model." - ./bjam toolset=gcc binary-format=pe target-os=windows threadapi=win32 address-model=$BITS threading=multi variant=release link=static runtime-link=static --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged --build-type=complete --prefix="$INSTALLPREFIX" $MAKEOPTS install - # post-process all generated libraries to be deterministic - # extract them to a temporary directory then re-build them deterministically - for LIB in $(find $INSTALLPREFIX -name \*.a); do - rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR - $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt - rm $LIB - $HOST-ar crsD $LIB $(cat /tmp/list.txt) - done - # - cd $INSTALLPREFIX - find include lib | sort | tar --no-recursion -cJf $OUTDIR/shadow-deps-win$BITS-gitian.tar.xz -T - - done # for BITS in diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml deleted file mode 100644 index a4f4939975..0000000000 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ /dev/null @@ -1,63 +0,0 @@ ---- -name: "shadow" -suites: -- "trusty" -architectures: -- "i386" -- "amd64" -packages: -- "g++" -- "libqt5webkit5-dev" -- "qt5-qmake" -- "qt5-default" -- "qttools5-dev-tools" -- "git-core" -- "pkg-config" -- "libtool" -- "automake" -- "faketime" -- "bsdmainutils" -reference_datetime: "2015-05-25 00:00:00" -remotes: -- "url": "https://github.com/ShadowProject/shadowcoin.git" - "dir": "shadowcoin" -files: -- "shadow-deps-linux32-gitian.tar.xz" -- "shadow-deps-linux64-gitian.tar.xz" -script: | - #Integrity check - echo "0d1e171cd3683f2ebb8e3dc1ab29bdcca4ed136b4ee30d376f1c3cf8c29ea7d0 shadow-deps-linux32-gitian.tar.xz" |sha256sum -c - echo "3f3f36e20fc1c3dcd00a4f32a7f07172989933b2b8534147fec896de1b520b3b shadow-deps-linux64-gitian.tar.xz" |sha256sum -c - STAGING="$HOME/install" - OPTFLAGS='-O2' - BINDIR="${OUTDIR}/bin/${GBUILD_BITS}" # 32/64 bit build specific output directory - TEMPDIR="$HOME/tempdir" - if [ "$GBUILD_BITS" == "32" ]; then - export LD_PRELOAD=/usr/lib/i386-linux-gnu/faketime/libfaketime.so.1; - else - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1; - fi - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - export LIBRARY_PATH="$STAGING/lib" - mkdir -p ${BINDIR} - # - mkdir -p $STAGING - cd $STAGING - tar xf ../build/shadow-deps-linux${GBUILD_BITS}-gitian.tar.xz - cd ../build - # - cd shadowcoin - mkdir -p $OUTDIR/src - git archive HEAD | tar -x -C $OUTDIR/src - cp $OUTDIR/src/doc/README $OUTDIR - cp $OUTDIR/src/COPYING $OUTDIR - cd src - make -f makefile.unix STATIC=1 OPENSSL_INCLUDE_PATH="$STAGING/include" OPENSSL_LIB_PATH="$STAGING/lib" $MAKEOPTS shadowcoind USE_UPNP=1 BOOST_LIB_SUFFIX="-mt" DEBUGFLAGS= - mkdir -p $STAGING/bin/$GBUILD_BITS - install -s shadowcoind $OUTDIR/bin/$GBUILD_BITS - # - cd .. - qmake INCLUDEPATH="$STAGING/include" LIBS="-L$STAGING/lib" BOOST_LIB_SUFFIX="-mt" RELEASE=1 USE_QRCODE=1 - make $MAKEOPTS - install shadow $OUTDIR/bin/$GBUILD_BITS diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml deleted file mode 100644 index 37a1276f62..0000000000 --- a/contrib/gitian-descriptors/gitian-osx.yml +++ /dev/null @@ -1,88 +0,0 @@ ---- -name: "shadow" -suites: -- "trusty" -architectures: -- "amd64" -packages: -- "git-core" -- "clang" -- "llvm-dev" -- "unzip" -- "zip" -- "nsis" -- "faketime" -- "autoconf2.13" -- "libtool" -- "automake" -- "pkg-config" -- "bsdmainutils" -- "python" -- "genisoimage" -reference_datetime: "2013-06-01 00:00:00" -remotes: -- "url": "https://github.com/ShadowProject/shadowcoin.git" - "dir": "shadowcoin" -files: -- "qt-osx-5.5.0-gitian.tar.xz" -- "shadow-deps-osx-gitian.zip" -- "osxcross.tar.xz" -script: | - # Defines - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - INDIR=$HOME/build - OPTFLAGS='-O2' - TEMPDIR="$HOME/tempdir" - BUILDDIR=$HOME/build - DEPSDIR=$HOME/deps - HOST=x86_64-apple-darwin13 - DISTNAME=x86_64-darwin - export PATH=$DEPSDIR/host/bin:$DEPSDIR:$DEPSDIR/bin:$PATH - NEEDDIST=1 - # Qt: workaround for determinism in resource ordering - # Qt5's rcc uses a QHash to store the files for the resource. - # A security fix in QHash makes the ordering of keys to be different on every run - # (https://qt.gitorious.org/qt/qtbase/commit/c01eaa438200edc9a3bbcd8ae1e8ded058bea268). - # This is good in general but qrc shouldn't be doing a traversal over a randomized container. - # The thorough solution would be to use QMap instead of QHash, but this requires patching Qt. - # For now luckily there is a test mode that forces a fixed seed. - export QT_RCC_TEST=1 - mkdir -p $BUILDDIR $BINDIR $DEPSDIR - cd $DEPSDIR - unzip -o $BUILDDIR/shadow-deps-osx-gitian.zip - tar xf $BUILDDIR/osxcross.tar.xz - mkdir -p $HOME/install - cd $HOME/install - tar xf $BUILDDIR/qt-osx-5.5.0-gitian.tar.xz - # - cd $BUILDDIR/shadowcoin - mkdir -p $OUTDIR/src - git archive HEAD | tar -x -C $OUTDIR/src - cp $OUTDIR/src/doc/README $OUTDIR/readme.txt - cp $OUTDIR/src/COPYING $OUTDIR/COPYING.txt - # - #cd src - #make -f makefile.linux-mingw HOST="$HOST" DEPSDIR="$DEPSDIR" CURDIR="$BUILDDIR/shadowcoin/src" STATIC=1 $MAKEOPTS USE_UPNP=1 BOOST_LIB_SUFFIX="-mt-s" DEBUGFLAGS= - #cp shadowcoind.exe $BINDIR/ - #cd .. - # - #$DEPSDIR/qt/host/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/lib BOOST_INCLUDE_PATH=$HOME/build/include BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1h OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1h/include INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1 - ~/install/host/bin/qmake -xplatform macx-clang-linux RELEASE=1 QMAKE_LRELEASE="~/install/host/bin/lrelease" MINIUPNPC_LIB_PATH="$DEPSDIR/lib" MINIUPNPC_INCLUDE_PATH="$DEPSDIR/include" BDB_LIB_PATH="$DEPSDIR/lib" BDB_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_PATH="$DEPSDIR/lib" BOOST_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="-mt-s" OPENSSL_LIB_PATH="$DEPSDIR/lib" OPENSSL_INCLUDE_PATH="$DEPSDIR/include" INCLUDEPATH="$DEPSDIR/include" DEFINES="BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 USE_BUILD_INFO=1" QMAKE_CXXFLAGS+=" -I/home/ubuntu/deps/SDK/MacOSX10.9.sdk/usr/include -DBOOST_HAS_INT128=1 -frandom-seed=shadow" - make $MAKEOPTS - # macdeploy: TODO: .dmg - export OTOOL=${HOST}-otool - export INSTALLNAMETOOL=${HOST}-install_name_tool - export STRIP=${HOST}-strip - chmod +x contrib/macdeploy/macdeployqtplus - OTOOL=${HOST}-otool INSTALLNAMETOOL=${HOST}-install_name_tool STRIP=${HOST}-strip contrib/macdeploy/macdeployqtplus Shadow.app - mkdir -p dist/.background - install contrib/macdeploy/background.png dist/.background - install contrib/macdeploy/DS_Store dist/.DS_Store - cd dist - ln -sf /Applications Applications - cd .. - genisoimage -no-cache-inodes -l -probe -V "Shadow" -no-pad -r -apple -o Shadow.tmp.dmg dist - dmg dmg Shadow.tmp.dmg $OUTDIR/Shadow.dmg - # diff --git a/contrib/gitian-descriptors/gitian-win.yml b/contrib/gitian-descriptors/gitian-win.yml deleted file mode 100644 index 3fbe018e63..0000000000 --- a/contrib/gitian-descriptors/gitian-win.yml +++ /dev/null @@ -1,102 +0,0 @@ ---- -name: "shadow" -suites: -- "trusty" -architectures: -- "amd64" -packages: -- "mingw-w64" -- "g++-mingw-w64" -- "git-core" -- "nsis" -- "faketime" -- "autoconf2.13" -- "libtool" -- "automake" -- "pkg-config" -- "bsdmainutils" -reference_datetime: "2013-06-01 00:00:00" -remotes: -- "url": "https://github.com/ShadowProject/shadowcoin.git" - "dir": "shadowcoin" -files: -- "qt-win32-5.5.0-gitian.tar.xz" -- "qt-win64-5.5.0-gitian.tar.xz" -- "shadow-deps-win32-gitian.tar.xz" -- "shadow-deps-win64-gitian.tar.xz" -script: | - # Defines - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - INDIR=$HOME/build - OPTFLAGS='-O2' - TEMPDIR="$HOME/tempdir" - - NEEDDIST=1 - # Qt: workaround for determinism in resource ordering - # Qt5's rcc uses a QHash to store the files for the resource. - # A security fix in QHash makes the ordering of keys to be different on every run - # (https://qt.gitorious.org/qt/qtbase/commit/c01eaa438200edc9a3bbcd8ae1e8ded058bea268). - # This is good in general but qrc shouldn't be doing a traversal over a randomized container. - # The thorough solution would be to use QMap instead of QHash, but this requires patching Qt. - # For now luckily there is a test mode that forces a fixed seed. - export QT_RCC_TEST=1 - for BITS in 32 64; do # for architectures - # - STAGING=$HOME/staging${BITS} - BUILDDIR=$HOME/build${BITS} - BINDIR=$OUTDIR/$BITS - DEPSDIR=$HOME/deps${BITS} - if [ "$BITS" == "32" ]; then - HOST=i686-w64-mingw32 - DISTNAME=i686-win - else - HOST=x86_64-w64-mingw32 - DISTNAME=x86_64-win - fi - export PATH=$STAGING/host/bin:$PATH - rm -rf $DEPSDIR - rm -rf $BUILDDIR - rm -rf $STAGING - mkdir -p $STAGING $BUILDDIR $BINDIR $DEPSDIR - # - cd $STAGING - #mkdir qt - #cd qt - #5edf8d14e47eb6438d3b5a20ed577343a07512eb220e6f83cbb3fbd33112a776 qt-win32-5.5.0-gitian-r3.zip - #75a3b425f08969983b2faf0af83b01fd753f99a15ced0b6f998d4db0a1c077f3 qt-win64-5.5.0-gitian-r3.zip - - tar xf $INDIR/qt-win${BITS}-5.5.0-gitian.tar.xz - cd $DEPSDIR - tar xf $INDIR/shadow-deps-win${BITS}-gitian.tar.xz - # - cd $BUILDDIR - cp -r ../build/shadowcoin . - cd shadowcoin - mkdir -p $OUTDIR/src - git archive HEAD | tar -x -C $OUTDIR/src - cp $OUTDIR/src/doc/README_windows.txt $OUTDIR/readme.txt - cp $OUTDIR/src/COPYING $OUTDIR/COPYING.txt - # - cd src - make -f makefile.linux-mingw HOST="$HOST" DEPSDIR="$DEPSDIR" CURDIR="$BUILDDIR/shadowcoin/src" STATIC=1 $MAKEOPTS USE_UPNP=1 BOOST_LIB_SUFFIX="-mt-s" DEBUGFLAGS= - cp shadowcoind.exe $BINDIR/ - cd .. - # - #$DEPSDIR/qt/host/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/lib BOOST_INCLUDE_PATH=$HOME/build/include BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1h OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1h/include INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1 - $STAGING/host/bin/qmake -xplatform win32-g++ RELEASE=1 QMAKE_LRELEASE="$STAGING/host/bin/lrelease" MINIUPNPC_LIB_PATH="$DEPSDIR/lib" MINIUPNPC_INCLUDE_PATH="$DEPSDIR/include" BDB_LIB_PATH="$DEPSDIR/lib" BDB_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_PATH="$DEPSDIR/lib" BOOST_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="_win32-mt-s" OPENSSL_LIB_PATH="$DEPSDIR/lib" OPENSSL_INCLUDE_PATH="$DEPSDIR/include" INCLUDEPATH="$DEPSDIR/include" DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_CXXFLAGS=-frandom-seed=shadow USE_BUILD_INFO=1 - make $MAKEOPTS - cp release/shadow.exe $BINDIR/ - # - unset LD_PRELOAD - unset FAKETIME - done # for BITS in - # - # sort distribution tar file and normalize user/group/mtime information for deterministic output - mkdir -p $OUTDIR/src - rm -rf $TEMPDIR - mkdir -p $TEMPDIR - cd $TEMPDIR - cd $BINDIR - #tar -xvf $HOME/build/shadowcoin/$DISTNAME | sort | tar --no-recursion -cT /dev/stdin --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 --mtime="$REFERENCE_DATETIME" | gzip -n > $OUTDIR/src/$DISTNAME diff --git a/contrib/gitian-descriptors/osxcross.yml b/contrib/gitian-descriptors/osxcross.yml deleted file mode 100644 index 7e7816ae06..0000000000 --- a/contrib/gitian-descriptors/osxcross.yml +++ /dev/null @@ -1,61 +0,0 @@ ---- -name: "osxcross" -suites: -- "trusty" -architectures: -- "amd64" -packages: -- "clang" -- "llvm-dev" -- "libxml2-dev" -- "uuid-dev" -- "libssl-dev" -- "bsdmainutils" -- "zip" -- "cmake" -reference_datetime: "2013-06-01 00:00:00" -remotes: -- "url": "https://github.com/tpoechtrager/osxcross.git" - "dir": "osxcross" -- "url": "https://github.com/planetbeing/libdmg-hfsplus" - "dir": "libdmg-hfsplus" -files: -- "MacOSX10.9.sdk.tar.xz" -script: | - # Defines - export TZ=UTC - export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" - BUILDDIR=$HOME/build - PREFIX=$HOME/install - mkdir -p $BUILDDIR $PREFIX - cd $BUILDDIR - PATH=$PATH:$BUILDDIR - - # Build OSX Cross - cd osxcross - ln -s $HOME/build/MacOSX10.9.sdk.tar.xz tarballs/ - UNATTENDED=1 ./build.sh - cd target - mv * $PREFIX - # Fix broken symlinks - rm -f $PREFIX/bin/osxcross-macports $PREFIX/bin/osxcross-mp $PREFIX/bin/omp - mv ../tools/osxcross-macports $PREFIX/bin - cd $PREFIX/bin - ln -sf osxcross-macports osxcross-mp - ln -sf osxcross-macports omp - cd $PREFIX/SDK/MacOSX10.9.sdk/usr/include - rm stdarg.h - ln -sf ../../System/Library/Frameworks/Kernel.framework/Versions/A/Headers/stdarg.h . - cd ../share - rm -rf man # No need for manuals... - # Build hdutil and .dmg dependencies - cd $BUILDDIR/libdmg-hfsplus - cmake CMakeLists.txt - make - mv dmg/dmg $PREFIX/bin - mv hfs/hfsplus $PREFIX/bin - mv hdutil/hdutil $PREFIX/bin - cd $PREFIX - # Adjust timestamps on files, for deterministic tar output - find . -print0 | xargs -r0 touch -t 200001010000 - find | sort | tar --no-recursion -cJf $OUTDIR/osxcross.tar.xz -T - diff --git a/contrib/gitian-descriptors/qt-osx.yml b/contrib/gitian-descriptors/qt-osx.yml deleted file mode 100644 index fce7cb1fe0..0000000000 --- a/contrib/gitian-descriptors/qt-osx.yml +++ /dev/null @@ -1,238 +0,0 @@ ---- -name: "shadow-qt" -suites: -- "trusty" -architectures: -- "amd64" -packages: -- "clang" -- "llvm-dev" -- "zip" -- "unzip" -- "faketime" -- "libz-dev" -- "ruby-full" -- "perl" -- "python" -- "m4" -- "bison" -- "gperf" -- "sharutils" -reference_datetime: "2011-01-30 00:00:00" -remotes: [] -files: -- "qt-everywhere-opensource-src-5.5.0.tar.xz" -- "shadow-deps-osx-gitian.zip" -- "flex-2.5.38.tar.gz" -- "osxcross.tar.xz" -script: | - # Integrity Check - echo "7ea2a16ecb8088e67db86b0835b887d5316121aeef9565d5d19be3d539a2c2af qt-everywhere-opensource-src-5.5.0.tar.xz" | sha256sum -c - echo "16d68bae5336c0698817bb5a1a4bd9a6804263608fdf553ca63fd90b682ec366 shadow-deps-osx-gitian.zip" | sha256sum -c - echo "80f7c7188d7611e47e47d2a70c8ef65026c1cf71ddeb4ace9b1be5b8a76ffbd2 flex-2.5.38.tar.gz" | sha256sum -c - # - # Defines - export TZ=UTC - BUILDDIR=$HOME/build - TEMPDIR=$HOME/tmp - INSTALLPREFIX=$HOME/install - DEPSDIR=$HOME/deps - HOST=x86_64-apple-darwin13 - MIN_VERSION=10.6 - SDK_VERSION=10.9 - SDK=${DEPSDIR}/SDK/MacOSX${SDK_VERSION}.sdk - # - # Qt: workaround for determinism in resource ordering - # Qt5's rcc uses a QHash to store the files for the resource. - # A security fix in QHash makes the ordering of keys to be different on every run - # (https://qt.gitorious.org/qt/qtbase/commit/c01eaa438200edc9a3bbcd8ae1e8ded058bea268). - # This is good in general but qrc shouldn't be doing a traversal over a randomized container. - # The thorough solution would be to use QMap instead of QHash, but this requires patching Qt. - # For now luckily there is a test mode that forces a fixed seed. - export QT_RCC_TEST=1 - # - # Fix our paths - export PATH="$DEPSDIR/bin:$DEPSDIR/lib:$PATH" - export INCLUDE="$DEPSDIR/include:$INCLUDE" - export LIB="$DEPSDIR/lib:$LIB" - # - mkdir -p $INSTALLPREFIX $INSTALLPREFIX/host/bin $DEPSDIR $BUILDDIR - # - cd $BUILDDIR - # - tar xzf $BUILDDIR/flex-2.5.38.tar.gz - cd flex-2.5.38 - ./configure --prefix=$DEPSDIR - make - make install - cd .. - # - # Need mingw-compiled openssl from shadow-deps: - cd $DEPSDIR - unzip -o $BUILDDIR/shadow-deps-osx-gitian.zip - tar xf $BUILDDIR/osxcross.tar.xz - tar xf qt-everywhere-opensource-src-5.5.0.tar.xz - # - QTDIR=$BUILDDIR/qt-everywhere-opensource-src-5.5.0 - cd $QTDIR - SPECDIR="qtbase/mkspecs" - SPECNAME="macx-clang-linux" - SPECFILE="${SPECDIR}/${SPECNAME}/qmake.conf" - rm -rf ${SPECDIR}/${SPECNAME} - cp -rp ${SPECDIR}/macx-clang ${SPECDIR}/${SPECNAME} - sed 's/qt_instdate=`date +%Y-%m-%d`/qt_instdate=2011-01-30/' -i qtbase/configure - sed 's/if \[ "$$$$XPLATFORM_MAC" = "yes" \]; then xspecvals=$$$$(macSDKify/if \[ "$$$$BUILD_ON_MAC" = "yes" \]; then xspecvals=$$$$(macSDKify/' -i qtbase/configure - # - sed 's/load(qt_config)//' -i $SPECFILE - cat > ${SPECFILE} < /tmp/list.txt - # rm $LIB - # $HOST-ar crsD $LIB $(cat /tmp/list.txt) - #done - # - cd $INSTALLPREFIX - # Remove unused non-deterministic stuff - rm host/bin/qtpaths lib/libQt5Bootstrap.a lib/libQt5Bootstrap.la - rm -f ${INSTALLPREFIX}/lib/Qt*.framework/Qt*.prl - cd include - ln -sf ../lib/QtNetwork.framework/Headers/ QtNetwork - ln -sf ../lib/QtWidgets.framework/Headers/ QtWidgets - ln -sf ../lib/QtGui.framework/Headers/ QtGui - ln -sf ../lib/QtCore.framework/Headers/ QtCore - ln -sf ../lib/QtTest.framework/Headers/ QtTest - ln -sf ../lib/QtWebKitWidgets.framework/Headers/ QtWebKitWidgets - cd .. - # as zip stores file timestamps, use faketime to intercept stat calls to set dates for all files to reference date - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - find -print0 | xargs -r0 touch # fix up timestamps before packaging - find | sort | tar --no-recursion -cJf $OUTDIR/qt-osx-5.5.0-gitian.tar.xz -T - diff --git a/contrib/gitian-descriptors/qt-win.yml b/contrib/gitian-descriptors/qt-win.yml deleted file mode 100644 index a2c6e9ad87..0000000000 --- a/contrib/gitian-descriptors/qt-win.yml +++ /dev/null @@ -1,256 +0,0 @@ ---- -name: "shadow-qt" -suites: -- "trusty" -architectures: -- "amd64" -packages: -- "mingw-w64" -- "g++-mingw-w64" -- "faketime" -- "libz-dev" -- "ruby-full" -- "perl" -- "python" -- "m4" -- "bison" -- "gperf" -- "sharutils" -- "zip" -- "unzip" -reference_datetime: "2011-01-30 00:00:00" -remotes: [] -files: -- "qt-everywhere-opensource-src-5.5.0.tar.xz" -- "shadow-deps-win32-gitian.tar.xz" -- "shadow-deps-win64-gitian.tar.xz" -- "flex-2.5.38.tar.gz" -script: | - # Integrity Check - echo "7ea2a16ecb8088e67db86b0835b887d5316121aeef9565d5d19be3d539a2c2af qt-everywhere-opensource-src-5.5.0.tar.xz" | sha256sum -c - echo "306264166531eecbb35ec645c425b1b5538e8ce3035d7bf599db0b2cc76c730f shadow-deps-win32-gitian.tar.xz" | sha256sum -c - echo "1c7c36ca02624fc2e0f026a84853217e84a9f27f8542a5b18d13164ea48edea7 shadow-deps-win64-gitian.tar.xz" | sha256sum -c - echo "80f7c7188d7611e47e47d2a70c8ef65026c1cf71ddeb4ace9b1be5b8a76ffbd2 flex-2.5.38.tar.gz" | sha256sum -c - # Defines - export TZ=UTC - INDIR=$HOME/build - TEMPDIR=$HOME/tmp - # Qt: workaround for determinism in resource ordering - # Qt5's rcc uses a QHash to store the files for the resource. - # A security fix in QHash makes the ordering of keys to be different on every run - # (https://qt.gitorious.org/qt/qtbase/commit/c01eaa438200edc9a3bbcd8ae1e8ded058bea268). - # This is good in general but qrc shouldn't be doing a traversal over a randomized container. - # The thorough solution would be to use QMap instead of QHash, but this requires patching Qt. - # For now luckily there is a test mode that forces a fixed seed. - export QT_RCC_TEST=1 - # - export OLDPATH="$PATH" - export OLDINCLUDE="$INCLUDE" - export OLDLIB="$LIB" - - for BITS in 32 64; do # for architectures - # - INSTALLPREFIX=$HOME/staging${BITS} - BUILDDIR=$HOME/build${BITS} - DEPSDIR=$HOME/deps${BITS} - if [ "$BITS" == "32" ]; then - HOST=i686-w64-mingw32 - else - HOST=x86_64-w64-mingw32 - fi - # - export PATH="$DEPSDIR/lib:$OLDPATH" - export INCLUDE="$DEPSDIR/include:$OLDINCLUDE" - export LIB="$DEPSDIR/lib:$OLDLIB" - export PATH="$DEPSDIR/bin:$PATH" - - # - mkdir -p $INSTALLPREFIX $INSTALLPREFIX/host/bin $DEPSDIR $BUILDDIR - # - cd $BUILDDIR - # - tar xzf $INDIR/flex-2.5.38.tar.gz - cd flex-2.5.38 - ./configure --prefix=$DEPSDIR - make - make install - cd .. - # - # Need mingw-compiled openssl from shadow-deps: - cd $DEPSDIR - tar xf $INDIR/shadow-deps-win${BITS}-gitian.tar.xz - # - ln -sf $DEPSDIR/lib/libsicudt.a $DEPSDIR/lib/libicudt.a - ln -sf $DEPSDIR/lib/libsicuin.a $DEPSDIR/lib/libicuin.a - ln -sf $DEPSDIR/lib/libsicuio.a $DEPSDIR/lib/libicuio.a - ln -sf $DEPSDIR/lib/libsicule.a $DEPSDIR/lib/libicule.a - ln -sf $DEPSDIR/lib/libsiculx.a $DEPSDIR/lib/libiculx.a - ln -sf $DEPSDIR/lib/libsicutest.a $DEPSDIR/lib/libicutest.a - ln -sf $DEPSDIR/lib/libsicutu.a $DEPSDIR/lib/libicutu.a - ln -sf $DEPSDIR/lib/libsicuuc.a $DEPSDIR/lib/libicuuc.a - # - cd $BUILDDIR - # - tar xf $INDIR/qt-everywhere-opensource-src-5.5.0.tar.xz - # - cd qt-everywhere-opensource-src-5.5.0 - QTDIR=$BUILDDIR/qt-everywhere-opensource-src-5.5.0 - - sed -i 's,\.exe,,' "$QTDIR/qtwebkit/Tools/qmake/mkspecs/features/functions.prf" - sed -i 's,\win_flex,flex,' "$QTDIR/qtwebkit/Tools/qmake/mkspecs/features/default_pre.prf" - # - # TODO: find better fix !? - sed -i 's/FLT_MANT_DIG/24/' "$QTDIR/qtwebkit/Source/WebCore/html/StepRange.cpp" - sed -i 's/DBL_MANT_DIG/53/' "$QTDIR/qtwebkit/Source/WebCore/html/StepRange.cpp" - # - # - SPECNAME="win32-g++" - SPECFILE="qtbase/mkspecs/${SPECNAME}/qmake.conf" - sed 's/qt_instdate=`date +%Y-%m-%d`/qt_instdate=2011-01-30/' -i qtbase/configure - #sed 's/EXTRA_LFLAGS=\n/EXTRA_LFLAGS= --enable-deterministic-ld\n/' -i qtbase/configure - sed --posix "s|QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport|QMAKE_CFLAGS\t\t= -pipe -fno-keep-inline-dllexport -isystem /usr/$HOST/include/ -frandom-seed=qtbuild -I$DEPSDIR/include|" -i ${SPECFILE} - #sed --posix "s|QMAKE_LFLAGS =|QMAKE_LFLAGS\t\t= -L$DEPSDIR/lib --enable-deterministic-ld|" -i ${SPECFILE} - sed --posix "s|QMAKE_LFLAGS =|QMAKE_LFLAGS\t\t= -L$DEPSDIR/lib|" -i ${SPECFILE} - sed "s/src_plugins.depends = src_sql src_xml src_network/src_plugins.depends = src_xml src_network/" -i qtbase/src/src.pro - #sed "s|X11/extensions/XIproto.h|X11/X.h|" -i qtbase/src/plugins/platforms/xcb/qxcbxsettings.cpp - # Before we tried to pass arguments to ar (static linking) in using QMAKE_LIB, however - # qt removes the arguments for ar and provides a script which makes it impossible to pass the determinism flag - - # so rather than try to replace ar, post-process all libraries and plugins at the end. - # - # Don't load faketime while compiling Qt, qmake will get stuck in nearly infinite loops - #export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - #export FAKETIME=$REFERENCE_DATETIME - # - # fputs not in std namespace? - #sed 's/std::fputs/fputs/' -i $QTDIR/qttools/src/windeployqt/main.cpp - # - CONFIG_OPTS=" - -opensource - -confirm-license - -release - -static - -xplatform $SPECNAME - -no-audio-backend - -no-glib - -no-dbus - -no-cups - -no-iconv - -no-gif - -no-freetype - -no-nis - -no-pch - -no-qml-debug - -nomake examples - -nomake tests - -no-feature-style-windowsmobile - -no-feature-style-windowsce - -no-sql-db2 - -no-sql-ibase - -no-sql-oci - -no-sql-tds - -no-sql-mysql - -no-sql-odbc - -no-sql-psql - -no-sql-sqlite - -no-sql-sqlite2 - -prefix $INSTALLPREFIX - -bindir ${INSTALLPREFIX}/host/bin - -device-option CROSS_COMPILE=${HOST}- - -icu - -v - -qt-libpng - -qt-libjpeg - -system-zlib - -qt-pcre - -no-pulseaudio - -no-openvg - -no-opengl - -no-xrender - -no-alsa - -no-mtdev - -no-mitshm - -no-kms - -no-reduce-relocations - -no-egl - -no-eglfs - -no-linuxfb - -no-xinput2 - -no-libudev - -no-gstreamer - -optimized-qmake - -skip qtwinextras - -skip qtandroidextras - -skip qtmacextras - -skip qtx11extras - -skip qtsvg - -skip qtxmlpatterns - -skip qtdeclarative - -skip qtquickcontrols - -skip qtmultimedia - -skip qtactiveqt - -skip qtlocation - -skip qtsensors - -skip qtconnectivity - -skip qtwebsockets - -skip qtwebchannel - -skip qtwebkit-examples - -skip qtimageformats - -skip qtgraphicaleffects - -skip qtscript - -skip qtquick1 - -skip qtwayland - -skip qtserialport - -skip qtenginio - -skip qtwebengine - -skip qt3d - -skip qtcanvas3d - -skip qtdoc" - OPENSSL_LIBS="-L$DEPSDIR/lib -lssl -lcrypto -lgdi32" ./configure $CONFIG_OPTS - # - #make qmake_all - #cd qtbase - #make -C src sub-corelib sub-network sub-widgets sub-gui sub-plugins sub-testlib - #make -C src sub-corelib-install_subtargets sub-network-install_subtargets sub-widgets-install_subtargets sub-gui-install_subtargets sub-plugins-install_subtargets sub-testlib-install_subtargets - #make -C ../qttools/src/linguist/lrelease - #make -C ../qttools/src/linguist/lrelease install_target - #make -C ../qttranslations - #make -C ../qttranslations install_subtargets - make $MAKEOPTS - make $MAKEOPTS install - # - cd $QTDIR/qtwebkit - sed 's,type nul,cat /dev/null,' -i Source/WebCore/DerivedSources.pri - for TARGET in Source/WebCore/Target.pri Source/WebKit2/Target.pri Source/JavaScriptCore/Target.pri Source/ThirdParty/leveldb/Target.pri Source/ThirdParty/ANGLE/Target.pri Source/WebKit/WebKit1.pro Source/WTF/WTF.pro - do - sed --posix 's/^CONFIG += staticlib optimize_full/CONFIG(shared, static|shared): CONFIG += staticlib optimize_full\nCONFIG(static, static|shared): CONFIG += optimize_full/' -i $TARGET - sed 's/^CONFIG += staticlib/CONFIG(shared, static|shared): CONFIG += staticlib/' -i $TARGET - echo "CONFIG(static, static|shared) { - target.path = \$\$[QT_INSTALL_LIBS] - INSTALLS += target - }" >> $TARGET - done - $INSTALLPREFIX/host/bin/qmake CONFIG+="release static" - make - make install - # - # post-process all generated libraries and plugins to be deterministic - # extract them to a temporary directory then re-build them deterministically - for LIB in $(find $INSTALLPREFIX -name *.a); do - rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR - $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt - rm $LIB - $HOST-ar crsD $LIB $(cat /tmp/list.txt) - done - # - cd $INSTALLPREFIX - # Remove unused non-deterministic stuff - rm host/bin/qtpaths.exe lib/libQt5Bootstrap.a lib/libQt5Bootstrap.la - # as zip stores file timestamps, use faketime to intercept stat calls to set dates for all files to reference date - export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - find -print0 | xargs -r0 touch # fix up timestamps before packaging - find | sort | tar --no-recursion -cJf $OUTDIR/qt-win${BITS}-5.5.0-gitian.tar.xz -T - - unset LD_PRELOAD - unset FAKETIME - rm -rf $BUILDDIR - done # for BITS in diff --git a/contrib/gitian-downloader/bluematt-key.pgp b/contrib/gitian-downloader/bluematt-key.pgp deleted file mode 100644 index fb6d9eb284..0000000000 Binary files a/contrib/gitian-downloader/bluematt-key.pgp and /dev/null differ diff --git a/contrib/gitian-downloader/devrandom-key.pgp b/contrib/gitian-downloader/devrandom-key.pgp deleted file mode 100644 index 71898127ba..0000000000 Binary files a/contrib/gitian-downloader/devrandom-key.pgp and /dev/null differ diff --git a/contrib/gitian-downloader/gavinandresen-key.pgp b/contrib/gitian-downloader/gavinandresen-key.pgp deleted file mode 100644 index f81f44e874..0000000000 Binary files a/contrib/gitian-downloader/gavinandresen-key.pgp and /dev/null differ diff --git a/contrib/gitian-downloader/laanwj-key.pgp b/contrib/gitian-downloader/laanwj-key.pgp deleted file mode 100644 index 559295109d..0000000000 --- a/contrib/gitian-downloader/laanwj-key.pgp +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: SKS 1.1.0 - -mQENBE5UtMEBCADOUz2i9l/D8xYINCmfUDnxi+DXvX5LmZ39ZdvsoE+ugO0SRRGdIHEFO2is -0xezX50wXu9aneb+tEqM0BuiLo6VxaXpxrkxHpr6c4jf37SkE/H0qsi/txEUp7337y3+4HMG -lUjiuh802I72p1qusjsKBnmnnR0rwNouTcoDmGUDh7jpKCtzFv+2TR2dRthJn7vmmjq3+bG6 -PYfqoFY1yHrAGT1lrDBULZsQ/NBLI2+J4oo2LYv3GCq8GNnzrovqvTvui50VSROhLrOe58o2 -shE+sjQShAy5wYkPt1R1fQnpfx+5vf+TPnkxVwRb3h5GhCp0YL8XC/BXsd5vM4KlVH2rABEB -AAG0K1dsYWRpbWlyIEouIHZhbiBkZXIgTGFhbiA8bGFhbndqQGdtYWlsLmNvbT6JATgEEwEC -ACIFAk5UtMECGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEHSBCwEjRsmmy6YIAK09 -buNXyYQrJBsX16sXxEhx5QPKyF3uHJDFJv66SdnpvIkNoznsaPiRJkbTANop93FZmaGa6wVn -zGDiz7jPA8Dpxx5aAYPhIT+zPJAdXWM3wJ/Gio9besRNzniai8Lwi5MZ9R/5yFGBobm6/AcN -4sUoqA3NSV2U3I29R0Vwlzo8GVtmyi9ENSi6Oo7AcXNTRt69cxW4nAHkB+amwwDJlcAb31ex -bogYXPhScwqQZixRr+JBkKxBjkTXXnQypT4KI5SegYwQVYfyiZmDP7UHKe/u6pSKKbVphLg8 -xLB5spcXse8/a2+onrbNlw6y8TXiJ++Z54PE7zztWTXf2huakeG5AQ0ETlS0wQEIAMNO3OkP -xoPRKWzBLcI7JRITAW+HNaLTq3uN2+4WxA57DEjbL9EDoAv+7wTkDAL40f0T+xiu6GJcLFjw -GJZu/tYu7+mErHjrdo+K4suCQt7w5EXCBvOLjhW4tyYMzNx8hP+oqzOW9iEC+6VV91+DYeqt -EkJuyVXOI4vzBlTw8uGow8aMMsCq8XVvKUZFTPsjGl197Q5B3A+ZOFCR8xqiqdPjuz6MglVV -oFdDNu3EZn8zkGsQlovXoE9ndVeVzx/XMNmsxFaMYsReUs253RIf1FEfgExID0fg2OnyLCjS -2iFW1RgajS+/saIkKl+N1iuMzJA7wMAM0plhRueOG0MtZSsAEQEAAYkBHwQYAQIACQUCTlS0 -wQIbDAAKCRB0gQsBI0bJpmsDB/4waenn2CvSHXyomykfpwf5lMte1V5LvH3z5R2LY+1NopRv -LSz3iC39x69XWiTbhywDfgafnGPW4pWBOff2/bu5/A6z1Hnan1vyrRRD/hx1uMJ7S6q+bIvZ -iVIg1p0jH6tdIIhwX3cydhdRZHo7e9oSMgOUWsr6Ar59NRo9CENwGPE4U61HXfOnxWdrFWoA -XdwZczBeLxmUy6Vo6sKqv+gE4bqrtAM0sY/MsQ9cU95x+52ox/sq44lQMwd3ZBYUP7B1qbHI -hZSZuch6MLi5scLPeau0ZvCaljiaMeivP5+x0gWPRs0kI+9sZxInbqvrsJ6oOBJM3xYGhtn1 -zZ7qmZR7 -=si/k ------END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/linux-download-config b/contrib/gitian-downloader/linux-download-config deleted file mode 100644 index aef614d0ca..0000000000 --- a/contrib/gitian-downloader/linux-download-config +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: bitcoin -urls: -- http://bitcoin.org/bitcoin-latest-linux-gitian.zip -rss: -- url: http://sourceforge.net/api/file/index/project-id/244765/mtime/desc/limit/100/rss - xpath: //item/link/text() - pattern: bitcoin-\d+.\d+.\d+-linux-gitian.zip -signers: - 0A82509767C7D4A5D14DA2301AE1D35043E08E54: - weight: 40 - name: BlueMatt - key: bluematt - BF6273FAEF7CC0BA1F562E50989F6B3048A116B5: - weight: 40 - name: Devrandom - key: devrandom - E463A93F5F3117EEDE6C7316BD02942421F4889F: - weight: 40 - name: Luke-Jr - key: luke-jr - D762373D24904A3E42F33B08B9A408E71DAAC974: - weight: 40 - name: "Pieter Wuille" - key: sipa - 77E72E69DA7EE0A148C06B21B34821D4944DE5F7: - weight: 40 - name: tcatm - key: tcatm - 01CDF4627A3B88AAE4A571C87588242FBE38D3A8: - weight: 40 - name: "Gavin Andresen" - key: gavinandresen - 71A3B16735405025D447E8F274810B012346C9A6: - weight: 40 - name: "Wladimir J. van der Laan" - key: laanwj -minimum_weight: 120 diff --git a/contrib/gitian-downloader/luke-jr-key.pgp b/contrib/gitian-downloader/luke-jr-key.pgp deleted file mode 100644 index c40917d78c..0000000000 Binary files a/contrib/gitian-downloader/luke-jr-key.pgp and /dev/null differ diff --git a/contrib/gitian-downloader/richardsmith-key.gpg b/contrib/gitian-downloader/richardsmith-key.gpg deleted file mode 100644 index 04d1d538be..0000000000 --- a/contrib/gitian-downloader/richardsmith-key.gpg +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.10 (GNU/Linux) - -mQINBFAsDREBEADD88DdBoGu/rMpNYWyzXNWfHI5su/JX1tfzM/pb/iSrC4ywOtZ -P7wCqqAB1lhuT94j2m8kpv/VSb98Q7ZURxbwY/zEQnDuifiBCj5hO4lWTdSKgmLy -8xVR7WHEYCscKFl92mG6tqDewnD2oX5NyJrFeXPAM9R9jBIDc2oyUVznv5Rb2YUp -D4rdIHbEMoe524Ucw8ez5Kxtf0OW0Zbrraq1utbcL3B99FMnoSaXq5AiGTmcI3Xm -Mx8T8E6I2gd6ZLEtJbgzG7B8so/0tbpGIYExzatjWEzuDEPAgAB028nNWf8q+SE+ -G3Zo/ZrCenGYPmDKIaSlqmdhqHe22AGtn+k6gzvLVN9MHY2exIWhu2R8uw6cGCbG -piw7HPDR0epgf5im50rr/k9ZgELhURqDezeHCwRBFtBZd+1sLgzMocYybq7XM9e6 -dcHRZoXamlMibKoYMp30jfyb5mVYwnOJAQNUkFxwZOJXONOvwEyO+89ep0c7H/I5 -h/4F7UGTpRB84HpkZCK+rxOg90UpOQEAA1OKi2od5DNBtu9JnXOD8Ki9lXHaGgL2 -H6Q+ugntvsYmcJZ22IkymZ1DPaEPJa8Y/pwovl9rYac1A1v9PFkl2XsE2EZyipmF -QjTSimnmvCCIXFSG7yN4iP/H/+vP8kdV2HuPfLnq7i0uIe9q9s0ogtZEpwARAQAB -tCVyaWNoYXJkc21pdGggPGljZWVhdHNjcmVhbUBnbWFpbC5jb20+iQI+BBMBAgAo -BQJQLA0RAhsDBQkSzAMABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCiiuz9 -atLt+MecD/9qO/1ALT4EH5MewKG6mMT9hrbsIf07Cc0uKl4/hpbElK2iEclcXdj6 -fXyxVF0+1Vl8Bfkj47n4sL8aOmVjZ8YpFcW59GqE9Me9Sw7bPE5x8Ly2Am+NMkhz -myq3aJX54bzUGvBxCNwZYV46DxKjsOLrw2I/Tzt2zjzROlCW/r4IpEuFAQY5zzNv -YryzWuaJF27pVZH2od9X0nEfn7qBoDYWEtvlI5jfsL4HI0bd4Ws9xMrkjHKBaFaC -H5sxZS7mxicTRf4qeP/XKxdEI461sg28wYewnIBqYm8OEkwFS3YB51hlA1ufi3Za -m5sMmiut8H5jq0QXH+LWWQAADOnCbMrr3zbkaueMvLzjUsR1EtbYlpGPHXwk9eVk -9XckZ1hMjUl5VCBLzquuGuJonUfb5plxEDJ2MCkkkhBJ6DR3yMpjS//ogi52fwlI -0yltpyXUXcgURwvQ1pwpTkjbD09KqUmxViULFMLXT3e6vRc5pH9e7mja5LxSe/No -Kqm0RdFlM/2CMDQ0ByNUGWjAPozuxm5PeO0ypS3+tDBiLcgZnayWelsuHzR4BCmk -LkXiNTrIlXSJpBWsg5D99ni8VrFGLwn9PBaDrOsztfL8iDFgVUzPbizbEEAbKiYq -lo/qnq2nrxR7YtChJQwhKlc0NHOWmqJOp2+AIW+L1LfDiVo3wuH6XrkCDQRQLA0R -ARAA0e4sHZQDTZZ9DdmML1yhL9C0DqsBaDTiKQY+s9lanrjSs7HKgv8bK+gTNvng -/O0M1/xhSOsgepq5lpdl7h5QqGZ1oCSF3QYxCeGe85g9SKBsUFNbYwdS2JXBwO3V -1euBM2pNSmNL0PYiTsWylUQPymUZ4ww2n6giVYWmsEqSF/Ld/kkfODzJAP4AwBIJ -f+2GY+vWcvxNKES1JT98p/dlMMMXeDKqcXIIzoZbnpk5gd21oGXbMwaf9s8bK8ob -BMqZCORmSnG9npRSfFXDHSa2983nGPUoL8bMzeyDu/1PViclxTWtI012gYp99pRm -JXzGiGdBmuLItAQW5o8DWXfiiobYd5H0+PfAX62H5oXTWH1T5jblyxcyA+fYU71t -wCRZ93OEHv0Q/RafH6Fr+ltZVnpPmYpJ4gyWpyoP2j91N6KaVyrfbCaN0Cyv4bQG -JCg8Ss8UqOnsFj88KikYwRMVxJp5E6MpM0yEuIU+vrB+58yOmeNCQ+LwBNnltCmC -9v0YYibMbmUv4wRvScGHPAfJ3CWndRbIObXoMlLs9nayMCqpBTEDGhTKheocQdMo -aLt3OJsaTmFKE7iFGKImGgUdD94kbkzb7R+ZRlI9mNNiq+Kuj19CSAVdM9vttjyt -whPYPR6d4GNWZFS+Gg9k2Bv7O2cDYh78Go7ywuAtPkcTMv8AEQEAAYkCJQQYAQIA -DwUCUCwNEQIbDAUJEswDAAAKCRCiiuz9atLt+PAXEACLd967Sz06DpjMHqgHahCr -m1Kt13EM/mbrnoFJWePTp1JAtlzSMXKsWo7zOCC71dyI8PEfjylsZiuC3uL54DDl -JlQmlXa6/qi1KnqroJEkZ+YoDnIy/jiN1L3SqMVwUeQrd5N0koPZflpnoAq1np97 -wWDwK8NqALq5VsqXhVWvXeqjDM1q9+7fO7xDQLFZ0MNhqoMBdE4QRRkw55XWJKS9 -RI/hxDFuCJlK04eFTU/5pUSksEZZ0vl43YkXlN54qiyOvkVL2Aq9gVgvdaqGbG8x -kVSEtJK9XTwlo+BA/sFCMlR4NL1XCrrvv9/1SwiFAFSV4dz6Cg9ObAonNh0mbnwj -IaaBzS18pqRzqZg69aZzlKp6LxBYOmZTQuPiwdF0Cn/b5VNtgLKInmOvDvpHFWE2 -H4dU3Al/B+3o1Bm24mAgLQHGFh4GN4BV1ge+Lijiz+N0sUfPsqtHaP3RNZsm/4oL -zyVuoSMRL+NtkB03SID7CBzrVLGWRGgeWjLfLz+wnrDGlWz0N7dKJx76nayTvsM2 -xd81jat8FyHFFoB5D4xn+czbkCq1k3giyKqilz2NNXX0G7kUiU0D+tvIb76qP389 -9uiMAuC5q1Ibo+k3pOZrWWHX3c9HB1Qlry9Qw57Y4ncqjRcdMf884da5mTmCjl/d -EwL78xfzdw9iYRRwoeP+IQ== -=jMKy ------END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/scottnadal-key.gpg b/contrib/gitian-downloader/scottnadal-key.gpg deleted file mode 100644 index 678ec7e962..0000000000 --- a/contrib/gitian-downloader/scottnadal-key.gpg +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.10 (GNU/Linux) - -mQINBFAs/eYBEADJq87tlE9Lu4dtgzKcnLrY6m7Eab3fPL4aW+g1PC3O4rMn2jjT -vp4TU+DHBgt9r+DBpiK48v9fd3BNpg8mB25pDgdWtoBj64D1YxlU/NxbwnR4SGDD -nSCjp/Z+ZxTCjUHfAu384P9nsSvMFksVhhzgd9JXvxJzB61odjgPRVs5buJtLzrg -v7jJdBZPDC2R9kJIggdrrN4sWhE9o3VQ4kFMxEu3KGJSLZuGRdwr1Ni5jxpo1Hio -Xf1LDKJ5+kTb2YpHL9trxe9ELt3HLa5mryCVff1wwN+MBwsXdvxTjF2RXJUWbKlC -M78DjLCCyM5T1XPb4D0dp/olEhNqI6IrBhR9rEOVR5Rbsl49lfhQIUEDAVlogAoG -yzwQMO/NGOD0NUgQV/7ZIN1fpKPuipJsCId2UvzuxzjwtMf20VUI5OPKRk122OOv -9c91y9fI9H6rgHKcS96HLM840pkQmr00CpsEtCjtYxvOKCakCcbq4SHZSrB2gjcK -msY/DfEjO5An/LXh5IbEiSSgSXfCTSXMU7yB36yX4CniIDTEe044DlTwhSGUnw65 -alTp4taaswjB+yhAWI5IXOGifFyOAFW0BhGpDHuWoevUHKYXMla9czB0Jn1VIX/E -bAPxi5sZKHjhhjZY6ngZAO2HXliWHXIeLvwjUdE0+AAP5B+eh7kyMV7mlQARAQAB -tCJzY290dG5hZGFsIDxzY290dC5uYWRhbEBnbWFpbC5jb20+iQI+BBMBAgAoBQJQ -LP3mAhsDBQkSzAMABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAu6TbaW7w+ -y477EAC9yNgDSSdSmqUVQdrPdEn1RyZl4sjAznuRk+CKffi83/ZwjZJkT12GapPF -9/wW/YXGGbb2wUK17xIz8ZcKCjZeSf8w0HNwFfy8bOOkewpJ3QMp+PO61KTa1sfn -hJvPKQTxKAM49tiq1O/x5hppKCrJjPzlH41+4rfrFk7+v5ZHusIDqxIzepS+MyNy -fhmCq1Pd2w/R3zHIDH7R8uuuJKDDkZhhJgQjjxGo4Mqo6UaJOHsmLNGmQi+at/Eu -BssrO2OHSShCvA6/fvKXN4XEFxm7w3WUylw3h47j1hXhQClqBJrLA08N7+iNqKKg -DX2ePpWIptwjJyqn/6UtEfFyeIBQITpxyrVoWCtdnNdo03AQpraPV8DICyxQY3e9 -FFKkrod+XKeGqs7Lsk5mPUOQVl7KoCfmW+M1vcvEpK7wElSRUdy0Fw0s6BiYN1xH -baOsBIvc1KWN9x//ctJPcjxEONiPDKv1dyWUYIWieSTrFjP6aOLoe0uGkDXxxlEs -4X4ZAgLUXs4j62on9lsFH1pVAQOpbmVS06vmmHQTR3skG9D8s4jVn1dyJQ35I0ml -P0IH4DazTTld6laYptd4CqlohotME+yh9VqiQ0Tg1u6L4VwYsBN6AKGgOq+T8T0b -VPNK1+Si9Poq4J/wPPqUQRzxSgWbX5Ho/k+6t0R8dpne6oFGrbkCDQRQLP3mARAA -mIA7DN9DT1xN0uazTRXV4lqFTuG+86iPU35eUtReGcChYwq0V56bV+gywObo4fAP -QsynzCUvtk+8FSL++SLysIaD/VAu3YAqsI/shzA/KG77ZqgR3/E6pnkaN8aFVPRf -dFFbBYioXP2MkOMd2MqPSnUI5+dMKnJ4HBQvucG5yxdR7VKP9VxBwQcfZEcE+l8a -yRyaAr3NNDm69Qxb6TeiJlwSQvcY4FhnP9EpIW11DEIvCEKKr6X0UoWFTm7dSfLk -n2e1IsK1kk3Uy45KzrR/4dYB7PhEP0VjLZ4bueXMjvZW8YBUoC6emOU/3B+/j3GO -N+62XE9u0Vsh2uzRnOqjucn+i83Og7+1VaXVRh77giWTlDTAeJARRGa6ScmxI9Vk -MJgbe2oseDxTv9QF5guqLUNe0MlUZ/9SXXjou/D+L/S9Beo775sfn57gANDbaGRm -9795YyAHphl26Qp7es3uj99mlK7tGDHajb2JkJutMtaevGuVNN9QlUrhr7klPOAd -6jdAxsU9Sn/gnUBZJbCFoQlUveEjkSu24/tYoo6Oy7VgMxwt/CMhB5HzVOpY20Ym -BDTO9P9MBeD0/wSPyanHc+XVepXWwsp4EC5RVnJFLf+o3vmeQYqiF0qXuapLmLnK -XqSD+M+uIr15XxTLLx9vsjUVN/xkLu7DCgyVeRA3ytUAEQEAAYkCJQQYAQIADwUC -UCz95gIbDAUJEswDAAAKCRAu6TbaW7w+yxsEEACu+7g6trtjYQZ3FStCK8OZOAJl -jefUONgZX8woSSmyeVlg5Ex9cSvAgfOhiM2J2+K8aI53woOsiE3LihElaX+Qi+hE -GgjsFdd6lNn3i5gFydDHs6uLvtVAXxAOOOaXWT/ucsTgBRGcY4H1QYlkTGD8Xsf8 -qyUOzP/s8RQbvIrGrQtLN3O9r8wDBzDdZZjp/IZZaY6VT1r3AvF2mX+ip8/OqxNc -Yd3qxf8s7Kyn0eChSq1DAp83XMWxCje2EwXXzDA7Jd0pMAppWevFks4INGyCxz+9 -jOZ4Ris2a907ShWmIg8bw40r5L69j59qPk0fr44X6XVguN9zmKpLV5fyY88Qy9iq -8uy/3UVprZ0LnPbBXhbDsFkgiDOo2zCJfaVhPirMlpPJg/T5pFyAt+klrq6bD+tD -50Hh9gOpXXg58bELJhOtDUCV6Froc99LeqoBvlKJWqr58QguO2mn1cFJcP+nVzxz -DBpB/dWsmQst/NQ3YlgfVr6CcgqlCqVI4yNT91Q5Ns8/pdkcUBIVDUC+4oyKwA4n -XZMmydPJDdUiluwVSeIw0N/jiZhBJvMJHlOQ3xmb8In0WXcnE5JbibCITTN/T224 -jL14ObF+aMWlFanqRDUwllEQFv0Wa9dgTaHzxl+l9Ojw+YaYt/96UTtEJaMaxmww -JzdBFnCP7RoNHIQ20A== -=CQsQ ------END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/sipa-key.pgp b/contrib/gitian-downloader/sipa-key.pgp deleted file mode 100644 index a52a5deb1b..0000000000 Binary files a/contrib/gitian-downloader/sipa-key.pgp and /dev/null differ diff --git a/contrib/gitian-downloader/sunnyking-key.gpg b/contrib/gitian-downloader/sunnyking-key.gpg deleted file mode 100644 index 16b2a40b3c..0000000000 --- a/contrib/gitian-downloader/sunnyking-key.gpg +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.10 (GNU/Linux) - -mQINBFAsDOMBEACysMqtJfC7ikO2o+ioQZvHSSbL2R2zdgYxPjtQvLqbNMiJyV3q -vwXGWh0Z3eGu/cpHvfN6mguwHqgh319AtU6wiOHX/1yGMf2MUNFhoh8RlDWhZ+ba -gMTv7pcZKE2Ca7JgDtLNWd+NpjYrlGDSEEFl2vTohKKd+V7hRjyMc8iLkLjVdtdd -OTuFQeyNB8DUMUr3GuaPr52RgidZdMbJ0QSnEQeN9/ZTYjmYfREO+mal+2G/OKMk -6naUcGrhwHimc02WDddkqMhe5eZsU3XG+WqrD5NkN3my72XjkqSE1++k2+XgnOon -pUOciWfF3R3RBlOn0MlfKvNa/GXZ7PFxke3tkxdym8BV10l8spV++tPuhxovR7Gp -XG8Mt66uxlFc4S9wTg5FJilk2W75LK+FjFLAk9gJ24IHUawdSpLdCM+a4/JL1Ys+ -CQUuQA06Xdq3x8iuZSduRrnLeFEkM/F6JmyH22L8b5ptIm/wgjCaa+R/8P5ROO/E -FM1z7sw2RK12ZNPqwrNysePSVze2MGNdPnmb2KDcxSlxoK6Nzcef5xGkP/WwdBnd -WN2iA70I0S8DEywpY3hrJ4YIDg+SvCsoRIBH90PUORQ5Uhfj15QbmT2bZrqoFaDY -1+dWmijsPJ6+6MYjDWte/WVDSqTJEa22R/SAjGETGmUig7OqE7FFaQFLPwARAQAB -tCNzdW5ueWtpbmcgPHN1bm55a2luZzk5OTlAZ21haWwuY29tPokCPgQTAQIAKAUC -UCwM4wIbAwUJEswDAAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQGPNEBNK5 -Xmp4hg//f/rUs1ABrsd7ciHN0ByOH/WKdlUNNvf8jua86mHdPcHAFtZ3HC8ICVLe -7TAUMEgQ1Vsmk1QBILCaE50cD9iya4uCYCpBN6RZXUd09Te+ugb+VUYda4NmVbF+ -ZYidDjLwFZ3MV4uXZLWMGnxVDYVrBDHdfvFkZvi+/thtEME+Ea84diBZcAW/ncUb -AMNxNsmOTlTcPuB47UZVxg2vSJWkJe9O6IpuF782+49O14hsxidPMV+BKOaYWwoj -wGlJ+NDkobaQ/a0lI0aGHL1KXA58mNMB0i7SoYB8YJMfL2+lx0AZsvxaqFmuMcPf -zo7I9UCyf/gHorQaxsbz2/LUfpFL4T7IWt9IJkVe8TT9KQV8T0l9uUaQtX3iLwqQ -IRJWdQZMpnENhEgkSLRSkmCV/162ksYoboSpfI3Qhz1h0yqnwHAGBKSbE/2IGVo5 -3m/27xUFy5+7WeiON7DelYS6mx4UiAkhSWj4/u60YNnq5eTAYQFqawtSwIiO9pLH -C1gqOCoakESdFCQfABNsI6paIkfTylZhLd20qrr9qvBfvOgpMRXbO6xBPYp92/UK -9uRkFFCJORLBUl9saLfZa4Hw1CcY06IA3XXBx2/kp42aeAnWrfzqLvXwFZGtOJie -ajQsJUeDLFjbsYmw9FP8izK2H6plEa3PLFDz2gP+MSLZ5+13eES5Ag0EUCwM4wEQ -AMTFatCCzaUPwFpM9GyC7JwIWofDRpZBigXnzTC8RwHnb1ruWliFUkTEeSB8z7pC -3DaQ+owf0TUqj0c8Ui3SVfCcQqIJuWBycxxUnSaqWvz7wRaRN+WG4gaWgA2z7k4Q -CMmVhbxTaaZ67rfqtFOKM7EaIqOBE+AKg5BCCrxnja/xR0eZxRLwZKXqfakgqXy8 -HaWOzLPU6zMheTXu4YW5S6jvZOaMRkKI5xEUdQf/UPYkwYM6PaA/o70rTSGuQ/mc -zwFZp7FxKqKINPBSJLu1CjhnnrZM37y26I5O+nErDTinvYg5Rkq5wV3gMNbzpOdA -qPdw2qkVwKWDErNrA9amKuM0/fpvu/kXkGnfkugvt3Rokc3MQO2u5HI1eO571zaV -GoDt1oYjpKPuu6JMe2b5D1fLhyHicGaH8V2vpJi6+01Ww09srKemox54J4Z/Xjw6 -gyaWuPkCHO3roNjeGMtzbbJeOYEZC/AMTuqmnv3gHXENgrxKjCkkGddH8t7nZUNT -zmTMHrqOzhacRIp/6jpKCNXea2FaeRQECtDD2awNxUpmFFQeGpXJGsGc/GYHqvtV -HxWOiio1BpHhjCySHCYpqsq/GtGVdxNVz6o7H0/i4wipT7Q2dKVKbSuapaqI01jv -40019gtjOV7Gw8fX0MLt3ViCQVHpDxdMN/vkumw9YKA1ABEBAAGJAiUEGAECAA8F -AlAsDOMCGwwFCRLMAwAACgkQGPNEBNK5XmpymA//UXydFKX11RGloxzMfdgoFvjw -mNoZeS5Sv22hpsS2XswqAIbGdI/s2PbEzLv6nn0ck1PUFn9wL+TxB9GF2wWelpI4 -qe1mKsedJbj9PG6Wx2Invn6IcEInMrSLspBWiJJL2eP4y1hjAGG4v1wxPXQ4/FNe -OvXzAwShz79nVY35MDPBpL/dlhRJAIe/T7pYiI/HB8p4bI9MbtJcfp61oRPt17UC -vIQFnKKkwPT99i3PsOqAa8mVa2Ae4EElHG844Hr89ptHrGjudssfBf4kOaENMQqE -MFlyGaT9CLrD/2Qs/rXqFz3VAQykw/Cuw0kiRJjS5xKZZjVbz3Zd9suklk6YkSpI -jLzcPPON8nC6wvtUus5d0gtQeGx2DaX9n2+ubKlZgTSvT41PO/2Th9o3CgptHYJT -59ncrZP515yd0ZMknZ9bFt9BaE3V17hblOjFXoFqmAhwXyHQD9Ffd62AO1h2JNx5 -BAr4D7VyxJ3WX1yJFtdGsU7iD6ko4HahRepfp8UMtyVRLWVPGVmNq38Tozb4dhyh -fk3MxiatbEXQZbvFVr8WfGoNOIXB4Kg68NGxwZv6Jd5lobDOQjVYOykD2UpuOXmY -VRanFk5eIy0UWYAwUNP+XnjGHdwtX4ZYh+O4wDnWEZd4soVMXzOBuyWTSKahHhZi -KIjGheFAFTRFLgBmol4= -=Qxzm ------END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/tcatm-key.pgp b/contrib/gitian-downloader/tcatm-key.pgp deleted file mode 100644 index baaec76b8c..0000000000 Binary files a/contrib/gitian-downloader/tcatm-key.pgp and /dev/null differ diff --git a/contrib/gitian-downloader/win32-download-config b/contrib/gitian-downloader/win32-download-config deleted file mode 100644 index 0f7032e643..0000000000 --- a/contrib/gitian-downloader/win32-download-config +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: bitcoin -urls: -- http://bitcoin.org/bitcoin-latest-win32-gitian.zip -rss: -- url: http://sourceforge.net/api/file/index/project-id/244765/mtime/desc/limit/100/rss - xpath: //item/link/text() - pattern: bitcoin-\d+.\d+.\d+-win32-gitian.zip -signers: - 0A82509767C7D4A5D14DA2301AE1D35043E08E54: - weight: 40 - name: BlueMatt - key: bluematt - BF6273FAEF7CC0BA1F562E50989F6B3048A116B5: - weight: 40 - name: Devrandom - key: devrandom - E463A93F5F3117EEDE6C7316BD02942421F4889F: - weight: 40 - name: Luke-Jr - key: luke-jr - D762373D24904A3E42F33B08B9A408E71DAAC974: - weight: 40 - name: "Pieter Wuille" - key: sipa - 77E72E69DA7EE0A148C06B21B34821D4944DE5F7: - weight: 40 - name: tcatm - key: tcatm - 01CDF4627A3B88AAE4A571C87588242FBE38D3A8: - weight: 40 - name: "Gavin Andresen" - key: gavinandresen - 71A3B16735405025D447E8F274810B012346C9A6: - weight: 40 - name: "Wladimir J. van der Laan" - key: laanwj -minimum_weight: 120 diff --git a/contrib/macdeploy/DS_Store b/contrib/macdeploy/DS_Store deleted file mode 100644 index b0cf9225e2..0000000000 Binary files a/contrib/macdeploy/DS_Store and /dev/null differ diff --git a/contrib/macdeploy/LICENSE b/contrib/macdeploy/LICENSE deleted file mode 100644 index 94a9ed024d..0000000000 --- a/contrib/macdeploy/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/contrib/macdeploy/background.png b/contrib/macdeploy/background.png deleted file mode 100644 index 3be24dc04e..0000000000 Binary files a/contrib/macdeploy/background.png and /dev/null differ diff --git a/contrib/macdeploy/background.psd b/contrib/macdeploy/background.psd deleted file mode 100644 index dab835c77a..0000000000 Binary files a/contrib/macdeploy/background.psd and /dev/null differ diff --git a/contrib/macdeploy/createdmg b/contrib/macdeploy/createdmg deleted file mode 100755 index f30a62c445..0000000000 --- a/contrib/macdeploy/createdmg +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -set -e - -OTOOL=${HOST}-otool INSTALLNAMETOOL=${HOST}-install_name_tool STRIP=${HOST}-strip contrib/macdeploy/macdeployqtplus Umbra.app -mkdir -p dist/.background -install contrib/macdeploy/background.png dist/.background -install contrib/macdeploy/DS_Store dist/.DS_Store -install src/qt/res/icons/shadow.icns dist/.VolumeIcon.icns -cd dist -ln -sf /Applications Applications -cd .. -genisoimage -no-cache-inodes -l -probe -V "Umbra" -no-pad -r -apple -o umbra.tmp.dmg dist -dmg dmg umbra.tmp.dmg umbra.macosx.dmg diff --git a/contrib/macdeploy/fancy.plist b/contrib/macdeploy/fancy.plist deleted file mode 100644 index 387119aea0..0000000000 --- a/contrib/macdeploy/fancy.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - window_bounds - - 300 - 300 - 800 - 620 - - background_picture - background.png - icon_size - 96 - applications_symlink - - items_position - - Applications - - 370 - 156 - - Shadow.app - - 128 - 156 - - - - diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus deleted file mode 100755 index f58afcdef9..0000000000 --- a/contrib/macdeploy/macdeployqtplus +++ /dev/null @@ -1,882 +0,0 @@ -#!/usr/bin/env python - -# -# Copyright (C) 2011 Patrick "p2k" Schneider -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -import subprocess, sys, re, os, shutil, stat, os.path, time -from string import Template -from argparse import ArgumentParser - -# This is ported from the original macdeployqt with modifications - -class FrameworkInfo(object): - def __init__(self): - self.frameworkDirectory = "" - self.frameworkName = "" - self.frameworkPath = "" - self.binaryDirectory = "" - self.binaryName = "" - self.binaryPath = "" - self.version = "" - self.installName = "" - self.deployedInstallName = "" - self.sourceFilePath = "" - self.destinationDirectory = "" - self.sourceResourcesDirectory = "" - self.sourceVersionContentsDirectory = "" - self.sourceContentsDirectory = "" - self.destinationResourcesDirectory = "" - self.destinationVersionContentsDirectory = "" - - def __eq__(self, other): - if self.__class__ == other.__class__: - return self.__dict__ == other.__dict__ - else: - return False - - def __str__(self): - return """ Framework name: %s - Framework directory: %s - Framework path: %s - Binary name: %s - Binary directory: %s - Binary path: %s - Version: %s - Install name: %s - Deployed install name: %s - Source file Path: %s - Deployed Directory (relative to bundle): %s -""" % (self.frameworkName, - self.frameworkDirectory, - self.frameworkPath, - self.binaryName, - self.binaryDirectory, - self.binaryPath, - self.version, - self.installName, - self.deployedInstallName, - self.sourceFilePath, - self.destinationDirectory) - - def isDylib(self): - return self.frameworkName.endswith(".dylib") - - def isQtFramework(self): - if self.isDylib(): - return self.frameworkName.startswith("libQt") - else: - return self.frameworkName.startswith("Qt") - - reOLine = re.compile(r'^(.+) \(compatibility version [0-9.]+, current version [0-9.]+\)$') - bundleFrameworkDirectory = "Contents/Frameworks" - bundleBinaryDirectory = "Contents/MacOS" - - @classmethod - def fromOtoolLibraryLine(cls, line): - # Note: line must be trimmed - if line == "": - return None - - # Don't deploy system libraries (exception for libQtuitools and libQtlucene). - if line.startswith("/System/Library/") or line.startswith("@executable_path") or (line.startswith("/usr/lib/") and "libQt" not in line): - return None - - m = cls.reOLine.match(line) - if m is None: - raise RuntimeError("otool line could not be parsed: " + line) - - path = m.group(1) - - info = cls() - info.sourceFilePath = path - info.installName = path - - if path.endswith(".dylib"): - dirname, filename = os.path.split(path) - info.frameworkName = filename - info.frameworkDirectory = dirname - info.frameworkPath = path - - info.binaryDirectory = dirname - info.binaryName = filename - info.binaryPath = path - info.version = "-" - - info.installName = path - info.deployedInstallName = "@executable_path/../Frameworks/" + info.binaryName - info.sourceFilePath = path - info.destinationDirectory = cls.bundleFrameworkDirectory - else: - parts = path.split("/") - i = 0 - # Search for the .framework directory - for part in parts: - if part.endswith(".framework"): - break - i += 1 - if i == len(parts): - raise RuntimeError("Could not find .framework or .dylib in otool line: " + line) - - info.frameworkName = parts[i] - info.frameworkDirectory = "/".join(parts[:i]) - info.frameworkPath = os.path.join(info.frameworkDirectory, info.frameworkName) - - info.binaryName = parts[i+3] - info.binaryDirectory = "/".join(parts[i+1:i+3]) - info.binaryPath = os.path.join(info.binaryDirectory, info.binaryName) - info.version = parts[i+2] - - info.deployedInstallName = "@executable_path/../Frameworks/" + os.path.join(info.frameworkName, info.binaryPath) - info.destinationDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, info.binaryDirectory) - - info.sourceResourcesDirectory = os.path.join(info.frameworkPath, "Resources") - info.sourceContentsDirectory = os.path.join(info.frameworkPath, "Contents") - info.sourceVersionContentsDirectory = os.path.join(info.frameworkPath, "Versions", info.version, "Contents") - info.destinationResourcesDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, "Resources") - info.destinationContentsDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, "Contents") - info.destinationVersionContentsDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, "Versions", info.version, "Contents") - - return info - -class ApplicationBundleInfo(object): - def __init__(self, path): - self.path = path - appName = os.path.splitext(os.path.basename(path))[0] - self.binaryPath = os.path.join(path, "Contents", "MacOS", appName) - if not os.path.exists(self.binaryPath): - raise RuntimeError("Could not find bundle binary for " + path) - self.resourcesPath = os.path.join(path, "Contents", "Resources") - self.pluginPath = os.path.join(path, "Contents", "PlugIns") - -class DeploymentInfo(object): - def __init__(self): - self.qtPath = None - self.pluginPath = None - self.deployedFrameworks = [] - - def detectQtPath(self, frameworkDirectory): - parentDir = os.path.dirname(frameworkDirectory) - if os.path.exists(os.path.join(parentDir, "translations")): - # Classic layout, e.g. "/usr/local/Trolltech/Qt-4.x.x" - self.qtPath = parentDir - elif os.path.exists(os.path.join(parentDir, "share", "qt4", "translations")): - # MacPorts layout, e.g. "/opt/local/share/qt4" - self.qtPath = os.path.join(parentDir, "share", "qt4") - elif os.path.exists(os.path.join(os.path.dirname(parentDir), "share", "qt4", "translations")): - # Newer Macports layout - self.qtPath = os.path.join(os.path.dirname(parentDir), "share", "qt4") - else: - self.qtPath = os.getenv("QTDIR", None) - - if self.qtPath is not None: - pluginPath = os.path.join(self.qtPath, "plugins") - if os.path.exists(pluginPath): - self.pluginPath = pluginPath - - def usesFramework(self, name): - nameDot = "%s." % name - libNameDot = "lib%s." % name - for framework in self.deployedFrameworks: - if framework.endswith(".framework"): - if framework.startswith(nameDot): - return True - elif framework.endswith(".dylib"): - if framework.startswith(libNameDot): - return True - return False - -def getFrameworks(binaryPath, verbose): - if verbose >= 3: - print "Inspecting with otool: " + binaryPath - otoolbin=os.getenv("OTOOL", "otool") - otool = subprocess.Popen([otoolbin, "-L", binaryPath], stdout=subprocess.PIPE, stderr=subprocess.PIPE) - o_stdout, o_stderr = otool.communicate() - if otool.returncode != 0: - if verbose >= 1: - sys.stderr.write(o_stderr) - sys.stderr.flush() - raise RuntimeError("otool failed with return code %d" % otool.returncode) - - otoolLines = o_stdout.split("\n") - otoolLines.pop(0) # First line is the inspected binary - if ".framework" in binaryPath or binaryPath.endswith(".dylib"): - otoolLines.pop(0) # Frameworks and dylibs list themselves as a dependency. - - libraries = [] - for line in otoolLines: - line = line.replace("@loader_path", os.path.dirname(binaryPath)) - info = FrameworkInfo.fromOtoolLibraryLine(line.strip()) - if info is not None: - if verbose >= 3: - print "Found framework:" - print info - libraries.append(info) - - return libraries - -def runInstallNameTool(action, *args): - installnametoolbin=os.getenv("INSTALLNAMETOOL", "install_name_tool") - subprocess.check_call([installnametoolbin, "-"+action] + list(args)) - -def changeInstallName(oldName, newName, binaryPath, verbose): - if verbose >= 3: - print "Using install_name_tool:" - print " in", binaryPath - print " change reference", oldName - print " to", newName - runInstallNameTool("change", oldName, newName, binaryPath) - -def changeIdentification(id, binaryPath, verbose): - if verbose >= 3: - print "Using install_name_tool:" - print " change identification in", binaryPath - print " to", id - runInstallNameTool("id", id, binaryPath) - -def runStrip(binaryPath, verbose): - stripbin=os.getenv("STRIP", "strip") - if verbose >= 3: - print "Using strip:" - print " stripped", binaryPath - subprocess.check_call([stripbin, "-x", binaryPath]) - -def copyFramework(framework, path, verbose): - if framework.sourceFilePath.startswith("Qt"): - #standard place for Nokia Qt installer's frameworks - fromPath = "/Library/Frameworks/" + framework.sourceFilePath - else: - fromPath = framework.sourceFilePath - toDir = os.path.join(path, framework.destinationDirectory) - toPath = os.path.join(toDir, framework.binaryName) - - if not os.path.exists(fromPath): - raise RuntimeError("No file at " + fromPath) - - if os.path.exists(toPath): - return None # Already there - - if not os.path.exists(toDir): - os.makedirs(toDir) - - shutil.copy2(fromPath, toPath) - if verbose >= 3: - print "Copied:", fromPath - print " to:", toPath - - permissions = os.stat(toPath) - if not permissions.st_mode & stat.S_IWRITE: - os.chmod(toPath, permissions.st_mode | stat.S_IWRITE) - - if not framework.isDylib(): # Copy resources for real frameworks - - linkfrom = os.path.join(path, "Contents","Frameworks", framework.frameworkName, "Versions", "Current") - linkto = framework.version - if not os.path.exists(linkfrom): - os.symlink(linkto, linkfrom) - if verbose >= 2: - print "Linked:", linkfrom, "->", linkto - fromResourcesDir = framework.sourceResourcesDirectory - if os.path.exists(fromResourcesDir): - toResourcesDir = os.path.join(path, framework.destinationResourcesDirectory) - shutil.copytree(fromResourcesDir, toResourcesDir, symlinks=True) - if verbose >= 3: - print "Copied resources:", fromResourcesDir - print " to:", toResourcesDir - fromContentsDir = framework.sourceVersionContentsDirectory - if not os.path.exists(fromContentsDir): - fromContentsDir = framework.sourceContentsDirectory - if os.path.exists(fromContentsDir): - toContentsDir = os.path.join(path, framework.destinationVersionContentsDirectory) - shutil.copytree(fromContentsDir, toContentsDir, symlinks=True) - contentslinkfrom = os.path.join(path, framework.destinationContentsDirectory) - if verbose >= 3: - print "Copied Contents:", fromContentsDir - print " to:", toContentsDir - elif framework.frameworkName.startswith("libQtGui"): # Copy qt_menu.nib (applies to non-framework layout) - qtMenuNibSourcePath = os.path.join(framework.frameworkDirectory, "Resources", "qt_menu.nib") - qtMenuNibDestinationPath = os.path.join(path, "Contents", "Resources", "qt_menu.nib") - if os.path.exists(qtMenuNibSourcePath) and not os.path.exists(qtMenuNibDestinationPath): - shutil.copytree(qtMenuNibSourcePath, qtMenuNibDestinationPath, symlinks=True) - if verbose >= 3: - print "Copied for libQtGui:", qtMenuNibSourcePath - print " to:", qtMenuNibDestinationPath - - return toPath - -def deployFrameworks(frameworks, bundlePath, binaryPath, strip, verbose, deploymentInfo=None): - if deploymentInfo is None: - deploymentInfo = DeploymentInfo() - - while len(frameworks) > 0: - framework = frameworks.pop(0) - deploymentInfo.deployedFrameworks.append(framework.frameworkName) - - if verbose >= 2: - print "Processing", framework.frameworkName, "..." - - # Get the Qt path from one of the Qt frameworks - if deploymentInfo.qtPath is None and framework.isQtFramework(): - deploymentInfo.detectQtPath(framework.frameworkDirectory) - - if framework.installName.startswith("@executable_path") or framework.installName.startswith(bundlePath): - if verbose >= 2: - print framework.frameworkName, "already deployed, skipping." - continue - - # install_name_tool the new id into the binary - changeInstallName(framework.installName, framework.deployedInstallName, binaryPath, verbose) - - # Copy farmework to app bundle. - deployedBinaryPath = copyFramework(framework, bundlePath, verbose) - # Skip the rest if already was deployed. - if deployedBinaryPath is None: - continue - - if strip: - runStrip(deployedBinaryPath, verbose) - - # install_name_tool it a new id. - changeIdentification(framework.deployedInstallName, deployedBinaryPath, verbose) - # Check for framework dependencies - dependencies = getFrameworks(deployedBinaryPath, verbose) - - for dependency in dependencies: - changeInstallName(dependency.installName, dependency.deployedInstallName, deployedBinaryPath, verbose) - - # Deploy framework if necessary. - if dependency.frameworkName not in deploymentInfo.deployedFrameworks and dependency not in frameworks: - frameworks.append(dependency) - - return deploymentInfo - -def deployFrameworksForAppBundle(applicationBundle, strip, verbose): - frameworks = getFrameworks(applicationBundle.binaryPath, verbose) - if len(frameworks) == 0 and verbose >= 1: - print "Warning: Could not find any external frameworks to deploy in %s." % (applicationBundle.path) - return DeploymentInfo() - else: - return deployFrameworks(frameworks, applicationBundle.path, applicationBundle.binaryPath, strip, verbose) - -def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose): - # Lookup available plugins, exclude unneeded - plugins = [] - if deploymentInfo.pluginPath is None: - return - for dirpath, dirnames, filenames in os.walk(deploymentInfo.pluginPath): - pluginDirectory = os.path.relpath(dirpath, deploymentInfo.pluginPath) - if pluginDirectory == "designer": - # Skip designer plugins - continue - elif pluginDirectory == "phonon" or pluginDirectory == "phonon_backend": - # Deploy the phonon plugins only if phonon is in use - if not deploymentInfo.usesFramework("phonon"): - continue - elif pluginDirectory == "sqldrivers": - # Deploy the sql plugins only if QtSql is in use - if not deploymentInfo.usesFramework("QtSql"): - continue - elif pluginDirectory == "script": - # Deploy the script plugins only if QtScript is in use - if not deploymentInfo.usesFramework("QtScript"): - continue - elif pluginDirectory == "qmltooling" or pluginDirectory == "qml1tooling": - # Deploy the qml plugins only if QtDeclarative is in use - if not deploymentInfo.usesFramework("QtDeclarative"): - continue - elif pluginDirectory == "bearer": - # Deploy the bearer plugins only if QtNetwork is in use - if not deploymentInfo.usesFramework("QtNetwork"): - continue - elif pluginDirectory == "position": - # Deploy the position plugins only if QtPositioning is in use - if not deploymentInfo.usesFramework("QtPositioning"): - continue - elif pluginDirectory == "sensors" or pluginDirectory == "sensorgestures": - # Deploy the sensor plugins only if QtSensors is in use - if not deploymentInfo.usesFramework("QtSensors"): - continue - elif pluginDirectory == "audio" or pluginDirectory == "playlistformats": - # Deploy the audio plugins only if QtMultimedia is in use - if not deploymentInfo.usesFramework("QtMultimedia"): - continue - elif pluginDirectory == "mediaservice": - # Deploy the mediaservice plugins only if QtMultimediaWidgets is in use - if not deploymentInfo.usesFramework("QtMultimediaWidgets"): - continue - - for pluginName in filenames: - pluginPath = os.path.join(pluginDirectory, pluginName) - if pluginName.endswith("_debug.dylib"): - # Skip debug plugins - continue - elif pluginPath == "imageformats/libqsvg.dylib" or pluginPath == "iconengines/libqsvgicon.dylib": - # Deploy the svg plugins only if QtSvg is in use - if not deploymentInfo.usesFramework("QtSvg"): - continue - elif pluginPath == "accessible/libqtaccessiblecompatwidgets.dylib": - # Deploy accessibility for Qt3Support only if the Qt3Support is in use - if not deploymentInfo.usesFramework("Qt3Support"): - continue - elif pluginPath == "graphicssystems/libqglgraphicssystem.dylib": - # Deploy the opengl graphicssystem plugin only if QtOpenGL is in use - if not deploymentInfo.usesFramework("QtOpenGL"): - continue - elif pluginPath == "accessible/libqtaccessiblequick.dylib": - # Deploy the accessible qtquick plugin only if QtQuick is in use - if not deploymentInfo.usesFramework("QtQuick"): - continue - - plugins.append((pluginDirectory, pluginName)) - - for pluginDirectory, pluginName in plugins: - if verbose >= 2: - print "Processing plugin", os.path.join(pluginDirectory, pluginName), "..." - - sourcePath = os.path.join(deploymentInfo.pluginPath, pluginDirectory, pluginName) - destinationDirectory = os.path.join(appBundleInfo.pluginPath, pluginDirectory) - if not os.path.exists(destinationDirectory): - os.makedirs(destinationDirectory) - - destinationPath = os.path.join(destinationDirectory, pluginName) - shutil.copy2(sourcePath, destinationPath) - if verbose >= 3: - print "Copied:", sourcePath - print " to:", destinationPath - - if strip: - runStrip(destinationPath, verbose) - - dependencies = getFrameworks(destinationPath, verbose) - - for dependency in dependencies: - changeInstallName(dependency.installName, dependency.deployedInstallName, destinationPath, verbose) - - # Deploy framework if necessary. - if dependency.frameworkName not in deploymentInfo.deployedFrameworks: - deployFrameworks([dependency], appBundleInfo.path, destinationPath, strip, verbose, deploymentInfo) - -qt_conf="""[Paths] -Translations=Resources -Plugins=PlugIns -""" - -ap = ArgumentParser(description="""Improved version of macdeployqt. - -Outputs a ready-to-deploy app in a folder "dist" and optionally wraps it in a .dmg file. -Note, that the "dist" folder will be deleted before deploying on each run. - -Optionally, Qt translation files (.qm) and additional resources can be added to the bundle. - -Also optionally signs the .app bundle; set the CODESIGNARGS environment variable to pass arguments -to the codesign tool. -E.g. CODESIGNARGS='--sign "Developer ID Application: ..." --keychain /encrypted/foo.keychain'""") - -ap.add_argument("app_bundle", nargs=1, metavar="app-bundle", help="application bundle to be deployed") -ap.add_argument("-verbose", type=int, nargs=1, default=[1], metavar="<0-3>", help="0 = no output, 1 = error/warning (default), 2 = normal, 3 = debug") -ap.add_argument("-no-plugins", dest="plugins", action="store_false", default=True, help="skip plugin deployment") -ap.add_argument("-no-strip", dest="strip", action="store_false", default=True, help="don't run 'strip' on the binaries") -ap.add_argument("-sign", dest="sign", action="store_true", default=False, help="sign .app bundle with codesign tool") -ap.add_argument("-dmg", nargs="?", const="", metavar="basename", help="create a .dmg disk image; if basename is not specified, a camel-cased version of the app name is used") -ap.add_argument("-fancy", nargs=1, metavar="plist", default=[], help="make a fancy looking disk image using the given plist file with instructions; requires -dmg to work") -ap.add_argument("-add-qt-tr", nargs=1, metavar="languages", default=[], help="add Qt translation files to the bundle's ressources; the language list must be separated with commas, not with whitespace") -ap.add_argument("-translations-dir", nargs=1, metavar="path", default=None, help="Path to Qt's translation files") -ap.add_argument("-add-resources", nargs="+", metavar="path", default=[], help="list of additional files or folders to be copied into the bundle's resources; must be the last argument") - -config = ap.parse_args() - -verbose = config.verbose[0] - -# ------------------------------------------------ - -app_bundle = config.app_bundle[0] - -if not os.path.exists(app_bundle): - if verbose >= 1: - sys.stderr.write("Error: Could not find app bundle \"%s\"\n" % (app_bundle)) - sys.exit(1) - -app_bundle_name = os.path.splitext(os.path.basename(app_bundle))[0] - -# ------------------------------------------------ -translations_dir = None -if config.translations_dir and config.translations_dir[0]: - if os.path.exists(config.translations_dir[0]): - translations_dir = config.translations_dir[0] - else: - if verbose >= 1: - sys.stderr.write("Error: Could not find translation dir \"%s\"\n" % (translations_dir)) - sys.exit(1) -# ------------------------------------------------ - -for p in config.add_resources: - if verbose >= 3: - print "Checking for \"%s\"..." % p - if not os.path.exists(p): - if verbose >= 1: - sys.stderr.write("Error: Could not find additional resource file \"%s\"\n" % (p)) - sys.exit(1) - -# ------------------------------------------------ - -if len(config.fancy) == 1: - if verbose >= 3: - print "Fancy: Importing plistlib..." - try: - import plistlib - except ImportError: - if verbose >= 1: - sys.stderr.write("Error: Could not import plistlib which is required for fancy disk images.\n") - sys.exit(1) - - p = config.fancy[0] - if verbose >= 3: - print "Fancy: Loading \"%s\"..." % p - if not os.path.exists(p): - if verbose >= 1: - sys.stderr.write("Error: Could not find fancy disk image plist at \"%s\"\n" % (p)) - sys.exit(1) - - try: - fancy = plistlib.readPlist(p) - except: - if verbose >= 1: - sys.stderr.write("Error: Could not parse fancy disk image plist at \"%s\"\n" % (p)) - sys.exit(1) - - try: - assert not fancy.has_key("window_bounds") or (isinstance(fancy["window_bounds"], list) and len(fancy["window_bounds"]) == 4) - assert not fancy.has_key("background_picture") or isinstance(fancy["background_picture"], str) - assert not fancy.has_key("icon_size") or isinstance(fancy["icon_size"], int) - assert not fancy.has_key("applications_symlink") or isinstance(fancy["applications_symlink"], bool) - if fancy.has_key("items_position"): - assert isinstance(fancy["items_position"], dict) - for key, value in fancy["items_position"].iteritems(): - assert isinstance(value, list) and len(value) == 2 and isinstance(value[0], int) and isinstance(value[1], int) - except: - if verbose >= 1: - sys.stderr.write("Error: Bad format of fancy disk image plist at \"%s\"\n" % (p)) - sys.exit(1) - - if fancy.has_key("background_picture"): - bp = fancy["background_picture"] - if verbose >= 3: - print "Fancy: Resolving background picture \"%s\"..." % bp - if not os.path.exists(bp): - bp = os.path.join(os.path.dirname(p), bp) - if not os.path.exists(bp): - if verbose >= 1: - sys.stderr.write("Error: Could not find background picture at \"%s\" or \"%s\"\n" % (fancy["background_picture"], bp)) - sys.exit(1) - else: - fancy["background_picture"] = bp -else: - fancy = None - -# ------------------------------------------------ - -if os.path.exists("dist"): - if verbose >= 2: - print "+ Removing old dist folder +" - - shutil.rmtree("dist") - -# ------------------------------------------------ - -target = os.path.join("dist", app_bundle) - -if verbose >= 2: - print "+ Copying source bundle +" -if verbose >= 3: - print app_bundle, "->", target - -os.mkdir("dist") -shutil.copytree(app_bundle, target, symlinks=True) - -applicationBundle = ApplicationBundleInfo(target) - -# ------------------------------------------------ - -if verbose >= 2: - print "+ Deploying frameworks +" - -try: - deploymentInfo = deployFrameworksForAppBundle(applicationBundle, config.strip, verbose) - if deploymentInfo.qtPath is None: - deploymentInfo.qtPath = os.getenv("QTDIR", None) - if deploymentInfo.qtPath is None: - if verbose >= 1: - sys.stderr.write("Warning: Could not detect Qt's path, skipping plugin deployment!\n") - config.plugins = False -except RuntimeError as e: - if verbose >= 1: - sys.stderr.write("Error: %s\n" % str(e)) - sys.exit(1) - -# ------------------------------------------------ - -if config.plugins: - if verbose >= 2: - print "+ Deploying plugins +" - - try: - deployPlugins(applicationBundle, deploymentInfo, config.strip, verbose) - except RuntimeError as e: - if verbose >= 1: - sys.stderr.write("Error: %s\n" % str(e)) - sys.exit(1) - -# ------------------------------------------------ - -if len(config.add_qt_tr) == 0: - add_qt_tr = [] -else: - if translations_dir is not None: - qt_tr_dir = translations_dir - else: - if deploymentInfo.qtPath is not None: - qt_tr_dir = os.path.join(deploymentInfo.qtPath, "translations") - else: - sys.stderr.write("Error: Could not find Qt translation path\n") - sys.exit(1) - add_qt_tr = ["qt_%s.qm" % lng for lng in config.add_qt_tr[0].split(",")] - for lng_file in add_qt_tr: - p = os.path.join(qt_tr_dir, lng_file) - if verbose >= 3: - print "Checking for \"%s\"..." % p - if not os.path.exists(p): - if verbose >= 1: - sys.stderr.write("Error: Could not find Qt translation file \"%s\"\n" % (lng_file)) - sys.exit(1) - -# ------------------------------------------------ - -if verbose >= 2: - print "+ Installing qt.conf +" - -f = open(os.path.join(applicationBundle.resourcesPath, "qt.conf"), "wb") -f.write(qt_conf) -f.close() - -# ------------------------------------------------ - -if len(add_qt_tr) > 0 and verbose >= 2: - print "+ Adding Qt translations +" - -for lng_file in add_qt_tr: - if verbose >= 3: - print os.path.join(qt_tr_dir, lng_file), "->", os.path.join(applicationBundle.resourcesPath, lng_file) - shutil.copy2(os.path.join(qt_tr_dir, lng_file), os.path.join(applicationBundle.resourcesPath, lng_file)) - -# ------------------------------------------------ - -if len(config.add_resources) > 0 and verbose >= 2: - print "+ Adding additional resources +" - -for p in config.add_resources: - t = os.path.join(applicationBundle.resourcesPath, os.path.basename(p)) - if verbose >= 3: - print p, "->", t - if os.path.isdir(p): - shutil.copytree(p, t, symlinks=True) - else: - shutil.copy2(p, t) - -# ------------------------------------------------ - -if config.sign and 'CODESIGNARGS' not in os.environ: - print "You must set the CODESIGNARGS environment variable. Skipping signing." -elif config.sign: - if verbose >= 1: - print "Code-signing app bundle %s"%(target,) - subprocess.check_call("codesign --force %s %s"%(os.environ['CODESIGNARGS'], target), shell=True) - -# ------------------------------------------------ - -if config.dmg is not None: - - #Patch in check_output for Python 2.6 - if "check_output" not in dir( subprocess ): - def f(*popenargs, **kwargs): - if 'stdout' in kwargs: - raise ValueError('stdout argument not allowed, it will be overridden.') - process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs) - output, unused_err = process.communicate() - retcode = process.poll() - if retcode: - cmd = kwargs.get("args") - if cmd is None: - cmd = popenargs[0] - raise CalledProcessError(retcode, cmd) - return output - subprocess.check_output = f - - def runHDIUtil(verb, image_basename, **kwargs): - hdiutil_args = ["hdiutil", verb, image_basename + ".dmg"] - if kwargs.has_key("capture_stdout"): - del kwargs["capture_stdout"] - run = subprocess.check_output - else: - if verbose < 2: - hdiutil_args.append("-quiet") - elif verbose >= 3: - hdiutil_args.append("-verbose") - run = subprocess.check_call - - for key, value in kwargs.iteritems(): - hdiutil_args.append("-" + key) - if not value is True: - hdiutil_args.append(str(value)) - - return run(hdiutil_args) - - if verbose >= 2: - if fancy is None: - print "+ Creating .dmg disk image +" - else: - print "+ Preparing .dmg disk image +" - - if config.dmg != "": - dmg_name = config.dmg - else: - spl = app_bundle_name.split(" ") - dmg_name = spl[0] + "".join(p.capitalize() for p in spl[1:]) - - if fancy is None: - try: - runHDIUtil("create", dmg_name, srcfolder="dist", format="UDBZ", volname=app_bundle_name, ov=True) - except subprocess.CalledProcessError as e: - sys.exit(e.returncode) - else: - if verbose >= 3: - print "Determining size of \"dist\"..." - size = 0 - for path, dirs, files in os.walk("dist"): - for file in files: - size += os.path.getsize(os.path.join(path, file)) - size += int(size * 0.1) - - if verbose >= 3: - print "Creating temp image for modification..." - try: - runHDIUtil("create", dmg_name + ".temp", srcfolder="dist", format="UDRW", size=size, volname=app_bundle_name, ov=True) - except subprocess.CalledProcessError as e: - sys.exit(e.returncode) - - if verbose >= 3: - print "Attaching temp image..." - try: - output = runHDIUtil("attach", dmg_name + ".temp", readwrite=True, noverify=True, noautoopen=True, capture_stdout=True) - except subprocess.CalledProcessError as e: - sys.exit(e.returncode) - - m = re.search("/Volumes/(.+$)", output) - disk_root = m.group(0) - disk_name = m.group(1) - - if verbose >= 2: - print "+ Applying fancy settings +" - - if fancy.has_key("background_picture"): - bg_path = os.path.join(disk_root, os.path.basename(fancy["background_picture"])) - if verbose >= 3: - print fancy["background_picture"], "->", bg_path - shutil.copy2(fancy["background_picture"], bg_path) - else: - bg_path = None - - if fancy.get("applications_symlink", False): - os.symlink("/Applications", os.path.join(disk_root, "Applications")) - - # The Python appscript package broke with OSX 10.8 and isn't being fixed. - # So we now build up an AppleScript string and use the osascript command - # to make the .dmg file pretty: - appscript = Template( """ - on run argv - tell application "Finder" - tell disk "$disk" - open - set current view of container window to icon view - set toolbar visible of container window to false - set statusbar visible of container window to false - set the bounds of container window to {$window_bounds} - set theViewOptions to the icon view options of container window - set arrangement of theViewOptions to not arranged - set icon size of theViewOptions to $icon_size - $background_commands - $items_positions - close -- close/reopen works around a bug... - open - update without registering applications - delay 5 - eject - end tell - end tell - end run - """) - - itemscript = Template('set position of item "${item}" of container window to {${position}}') - items_positions = [] - if fancy.has_key("items_position"): - for name, position in fancy["items_position"].iteritems(): - params = { "item" : name, "position" : ",".join([str(p) for p in position]) } - items_positions.append(itemscript.substitute(params)) - - params = { - "disk" : "Shadow", - "window_bounds" : "300,300,800,620", - "icon_size" : "96", - "background_commands" : "", - "items_positions" : "\n ".join(items_positions) - } - if fancy.has_key("window_bounds"): - params["window.bounds"] = ",".join([str(p) for p in fancy["window_bounds"]]) - if fancy.has_key("icon_size"): - params["icon_size"] = str(fancy["icon_size"]) - if bg_path is not None: - # Set background file, then call SetFile to make it invisible. - # (note: making it invisible first makes set background picture fail) - bgscript = Template("""set background picture of theViewOptions to file "$bgpic" - do shell script "SetFile -a V /Volumes/$disk/$bgpic" """) - params["background_commands"] = bgscript.substitute({"bgpic" : os.path.basename(bg_path), "disk" : params["disk"]}) - - s = appscript.substitute(params) - if verbose >= 2: - print("Running AppleScript:") - print(s) - - p = subprocess.Popen(['osascript', '-'], stdin=subprocess.PIPE) - p.communicate(input=s) - if p.returncode: - print("Error running osascript.") - - if verbose >= 2: - print "+ Finalizing .dmg disk image +" - time.sleep(5) - - try: - runHDIUtil("convert", dmg_name + ".temp", format="UDBZ", o=dmg_name + ".dmg", ov=True) - except subprocess.CalledProcessError as e: - sys.exit(e.returncode) - - os.unlink(dmg_name + ".temp.dmg") - -# ------------------------------------------------ - -if verbose >= 2: - print "+ Done +" - -sys.exit(0) diff --git a/contrib/macdeploy/node-appdmg.json b/contrib/macdeploy/node-appdmg.json deleted file mode 100644 index 1f35bb0782..0000000000 --- a/contrib/macdeploy/node-appdmg.json +++ /dev/null @@ -1,12 +0,0 @@ -//npm install -g appdmg -//appdmg node-appdmg.json Umbra.dmg -//Mount .dmg and copy /Volumes/Umbra/.DS_Store to ./DS_Store -{ - "title": "Umbra", - "icon": "../../src/qt/res/icons/shadow.icns", - "background": "background.png", - "contents": [ - { "x": 370, "y": 156, "type": "link", "path": "/Applications" }, - { "x": 128, "y": 156, "type": "file", "path": "../../Umbra.app" } - ] -} diff --git a/contrib/macdeploy/notes.txt b/contrib/macdeploy/notes.txt deleted file mode 100644 index 9b592fc955..0000000000 --- a/contrib/macdeploy/notes.txt +++ /dev/null @@ -1,26 +0,0 @@ - -macdeployqtplus works best on OS X Lion, for Snow Leopard you'd need to install -Python 2.7 and make it your default Python installation. - -You will need the appscript package for the fancy disk image creation to work. -Install it by invoking "sudo easy_install appscript". - -Ths script should be invoked in the target directory like this: -$source_dir/contrib/macdeploy/macdeployqtplus NovaCoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist -verbose 2 - -During the process, the disk image window will pop up briefly where the fancy -settings are applied. This is normal, please do not interfere. - -You can also set up Qt Creator for invoking the script. For this, go to the -"Projects" tab on the left side, switch to "Run Settings" above and add a -deploy configuration. Next add a deploy step choosing "Custom Process Step". -Fill in the following. - -Enable custom process step: [x] -Command: %{sourceDir}/contrib/macdeploy/macdeployqtplus -Working directory: %{buildDir} -Command arguments: NovaCoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy %{sourceDir}/contrib/macdeploy/fancy.plist -verbose 2 - -After that you can start the deployment process through the menu with -Build -> Deploy Project "novacoin-qt" - diff --git a/contrib/qt_translations.py b/contrib/qt_translations.py deleted file mode 100755 index fd8a8b7129..0000000000 --- a/contrib/qt_translations.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python - -# Helpful little script that spits out a comma-separated list of -# language codes for Qt icons that should be included -# in binary bitcoin distributions - -import glob -import os -import re -import sys - -if len(sys.argv) != 3: - sys.exit("Usage: %s $QTDIR/translations $BITCOINDIR/src/qt/locale"%sys.argv[0]) - -d1 = sys.argv[1] -d2 = sys.argv[2] - -l1 = set([ re.search(r'qt_(.*).qm', f).group(1) for f in glob.glob(os.path.join(d1, 'qt_*.qm')) ]) -l2 = set([ re.search(r'bitcoin_(.*).qm', f).group(1) for f in glob.glob(os.path.join(d2, 'bitcoin_*.qm')) ]) - -print ",".join(sorted(l1.intersection(l2))) - diff --git a/contrib/wallettools/walletchangepass.py b/contrib/wallettools/walletchangepass.py deleted file mode 100644 index 30f3f5b26a..0000000000 --- a/contrib/wallettools/walletchangepass.py +++ /dev/null @@ -1,5 +0,0 @@ -from jsonrpc import ServiceProxy -access = ServiceProxy("http://127.0.0.1:8332") -pwd = raw_input("Enter old wallet passphrase: ") -pwd2 = raw_input("Enter new wallet passphrase: ") -access.walletpassphrasechange(pwd, pwd2) \ No newline at end of file diff --git a/contrib/wallettools/walletunlock.py b/contrib/wallettools/walletunlock.py deleted file mode 100644 index f847c6fe61..0000000000 --- a/contrib/wallettools/walletunlock.py +++ /dev/null @@ -1,4 +0,0 @@ -from jsonrpc import ServiceProxy -access = ServiceProxy("http://127.0.0.1:8332") -pwd = raw_input("Enter wallet passphrase: ") -access.walletpassphrase(pwd, 60) \ No newline at end of file diff --git a/depends/.gitignore b/depends/.gitignore new file mode 100644 index 0000000000..19c506ce54 --- /dev/null +++ b/depends/.gitignore @@ -0,0 +1,14 @@ +SDKs/ +work/ +built/ +sources/ +config.site +x86_64* +i686* +mips* +arm* +aarch64* +powerpc* +riscv32* +riscv64* +s390x* diff --git a/depends/README.md b/depends/README.md new file mode 100644 index 0000000000..f14a960be8 --- /dev/null +++ b/depends/README.md @@ -0,0 +1,143 @@ +### Usage + +To build dependencies for the current arch+OS: + + make + +To build for another arch/OS: + + make HOST=host-platform-triplet + +For example: + + make HOST=x86_64-w64-mingw32 -j4 + +**Bitcoin Core's `configure` script by default will ignore the depends output.** In +order for it to pick up libraries, tools, and settings from the depends build, +you must set the `CONFIG_SITE` environment variable to point to a `config.site` settings file. +Make sure that `CONFIG_SITE` is an absolute path. +In the above example, a file named `depends/x86_64-w64-mingw32/share/config.site` will be +created. To use it during compilation: + + CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure + +The default install prefix when using `config.site` is `--prefix=depends/`, +so depends build outputs will be installed in that location. + +Common `host-platform-triplet`s for cross compilation are: + +- `i686-pc-linux-gnu` for Linux 32 bit +- `x86_64-pc-linux-gnu` for x86 Linux +- `x86_64-w64-mingw32` for Win64 +- `x86_64-apple-darwin` for macOS +- `arm64-apple-darwin` for ARM macOS +- `arm-linux-gnueabihf` for Linux ARM 32 bit +- `aarch64-linux-gnu` for Linux ARM 64 bit +- `powerpc64-linux-gnu` for Linux POWER 64-bit (big endian) +- `powerpc64le-linux-gnu` for Linux POWER 64-bit (little endian) +- `riscv32-linux-gnu` for Linux RISC-V 32 bit +- `riscv64-linux-gnu` for Linux RISC-V 64 bit +- `s390x-linux-gnu` for Linux S390X + +The paths are automatically configured and no other options are needed. + +### Install the required dependencies: Ubuntu & Debian + +#### Common + + apt install automake bison cmake curl libtool make patch pkg-config python3 xz-utils + +#### For macOS cross compilation + + apt install clang lld llvm g++ zip + +Clang 18 or later is required. You must also obtain the macOS SDK before +proceeding with a cross-compile. Under the depends directory, create a +subdirectory named `SDKs`. Then, place the extracted SDK under this new directory. +For more information, see [SDK Extraction](../contrib/macdeploy/README.md#sdk-extraction). + +#### For Win64 cross compilation + +- see [build-windows.md](../doc/build-windows.md#cross-compilation-for-ubuntu-and-windows-subsystem-for-linux) + +#### For linux (including i386, ARM) cross compilation + +Common linux dependencies: + + sudo apt-get install g++-multilib binutils + +For linux ARM cross compilation: + + sudo apt-get install g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf + +For linux AARCH64 cross compilation: + + sudo apt-get install g++-aarch64-linux-gnu binutils-aarch64-linux-gnu + +For linux POWER 64-bit cross compilation (there are no packages for 32-bit): + + sudo apt-get install g++-powerpc64-linux-gnu binutils-powerpc64-linux-gnu g++-powerpc64le-linux-gnu binutils-powerpc64le-linux-gnu + +For linux RISC-V 64-bit cross compilation (there are no packages for 32-bit): + + sudo apt-get install g++-riscv64-linux-gnu binutils-riscv64-linux-gnu + +For linux S390X cross compilation: + + sudo apt-get install g++-s390x-linux-gnu binutils-s390x-linux-gnu + +### Install the required dependencies: FreeBSD + + pkg install bash + +### Install the required dependencies: OpenBSD + + pkg_add bash gtar + +### Dependency Options + +The following can be set when running make: `make FOO=bar` + +- `SOURCES_PATH`: Downloaded sources will be placed here +- `BASE_CACHE`: Built packages will be placed here +- `SDK_PATH`: Path where SDKs can be found (used by macOS) +- `FALLBACK_DOWNLOAD_PATH`: If a source file can't be fetched, try here before giving up +- `C_STANDARD`: Set the C standard version used. Defaults to `c11`. +- `CXX_STANDARD`: Set the C++ standard version used. Defaults to `c++20`. +- `NO_BOOST`: Don't download/build/cache Boost +- `NO_LIBEVENT`: Don't download/build/cache Libevent +- `NO_QT`: Don't download/build/cache Qt and its dependencies +- `NO_QR`: Don't download/build/cache packages needed for enabling qrencode +- `NO_ZMQ`: Don't download/build/cache packages needed for enabling ZeroMQ +- `NO_WALLET`: Don't download/build/cache libs needed to enable the wallet +- `NO_BDB`: Don't download/build/cache BerkeleyDB +- `NO_SQLITE`: Don't download/build/cache SQLite +- `NO_UPNP`: Don't download/build/cache packages needed for enabling UPnP +- `NO_NATPMP`: Don't download/build/cache packages needed for enabling NAT-PMP +- `NO_USDT`: Don't download/build/cache packages needed for enabling USDT tracepoints +- `MULTIPROCESS`: Build libmultiprocess (experimental, requires CMake) +- `DEBUG`: Disable some optimizations and enable more runtime checking +- `HOST_ID_SALT`: Optional salt to use when generating host package ids +- `BUILD_ID_SALT`: Optional salt to use when generating build package ids +- `LOG`: Use file-based logging for individual packages. During a package build its log file + resides in the `depends` directory, and the log file is printed out automatically in case + of build error. After successful build log files are moved along with package archives +- `LTO`: Enable options needed for LTO. Does not add `-flto` related options to *FLAGS. +- `NO_HARDEN=1`: Don't use hardening options when building packages +- `PROTOBUF`: build protobuf (required for Particl usb device support) + +If some packages are not built, for example `make NO_WALLET=1`, the appropriate +options will be passed to bitcoin's configure. In this case, `--disable-wallet`. + +### Additional targets + + download: run 'make download' to fetch all sources without building them + download-osx: run 'make download-osx' to fetch all sources needed for macOS builds + download-win: run 'make download-win' to fetch all sources needed for win builds + download-linux: run 'make download-linux' to fetch all sources needed for linux builds + + +### Other documentation + +- [description.md](description.md): General description of the depends system +- [packages.md](packages.md): Steps for adding packages diff --git a/depends/config.site.in b/depends/config.site.in new file mode 100644 index 0000000000..b964b03135 --- /dev/null +++ b/depends/config.site.in @@ -0,0 +1,155 @@ +# shellcheck shell=sh disable=SC2034 # Many variables set will be used in + # ./configure but shellcheck doesn't know + # that, hence: disable=SC2034 + +true # Dummy command because shellcheck treats all directives before first + # command as file-wide, and we only want to disable for one line. + # + # See: https://github.com/koalaman/shellcheck/wiki/Directive + +# shellcheck disable=SC2154 +depends_prefix="$(cd "$(dirname "$ac_site_file")/.." && pwd)" + +cross_compiling=maybe +host_alias="@HOST@" +ac_tool_prefix="${host_alias}-" + +if test -z "$with_boost"; then + with_boost="$depends_prefix" +fi +if test -z "$with_qt_plugindir"; then + with_qt_plugindir="${depends_prefix}/plugins" +fi +if test -z "$with_qt_translationdir"; then + with_qt_translationdir="${depends_prefix}/translations" +fi +if test -z "$with_qt_bindir" && test -z "@no_qt@"; then + with_qt_bindir="${depends_prefix}/native/bin" +fi +if test -z "$with_mpgen" && test -n "@multiprocess@"; then + with_mpgen="${depends_prefix}/native" +fi + +if test -z "$with_qrencode" && test -n "@no_qr@"; then + with_qrencode=no +fi + +if test -z "$enable_wallet" && test -n "@no_wallet@"; then + enable_wallet=no +fi + +if test -n "$enable_usbdevice" && test -n "@enable_usbdevice@"; then + enable_usbdevice=no +fi + +if test -z "$with_bdb" && test -n "@no_bdb@"; then + with_bdb=no +fi + +if test -z "$with_sqlite" && test -n "@no_sqlite@"; then + with_sqlite=no +fi + +if test -z "$enable_multiprocess" && test -n "@multiprocess@"; then + enable_multiprocess=yes +fi + +if test -z "$with_miniupnpc" && test -n "@no_upnp@"; then + with_miniupnpc=no +fi + +if test -z "$with_natpmp" && test -n "@no_natpmp@"; then + with_natpmp=no +fi + +if test -z "$with_gui" && test -n "@no_qt@"; then + with_gui=no +fi + +if test -z "$with_protoc_bindir" && test -z "@no_qt@"; then + with_protoc_bindir="$depends_prefix/native/bin" +fi + +if test -n "@debug@" && test -z "@no_qt@" && test "$with_gui" != "no"; then + with_gui=qt5_debug +fi + +if test -z "$enable_zmq" && test -n "@no_zmq@"; then + enable_zmq=no +fi + +if test -z "$enable_usdt" && test -n "@no_usdt@"; then + enable_usdt=no +fi + +if test "@host_os@" = darwin; then + BREW=no +fi + +if test -z "$enable_hardening" && test -n "@no_harden@"; then + enable_hardening=no +fi + +PKG_CONFIG="$(which pkg-config) --static" + +PKG_CONFIG_PATH="${depends_prefix}/share/pkgconfig:${depends_prefix}/lib/pkgconfig" +PKG_CONFIG_LIBDIR="${depends_prefix}/lib/pkgconfig" + +CPPFLAGS="-I${depends_prefix}/include/ ${CPPFLAGS}" +LDFLAGS="-L${depends_prefix}/lib ${LDFLAGS}" + +if test -n "@CC@" -a -z "${CC}"; then + CC="@CC@" +fi +if test -n "@CXX@" -a -z "${CXX}"; then + CXX="@CXX@" +fi + +if test -n "@AR@"; then + AR="@AR@" + ac_cv_path_AR="${AR}" +fi + +if test -n "@RANLIB@"; then + RANLIB="@RANLIB@" + ac_cv_path_ac_pt_RANLIB="${RANLIB}" +fi + +if test -n "@NM@"; then + NM="@NM@" + ac_cv_path_ac_pt_NM="${NM}" +fi + +if test -n "@STRIP@"; then + STRIP="@STRIP@" + ac_cv_path_ac_pt_STRIP="${STRIP}" +fi + +if test "@host_os@" = darwin; then + if test -n "@OBJDUMP@"; then + OBJDUMP="@OBJDUMP@" + ac_cv_path_OBJDUMP="${OBJDUMP}" + fi + + if test -n "@DSYMUTIL@"; then + DSYMUTIL="@DSYMUTIL@" + ac_cv_path_DSYMUTIL="${DSYMUTIL}" + fi +fi + +if test -n "@debug@"; then + enable_reduce_exports=no +fi + +if test -n "@CFLAGS@"; then + CFLAGS="@CFLAGS@ ${CFLAGS}" +fi +if test -n "@CXXFLAGS@"; then + CXXFLAGS="@CXXFLAGS@ ${CXXFLAGS}" +fi +if test -n "@CPPFLAGS@"; then + CPPFLAGS="@CPPFLAGS@ ${CPPFLAGS}" +fi +if test -n "@LDFLAGS@"; then + LDFLAGS="@LDFLAGS@ ${LDFLAGS}" +fi diff --git a/depends/description.md b/depends/description.md new file mode 100644 index 0000000000..fa345bfe85 --- /dev/null +++ b/depends/description.md @@ -0,0 +1,52 @@ +This is a system of building and caching dependencies necessary for building Bitcoin. +There are several features that make it different from most similar systems: + +### It is designed to be builder and host agnostic + +In theory, binaries for any target OS/architecture can be created, from a +builder running any OS/architecture. In practice, build-side tools must be +specified when the defaults don't fit, and packages must be amended to work +on new hosts. + +### No reliance on timestamps + +File presence is used to determine what needs to be built. This makes the +results distributable and easily digestible by automated builders. + +### Each build only has its specified dependencies available at build-time. + +For each build, the sysroot is wiped and the (recursive) dependencies are +installed. This makes each build deterministic, since there will never be any +unknown files available to cause side-effects. + +### Each package is cached and only rebuilt as needed. + +Before building, a unique build-id is generated for each package. This id +consists of a hash of all files used to build the package (Makefiles, packages, +etc), and as well as a hash of the same data for each recursive dependency. If +any portion of a package's build recipe changes, it will be rebuilt as well as +any other package that depends on it. If any of the main makefiles (Makefile, +funcs.mk, etc) are changed, all packages will be rebuilt. After building, the +results are cached into a tarball that can be reused and distributed. + +### Package build results are (relatively) deterministic. + +Each package is configured and patched so that it will yield the same +build-results with each consequent build, within a reasonable set of +constraints. Some things like timestamp insertion are unavoidable, and are +beyond the scope of this system. Additionally, the toolchain itself must be +capable of deterministic results. When revisions are properly bumped, a cached +build should represent an exact single payload. + +### Sources are fetched and verified automatically + +Each package must define its source location and checksum. The build will fail +if the fetched source does not match. Sources may be pre-seeded and/or cached +as desired. + +### Self-cleaning + +Build and staging dirs are wiped after use, and any previous version of a +cached result is removed following a successful build. Automated builders +should be able to build each revision and store the results with no further +intervention. diff --git a/depends/funcs.mk b/depends/funcs.mk new file mode 100644 index 0000000000..3c0dc7a7fc --- /dev/null +++ b/depends/funcs.mk @@ -0,0 +1,299 @@ +define int_vars +#Set defaults for vars which may be overridden per-package +$(1)_cc=$$($$($(1)_type)_CC) +$(1)_cxx=$$($$($(1)_type)_CXX) +$(1)_objc=$$($$($(1)_type)_OBJC) +$(1)_objcxx=$$($$($(1)_type)_OBJCXX) +$(1)_ar=$$($$($(1)_type)_AR) +$(1)_ranlib=$$($$($(1)_type)_RANLIB) +$(1)_nm=$$($$($(1)_type)_NM) +$(1)_cflags=$$($$($(1)_type)_CFLAGS) \ + $$($$($(1)_type)_$$(release_type)_CFLAGS) +$(1)_cxxflags=$$($$($(1)_type)_CXXFLAGS) \ + $$($$($(1)_type)_$$(release_type)_CXXFLAGS) +$(1)_ldflags=$$($$($(1)_type)_LDFLAGS) \ + $$($$($(1)_type)_$$(release_type)_LDFLAGS) \ + -L$$($($(1)_type)_prefix)/lib +$(1)_cppflags=$$($$($(1)_type)_CPPFLAGS) \ + $$($$($(1)_type)_$$(release_type)_CPPFLAGS) \ + -I$$($$($(1)_type)_prefix)/include +$(1)_recipe_hash:= +endef + +define int_get_all_dependencies +$(sort $(foreach dep,$(2),$(2) $(call int_get_all_dependencies,$(1),$($(dep)_dependencies)))) +endef + +define fetch_file_inner + ( mkdir -p $$($(1)_download_dir) && echo Fetching $(3) from $(2) && \ + $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(2)/$(3)" && \ + echo "$(5) $$($(1)_download_dir)/$(4).temp" > $$($(1)_download_dir)/.$(4).hash && \ + $(build_SHA256SUM) -c $$($(1)_download_dir)/.$(4).hash && \ + mv $$($(1)_download_dir)/$(4).temp $$($(1)_source_dir)/$(4) && \ + rm -rf $$($(1)_download_dir) ) +endef + +define fetch_file + ( test -f $$($(1)_source_dir)/$(4) || \ + ( $(call fetch_file_inner,$(1),$(2),$(3),$(4),$(5)) || \ + $(call fetch_file_inner,$(1),$(FALLBACK_DOWNLOAD_PATH),$(3),$(4),$(5)))) +endef + +define int_get_build_recipe_hash +$(eval $(1)_all_file_checksums:=$(shell $(build_SHA256SUM) $(meta_depends) packages/$(1).mk $(addprefix $(PATCHES_PATH)/$(1)/,$($(1)_patches)) | cut -d" " -f1)) +$(eval $(1)_recipe_hash:=$(shell echo -n "$($(1)_all_file_checksums)" | $(build_SHA256SUM) | cut -d" " -f1)) +endef + +define int_get_build_id +$(eval $(1)_dependencies += $($(1)_$(host_arch)_$(host_os)_dependencies) $($(1)_$(host_os)_dependencies)) +$(eval $(1)_all_dependencies:=$(call int_get_all_dependencies,$(1),$($(1)_dependencies))) +$(foreach dep,$($(1)_all_dependencies),$(eval $(1)_build_id_deps+=$(dep)-$($(dep)_version)-$($(dep)_recipe_hash))) +$(eval $(1)_build_id_long:=$(1)-$($(1)_version)-$($(1)_recipe_hash)-$(release_type) $($(1)_build_id_deps) $($($(1)_type)_id)) +$(eval $(1)_build_id:=$(shell echo -n "$($(1)_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH))) +final_build_id_long+=$($(package)_build_id_long) + +#compute package-specific paths +$(1)_build_subdir?=. +$(1)_download_file?=$($(1)_file_name) +$(1)_source_dir:=$(SOURCES_PATH) +$(1)_source:=$$($(1)_source_dir)/$($(1)_file_name) +$(1)_staging_dir=$(base_staging_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id) +$(1)_staging_prefix_dir:=$$($(1)_staging_dir)$($($(1)_type)_prefix) +$(1)_extract_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id) +$(1)_download_dir:=$(base_download_dir)/$(1)-$($(1)_version) +$(1)_build_dir:=$$($(1)_extract_dir)/$$($(1)_build_subdir) +$(1)_cached_checksum:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz.hash +$(1)_patch_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)/.patches-$($(1)_build_id) +$(1)_prefixbin:=$($($(1)_type)_prefix)/bin/ +$(1)_cached:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz +$(1)_build_log:=$(BASEDIR)/$(1)-$($(1)_version)-$($(1)_build_id).log +$(1)_all_sources=$($(1)_file_name) $($(1)_extra_sources) + +#stamps +$(1)_fetched=$(SOURCES_PATH)/download-stamps/.stamp_fetched-$(1)-$($(1)_file_name).hash +$(1)_extracted=$$($(1)_extract_dir)/.stamp_extracted +$(1)_preprocessed=$$($(1)_extract_dir)/.stamp_preprocessed +$(1)_cleaned=$$($(1)_extract_dir)/.stamp_cleaned +$(1)_built=$$($(1)_build_dir)/.stamp_built +$(1)_configured=$(host_prefix)/.$(1)_stamp_configured +$(1)_staged=$$($(1)_staging_dir)/.stamp_staged +$(1)_postprocessed=$$($(1)_staging_prefix_dir)/.stamp_postprocessed +$(1)_download_path_fixed=$(subst :,\:,$$($(1)_download_path)) + + +#default commands +# The default behavior for tar will try to set ownership when running as uid 0 and may not succeed, --no-same-owner disables this behavior +$(1)_fetch_cmds ?= $(call fetch_file,$(1),$(subst \:,:,$$($(1)_download_path_fixed)),$$($(1)_download_file),$($(1)_file_name),$($(1)_sha256_hash)) +$(1)_extract_cmds ?= mkdir -p $$($(1)_extract_dir) && echo "$$($(1)_sha256_hash) $$($(1)_source)" > $$($(1)_extract_dir)/.$$($(1)_file_name).hash && $(build_SHA256SUM) -c $$($(1)_extract_dir)/.$$($(1)_file_name).hash && $(build_TAR) --no-same-owner --strip-components=1 -xf $$($(1)_source) +$(1)_preprocess_cmds ?= true +$(1)_build_cmds ?= true +$(1)_config_cmds ?= true +$(1)_stage_cmds ?= true +$(1)_set_vars ?= + + +all_sources+=$$($(1)_fetched) +endef +#$(foreach dep_target,$($(1)_all_dependencies),$(eval $(1)_dependency_targets=$($(dep_target)_cached))) + + +define int_config_attach_build_config +$(eval $(call $(1)_set_vars,$(1))) +$(1)_cflags+=$($(1)_cflags_$(release_type)) +$(1)_cflags+=$($(1)_cflags_$(host_arch)) $($(1)_cflags_$(host_arch)_$(release_type)) +$(1)_cflags+=$($(1)_cflags_$(host_os)) $($(1)_cflags_$(host_os)_$(release_type)) +$(1)_cflags+=$($(1)_cflags_$(host_arch)_$(host_os)) $($(1)_cflags_$(host_arch)_$(host_os)_$(release_type)) + +$(1)_cxxflags+=$($(1)_cxxflags_$(release_type)) +$(1)_cxxflags+=$($(1)_cxxflags_$(host_arch)) $($(1)_cxxflags_$(host_arch)_$(release_type)) +$(1)_cxxflags+=$($(1)_cxxflags_$(host_os)) $($(1)_cxxflags_$(host_os)_$(release_type)) +$(1)_cxxflags+=$($(1)_cxxflags_$(host_arch)_$(host_os)) $($(1)_cxxflags_$(host_arch)_$(host_os)_$(release_type)) + +$(1)_cppflags+=$($(1)_cppflags_$(release_type)) +$(1)_cppflags+=$($(1)_cppflags_$(host_arch)) $($(1)_cppflags_$(host_arch)_$(release_type)) +$(1)_cppflags+=$($(1)_cppflags_$(host_os)) $($(1)_cppflags_$(host_os)_$(release_type)) +$(1)_cppflags+=$($(1)_cppflags_$(host_arch)_$(host_os)) $($(1)_cppflags_$(host_arch)_$(host_os)_$(release_type)) + +$(1)_ldflags+=$($(1)_ldflags_$(release_type)) +$(1)_ldflags+=$($(1)_ldflags_$(host_arch)) $($(1)_ldflags_$(host_arch)_$(release_type)) +$(1)_ldflags+=$($(1)_ldflags_$(host_os)) $($(1)_ldflags_$(host_os)_$(release_type)) +$(1)_ldflags+=$($(1)_ldflags_$(host_arch)_$(host_os)) $($(1)_ldflags_$(host_arch)_$(host_os)_$(release_type)) + +$(1)_build_opts+=$$($(1)_build_opts_$(release_type)) +$(1)_build_opts+=$$($(1)_build_opts_$(host_arch)) $$($(1)_build_opts_$(host_arch)_$(release_type)) +$(1)_build_opts+=$$($(1)_build_opts_$(host_os)) $$($(1)_build_opts_$(host_os)_$(release_type)) +$(1)_build_opts+=$$($(1)_build_opts_$(host_arch)_$(host_os)) $$($(1)_build_opts_$(host_arch)_$(host_os)_$(release_type)) + +$(1)_config_opts+=$$($(1)_config_opts_$(release_type)) +$(1)_config_opts+=$$($(1)_config_opts_$(host_arch)) $$($(1)_config_opts_$(host_arch)_$(release_type)) +$(1)_config_opts+=$$($(1)_config_opts_$(host_os)) $$($(1)_config_opts_$(host_os)_$(release_type)) +$(1)_config_opts+=$$($(1)_config_opts_$(host_arch)_$(host_os)) $$($(1)_config_opts_$(host_arch)_$(host_os)_$(release_type)) + +$(1)_config_env+=$$($(1)_config_env_$(release_type)) +$(1)_config_env+=$($(1)_config_env_$(host_arch)) $($(1)_config_env_$(host_arch)_$(release_type)) +$(1)_config_env+=$($(1)_config_env_$(host_os)) $($(1)_config_env_$(host_os)_$(release_type)) +$(1)_config_env+=$($(1)_config_env_$(host_arch)_$(host_os)) $($(1)_config_env_$(host_arch)_$(host_os)_$(release_type)) + +$(1)_config_env+=PKG_CONFIG_LIBDIR=$($($(1)_type)_prefix)/lib/pkgconfig +$(1)_config_env+=PKG_CONFIG_PATH=$($($(1)_type)_prefix)/share/pkgconfig +$(1)_config_env+=PKG_CONFIG_SYSROOT_DIR=/ +$(1)_config_env+=CMAKE_MODULE_PATH=$($($(1)_type)_prefix)/lib/cmake +$(1)_config_env+=PATH="$(build_prefix)/bin:$(PATH)" +$(1)_build_env+=PATH="$(build_prefix)/bin:$(PATH)" +$(1)_stage_env+=PATH="$(build_prefix)/bin:$(PATH)" + +# Setting a --build type that differs from --host will explicitly enable +# cross-compilation mode. Note that --build defaults to the output of +# config.guess, which is what we set it too here. This also quells autoconf +# warnings, "If you wanted to set the --build type, don't use --host.", +# when using versions older than 2.70. +$(1)_autoconf=./configure --build=$(BUILD) --host=$($($(1)_type)_host) --prefix=$($($(1)_type)_prefix) --with-pic $$($(1)_config_opts) CC="$$($(1)_cc)" CXX="$$($(1)_cxx)" +ifneq ($($(1)_nm),) +$(1)_autoconf += NM="$$($(1)_nm)" +endif +ifneq ($($(1)_ranlib),) +$(1)_autoconf += RANLIB="$$($(1)_ranlib)" +endif +ifneq ($($(1)_ar),) +$(1)_autoconf += AR="$$($(1)_ar)" +endif +ifneq ($($(1)_cflags),) +$(1)_autoconf += CFLAGS="$$($(1)_cflags)" +endif +ifneq ($($(1)_cxxflags),) +$(1)_autoconf += CXXFLAGS="$$($(1)_cxxflags)" +endif +ifneq ($($(1)_cppflags),) +$(1)_autoconf += CPPFLAGS="$$($(1)_cppflags)" +endif +ifneq ($($(1)_ldflags),) +$(1)_autoconf += LDFLAGS="$$($(1)_ldflags)" +endif + +# We hardcode the library install path to "lib" to match the PKG_CONFIG_PATH +# setting in depends/config.site.in, which also hardcodes "lib". +# Without this setting, CMake by default would use the OS library +# directory, which might be "lib64" or something else, not "lib", on multiarch systems. +$(1)_cmake=env CC="$$($(1)_cc)" \ + CFLAGS="$$($(1)_cppflags) $$($(1)_cflags)" \ + CXX="$$($(1)_cxx)" \ + CXXFLAGS="$$($(1)_cppflags) $$($(1)_cxxflags)" \ + LDFLAGS="$$($(1)_ldflags)" \ + cmake -DCMAKE_INSTALL_PREFIX:PATH="$$($($(1)_type)_prefix)" \ + -DCMAKE_AR=`which $$($(1)_ar)` \ + -DCMAKE_NM=`which $$($(1)_nm)` \ + -DCMAKE_RANLIB=`which $$($(1)_ranlib)` \ + -DCMAKE_INSTALL_LIBDIR=lib/ \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DCMAKE_VERBOSE_MAKEFILE:BOOL=$(V) \ + $$($(1)_config_opts) +ifeq ($($(1)_type),build) +$(1)_cmake += -DCMAKE_INSTALL_RPATH:PATH="$$($($(1)_type)_prefix)/lib" +else +ifneq ($(host),$(build)) +$(1)_cmake += -DCMAKE_SYSTEM_NAME=$($(host_os)_cmake_system) +$(1)_cmake += -DCMAKE_C_COMPILER_TARGET=$(host) +$(1)_cmake += -DCMAKE_CXX_COMPILER_TARGET=$(host) +endif +endif +endef + +define int_add_cmds +ifneq ($(LOG),) +$(1)_logging = >>$$($(1)_build_log) 2>&1 || { if test -f $$($(1)_build_log); then cat $$($(1)_build_log); fi; exit 1; } +endif + +$($(1)_fetched): + mkdir -p $$(@D) $(SOURCES_PATH) + rm -f $$@ + touch $$@ + cd $$(@D); $($(1)_fetch_cmds) + cd $($(1)_source_dir); $(foreach source,$($(1)_all_sources),$(build_SHA256SUM) $(source) >> $$(@);) + touch $$@ +$($(1)_extracted): | $($(1)_fetched) + echo Extracting $(1)... + mkdir -p $$(@D) + cd $$(@D); $($(1)_extract_cmds) + touch $$@ +$($(1)_preprocessed): | $($(1)_extracted) + echo Preprocessing $(1)... + mkdir -p $$(@D) $($(1)_patch_dir) + $(foreach patch,$($(1)_patches),cd $(PATCHES_PATH)/$(1); cp $(patch) $($(1)_patch_dir) ;) + { cd $$(@D); $($(1)_preprocess_cmds); } $$($(1)_logging) + touch $$@ +$($(1)_configured): | $($(1)_dependencies) $($(1)_preprocessed) + echo Configuring $(1)... + rm -rf $(host_prefix); mkdir -p $(host_prefix)/lib; cd $(host_prefix); $(foreach package,$($(1)_all_dependencies), $(build_TAR) --no-same-owner -xf $($(package)_cached); ) + mkdir -p $$($(1)_build_dir) + +{ cd $$($(1)_build_dir); export $($(1)_config_env); $($(1)_config_cmds); } $$($(1)_logging) + touch $$@ +$($(1)_built): | $($(1)_configured) + echo Building $(1)... + mkdir -p $$(@D) + +{ cd $$(@D); export $($(1)_build_env); $($(1)_build_cmds); } $$($(1)_logging) + touch $$@ +$($(1)_staged): | $($(1)_built) + echo Staging $(1)... + mkdir -p $($(1)_staging_dir)/$(host_prefix) + +{ cd $($(1)_build_dir); export $($(1)_stage_env); $($(1)_stage_cmds); } $$($(1)_logging) + rm -rf $($(1)_extract_dir) + touch $$@ +$($(1)_postprocessed): | $($(1)_staged) + echo Postprocessing $(1)... + cd $($(1)_staging_prefix_dir); $($(1)_postprocess_cmds) + touch $$@ +$($(1)_cached): | $($(1)_dependencies) $($(1)_postprocessed) + echo Caching $(1)... + cd $$($(1)_staging_dir)/$(host_prefix); \ + find . ! -name '.stamp_postprocessed' -print0 | TZ=UTC xargs -0r $(build_TOUCH); \ + find . ! -name '.stamp_postprocessed' | LC_ALL=C sort | $(build_TAR) --numeric-owner --no-recursion -czf $$($(1)_staging_dir)/$$(@F) -T - + mkdir -p $$(@D) + rm -rf $$(@D) && mkdir -p $$(@D) + mv $$($(1)_staging_dir)/$$(@F) $$(@) + rm -rf $($(1)_staging_dir) + if test -f $($(1)_build_log); then mv $($(1)_build_log) $$(@D); fi +$($(1)_cached_checksum): $($(1)_cached) + cd $$(@D); $(build_SHA256SUM) $$( $$(@) + +.PHONY: $(1) +$(1): | $($(1)_cached_checksum) +.SECONDARY: $($(1)_cached) $($(1)_postprocessed) $($(1)_staged) $($(1)_built) $($(1)_configured) $($(1)_preprocessed) $($(1)_extracted) $($(1)_fetched) + +endef + +stages = fetched extracted preprocessed configured built staged postprocessed cached cached_checksum + +define ext_add_stages +$(foreach stage,$(stages), + $(1)_$(stage): $($(1)_$(stage)) + .PHONY: $(1)_$(stage)) +endef + +# These functions create the build targets for each package. They must be +# broken down into small steps so that each part is done for all packages +# before moving on to the next step. Otherwise, a package's info +# (build-id for example) would only be available to another package if it +# happened to be computed already. + +#set the type for host/build packages. +$(foreach native_package,$(native_packages),$(eval $(native_package)_type=build)) +$(foreach package,$(packages),$(eval $(package)_type=$(host_arch)_$(host_os))) + +#set overridable defaults +$(foreach package,$(all_packages),$(eval $(call int_vars,$(package)))) + +#include package files +$(foreach native_package,$(native_packages),$(eval include packages/$(native_package).mk)) +$(foreach package,$(packages),$(eval include packages/$(package).mk)) + +#compute a hash of all files that comprise this package's build recipe +$(foreach package,$(all_packages),$(eval $(call int_get_build_recipe_hash,$(package)))) + +#generate a unique id for this package, incorporating its dependencies as well +$(foreach package,$(all_packages),$(eval $(call int_get_build_id,$(package)))) + +#compute final vars after reading package vars +$(foreach package,$(all_packages),$(eval $(call int_config_attach_build_config,$(package)))) + +#create build targets +$(foreach package,$(all_packages),$(eval $(call int_add_cmds,$(package)))) diff --git a/depends/gen_id b/depends/gen_id new file mode 100644 index 0000000000..e2e2273b2d --- /dev/null +++ b/depends/gen_id @@ -0,0 +1,89 @@ +#!/usr/bin/env bash + +# Usage: env [ CC=... ] [ C_STANDARD=...] [ CXX=... ] [CXX_STANDARD=...] \ +# [ AR=... ] [ NM=... ] [ RANLIB=... ] [ STRIP=... ] [ DEBUG=... ] \ +# [ LTO=... ] [ NO_HARDEN=... ] ./build-id [ID_SALT]... +# +# Prints to stdout a SHA256 hash representing the current toolset, used by +# depends/Makefile as a build id for caching purposes (detecting when the +# toolset has changed and the cache needs to be invalidated). +# +# If the DEBUG environment variable is non-empty and the system has `tee` +# available in its $PATH, the pre-image to the SHA256 hash will be printed to +# stderr. This is to help developers debug caching issues in depends. + +# This script explicitly does not `set -e` because id determination is mostly +# opportunistic: it is fine that things fail, as long as they fail consistently. + +# Command variables (CC/CXX/AR) which can be blank are invoked with `bash -c`, +# because the "command not found" error message printed by shells often include +# the line number, like so: +# +# ./depends/gen_id: line 43: --version: command not found +# +# By invoking with `bash -c`, we ensure that the line number is always 1 + +( + # Redirect stderr to stdout + exec 2>&1 + + echo "BEGIN ALL" + + # Include any ID salts supplied via command line + echo "BEGIN ID SALT" + echo "$@" + echo "END ID SALT" + + # GCC only prints COLLECT_LTO_WRAPPER when invoked with just "-v", but we want + # the information from "-v -E -" as well, so just include both. + echo "BEGIN CC" + bash -c "${CC} -v" + bash -c "${CC} -v -E -xc -o /dev/null - < /dev/null" + bash -c "${CC} -v -E -xobjective-c -o /dev/null - < /dev/null" + echo "C_STANDARD=${C_STANDARD}" + echo "END CC" + + echo "BEGIN CXX" + bash -c "${CXX} -v" + bash -c "${CXX} -v -E -xc++ -o /dev/null - < /dev/null" + bash -c "${CXX} -v -E -xobjective-c++ -o /dev/null - < /dev/null" + echo "CXX_STANDARD=${CXX_STANDARD}" + echo "END CXX" + + echo "BEGIN AR" + bash -c "${AR} --version" + env | grep '^AR_' + echo "END AR" + + echo "BEGIN NM" + bash -c "${NM} --version" + env | grep '^NM_' + echo "END NM" + + echo "BEGIN RANLIB" + bash -c "${RANLIB} --version" + env | grep '^RANLIB_' + echo "END RANLIB" + + echo "BEGIN STRIP" + bash -c "${STRIP} --version" + env | grep '^STRIP_' + echo "END STRIP" + + echo "BEGIN LTO" + echo "LTO=${LTO}" + echo "END LTO" + + echo "BEGIN NO_HARDEN" + echo "NO_HARDEN=${NO_HARDEN}" + echo "END NO_HARDEN" + + echo "END ALL" +) | if [ -n "$DEBUG" ] && command -v tee > /dev/null 2>&1; then + # When debugging and `tee` is available, output the preimage to stderr + # in addition to passing through stdin to stdout + tee >(cat 1>&2) + else + # Otherwise, passthrough stdin to stdout + cat + fi | ${SHA256SUM} - | cut -d' ' -f1 diff --git a/depends/hosts/darwin.mk b/depends/hosts/darwin.mk new file mode 100644 index 0000000000..564381d1e9 --- /dev/null +++ b/depends/hosts/darwin.mk @@ -0,0 +1,84 @@ +OSX_MIN_VERSION=11.0 +OSX_SDK_VERSION=14.0 +XCODE_VERSION=15.0 +XCODE_BUILD_ID=15A240d +LLD_VERSION=711 + +OSX_SDK=$(SDK_PATH)/Xcode-$(XCODE_VERSION)-$(XCODE_BUILD_ID)-extracted-SDK-with-libcxx-headers + +# We can't just use $(shell command -v clang) because GNU Make handles builtins +# in a special way and doesn't know that `command` is a POSIX-standard builtin +# prior to 1af314465e5dfe3e8baa839a32a72e83c04f26ef, first released in v4.2.90. +# At the time of writing, GNU Make v4.2.1 is still being used in supported +# distro releases. +# +# Source: https://lists.gnu.org/archive/html/bug-make/2017-11/msg00017.html +clang_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v clang") +clangxx_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v clang++") + +darwin_AR=$(shell $(SHELL) $(.SHELLFLAGS) "command -v llvm-ar") +darwin_DSYMUTIL=$(shell $(SHELL) $(.SHELLFLAGS) "command -v dsymutil") +darwin_NM=$(shell $(SHELL) $(.SHELLFLAGS) "command -v llvm-nm") +darwin_OBJDUMP=$(shell $(SHELL) $(.SHELLFLAGS) "command -v llvm-objdump") +darwin_RANLIB=$(shell $(SHELL) $(.SHELLFLAGS) "command -v llvm-ranlib") +darwin_STRIP=$(shell $(SHELL) $(.SHELLFLAGS) "command -v llvm-strip") + +# Flag explanations: +# +# -mlinker-version +# +# Ensures that modern linker features are enabled. See here for more +# details: https://github.com/bitcoin/bitcoin/pull/19407. +# +# -isysroot$(OSX_SDK) -nostdlibinc +# +# Disable default include paths built into the compiler as well as +# those normally included for libc and libc++. The only path that +# remains implicitly is the clang resource dir. +# +# -iwithsysroot / -iframeworkwithsysroot +# +# Adds the desired paths from the SDK +# +# -platform_version +# +# Indicate to the linker the platform, the oldest supported version, +# and the SDK used. +# +# -no_adhoc_codesign +# +# Disable adhoc codesigning (for now) when using LLVM tooling, to avoid +# non-determinism issues with the Identifier field. + +darwin_CC=env -u C_INCLUDE_PATH -u CPLUS_INCLUDE_PATH \ + -u OBJC_INCLUDE_PATH -u OBJCPLUS_INCLUDE_PATH -u CPATH \ + -u LIBRARY_PATH \ + $(clang_prog) --target=$(host) \ + -isysroot$(OSX_SDK) -nostdlibinc \ + -iwithsysroot/usr/include -iframeworkwithsysroot/System/Library/Frameworks + +darwin_CXX=env -u C_INCLUDE_PATH -u CPLUS_INCLUDE_PATH \ + -u OBJC_INCLUDE_PATH -u OBJCPLUS_INCLUDE_PATH -u CPATH \ + -u LIBRARY_PATH \ + $(clangxx_prog) --target=$(host) \ + -isysroot$(OSX_SDK) -nostdlibinc \ + -iwithsysroot/usr/include/c++/v1 \ + -iwithsysroot/usr/include -iframeworkwithsysroot/System/Library/Frameworks + +darwin_CFLAGS=-pipe -std=$(C_STANDARD) -mmacos-version-min=$(OSX_MIN_VERSION) +darwin_CXXFLAGS=-pipe -std=$(CXX_STANDARD) -mmacos-version-min=$(OSX_MIN_VERSION) +darwin_LDFLAGS=-Wl,-platform_version,macos,$(OSX_MIN_VERSION),$(OSX_SDK_VERSION) + +ifneq ($(build_os),darwin) +darwin_CFLAGS += -mlinker-version=$(LLD_VERSION) +darwin_CXXFLAGS += -mlinker-version=$(LLD_VERSION) +darwin_LDFLAGS += -Wl,-no_adhoc_codesign -fuse-ld=lld +endif + +darwin_release_CFLAGS=-O2 +darwin_release_CXXFLAGS=$(darwin_release_CFLAGS) + +darwin_debug_CFLAGS=-O1 -g +darwin_debug_CXXFLAGS=$(darwin_debug_CFLAGS) + +darwin_cmake_system=Darwin diff --git a/depends/hosts/default.mk b/depends/hosts/default.mk new file mode 100644 index 0000000000..d82c33f29c --- /dev/null +++ b/depends/hosts/default.mk @@ -0,0 +1,42 @@ +ifneq ($(host),$(build)) +host_toolchain:=$(host)- +endif + +default_host_CC = $(host_toolchain)gcc +default_host_CXX = $(host_toolchain)g++ +default_host_AR = $(host_toolchain)ar +default_host_RANLIB = $(host_toolchain)ranlib +default_host_STRIP = $(host_toolchain)strip +default_host_NM = $(host_toolchain)nm +default_host_OBJCOPY = $(host_toolchain)objcopy + +define add_host_tool_func +ifneq ($(filter $(origin $1),undefined default),) +# Do not consider the well-known var $1 if it is undefined or is taking a value +# that is predefined by "make" (e.g. the make variable "CC" has a predefined +# value of "cc") +$(host_os)_$1?=$$(default_host_$1) +$(host_arch)_$(host_os)_$1?=$$($(host_os)_$1) +$(host_arch)_$(host_os)_$(release_type)_$1?=$$($(host_os)_$1) +else +$(host_os)_$1=$(or $($1),$($(host_os)_$1),$(default_host_$1)) +$(host_arch)_$(host_os)_$1=$(or $($1),$($(host_arch)_$(host_os)_$1),$$($(host_os)_$1)) +$(host_arch)_$(host_os)_$(release_type)_$1=$(or $($1),$($(host_arch)_$(host_os)_$(release_type)_$1),$$($(host_os)_$1)) +endif +host_$1=$$($(host_arch)_$(host_os)_$1) +endef + +define add_host_flags_func +ifeq ($(filter $(origin $1),undefined default),) +$(host_arch)_$(host_os)_$1 = +$(host_arch)_$(host_os)_$(release_type)_$1 = $($1) +else +$(host_arch)_$(host_os)_$1 += $($(host_os)_$1) +$(host_arch)_$(host_os)_$(release_type)_$1 += $($(host_os)_$(release_type)_$1) +endif +host_$1 = $$($(host_arch)_$(host_os)_$1) +host_$(release_type)_$1 = $$($(host_arch)_$(host_os)_$(release_type)_$1) +endef + +$(foreach tool,CC CXX AR RANLIB STRIP NM OBJCOPY OBJDUMP DSYMUTIL,$(eval $(call add_host_tool_func,$(tool)))) +$(foreach flags,CFLAGS CXXFLAGS CPPFLAGS LDFLAGS, $(eval $(call add_host_flags_func,$(flags)))) diff --git a/depends/hosts/freebsd.mk b/depends/hosts/freebsd.mk new file mode 100644 index 0000000000..055097b03d --- /dev/null +++ b/depends/hosts/freebsd.mk @@ -0,0 +1,31 @@ +freebsd_CFLAGS=-pipe -std=$(C_STANDARD) +freebsd_CXXFLAGS=-pipe -std=$(CXX_STANDARD) + +freebsd_release_CFLAGS=-O2 +freebsd_release_CXXFLAGS=$(freebsd_release_CFLAGS) + +freebsd_debug_CFLAGS=-O1 +freebsd_debug_CXXFLAGS=$(freebsd_debug_CFLAGS) + +ifeq (86,$(findstring 86,$(build_arch))) +i686_freebsd_CC=clang -m32 +i686_freebsd_CXX=clang++ -m32 +i686_freebsd_AR=ar +i686_freebsd_RANLIB=ranlib +i686_freebsd_NM=nm +i686_freebsd_STRIP=strip + +x86_64_freebsd_CC=clang -m64 +x86_64_freebsd_CXX=clang++ -m64 +x86_64_freebsd_AR=ar +x86_64_freebsd_RANLIB=ranlib +x86_64_freebsd_NM=nm +x86_64_freebsd_STRIP=strip +else +i686_freebsd_CC=$(default_host_CC) -m32 +i686_freebsd_CXX=$(default_host_CXX) -m32 +x86_64_freebsd_CC=$(default_host_CC) -m64 +x86_64_freebsd_CXX=$(default_host_CXX) -m64 +endif + +freebsd_cmake_system=FreeBSD diff --git a/depends/hosts/linux.mk b/depends/hosts/linux.mk new file mode 100644 index 0000000000..f5ce2bb0b8 --- /dev/null +++ b/depends/hosts/linux.mk @@ -0,0 +1,42 @@ +linux_CFLAGS=-pipe -std=$(C_STANDARD) +linux_CXXFLAGS=-pipe -std=$(CXX_STANDARD) + +ifneq ($(LTO),) +linux_AR = $(host_toolchain)gcc-ar +linux_NM = $(host_toolchain)gcc-nm +linux_RANLIB = $(host_toolchain)gcc-ranlib +endif + +linux_release_CFLAGS=-O2 +linux_release_CXXFLAGS=$(linux_release_CFLAGS) + +linux_debug_CFLAGS=-O1 -g +linux_debug_CXXFLAGS=$(linux_debug_CFLAGS) + +# https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html +linux_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC + +# https://libcxx.llvm.org/Hardening.html +linux_debug_CPPFLAGS+=-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG + +ifeq (86,$(findstring 86,$(build_arch))) +i686_linux_CC=gcc -m32 +i686_linux_CXX=g++ -m32 +i686_linux_AR=ar +i686_linux_RANLIB=ranlib +i686_linux_NM=nm +i686_linux_STRIP=strip + +x86_64_linux_CC=gcc -m64 +x86_64_linux_CXX=g++ -m64 +x86_64_linux_AR=ar +x86_64_linux_RANLIB=ranlib +x86_64_linux_NM=nm +x86_64_linux_STRIP=strip +else +i686_linux_CC=$(default_host_CC) -m32 +i686_linux_CXX=$(default_host_CXX) -m32 +x86_64_linux_CC=$(default_host_CC) -m64 +x86_64_linux_CXX=$(default_host_CXX) -m64 +endif +linux_cmake_system=Linux diff --git a/depends/hosts/mingw32.mk b/depends/hosts/mingw32.mk new file mode 100644 index 0000000000..4c657358f6 --- /dev/null +++ b/depends/hosts/mingw32.mk @@ -0,0 +1,22 @@ +ifneq ($(shell $(SHELL) $(.SHELLFLAGS) "command -v $(host)-g++-posix"),) +mingw32_CXX := $(host)-g++-posix +endif + +mingw32_CFLAGS=-pipe -std=$(C_STANDARD) +mingw32_CXXFLAGS=-pipe -std=$(CXX_STANDARD) + +ifneq ($(LTO),) +mingw32_AR = $(host_toolchain)gcc-ar +mingw32_NM = $(host_toolchain)gcc-nm +mingw32_RANLIB = $(host_toolchain)gcc-ranlib +endif + +mingw32_release_CFLAGS=-O2 +mingw32_release_CXXFLAGS=$(mingw32_release_CFLAGS) + +mingw32_debug_CFLAGS=-O1 -g +mingw32_debug_CXXFLAGS=$(mingw32_debug_CFLAGS) + +mingw32_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC + +mingw32_cmake_system=Windows diff --git a/depends/hosts/netbsd.mk b/depends/hosts/netbsd.mk new file mode 100644 index 0000000000..f33b2d2889 --- /dev/null +++ b/depends/hosts/netbsd.mk @@ -0,0 +1,39 @@ +netbsd_CFLAGS=-pipe -std=$(C_STANDARD) +netbsd_CXXFLAGS=-pipe -std=$(CXX_STANDARD) + +ifneq ($(LTO),) +netbsd_AR = $(host_toolchain)gcc-ar +netbsd_NM = $(host_toolchain)gcc-nm +netbsd_RANLIB = $(host_toolchain)gcc-ranlib +endif + +netbsd_CXXFLAGS=$(netbsd_CFLAGS) + +netbsd_release_CFLAGS=-O2 +netbsd_release_CXXFLAGS=$(netbsd_release_CFLAGS) + +netbsd_debug_CFLAGS=-O1 +netbsd_debug_CXXFLAGS=$(netbsd_debug_CFLAGS) + +ifeq (86,$(findstring 86,$(build_arch))) +i686_netbsd_CC=gcc -m32 +i686_netbsd_CXX=g++ -m32 +i686_netbsd_AR=ar +i686_netbsd_RANLIB=ranlib +i686_netbsd_NM=nm +i686_netbsd_STRIP=strip + +x86_64_netbsd_CC=gcc -m64 +x86_64_netbsd_CXX=g++ -m64 +x86_64_netbsd_AR=ar +x86_64_netbsd_RANLIB=ranlib +x86_64_netbsd_NM=nm +x86_64_netbsd_STRIP=strip +else +i686_netbsd_CC=$(default_host_CC) -m32 +i686_netbsd_CXX=$(default_host_CXX) -m32 +x86_64_netbsd_CC=$(default_host_CC) -m64 +x86_64_netbsd_CXX=$(default_host_CXX) -m64 +endif + +netbsd_cmake_system=NetBSD diff --git a/depends/hosts/openbsd.mk b/depends/hosts/openbsd.mk new file mode 100644 index 0000000000..bdd36dc9b3 --- /dev/null +++ b/depends/hosts/openbsd.mk @@ -0,0 +1,31 @@ +openbsd_CFLAGS=-pipe -std=$(C_STANDARD) +openbsd_CXXFLAGS=-pipe -std=$(CXX_STANDARD) + +openbsd_release_CFLAGS=-O2 +openbsd_release_CXXFLAGS=$(openbsd_release_CFLAGS) + +openbsd_debug_CFLAGS=-O1 +openbsd_debug_CXXFLAGS=$(openbsd_debug_CFLAGS) + +ifeq (86,$(findstring 86,$(build_arch))) +i686_openbsd_CC=clang -m32 +i686_openbsd_CXX=clang++ -m32 +i686_openbsd_AR=ar +i686_openbsd_RANLIB=ranlib +i686_openbsd_NM=nm +i686_openbsd_STRIP=strip + +x86_64_openbsd_CC=clang -m64 +x86_64_openbsd_CXX=clang++ -m64 +x86_64_openbsd_AR=ar +x86_64_openbsd_RANLIB=ranlib +x86_64_openbsd_NM=nm +x86_64_openbsd_STRIP=strip +else +i686_openbsd_CC=$(default_host_CC) -m32 +i686_openbsd_CXX=$(default_host_CXX) -m32 +x86_64_openbsd_CC=$(default_host_CC) -m64 +x86_64_openbsd_CXX=$(default_host_CXX) -m64 +endif + +openbsd_cmake_system=OpenBSD diff --git a/depends/packages.md b/depends/packages.md new file mode 100644 index 0000000000..7a7a42afa1 --- /dev/null +++ b/depends/packages.md @@ -0,0 +1,200 @@ +Each recipe consists of 3 main parts: defining identifiers, setting build +variables, and defining build commands. + +The package "mylib" will be used here as an example + +General tips: +- mylib_foo is written as $(package)_foo in order to make recipes more similar. +- Secondary dependency packages relative to the bitcoin binaries/libraries (i.e. + those not in `ALLOWED_LIBRARIES` in `contrib/devtools/symbol-check.py`) don't + need to be shared and should be built statically whenever possible. See + [below](#secondary-dependencies) for more details. + +## Identifiers +Each package is required to define at least these variables: + + $(package)_version: + Version of the upstream library or program. If there is no version, a + placeholder such as 1.0 can be used. + + $(package)_download_path: + Location of the upstream source, without the file-name. Usually http, https + or ftp. Secure transmission options like https should be preferred if + available. + + $(package)_file_name: + The upstream source filename available at the download path. + + $(package)_sha256_hash: + The sha256 hash of the upstream file + +These variables are optional: + + $(package)_build_subdir: + cd to this dir before running configure/build/stage commands. + + $(package)_download_file: + The file-name of the upstream source if it differs from how it should be + stored locally. This can be used to avoid storing file-names with strange + characters. + + $(package)_dependencies: + Names of any other packages that this one depends on. + + $(package)_patches: + Filenames of any patches needed to build the package + + $(package)_extra_sources: + Any extra files that will be fetched via $(package)_fetch_cmds. These are + specified so that they can be fetched and verified via 'make download'. + + +## Build Variables: +After defining the main identifiers, build variables may be added or customized +before running the build commands. They should be added to a function called +$(package)_set_vars. For example: + + define $(package)_set_vars + ... + endef + +Most variables can be prefixed with the host, architecture, or both, to make +the modifications specific to that case. For example: + + Universal: $(package)_cc=gcc + Linux only: $(package)_linux_cc=gcc + x86_64 only: $(package)_x86_64_cc = gcc + x86_64 linux only: $(package)_x86_64_linux_cc = gcc + +These variables may be set to override or append their default values. + + $(package)_cc + $(package)_cxx + $(package)_objc + $(package)_objcxx + $(package)_ar + $(package)_ranlib + $(package)_nm + $(package)_cflags + $(package)_cxxflags + $(package)_ldflags + $(package)_cppflags + $(package)_config_env + $(package)_build_env + $(package)_stage_env + $(package)_build_opts + $(package)_config_opts + +The *_env variables are used to add environment variables to the respective +commands. + +Many variables respect a debug/release suffix as well, in order to use them for +only the appropriate build config. For example: + + $(package)_cflags_release = -O3 + $(package)_cflags_i686_debug = -g + $(package)_config_opts_release = --disable-debug + +These will be used in addition to the options that do not specify +debug/release. All builds are considered to be release unless DEBUG=1 is set by +the user. Other variables may be defined as needed. + +## Build commands: + + For each build, a unique build dir and staging dir are created. For example, + `work/build/mylib/1.0-1adac830f6e` and `work/staging/mylib/1.0-1adac830f6e`. + + The following build commands are available for each recipe: + + $(package)_fetch_cmds: + Runs from: build dir + Fetch the source file. If undefined, it will be fetched and verified + against its hash. + + $(package)_extract_cmds: + Runs from: build dir + Verify the source file against its hash and extract it. If undefined, the + source is assumed to be a tarball. + + $(package)_preprocess_cmds: + Runs from: build dir/$(package)_build_subdir + Preprocess the source as necessary. If undefined, does nothing. + + $(package)_config_cmds: + Runs from: build dir/$(package)_build_subdir + Configure the source. If undefined, does nothing. + + $(package)_build_cmds: + Runs from: build dir/$(package)_build_subdir + Build the source. If undefined, does nothing. + + $(package)_stage_cmds: + Runs from: build dir/$(package)_build_subdir + Stage the build results. If undefined, does nothing. + + The following variables are available for each recipe: + + $(1)_staging_dir: package's destination sysroot path + $(1)_staging_prefix_dir: prefix path inside of the package's staging dir + $(1)_extract_dir: path to the package's extracted sources + $(1)_build_dir: path where configure/build/stage commands will be run + $(1)_patch_dir: path where the package's patches (if any) are found + +Notes on build commands: + +For packages built with autotools, $($(package)_autoconf) can be used in the +configure step to (usually) correctly configure automatically. Any +$($(package)_config_opts) will be appended. + +Most autotools projects can be properly staged using: + + $(MAKE) DESTDIR=$($(package)_staging_dir) install + +## Build outputs: + +In general, the output of a depends package should not contain any libtool +archives. Instead, the package should output `.pc` (`pkg-config`) files where +possible. + +From the [Gentoo Wiki entry](https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Handling_Libtool_Archives): + +> Libtool pulls in all direct and indirect dependencies into the .la files it +> creates. This leads to massive overlinking, which is toxic to the Gentoo +> ecosystem, as it leads to a massive number of unnecessary rebuilds. + +Where possible, packages are built with Position Independent Code. Either using +the Autotools `--with-pic` flag, or `CMAKE_POSITION_INDEPENDENT_CODE` with CMake. + +## Secondary dependencies: + +Secondary dependency packages relative to the bitcoin binaries/libraries (i.e. +those not in `ALLOWED_LIBRARIES` in `contrib/devtools/symbol-check.py`) don't +need to be shared and should be built statically whenever possible. This +improves general build reliability as illustrated by the following example: + +When linking an executable against a shared library `libprimary` that has its +own shared dependency `libsecondary`, we may need to specify the path to +`libsecondary` on the link command using the `-rpath/-rpath-link` options, it is +not sufficient to just say `libprimary`. + +For us, it's much easier to just link a static `libsecondary` into a shared +`libprimary`. Especially because in our case, we are linking against a dummy +`libprimary` anyway that we'll throw away. We don't care if the end-user has a +static or dynamic `libsecondary`, that's not our concern. With a static +`libsecondary`, when we need to link `libprimary` into our executable, there's no +dependency chain to worry about as `libprimary` has all the symbols. + +## Build targets: + +To build an individual package (useful for debugging), following build targets are available. + + make ${package} + make ${package}_fetched + make ${package}_extracted + make ${package}_preprocessed + make ${package}_configured + make ${package}_built + make ${package}_staged + make ${package}_postprocessed + make ${package}_cached + make ${package}_cached_checksum diff --git a/depends/packages/bdb.mk b/depends/packages/bdb.mk new file mode 100644 index 0000000000..be82b0d309 --- /dev/null +++ b/depends/packages/bdb.mk @@ -0,0 +1,33 @@ +package=bdb +$(package)_version=4.8.30 +$(package)_download_path=https://download.oracle.com/berkeley-db +$(package)_file_name=db-$($(package)_version).NC.tar.gz +$(package)_sha256_hash=12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef +$(package)_build_subdir=build_unix +$(package)_patches=clang_cxx_11.patch + +define $(package)_set_vars +$(package)_config_opts=--disable-shared --enable-cxx --disable-replication --enable-option-checking +$(package)_config_opts_mingw32=--enable-mingw +$(package)_cflags+=-Wno-error=implicit-function-declaration -Wno-error=format-security -Wno-error=implicit-int +$(package)_cppflags_freebsd=-D_XOPEN_SOURCE=600 -D__BSD_VISIBLE=1 +$(package)_cppflags_netbsd=-D_XOPEN_SOURCE=600 +$(package)_cppflags_mingw32=-DUNICODE -D_UNICODE +endef + +define $(package)_preprocess_cmds + patch -p1 < $($(package)_patch_dir)/clang_cxx_11.patch && \ + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub dist +endef + +define $(package)_config_cmds + ../dist/$($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) libdb_cxx-4.8.a libdb-4.8.a +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install_lib install_include +endef diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk new file mode 100644 index 0000000000..266b098a98 --- /dev/null +++ b/depends/packages/boost.mk @@ -0,0 +1,41 @@ +package=boost +$(package)_version=1.81.0 +$(package)_download_path=https://archives.boost.io/release/$($(package)_version)/source/ +$(package)_file_name=boost_$(subst .,_,$($(package)_version)).tar.gz +$(package)_sha256_hash=205666dea9f6a7cfed87c7a6dfbeb52a2c1b9de55712c9c1a87735d7181452b6 + +# Alias requires actual Boost libraries (System, Filesystem, Thread, +# Program_Options, Chrono, Iostreams, Date_Time). Upstream Particl +# only stages headers; we build the libs from source. + +$(package)_libraries=system filesystem thread program_options chrono iostreams date_time +$(package)_libs_with=$(foreach lib,$($(package)_libraries),--with-$(lib)) +$(package)_libs_csv=system,filesystem,thread,program_options,chrono,iostreams,date_time + +define $(package)_set_vars + $(package)_config_opts_release=variant=release + $(package)_config_opts_debug=variant=debug + $(package)_config_opts=--layout=system --user-config=user-config.jam + $(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sNO_ZLIB=1 -sNO_ZSTD=1 -sNO_LZMA=1 + $(package)_config_opts+=$($(package)_libs_with) + $(package)_config_opts_linux=runtime-link=shared target-os=linux + $(package)_config_opts_darwin=runtime-link=shared target-os=darwin + $(package)_config_opts_mingw32=runtime-link=static target-os=windows address-model=64 binary-format=pe abi=ms + $(package)_toolset_$(host_os)=gcc +endef + +define $(package)_preprocess_cmds + echo "using $($(package)_toolset_$(host_os)) : : $($(package)_cxx) : \"$($(package)_cxxflags) $($(package)_cppflags)\" \"$($(package)_ldflags)\" \"$($(package)_ar)\" \"$($(package)_ranlib)\" ;" > user-config.jam +endef + +define $(package)_config_cmds + ./bootstrap.sh --without-icu --with-libraries=$($(package)_libs_csv) +endef + +define $(package)_build_cmds + ./b2 -d2 -j$(JOBS) --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) stage +endef + +define $(package)_stage_cmds + ./b2 -d0 -j$(JOBS) --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) install +endef diff --git a/depends/packages/capnp.mk b/depends/packages/capnp.mk new file mode 100644 index 0000000000..6d792db711 --- /dev/null +++ b/depends/packages/capnp.mk @@ -0,0 +1,28 @@ +package=capnp +$(package)_version=$(native_$(package)_version) +$(package)_download_path=$(native_$(package)_download_path) +$(package)_download_file=$(native_$(package)_download_file) +$(package)_file_name=$(native_$(package)_file_name) +$(package)_sha256_hash=$(native_$(package)_sha256_hash) + +define $(package)_set_vars := + $(package)_config_opts := -DBUILD_TESTING=OFF + $(package)_config_opts += -DWITH_OPENSSL=OFF + $(package)_config_opts += -DWITH_ZLIB=OFF +endef + +define $(package)_config_cmds + $($(package)_cmake) . +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf lib/pkgconfig +endef diff --git a/depends/packages/eudev.mk b/depends/packages/eudev.mk new file mode 100644 index 0000000000..c7864fdfd1 --- /dev/null +++ b/depends/packages/eudev.mk @@ -0,0 +1,27 @@ +package=eudev +$(package)_version=3.2.11 +$(package)_download_path=https://github.com/eudev-project/eudev/releases/download/v$($(package)_version)/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=19847cafec67897da855fde56f9dc7d92e21c50e450aa79068a7e704ed44558b + +define $(package)_set_vars + $(package)_config_opts=--disable-static --disable-manpages --disable-programs + $(package)_config_opts_linux=--with-pic + $(package)_cflags=-pipe +endef + +define $(package)_preprocess_cmds + cd $($(package)_build_subdir); autoreconf -f -i -s +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef diff --git a/depends/packages/expat.mk b/depends/packages/expat.mk new file mode 100644 index 0000000000..2ec660109c --- /dev/null +++ b/depends/packages/expat.mk @@ -0,0 +1,31 @@ +package=expat +$(package)_version=2.4.8 +$(package)_download_path=https://github.com/libexpat/libexpat/releases/download/R_$(subst .,_,$($(package)_version))/ +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=f79b8f904b749e3e0d20afeadecf8249c55b2e32d4ebb089ae378df479dcaf25 + +# -D_DEFAULT_SOURCE defines __USE_MISC, which exposes additional +# definitions in endian.h, which are required for a working +# endianness check in configure when building with -flto. +define $(package)_set_vars + $(package)_config_opts=--disable-shared --without-docbook --without-tests --without-examples + $(package)_config_opts += --disable-dependency-tracking --enable-option-checking + $(package)_config_opts += --without-xmlwf + $(package)_cppflags += -D_DEFAULT_SOURCE +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share lib/cmake lib/*.la +endef diff --git a/depends/packages/fontconfig.mk b/depends/packages/fontconfig.mk new file mode 100644 index 0000000000..6baaecc55a --- /dev/null +++ b/depends/packages/fontconfig.mk @@ -0,0 +1,33 @@ +package=fontconfig +$(package)_version=2.12.6 +$(package)_download_path=https://www.freedesktop.org/software/fontconfig/release/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=064b9ebf060c9e77011733ac9dc0e2ce92870b574cca2405e11f5353a683c334 +$(package)_dependencies=freetype expat +$(package)_patches=gperf_header_regen.patch + +define $(package)_set_vars + $(package)_config_opts=--disable-docs --disable-static --disable-libxml2 --disable-iconv + $(package)_config_opts += --disable-dependency-tracking --enable-option-checking + $(package)_cflags += -Wno-implicit-function-declaration +endef + +define $(package)_preprocess_cmds + patch -p1 < $($(package)_patch_dir)/gperf_header_regen.patch +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf var lib/*.la +endef diff --git a/depends/packages/freetype.mk b/depends/packages/freetype.mk new file mode 100644 index 0000000000..c28259ed67 --- /dev/null +++ b/depends/packages/freetype.mk @@ -0,0 +1,26 @@ +package=freetype +$(package)_version=2.11.0 +$(package)_download_path=https://download.savannah.gnu.org/releases/$(package) +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=8bee39bd3968c4804b70614a0a3ad597299ad0e824bc8aad5ce8aaf48067bde7 + +define $(package)_set_vars + $(package)_config_opts=--without-zlib --without-png --without-harfbuzz --without-bzip2 --disable-static + $(package)_config_opts += --enable-option-checking --without-brotli +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share/man lib/*.la +endef diff --git a/depends/packages/hidapi.mk b/depends/packages/hidapi.mk new file mode 100644 index 0000000000..a7420c4117 --- /dev/null +++ b/depends/packages/hidapi.mk @@ -0,0 +1,23 @@ +package=hidapi +$(package)_version=0.12.0 +$(package)_download_path=https://github.com/libusb/hidapi/archive/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=28ec1451f0527ad40c1a4c92547966ffef96813528c8b184a665f03ecbb508bc +$(package)_linux_dependencies=libusb + +define $(package)_set_vars + $(package)_config_opts=--disable-shared + $(package)_config_opts_linux=--with-pic +endef + +define $(package)_preprocess_cmds + cd $($(package)_build_subdir); ./bootstrap +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef diff --git a/depends/packages/libXau.mk b/depends/packages/libXau.mk new file mode 100644 index 0000000000..6bafc4f41a --- /dev/null +++ b/depends/packages/libXau.mk @@ -0,0 +1,33 @@ +package=libXau +$(package)_version=1.0.9 +$(package)_download_path=https://xorg.freedesktop.org/releases/individual/lib/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=1f123d8304b082ad63a9e89376400a3b1d4c29e67e3ea07b3f659cccca690eea +$(package)_dependencies=xproto + +# When updating this package, check the default value of +# --disable-xthreads. It is currently enabled. +define $(package)_set_vars + $(package)_config_opts=--disable-shared --disable-lint-library --without-lint + $(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share lib/*.la +endef diff --git a/depends/packages/libevent.mk b/depends/packages/libevent.mk new file mode 100644 index 0000000000..d764be5d0a --- /dev/null +++ b/depends/packages/libevent.mk @@ -0,0 +1,41 @@ +package=libevent +$(package)_version=2.1.12-stable +$(package)_download_path=https://github.com/libevent/libevent/releases/download/release-$($(package)_version)/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb + +# When building for Windows, we set _WIN32_WINNT to target the same Windows +# version as we do in configure. Due to quirks in libevents build system, this +# is also required to enable support for ipv6. See #19375. +define $(package)_set_vars + $(package)_config_opts=--disable-shared --disable-openssl --disable-libevent-regress --disable-samples + $(package)_config_opts += --disable-dependency-tracking --enable-option-checking + $(package)_config_opts_release=--disable-debug-mode + $(package)_cppflags_mingw32=-D_WIN32_WINNT=0x0601 + + ifeq ($(NO_HARDEN),) + $(package)_cppflags+=-D_FORTIFY_SOURCE=3 + endif +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm lib/*.la && \ + rm include/ev*.h && \ + rm include/event2/*_compat.h +endef diff --git a/depends/packages/libmultiprocess.mk b/depends/packages/libmultiprocess.mk new file mode 100644 index 0000000000..c292c49bfb --- /dev/null +++ b/depends/packages/libmultiprocess.mk @@ -0,0 +1,28 @@ +package=libmultiprocess +$(package)_version=$(native_$(package)_version) +$(package)_download_path=$(native_$(package)_download_path) +$(package)_file_name=$(native_$(package)_file_name) +$(package)_sha256_hash=$(native_$(package)_sha256_hash) +$(package)_dependencies=native_$(package) capnp +ifneq ($(host),$(build)) +$(package)_dependencies += native_capnp +endif + +define $(package)_set_vars := +ifneq ($(host),$(build)) +$(package)_config_opts := -DCAPNP_EXECUTABLE="$$(native_capnp_prefixbin)/capnp" +$(package)_config_opts += -DCAPNPC_CXX_EXECUTABLE="$$(native_capnp_prefixbin)/capnpc-c++" +endif +endef + +define $(package)_config_cmds + $($(package)_cmake) . +endef + +define $(package)_build_cmds + $(MAKE) multiprocess +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install-lib +endef diff --git a/depends/packages/libnatpmp.mk b/depends/packages/libnatpmp.mk new file mode 100644 index 0000000000..5a573a18e7 --- /dev/null +++ b/depends/packages/libnatpmp.mk @@ -0,0 +1,20 @@ +package=libnatpmp +$(package)_version=f2433bec24ca3d3f22a8a7840728a3ac177f94ba +$(package)_download_path=https://github.com/miniupnp/libnatpmp/archive +$(package)_file_name=$($(package)_version).tar.gz +$(package)_sha256_hash=ef84979950dfb3556705b63c9cd6c95501b75e887fba466234b187f3c9029669 +$(package)_build_subdir=build + +define $(package)_config_cmds + $($(package)_cmake) -S .. -B . +endef + +define $(package)_build_cmds + $(MAKE) natpmp +endef + +define $(package)_stage_cmds + mkdir -p $($(package)_staging_prefix_dir)/include $($(package)_staging_prefix_dir)/lib && \ + install ../natpmp.h ../natpmp_declspec.h $($(package)_staging_prefix_dir)/include && \ + install libnatpmp.a $($(package)_staging_prefix_dir)/lib +endef diff --git a/depends/packages/libusb.mk b/depends/packages/libusb.mk new file mode 100644 index 0000000000..c1e2e08608 --- /dev/null +++ b/depends/packages/libusb.mk @@ -0,0 +1,23 @@ +package=libusb +$(package)_version=1.0.26 +$(package)_download_path=https://github.com/libusb/libusb/releases/download/v$($(package)_version) +$(package)_file_name=libusb-$($(package)_version).tar.bz2 +$(package)_sha256_hash=12ce7a61fc9854d1d2a1ffe095f7b5fac19ddba095c259e6067a46500381b5a5 +$(package)_linux_dependencies=eudev + +define $(package)_set_vars + $(package)_config_opts=--disable-shared --enable-udev + $(package)_config_opts_linux=--with-pic +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef diff --git a/depends/packages/libxcb.mk b/depends/packages/libxcb.mk new file mode 100644 index 0000000000..036eaf6560 --- /dev/null +++ b/depends/packages/libxcb.mk @@ -0,0 +1,41 @@ +package=libxcb +$(package)_version=1.14 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=a55ed6db98d43469801262d81dc2572ed124edc3db31059d4e9916eb9f844c34 +$(package)_dependencies=xcb_proto libXau +$(package)_patches = remove_pthread_stubs.patch + +define $(package)_set_vars +$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen --without-launchd +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +# Disable unneeded extensions. +# More info is available from: https://doc.qt.io/qt-5.15/linux-requirements.html +$(package)_config_opts += --disable-composite --disable-damage --disable-dpms +$(package)_config_opts += --disable-dri2 --disable-dri3 --disable-glx +$(package)_config_opts += --disable-present --disable-record --disable-resource +$(package)_config_opts += --disable-screensaver --disable-xevie --disable-xfree86-dri +$(package)_config_opts += --disable-xinput --disable-xprint --disable-selinux +$(package)_config_opts += --disable-xtest --disable-xv --disable-xvmc +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux && \ + patch -p1 -i $($(package)_patch_dir)/remove_pthread_stubs.patch +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share lib/*.la +endef diff --git a/depends/packages/libxcb_util.mk b/depends/packages/libxcb_util.mk new file mode 100644 index 0000000000..dc4456f85c --- /dev/null +++ b/depends/packages/libxcb_util.mk @@ -0,0 +1,31 @@ +package=libxcb_util +$(package)_version=0.4.0 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=xcb-util-$($(package)_version).tar.gz +$(package)_sha256_hash=0ed0934e2ef4ddff53fcc70fc64fb16fe766cd41ee00330312e20a985fd927a7 +$(package)_dependencies=libxcb + +define $(package)_set_vars +$(package)_config_opts = --disable-shared --disable-devel-docs --without-doxygen +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share/man share/doc lib/*.la +endef diff --git a/depends/packages/libxcb_util_image.mk b/depends/packages/libxcb_util_image.mk new file mode 100644 index 0000000000..2228250fec --- /dev/null +++ b/depends/packages/libxcb_util_image.mk @@ -0,0 +1,31 @@ +package=libxcb_util_image +$(package)_version=0.4.0 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=xcb-util-image-$($(package)_version).tar.gz +$(package)_sha256_hash=cb2c86190cf6216260b7357a57d9100811bb6f78c24576a3a5bfef6ad3740a42 +$(package)_dependencies=libxcb libxcb_util + +define $(package)_set_vars +$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts+= --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share/man share/doc lib/*.la +endef diff --git a/depends/packages/libxcb_util_keysyms.mk b/depends/packages/libxcb_util_keysyms.mk new file mode 100644 index 0000000000..56bc33d258 --- /dev/null +++ b/depends/packages/libxcb_util_keysyms.mk @@ -0,0 +1,31 @@ +package=libxcb_util_keysyms +$(package)_version=0.4.0 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=xcb-util-keysyms-$($(package)_version).tar.gz +$(package)_sha256_hash=0807cf078fbe38489a41d755095c58239e1b67299f14460dec2ec811e96caa96 +$(package)_dependencies=libxcb xproto + +define $(package)_set_vars +$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share/man share/doc lib/*.la +endef diff --git a/depends/packages/libxcb_util_render.mk b/depends/packages/libxcb_util_render.mk new file mode 100644 index 0000000000..ee2883feda --- /dev/null +++ b/depends/packages/libxcb_util_render.mk @@ -0,0 +1,31 @@ +package=libxcb_util_render +$(package)_version=0.3.9 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=xcb-util-renderutil-$($(package)_version).tar.gz +$(package)_sha256_hash=55eee797e3214fe39d0f3f4d9448cc53cffe06706d108824ea37bb79fcedcad5 +$(package)_dependencies=libxcb + +define $(package)_set_vars +$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share/man share/doc lib/*.la +endef diff --git a/depends/packages/libxcb_util_wm.mk b/depends/packages/libxcb_util_wm.mk new file mode 100644 index 0000000000..a68fd23f8a --- /dev/null +++ b/depends/packages/libxcb_util_wm.mk @@ -0,0 +1,31 @@ +package=libxcb_util_wm +$(package)_version=0.4.1 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=xcb-util-wm-$($(package)_version).tar.gz +$(package)_sha256_hash=038b39c4bdc04a792d62d163ba7908f4bb3373057208c07110be73c1b04b8334 +$(package)_dependencies=libxcb + +define $(package)_set_vars +$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share/man share/doc lib/*.la +endef diff --git a/depends/packages/libxkbcommon.mk b/depends/packages/libxkbcommon.mk new file mode 100644 index 0000000000..bcdcf671f7 --- /dev/null +++ b/depends/packages/libxkbcommon.mk @@ -0,0 +1,37 @@ +package=libxkbcommon +$(package)_version=0.8.4 +$(package)_download_path=https://xkbcommon.org/download/ +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=60ddcff932b7fd352752d51a5c4f04f3d0403230a584df9a2e0d5ed87c486c8b +$(package)_dependencies=libxcb + +# This package explicitly enables -Werror=array-bounds, which causes build failures +# with GCC 12.1+. Work around that by turning errors back into warnings. +# This workaround would be dropped if the package was updated, as that would require +# a different build system (Meson) +define $(package)_set_vars +$(package)_config_opts = --enable-option-checking --disable-dependency-tracking +$(package)_config_opts += --disable-static --disable-docs +$(package)_cflags += -Wno-error=array-bounds +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm lib/*.la +endef + diff --git a/depends/packages/miniupnpc.mk b/depends/packages/miniupnpc.mk new file mode 100644 index 0000000000..341031b5f8 --- /dev/null +++ b/depends/packages/miniupnpc.mk @@ -0,0 +1,31 @@ +package=miniupnpc +$(package)_version=2.2.7 +$(package)_download_path=http://miniupnp.free.fr/files/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=b0c3a27056840fd0ec9328a5a9bac3dc5e0ec6d2e8733349cf577b0aa1e70ac1 +$(package)_patches=dont_leak_info.patch cmake_get_src_addr.patch fix_windows_snprintf.patch +$(package)_build_subdir=build + +define $(package)_set_vars +$(package)_config_opts = -DUPNPC_BUILD_SAMPLE=OFF -DUPNPC_BUILD_SHARED=OFF +$(package)_config_opts += -DUPNPC_BUILD_STATIC=ON -DUPNPC_BUILD_TESTS=OFF +$(package)_config_opts_mingw32 += -DMINIUPNPC_TARGET_WINDOWS_VERSION=0x0601 +endef + +define $(package)_preprocess_cmds + patch -p1 < $($(package)_patch_dir)/dont_leak_info.patch && \ + patch -p1 < $($(package)_patch_dir)/cmake_get_src_addr.patch && \ + patch -p1 < $($(package)_patch_dir)/fix_windows_snprintf.patch +endef + +define $(package)_config_cmds + $($(package)_cmake) -S .. -B . +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + cmake --install . --prefix $($(package)_staging_prefix_dir) +endef diff --git a/depends/packages/native_capnp.mk b/depends/packages/native_capnp.mk new file mode 100644 index 0000000000..484e78d5d9 --- /dev/null +++ b/depends/packages/native_capnp.mk @@ -0,0 +1,28 @@ +package=native_capnp +$(package)_version=1.0.1 +$(package)_download_path=https://capnproto.org/ +$(package)_download_file=capnproto-c++-$($(package)_version).tar.gz +$(package)_file_name=capnproto-cxx-$($(package)_version).tar.gz +$(package)_sha256_hash=0f7f4b8a76a2cdb284fddef20de8306450df6dd031a47a15ac95bc43c3358e09 + +define $(package)_set_vars + $(package)_config_opts := -DBUILD_TESTING=OFF + $(package)_config_opts += -DWITH_OPENSSL=OFF + $(package)_config_opts += -DWITH_ZLIB=OFF +endef + +define $(package)_config_cmds + $($(package)_cmake) . +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf lib/pkgconfig +endef diff --git a/depends/packages/native_ccache.mk b/depends/packages/native_ccache.mk new file mode 100644 index 0000000000..13aab959f0 --- /dev/null +++ b/depends/packages/native_ccache.mk @@ -0,0 +1,31 @@ +package=native_ccache +$(package)_version=3.4.1 +$(package)_download_path=https://samba.org/ftp/ccache +$(package)_file_name=ccache-$($(package)_version).tar.bz2 +$(package)_sha256_hash=ca5a01fb4868cdb5176c77b8b4a390be7929a6064be80741217e0686f03f8389 + +define $(package)_set_vars +$(package)_config_opts= +endef + +define $(package)_preprocess_cmds + sed -i '57,60d' Makefile.in; \ + sed -i '57izlib_sources = src/zlib/adler32.c src/zlib/crc32.c src/zlib/deflate.c src/zlib/gzclose.c src/zlib/gzlib.c src/zlib/gzread.c src/zlib/gzwrite.c src/zlib/inffast.c src/zlib/inflate.c src/zlib/inftrees.c src/zlib/trees.c src/zlib/zutil.c' Makefile.in; \ + sed "s/-Werror/-Werror -Wimplicit-fallthrough=0/" dev.mk.in; +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf lib include +endef diff --git a/depends/packages/native_libmultiprocess.mk b/depends/packages/native_libmultiprocess.mk new file mode 100644 index 0000000000..bcdb1f9e7c --- /dev/null +++ b/depends/packages/native_libmultiprocess.mk @@ -0,0 +1,18 @@ +package=native_libmultiprocess +$(package)_version=8da797c5f1644df1bffd84d10c1ae9836dc70d60 +$(package)_download_path=https://github.com/chaincodelabs/libmultiprocess/archive +$(package)_file_name=$($(package)_version).tar.gz +$(package)_sha256_hash=030f4d393d2ac9deba98d2e1973e22fc439ffc009d5f8ae3225c90639f86beb0 +$(package)_dependencies=native_capnp + +define $(package)_config_cmds + $($(package)_cmake) . +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install-bin +endef diff --git a/depends/packages/native_protobuf.mk b/depends/packages/native_protobuf.mk new file mode 100644 index 0000000000..7abb744e42 --- /dev/null +++ b/depends/packages/native_protobuf.mk @@ -0,0 +1,25 @@ +package=native_protobuf +$(package)_version=3.21.7 +$(package)_download_path=https://github.com/google/protobuf/releases/download/v21.7 +$(package)_file_name=protobuf-cpp-$($(package)_version).tar.gz +$(package)_sha256_hash=70de993af0b4f2ddacce59e62ba6d7b7e48faf48beb1b0d5f1ac0e1fb0a68423 + +define $(package)_set_vars +$(package)_config_opts=--disable-shared --without-zlib +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) -C src protoc +endef + +define $(package)_stage_cmds + $(MAKE) -C src DESTDIR=$($(package)_staging_dir) install-strip +endef + +define $(package)_postprocess_cmds + rm -rf lib include +endef diff --git a/depends/packages/openssl.mk b/depends/packages/openssl.mk new file mode 100644 index 0000000000..b257164622 --- /dev/null +++ b/depends/packages/openssl.mk @@ -0,0 +1,37 @@ +package=openssl +$(package)_version=1.1.1w +$(package)_download_path=https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8 + +define $(package)_set_vars +$(package)_config_env=AR="$($(package)_ar)" RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)" +$(package)_config_opts=--prefix=$(host_prefix) --openssldir=$(host_prefix)/etc/openssl +$(package)_config_opts+=no-shared no-dso no-engine no-tests no-zlib no-dynamic-engine +# no-asm: skip inline assembly. The x86_64-gcc.c bn asm fails to parse +# under the mingw32 cross-compile (token errors). Costs runtime perf +# but is required for a reliable build. +$(package)_config_opts+=no-asm +$(package)_config_opts+=$($(package)_cflags) $($(package)_cppflags) +$(package)_config_opts_linux=-fPIC -Wa,--noexecstack +$(package)_config_opts_x86_64_linux=linux-x86_64 +$(package)_config_opts_i686_linux=linux-generic32 +$(package)_config_opts_arm_linux=linux-generic32 +$(package)_config_opts_aarch64_linux=linux-aarch64 +$(package)_config_opts_x86_64_darwin=darwin64-x86_64-cc +$(package)_config_opts_aarch64_darwin=darwin64-arm64-cc +$(package)_config_opts_x86_64_mingw32=mingw64 -static +$(package)_config_opts_i686_mingw32=mingw -static +endef + +define $(package)_config_cmds + ./Configure $($(package)_config_opts) +endef + +define $(package)_build_cmds + $(MAKE) build_libs +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install_dev +endef diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk new file mode 100644 index 0000000000..2955ae41af --- /dev/null +++ b/depends/packages/packages.mk @@ -0,0 +1,36 @@ +packages:= + +boost_packages = boost + +libevent_packages = libevent + +# Alias-specific: Tor is statically bundled because Alias runs as a Tor +# hidden service. xz (liblzma) is a transitive dependency of Tor. +tor_packages = tor xz + +protobuf_native_packages = native_protobuf +protobuf_packages = protobuf + +qrencode_linux_packages = qrencode +qrencode_darwin_packages = qrencode +qrencode_mingw32_packages = qrencode + +qt_linux_packages:=qt expat libxcb xcb_proto libXau xproto freetype fontconfig libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm +qt_darwin_packages=qt +qt_mingw32_packages=qt + +bdb_packages=bdb +sqlite_packages=sqlite + +zmq_packages=sodium zeromq + +upnp_packages=miniupnpc +natpmp_packages=libnatpmp +usb_packages=libusb hidapi protobuf +usb_linux_packages=eudev +usb_native_packages=native_protobuf + +multiprocess_packages = libmultiprocess capnp +multiprocess_native_packages = native_libmultiprocess native_capnp + +usdt_linux_packages=systemtap diff --git a/depends/packages/protobuf.mk b/depends/packages/protobuf.mk new file mode 100644 index 0000000000..95b4b7f56d --- /dev/null +++ b/depends/packages/protobuf.mk @@ -0,0 +1,33 @@ +package=protobuf +$(package)_version=$(native_$(package)_version) +$(package)_download_path=$(native_$(package)_download_path) +$(package)_file_name=$(native_$(package)_file_name) +$(package)_sha256_hash=$(native_$(package)_sha256_hash) +$(package)_dependencies=native_$(package) +$(package)_cxxflags=-std=c++11 + +define $(package)_set_vars + $(package)_config_opts=--disable-shared --with-protoc=$(build_prefix)/bin/protoc + $(package)_config_opts_linux=--with-pic +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) -C src libprotobuf.la +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) -C src install-libLTLIBRARIES install-nobase_includeHEADERS &&\ + $(MAKE) DESTDIR=$($(package)_staging_dir) install-pkgconfigDATA +endef + +define $(package)_postprocess_cmds + rm lib/libprotoc.a lib/*.la +endef diff --git a/depends/packages/qrencode.mk b/depends/packages/qrencode.mk new file mode 100644 index 0000000000..4216646063 --- /dev/null +++ b/depends/packages/qrencode.mk @@ -0,0 +1,30 @@ +package=qrencode +$(package)_version=4.1.1 +$(package)_download_path=https://fukuchi.org/works/qrencode/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=da448ed4f52aba6bcb0cd48cac0dd51b8692bccc4cd127431402fca6f8171e8e +$(package)_patches=cmake_fixups.patch + +define $(package)_set_vars +$(package)_config_opts := -DWITH_TOOLS=NO -DWITH_TESTS=NO -DGPROF=OFF -DCOVERAGE=OFF +$(package)_config_opts += -DCMAKE_DISABLE_FIND_PACKAGE_PNG=TRUE -DWITHOUT_PNG=ON +$(package)_config_opts += -DCMAKE_DISABLE_FIND_PACKAGE_ICONV=TRUE +$(package)_cflags += -Wno-int-conversion -Wno-implicit-function-declaration +endef + +define $(package)_preprocess_cmds + patch -p1 < $($(package)_patch_dir)/cmake_fixups.patch +endef + + +define $(package)_config_cmds + $($(package)_cmake) -S . -B . +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk new file mode 100644 index 0000000000..2d8145634c --- /dev/null +++ b/depends/packages/qt.mk @@ -0,0 +1,323 @@ +package=qt +$(package)_version=5.15.14 +$(package)_download_path=https://download.qt.io/official_releases/qt/5.15/$($(package)_version)/submodules +$(package)_suffix=everywhere-opensource-src-$($(package)_version).tar.xz +$(package)_file_name=qtbase-$($(package)_suffix) +$(package)_sha256_hash=500d3b390048e9538c28b5f523dfea6936f9c2e10d24ab46580ff57d430b98be +$(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm +$(package)_qt_libs=corelib network widgets gui plugins testlib +$(package)_linguist_tools = lrelease lupdate lconvert +$(package)_patches = qt.pro +$(package)_patches += qttools_src.pro +$(package)_patches += mac-qmake.conf +$(package)_patches += fix_qt_pkgconfig.patch +$(package)_patches += no-xlib.patch +$(package)_patches += dont_hardcode_pwd.patch +$(package)_patches += qtbase-moc-ignore-gcc-macro.patch +$(package)_patches += no_warnings_for_symbols.patch +$(package)_patches += rcc_hardcode_timestamp.patch +$(package)_patches += duplicate_lcqpafonts.patch +$(package)_patches += guix_cross_lib_path.patch +$(package)_patches += fix-macos-linker.patch +$(package)_patches += memory_resource.patch +$(package)_patches += clang_18_libpng.patch +$(package)_patches += utc_from_string_no_optimize.patch +$(package)_patches += windows_lto.patch +$(package)_patches += zlib-timebits64.patch + +$(package)_qttranslations_file_name=qttranslations-$($(package)_suffix) +$(package)_qttranslations_sha256_hash=5b94d1a11b566908622fcca2f8b799744d2f8a68da20be4caa5953ed63b10489 + +$(package)_qttools_file_name=qttools-$($(package)_suffix) +$(package)_qttools_sha256_hash=12061a85baf5f4de8fbc795e1d3872b706f340211b9e70962caeffc6f5e89563 + +# Additional Qt submodules needed by Alias's GUI (QQuickWidget, +# QWebChannel, QWebSocket, QSvgRenderer). The official_releases path +# is gone; use the archive/ mirror. +$(package)_qtdeclarative_file_name=qtdeclarative-everywhere-opensource-src-$($(package)_version).tar.xz +$(package)_qtdeclarative_sha256_hash=25d9ae3e27efb814f3ca933b6f5acdc754fdefbc714a297040932f133ad1e652 +$(package)_qtsvg_file_name=qtsvg-everywhere-opensource-src-$($(package)_version).tar.xz +$(package)_qtsvg_sha256_hash=a99e87dbebd2621ea62fb4f8448b978a660d781fd91bb8f02fc636073035f145 +$(package)_qtwebchannel_file_name=qtwebchannel-everywhere-opensource-src-$($(package)_version).tar.xz +$(package)_qtwebchannel_sha256_hash=e33416aab97486b73de99e325a30f5e5bcce25f0cb7dfc472ed0ea25aa25d949 +$(package)_qtwebsockets_file_name=qtwebsockets-everywhere-opensource-src-$($(package)_version).tar.xz +$(package)_qtwebsockets_sha256_hash=4bf4c0b699852111fcbea96c122f0cee3a04df9e4da60c5324ad1e18223a78c5 + +$(package)_extra_sources = $($(package)_qttranslations_file_name) +$(package)_extra_sources += $($(package)_qttools_file_name) +$(package)_extra_sources += $($(package)_qtdeclarative_file_name) +$(package)_extra_sources += $($(package)_qtsvg_file_name) +$(package)_extra_sources += $($(package)_qtwebchannel_file_name) +$(package)_extra_sources += $($(package)_qtwebsockets_file_name) + +define $(package)_set_vars +$(package)_config_env = QT_MAC_SDK_NO_VERSION_CHECK=1 +$(package)_config_opts_release = -release +$(package)_config_opts_release += -silent +$(package)_config_opts_debug = -debug +$(package)_config_opts_debug += -optimized-tools +$(package)_config_opts += -bindir $(build_prefix)/bin +$(package)_config_opts += -c++std c++2a +$(package)_config_opts += -confirm-license +$(package)_config_opts += -hostprefix $(build_prefix) +$(package)_config_opts += -no-compile-examples +$(package)_config_opts += -no-cups +$(package)_config_opts += -no-egl +$(package)_config_opts += -no-eglfs +$(package)_config_opts += -no-evdev +$(package)_config_opts += -no-gif +$(package)_config_opts += -no-glib +$(package)_config_opts += -no-icu +$(package)_config_opts += -no-ico +$(package)_config_opts += -no-iconv +$(package)_config_opts += -no-kms +$(package)_config_opts += -no-linuxfb +$(package)_config_opts += -no-libjpeg +$(package)_config_opts += -no-libproxy +$(package)_config_opts += -no-libudev +$(package)_config_opts += -no-mimetype-database +$(package)_config_opts += -no-mtdev +$(package)_config_opts += -no-openssl +$(package)_config_opts += -no-openvg +$(package)_config_opts += -no-reduce-relocations +$(package)_config_opts += -no-schannel +$(package)_config_opts += -no-sctp +$(package)_config_opts += -no-securetransport +$(package)_config_opts += -no-sql-db2 +$(package)_config_opts += -no-sql-ibase +$(package)_config_opts += -no-sql-oci +$(package)_config_opts += -no-sql-tds +$(package)_config_opts += -no-sql-mysql +$(package)_config_opts += -no-sql-odbc +$(package)_config_opts += -no-sql-psql +$(package)_config_opts += -no-sql-sqlite +$(package)_config_opts += -no-sql-sqlite2 +$(package)_config_opts += -no-system-proxies +$(package)_config_opts += -no-use-gold-linker +$(package)_config_opts += -no-zstd +$(package)_config_opts += -nomake examples +$(package)_config_opts += -nomake tests +$(package)_config_opts += -nomake tools +$(package)_config_opts += -opensource +$(package)_config_opts += -pkg-config +$(package)_config_opts += -prefix $(host_prefix) +$(package)_config_opts += -qt-libpng +$(package)_config_opts += -qt-pcre +$(package)_config_opts += -qt-harfbuzz +$(package)_config_opts += -qt-zlib +$(package)_config_opts += -static +$(package)_config_opts += -v +$(package)_config_opts += -no-feature-bearermanagement +$(package)_config_opts += -no-feature-colordialog +$(package)_config_opts += -no-feature-commandlineparser +# Qt5Concurrent is needed by Alias's qt/setupwalletwizard.cpp. +# (Bitcoin Core's GUI didn't need it.) +# $(package)_config_opts += -no-feature-concurrent +$(package)_config_opts += -no-feature-dial +$(package)_config_opts += -no-feature-fontcombobox +$(package)_config_opts += -no-feature-ftp +$(package)_config_opts += -no-feature-http +$(package)_config_opts += -no-feature-image_heuristic_mask +$(package)_config_opts += -no-feature-keysequenceedit +$(package)_config_opts += -no-feature-lcdnumber +$(package)_config_opts += -no-feature-networkdiskcache +$(package)_config_opts += -no-feature-networkproxy +$(package)_config_opts += -no-feature-pdf +$(package)_config_opts += -no-feature-printdialog +$(package)_config_opts += -no-feature-printer +$(package)_config_opts += -no-feature-printpreviewdialog +$(package)_config_opts += -no-feature-printpreviewwidget +$(package)_config_opts += -no-feature-sessionmanager +$(package)_config_opts += -no-feature-socks5 +$(package)_config_opts += -no-feature-sql +$(package)_config_opts += -no-feature-sqlmodel +$(package)_config_opts += -no-feature-statemachine +$(package)_config_opts += -no-feature-syntaxhighlighter +$(package)_config_opts += -no-feature-textbrowser +$(package)_config_opts += -no-feature-textmarkdownwriter +$(package)_config_opts += -no-feature-textodfwriter +$(package)_config_opts += -no-feature-topleveldomain +$(package)_config_opts += -no-feature-udpsocket +$(package)_config_opts += -no-feature-undocommand +$(package)_config_opts += -no-feature-undogroup +$(package)_config_opts += -no-feature-undostack +$(package)_config_opts += -no-feature-undoview +$(package)_config_opts += -no-feature-vnc +$(package)_config_opts += -no-feature-wizard +$(package)_config_opts += -no-feature-xml +# qtdeclarative's host tools (qmllint, qmlimportscanner, qmlplugindump etc.) +# aren't usable in cross-compile. Skip them. +$(package)_config_opts += -no-feature-qml-devtools +# QML debugger and profiler also pull in host tools we don't want. +$(package)_config_opts += -no-feature-qml-debug +$(package)_config_opts += -no-feature-qml-profiler + +$(package)_config_opts_darwin = -no-dbus +$(package)_config_opts_darwin += -no-opengl +$(package)_config_opts_darwin += -pch +$(package)_config_opts_darwin += -no-feature-corewlan +$(package)_config_opts_darwin += -no-freetype +$(package)_config_opts_darwin += QMAKE_MACOSX_DEPLOYMENT_TARGET=$(OSX_MIN_VERSION) + +ifneq ($(build_os),darwin) +$(package)_config_opts_darwin += -xplatform macx-clang-linux +$(package)_config_opts_darwin += -device-option MAC_SDK_PATH=$(OSX_SDK) +$(package)_config_opts_darwin += -device-option MAC_SDK_VERSION=$(OSX_SDK_VERSION) +$(package)_config_opts_darwin += -device-option CROSS_COMPILE="llvm-" +$(package)_config_opts_darwin += -device-option MAC_TARGET=$(host) +$(package)_config_opts_darwin += -device-option XCODE_VERSION=$(XCODE_VERSION) +endif + +ifneq ($(build_arch),$(host_arch)) +$(package)_config_opts_aarch64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS=arm64 +$(package)_config_opts_x86_64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS=x86_64 +endif + +$(package)_config_opts_linux = -xcb +$(package)_config_opts_linux += -no-xcb-xlib +$(package)_config_opts_linux += -no-feature-xlib +$(package)_config_opts_linux += -system-freetype +$(package)_config_opts_linux += -fontconfig +$(package)_config_opts_linux += -no-opengl +$(package)_config_opts_linux += -no-feature-vulkan +$(package)_config_opts_linux += -dbus-runtime +ifneq ($(LTO),) +$(package)_config_opts_linux += -ltcg +endif + +ifneq (,$(findstring clang,$($(package)_cxx))) + ifneq (,$(findstring -stdlib=libc++,$($(package)_cxx))) + $(package)_config_opts_linux += -platform linux-clang-libc++ -xplatform linux-clang-libc++ + else + $(package)_config_opts_linux += -platform linux-clang -xplatform linux-clang + endif +else + $(package)_config_opts_linux += -platform linux-g++ -xplatform bitcoin-linux-g++ +endif + +$(package)_config_opts_mingw32 = -no-opengl +$(package)_config_opts_mingw32 += -no-dbus +$(package)_config_opts_mingw32 += -no-freetype +# Ubuntu 20.04 mingw-w64 9.x has the "AVX support is broken in 64-bit +# MinGW" issue. Disable AVX features so Qt's SIMD test doesn't trip. +$(package)_config_opts_mingw32 += -no-avx -no-avx2 -no-avx512 +$(package)_config_opts_mingw32 += -xplatform win32-g++ +$(package)_config_opts_mingw32 += "QMAKE_CFLAGS = '$($(package)_cflags) $($(package)_cppflags)'" +$(package)_config_opts_mingw32 += "QMAKE_CXX = '$($(package)_cxx)'" +$(package)_config_opts_mingw32 += "QMAKE_CXXFLAGS = '$($(package)_cxxflags) $($(package)_cppflags)'" +$(package)_config_opts_mingw32 += "QMAKE_LFLAGS = '$($(package)_ldflags)'" +$(package)_config_opts_mingw32 += "QMAKE_LIB = '$($(package)_ar) rc'" +$(package)_config_opts_mingw32 += -device-option CROSS_COMPILE="$(host)-" +$(package)_config_opts_mingw32 += -pch +ifneq ($(LTO),) +$(package)_config_opts_mingw32 += -ltcg +endif +endef + +define $(package)_fetch_cmds +$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \ +$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttranslations_file_name),$($(package)_qttranslations_file_name),$($(package)_qttranslations_sha256_hash)) && \ +$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttools_file_name),$($(package)_qttools_file_name),$($(package)_qttools_sha256_hash)) && \ +$(call fetch_file,$(package),https://download.qt.io/archive/qt/5.15/$($(package)_version)/submodules,$($(package)_qtdeclarative_file_name),$($(package)_qtdeclarative_file_name),$($(package)_qtdeclarative_sha256_hash)) && \ +$(call fetch_file,$(package),https://download.qt.io/archive/qt/5.15/$($(package)_version)/submodules,$($(package)_qtsvg_file_name),$($(package)_qtsvg_file_name),$($(package)_qtsvg_sha256_hash)) && \ +$(call fetch_file,$(package),https://download.qt.io/archive/qt/5.15/$($(package)_version)/submodules,$($(package)_qtwebchannel_file_name),$($(package)_qtwebchannel_file_name),$($(package)_qtwebchannel_sha256_hash)) && \ +$(call fetch_file,$(package),https://download.qt.io/archive/qt/5.15/$($(package)_version)/submodules,$($(package)_qtwebsockets_file_name),$($(package)_qtwebsockets_file_name),$($(package)_qtwebsockets_sha256_hash)) +endef + +define $(package)_extract_cmds + mkdir -p $($(package)_extract_dir) && \ + echo "$($(package)_sha256_hash) $($(package)_source)" > $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_qttranslations_sha256_hash) $($(package)_source_dir)/$($(package)_qttranslations_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_qttools_sha256_hash) $($(package)_source_dir)/$($(package)_qttools_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_qtdeclarative_sha256_hash) $($(package)_source_dir)/$($(package)_qtdeclarative_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_qtsvg_sha256_hash) $($(package)_source_dir)/$($(package)_qtsvg_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_qtwebchannel_sha256_hash) $($(package)_source_dir)/$($(package)_qtwebchannel_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_qtwebsockets_sha256_hash) $($(package)_source_dir)/$($(package)_qtwebsockets_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + $(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + mkdir qtbase && \ + $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source) -C qtbase && \ + mkdir qttranslations && \ + $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttranslations_file_name) -C qttranslations && \ + mkdir qttools && \ + $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttools_file_name) -C qttools && \ + mkdir qtdeclarative && \ + $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtdeclarative_file_name) -C qtdeclarative && \ + mkdir qtsvg && \ + $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtsvg_file_name) -C qtsvg && \ + mkdir qtwebchannel && \ + $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtwebchannel_file_name) -C qtwebchannel && \ + mkdir qtwebsockets && \ + $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtwebsockets_file_name) -C qtwebsockets +endef + +# Preprocessing steps work as follows: +# +# 1. Apply our patches to the extracted source. See each patch for more info. +# +# 2. Create a macOS-Clang-Linux mkspec using our mac-qmake.conf. +# +# 3. After making a copy of the mkspec for the linux-arm-gnueabi host, named +# bitcoin-linux-g++, replace tool names with $($($(package)_type)_TOOL). +# +# 4. Put our C, CXX and LD FLAGS into gcc-base.conf. Only used for non-host builds. +# +# 5. In clang.conf, swap out clang & clang++, for our compiler + flags. See #17466. +define $(package)_preprocess_cmds + cp $($(package)_patch_dir)/qt.pro qt.pro && \ + cp $($(package)_patch_dir)/qttools_src.pro qttools/src/src.pro && \ + printf 'TEMPLATE = subdirs\nSUBDIRS =\n' > qtdeclarative/tools/tools.pro && \ + printf 'TEMPLATE = subdirs\nSUBDIRS =\n' > qtwebsockets/tools/tools.pro 2>/dev/null || true && \ + patch -p1 -i $($(package)_patch_dir)/fix-macos-linker.patch && \ + patch -p1 -i $($(package)_patch_dir)/dont_hardcode_pwd.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_qt_pkgconfig.patch && \ + patch -p1 -i $($(package)_patch_dir)/no-xlib.patch && \ + patch -p1 -i $($(package)_patch_dir)/qtbase-moc-ignore-gcc-macro.patch && \ + patch -p1 -i $($(package)_patch_dir)/memory_resource.patch && \ + patch -p1 -i $($(package)_patch_dir)/no_warnings_for_symbols.patch && \ + patch -p1 -i $($(package)_patch_dir)/clang_18_libpng.patch && \ + patch -p1 -i $($(package)_patch_dir)/rcc_hardcode_timestamp.patch && \ + patch -p1 -i $($(package)_patch_dir)/duplicate_lcqpafonts.patch && \ + patch -p1 -i $($(package)_patch_dir)/utc_from_string_no_optimize.patch && \ + patch -p1 -i $($(package)_patch_dir)/guix_cross_lib_path.patch && \ + patch -p1 -i $($(package)_patch_dir)/windows_lto.patch && \ + patch -p1 -i $($(package)_patch_dir)/zlib-timebits64.patch && \ + mkdir -p qtbase/mkspecs/macx-clang-linux &&\ + cp -f qtbase/mkspecs/macx-clang/qplatformdefs.h qtbase/mkspecs/macx-clang-linux/ &&\ + cp -f $($(package)_patch_dir)/mac-qmake.conf qtbase/mkspecs/macx-clang-linux/qmake.conf && \ + cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/bitcoin-linux-g++ && \ + sed -i.old "s|arm-linux-gnueabi-gcc|$($($(package)_type)_CC)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-g++|$($($(package)_type)_CXX)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-ar|$($($(package)_type)_AR)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-objcopy|$($($(package)_type)_OBJCOPY)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-nm|$($($(package)_type)_NM)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-strip|$($($(package)_type)_STRIP)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + echo "!host_build: QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ + echo "!host_build: QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ + echo "!host_build: QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ + sed -i.old "s|QMAKE_CC = \$$$$\$$$${CROSS_COMPILE}clang|QMAKE_CC = $($(package)_cc)|" qtbase/mkspecs/common/clang.conf && \ + sed -i.old "s|QMAKE_CXX = \$$$$\$$$${CROSS_COMPILE}clang++|QMAKE_CXX = $($(package)_cxx)|" qtbase/mkspecs/common/clang.conf +endef + +define $(package)_config_cmds + cd qtbase && \ + ./configure -top-level $($(package)_config_opts) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) -C qtbase/src INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_qt_libs))) && \ + $(MAKE) -C qttools/src/linguist INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_linguist_tools))) && \ + $(MAKE) -C qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets && \ + $(MAKE) -C qtdeclarative INSTALL_ROOT=$($(package)_staging_dir) install && \ + $(MAKE) -C qtsvg INSTALL_ROOT=$($(package)_staging_dir) install && \ + $(MAKE) -C qtwebchannel INSTALL_ROOT=$($(package)_staging_dir) install && \ + $(MAKE) -C qtwebsockets INSTALL_ROOT=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf native/mkspecs/ native/lib/ lib/cmake/ && \ + rm -f lib/lib*.la +endef diff --git a/depends/packages/sodium.mk b/depends/packages/sodium.mk new file mode 100644 index 0000000000..6c5abc94fa --- /dev/null +++ b/depends/packages/sodium.mk @@ -0,0 +1,31 @@ +package=sodium +$(package)_version=1.0.20 +$(package)_download_path=https://download.libsodium.org/libsodium/releases/ +$(package)_file_name=libsodium-$($(package)_version).tar.gz +$(package)_sha256_hash=ebb65ef6ca439333c2bb41a0c1990587288da07f6c7fd07cb3a18cc18d30ce19 + +define $(package)_set_vars +$(package)_config_opts=--enable-static --disable-shared --enable-minimal +$(package)_config_opts+=--prefix=$(host_prefix) +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm lib/*.la +endef + diff --git a/depends/packages/sqlite.mk b/depends/packages/sqlite.mk new file mode 100644 index 0000000000..15bc0f4d7a --- /dev/null +++ b/depends/packages/sqlite.mk @@ -0,0 +1,35 @@ +package=sqlite +$(package)_version=3380500 +$(package)_download_path=https://sqlite.org/2022/ +$(package)_file_name=sqlite-autoconf-$($(package)_version).tar.gz +$(package)_sha256_hash=5af07de982ba658fd91a03170c945f99c971f6955bc79df3266544373e39869c + +define $(package)_set_vars +$(package)_config_opts=--disable-shared --disable-readline --disable-dynamic-extensions --enable-option-checking +$(package)_config_opts+= --disable-rtree --disable-fts4 --disable-fts5 +# We avoid using `--enable-debug` because it overrides CFLAGS, a behavior we want to prevent. +$(package)_cppflags_debug += -DSQLITE_DEBUG +$(package)_cppflags+=-DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_OMIT_DEPRECATED +$(package)_cppflags+=-DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_JSON -DSQLITE_LIKE_DOESNT_MATCH_BLOBS +$(package)_cppflags+=-DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_AUTOINIT +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) libsqlite3.la +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install-libLTLIBRARIES install-includeHEADERS install-pkgconfigDATA +endef + +define $(package)_postprocess_cmds + rm lib/*.la +endef diff --git a/depends/packages/systemtap.mk b/depends/packages/systemtap.mk new file mode 100644 index 0000000000..c912e18c31 --- /dev/null +++ b/depends/packages/systemtap.mk @@ -0,0 +1,12 @@ +package=systemtap +$(package)_version=4.8 +$(package)_download_path=https://sourceware.org/ftp/systemtap/releases/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=cbd50a4eba5b261394dc454c12448ddec73e55e6742fda7f508f9fbc1331c223 +$(package)_patches=remove_SDT_ASM_SECTION_AUTOGROUP_SUPPORT_check.patch + +define $(package)_preprocess_cmds + patch -p1 < $($(package)_patch_dir)/remove_SDT_ASM_SECTION_AUTOGROUP_SUPPORT_check.patch && \ + mkdir -p $($(package)_staging_prefix_dir)/include/sys && \ + cp includes/sys/sdt.h $($(package)_staging_prefix_dir)/include/sys/sdt.h +endef diff --git a/depends/packages/tor.mk b/depends/packages/tor.mk new file mode 100644 index 0000000000..2bf6b57beb --- /dev/null +++ b/depends/packages/tor.mk @@ -0,0 +1,48 @@ +package=tor +$(package)_version=0.4.1.6 +$(package)_download_path=https://dist.torproject.org/ +$(package)_file_name=tor-$($(package)_version).tar.gz +$(package)_sha256_hash=ee7adbbc5e30898bc35d9658bbf6a67e4242977175f7bad11c5f1ee0c1010d43 +$(package)_dependencies=libevent xz zlib +$(package)_patches=tor-001-disable-deprecated-android-log.patch tor-002-fix-openssl-checks.patch + +# Tor still requires OpenSSL at build time. Bitcoin Core / Particl depends/ no +# longer ships an openssl recipe, so until an openssl.mk is added to depends/ +# Tor will pick up the host system's OpenSSL via --with-openssl-dir. +# Override TOR_OPENSSL_DIR at make time if needed: +# make -C depends NO_QT=1 tor TOR_OPENSSL_DIR=/path/to/openssl +TOR_OPENSSL_DIR ?= /usr + +define $(package)_set_vars + $(package)_config_opts=--prefix=$(host_prefix) + $(package)_config_opts+=--enable-lzma + $(package)_config_opts+=--enable-pic + $(package)_config_opts+=--enable-static-tor + $(package)_config_opts+=--enable-restart-debugging + $(package)_config_opts+=--with-libevent-dir=$(host_prefix) + $(package)_config_opts+=--with-openssl-dir=$(TOR_OPENSSL_DIR) + $(package)_config_opts+=--disable-zstd + $(package)_config_opts+=--disable-module-dirauth + $(package)_config_opts+=--disable-tool-name-check + $(package)_config_opts+=--disable-asciidoc + $(package)_config_opts+=--disable-manpage + $(package)_config_opts+=--disable-html-manual +endef + +define $(package)_preprocess_cmds + patch -p1 --forward -r - < $($(package)_patch_dir)/tor-001-disable-deprecated-android-log.patch || true && \ + patch -p1 --forward -r - < $($(package)_patch_dir)/tor-002-fix-openssl-checks.patch || true && \ + ./autogen.sh +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef diff --git a/depends/packages/xcb_proto.mk b/depends/packages/xcb_proto.mk new file mode 100644 index 0000000000..6e1c5a10a8 --- /dev/null +++ b/depends/packages/xcb_proto.mk @@ -0,0 +1,21 @@ +package=xcb_proto +$(package)_version=1.15.2 +$(package)_download_path=https://xorg.freedesktop.org/archive/individual/proto +$(package)_file_name=xcb-proto-$($(package)_version).tar.xz +$(package)_sha256_hash=7072beb1f680a2fe3f9e535b797c146d22528990c72f63ddb49d2f350a3653ed + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf lib/python*/site-packages/xcbgen/__pycache__ +endef diff --git a/depends/packages/xproto.mk b/depends/packages/xproto.mk new file mode 100644 index 0000000000..29c349a21b --- /dev/null +++ b/depends/packages/xproto.mk @@ -0,0 +1,26 @@ +package=xproto +$(package)_version=7.0.31 +$(package)_download_path=https://xorg.freedesktop.org/releases/individual/proto +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=6d755eaae27b45c5cc75529a12855fed5de5969b367ed05003944cf901ed43c7 + +define $(package)_set_vars +$(package)_config_opts=--without-fop --without-xmlto --without-xsltproc --disable-specs +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef diff --git a/depends/packages/xz.mk b/depends/packages/xz.mk new file mode 100644 index 0000000000..093835da93 --- /dev/null +++ b/depends/packages/xz.mk @@ -0,0 +1,33 @@ +package=xz +$(package)_version=5.2.4 +$(package)_download_path=https://tukaani.org/xz/ +$(package)_file_name=xz-$($(package)_version).tar.gz +$(package)_sha256_hash=b512f3b726d3b37b6dc4c8570e137b9311e7552e8ccbab4d39d47ce5f4177145 + +define $(package)_set_vars + $(package)_config_opts=--disable-shared --enable-static + $(package)_config_opts+=--disable-doc --disable-scripts --disable-lzmainfo + $(package)_config_opts+=--disable-lzma-links --disable-xz --disable-xzdec + $(package)_config_opts+=--disable-rpath --disable-dependency-tracking + $(package)_config_opts+=--enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -f lib/*.la +endef diff --git a/depends/packages/zeromq.mk b/depends/packages/zeromq.mk new file mode 100644 index 0000000000..ae6f9acc4c --- /dev/null +++ b/depends/packages/zeromq.mk @@ -0,0 +1,39 @@ +package=zeromq +$(package)_version=4.3.5 +$(package)_download_path=https://github.com/zeromq/libzmq/releases/download/v$($(package)_version)/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=6653ef5910f17954861fe72332e68b03ca6e4d9c7160eb3a8de5a5a913bfab43 +$(package)_patches=remove_libstd_link.patch +$(package)_dependencies=sodium + +define $(package)_set_vars + $(package)_config_opts = --without-docs --enable-static --disable-shared --disable-valgrind + $(package)_config_opts += --disable-perf --disable-libbsd + $(package)_config_opts += --enable-curve --enable-curve-keygen + $(package)_config_opts += --with-libsodium --without-libgssapi_krb5 --without-pgm --without-norm --without-vmci + $(package)_config_opts += --disable-libunwind --disable-radix-tree --without-gcov --disable-dependency-tracking + $(package)_config_opts += --disable-Werror --disable-drafts --enable-option-checking +endef + +define $(package)_preprocess_cmds + patch -p1 < $($(package)_patch_dir)/remove_libstd_link.patch && \ + sed -i 's/getrandom(buf/breakgetrandom(buf/g' acinclude.m4 +endef + +define $(package)_config_cmds + ./autogen.sh && \ + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub config && \ + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) src/libzmq.la +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install-libLTLIBRARIES install-includeHEADERS install-pkgconfigDATA +endef + +define $(package)_postprocess_cmds + rm -rf bin share lib/*.la +endef diff --git a/depends/patches/bdb/clang_cxx_11.patch b/depends/patches/bdb/clang_cxx_11.patch new file mode 100644 index 0000000000..58f7ddc7d5 --- /dev/null +++ b/depends/patches/bdb/clang_cxx_11.patch @@ -0,0 +1,147 @@ +commit 3311d68f11d1697565401eee6efc85c34f022ea7 +Author: fanquake +Date: Mon Aug 17 20:03:56 2020 +0800 + + Fix C++11 compatibility + +diff --git a/dbinc/atomic.h b/dbinc/atomic.h +index 0034dcc..7c11d4a 100644 +--- a/dbinc/atomic.h ++++ b/dbinc/atomic.h +@@ -70,7 +70,7 @@ typedef struct { + * These have no memory barriers; the caller must include them when necessary. + */ + #define atomic_read(p) ((p)->value) +-#define atomic_init(p, val) ((p)->value = (val)) ++#define atomic_init_db(p, val) ((p)->value = (val)) + + #ifdef HAVE_ATOMIC_SUPPORT + +@@ -144,7 +144,7 @@ typedef LONG volatile *interlocked_val; + #define atomic_inc(env, p) __atomic_inc(p) + #define atomic_dec(env, p) __atomic_dec(p) + #define atomic_compare_exchange(env, p, o, n) \ +- __atomic_compare_exchange((p), (o), (n)) ++ __atomic_compare_exchange_db((p), (o), (n)) + static inline int __atomic_inc(db_atomic_t *p) + { + int temp; +@@ -176,7 +176,7 @@ static inline int __atomic_dec(db_atomic_t *p) + * http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html + * which configure could be changed to use. + */ +-static inline int __atomic_compare_exchange( ++static inline int __atomic_compare_exchange_db( + db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval) + { + atomic_value_t was; +@@ -206,7 +206,7 @@ static inline int __atomic_compare_exchange( + #define atomic_dec(env, p) (--(p)->value) + #define atomic_compare_exchange(env, p, oldval, newval) \ + (DB_ASSERT(env, atomic_read(p) == (oldval)), \ +- atomic_init(p, (newval)), 1) ++ atomic_init_db(p, (newval)), 1) + #else + #define atomic_inc(env, p) __atomic_inc(env, p) + #define atomic_dec(env, p) __atomic_dec(env, p) +diff --git a/mp/mp_fget.c b/mp/mp_fget.c +index 5fdee5a..0b75f57 100644 +--- a/mp/mp_fget.c ++++ b/mp/mp_fget.c +@@ -617,7 +617,7 @@ alloc: /* Allocate a new buffer header and data space. */ + + /* Initialize enough so we can call __memp_bhfree. */ + alloc_bhp->flags = 0; +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + #ifdef DIAGNOSTIC + if ((uintptr_t)alloc_bhp->buf & (sizeof(size_t) - 1)) { + __db_errx(env, +@@ -911,7 +911,7 @@ alloc: /* Allocate a new buffer header and data space. */ + MVCC_MPROTECT(bhp->buf, mfp->stat.st_pagesize, + PROT_READ); + +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + MUTEX_LOCK(env, alloc_bhp->mtx_buf); + alloc_bhp->priority = bhp->priority; + alloc_bhp->pgno = bhp->pgno; +diff --git a/mp/mp_mvcc.c b/mp/mp_mvcc.c +index 34467d2..f05aa0c 100644 +--- a/mp/mp_mvcc.c ++++ b/mp/mp_mvcc.c +@@ -276,7 +276,7 @@ __memp_bh_freeze(dbmp, infop, hp, bhp, need_frozenp) + #else + memcpy(frozen_bhp, bhp, SSZA(BH, buf)); + #endif +- atomic_init(&frozen_bhp->ref, 0); ++ atomic_init_db(&frozen_bhp->ref, 0); + if (mutex != MUTEX_INVALID) + frozen_bhp->mtx_buf = mutex; + else if ((ret = __mutex_alloc(env, MTX_MPOOL_BH, +@@ -428,7 +428,7 @@ __memp_bh_thaw(dbmp, infop, hp, frozen_bhp, alloc_bhp) + #endif + alloc_bhp->mtx_buf = mutex; + MUTEX_LOCK(env, alloc_bhp->mtx_buf); +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + F_CLR(alloc_bhp, BH_FROZEN); + } + +diff --git a/mp/mp_region.c b/mp/mp_region.c +index e6cece9..ddbe906 100644 +--- a/mp/mp_region.c ++++ b/mp/mp_region.c +@@ -224,7 +224,7 @@ __memp_init(env, dbmp, reginfo_off, htab_buckets, max_nreg) + MTX_MPOOL_FILE_BUCKET, 0, &htab[i].mtx_hash)) != 0) + return (ret); + SH_TAILQ_INIT(&htab[i].hash_bucket); +- atomic_init(&htab[i].hash_page_dirty, 0); ++ atomic_init_db(&htab[i].hash_page_dirty, 0); + } + + /* +@@ -269,7 +269,7 @@ __memp_init(env, dbmp, reginfo_off, htab_buckets, max_nreg) + hp->mtx_hash = (mtx_base == MUTEX_INVALID) ? MUTEX_INVALID : + mtx_base + i; + SH_TAILQ_INIT(&hp->hash_bucket); +- atomic_init(&hp->hash_page_dirty, 0); ++ atomic_init_db(&hp->hash_page_dirty, 0); + #ifdef HAVE_STATISTICS + hp->hash_io_wait = 0; + hp->hash_frozen = hp->hash_thawed = hp->hash_frozen_freed = 0; +diff --git a/mutex/mut_method.c b/mutex/mut_method.c +index 2588763..5c6d516 100644 +--- a/mutex/mut_method.c ++++ b/mutex/mut_method.c +@@ -426,7 +426,7 @@ atomic_compare_exchange(env, v, oldval, newval) + MUTEX_LOCK(env, mtx); + ret = atomic_read(v) == oldval; + if (ret) +- atomic_init(v, newval); ++ atomic_init_db(v, newval); + MUTEX_UNLOCK(env, mtx); + + return (ret); +diff --git a/mutex/mut_tas.c b/mutex/mut_tas.c +index f3922e0..e40fcdf 100644 +--- a/mutex/mut_tas.c ++++ b/mutex/mut_tas.c +@@ -46,7 +46,7 @@ __db_tas_mutex_init(env, mutex, flags) + + #ifdef HAVE_SHARED_LATCHES + if (F_ISSET(mutexp, DB_MUTEX_SHARED)) +- atomic_init(&mutexp->sharecount, 0); ++ atomic_init_db(&mutexp->sharecount, 0); + else + #endif + if (MUTEX_INIT(&mutexp->tas)) { +@@ -486,7 +486,7 @@ __db_tas_mutex_unlock(env, mutex) + F_CLR(mutexp, DB_MUTEX_LOCKED); + /* Flush flag update before zeroing count */ + MEMBAR_EXIT(); +- atomic_init(&mutexp->sharecount, 0); ++ atomic_init_db(&mutexp->sharecount, 0); + } else { + DB_ASSERT(env, sharecount > 0); + MEMBAR_EXIT(); diff --git a/depends/patches/fontconfig/gperf_header_regen.patch b/depends/patches/fontconfig/gperf_header_regen.patch new file mode 100644 index 0000000000..b1a70d5fb1 --- /dev/null +++ b/depends/patches/fontconfig/gperf_header_regen.patch @@ -0,0 +1,24 @@ +commit 7b6eb33ecd88768b28c67ce5d2d68a7eed5936b6 +Author: fanquake +Date: Tue Aug 25 14:34:53 2020 +0800 + + Remove rule that causes inadvertent header regeneration + + Otherwise the makefile will needlessly attempt to re-generate the + headers with gperf. This can be dropped once the upstream build is fixed. + + See #10851. + +diff --git a/src/Makefile.in b/src/Makefile.in +index f4626ad..4ae1b00 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -912,7 +912,7 @@ + ' - > $@.tmp && \ + mv -f $@.tmp fcobjshash.gperf && touch $@ || ( $(RM) $@.tmp && false ) + +-fcobjshash.h: Makefile fcobjshash.gperf ++fcobjshash.h: + $(AM_V_GEN) $(GPERF) --pic -m 100 fcobjshash.gperf > $@.tmp && \ + mv -f $@.tmp $@ || ( $(RM) $@.tmp && false ) + diff --git a/depends/patches/libxcb/remove_pthread_stubs.patch b/depends/patches/libxcb/remove_pthread_stubs.patch new file mode 100644 index 0000000000..1f32dea527 --- /dev/null +++ b/depends/patches/libxcb/remove_pthread_stubs.patch @@ -0,0 +1,12 @@ +Remove uneeded pthread-stubs dependency +--- a/configure ++++ b/configure +@@ -19695,7 +19695,7 @@ fi + NEEDED="xau >= 0.99.2" + case $host_os in + linux*) ;; +- *) NEEDED="$NEEDED pthread-stubs" ;; ++ *) NEEDED="$NEEDED" ;; + esac + + pkg_failed=no diff --git a/depends/patches/miniupnpc/cmake_get_src_addr.patch b/depends/patches/miniupnpc/cmake_get_src_addr.patch new file mode 100644 index 0000000000..bae1b738f3 --- /dev/null +++ b/depends/patches/miniupnpc/cmake_get_src_addr.patch @@ -0,0 +1,22 @@ +commit cb2026239c2a3aff393952ccb0ee1c448189402d +Author: fanquake +Date: Fri Mar 22 14:03:54 2024 +0000 + + build: add MINIUPNPC_GET_SRC_ADDR to CMake build + + This mirrors the autotools build. + + See https://github.com/miniupnp/miniupnp/pull/721. + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1aa95a8..0cacf3e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -31,6 +31,7 @@ endif () + if (NOT WIN32) + target_compile_definitions(miniupnpc-private INTERFACE + MINIUPNPC_SET_SOCKET_TIMEOUT ++ MINIUPNPC_GET_SRC_ADDR + _BSD_SOURCE _DEFAULT_SOURCE) + if (NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES ".*BSD" AND NOT CMAKE_SYSTEM_NAME STREQUAL "SunOS") + # add_definitions (-D_POSIX_C_SOURCE=200112L) diff --git a/depends/patches/miniupnpc/dont_leak_info.patch b/depends/patches/miniupnpc/dont_leak_info.patch new file mode 100644 index 0000000000..95a09a26dc --- /dev/null +++ b/depends/patches/miniupnpc/dont_leak_info.patch @@ -0,0 +1,32 @@ +commit 51f6dd991c29af66fb4f64c6feb2787cce23a1a7 +Author: fanquake +Date: Mon Jan 8 11:21:40 2024 +0000 + + Don't leak OS and miniupnpc version info in User-Agent + +diff --git a/src/minisoap.c b/src/minisoap.c +index 903ac5f..046e0ea 100644 +--- a/src/minisoap.c ++++ b/src/minisoap.c +@@ -90,7 +90,7 @@ int soapPostSubmit(SOCKET fd, + headerssize = snprintf(headerbuf, sizeof(headerbuf), + "POST %s HTTP/%s\r\n" + "Host: %s%s\r\n" +- "User-Agent: " OS_STRING " " UPNP_VERSION_STRING " MiniUPnPc/" MINIUPNPC_VERSION_STRING "\r\n" ++ "User-Agent: " UPNP_VERSION_STRING "\r\n" + "Content-Length: %d\r\n" + #if (UPNP_VERSION_MAJOR == 1) && (UPNP_VERSION_MINOR == 0) + "Content-Type: text/xml\r\n" +diff --git a/src/miniwget.c b/src/miniwget.c +index e76a5e5..0cc36fe 100644 +--- a/src/miniwget.c ++++ b/src/miniwget.c +@@ -444,7 +444,7 @@ miniwget3(const char * host, + "GET %s HTTP/%s\r\n" + "Host: %s:%d\r\n" + "Connection: Close\r\n" +- "User-Agent: " OS_STRING " " UPNP_VERSION_STRING " MiniUPnPc/" MINIUPNPC_VERSION_STRING "\r\n" ++ "User-Agent: " UPNP_VERSION_STRING "\r\n" + + "\r\n", + path, httpversion, host, port); diff --git a/depends/patches/miniupnpc/fix_windows_snprintf.patch b/depends/patches/miniupnpc/fix_windows_snprintf.patch new file mode 100644 index 0000000000..ff9e26231e --- /dev/null +++ b/depends/patches/miniupnpc/fix_windows_snprintf.patch @@ -0,0 +1,25 @@ +commit a1e9de80ab99b4c956a6a4e21d3e0de6f7a1014d +Author: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> +Date: Sat Apr 20 15:14:47 2024 +0100 + + Fix macro expression that guards `snprintf` for Windows + + Otherwise, the `snprintf` is still wrongly emulated for the following + cases: + - mingw-w64 6.0.0 or new with ucrt + - mingw-w64 8.0.0 or new with iso c ext + +--- a/src/win32_snprintf.h ++++ b/src/win32_snprintf.h +@@ -23,9 +23,9 @@ + (defined(_MSC_VER) && _MSC_VER < 1900) /* Visual Studio older than 2015 */ || \ + (defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) && defined(__NO_ISOCEXT)) /* mingw32 without iso c ext */ || \ + (defined(__MINGW64_VERSION_MAJOR) && /* mingw-w64 not ... */ !( \ +- (defined (__USE_MINGW_ANSI_STDIO) && __USE_MINGW_ANSI_STDIO != 0)) /* ... with ansi stdio */ || \ ++ (defined (__USE_MINGW_ANSI_STDIO) && __USE_MINGW_ANSI_STDIO != 0) /* ... with ansi stdio */ || \ + (__MINGW64_VERSION_MAJOR >= 6 && defined(_UCRT)) /* ... at least 6.0.0 with ucrt */ || \ +- (__MINGW64_VERSION_MAJOR >= 8 && !defined(__NO_ISOCEXT)) /* ... at least 8.0.0 with iso c ext */ || \ ++ (__MINGW64_VERSION_MAJOR >= 8 && !defined(__NO_ISOCEXT))) /* ... at least 8.0.0 with iso c ext */ || \ + 0) || \ + 0) + diff --git a/depends/patches/qrencode/cmake_fixups.patch b/depends/patches/qrencode/cmake_fixups.patch new file mode 100644 index 0000000000..7518d756cb --- /dev/null +++ b/depends/patches/qrencode/cmake_fixups.patch @@ -0,0 +1,23 @@ +cmake: set minimum version to 3.5 + +Correct some dev warning output. + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 773e037..a558145 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,4 +1,4 @@ +-cmake_minimum_required(VERSION 3.1.0) ++cmake_minimum_required(VERSION 3.5) + + project(QRencode VERSION 4.1.1 LANGUAGES C) + +@@ -20,7 +20,7 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + set(CMAKE_THREAD_PREFER_PTHREAD ON) + find_package(Threads) + find_package(PNG) +-find_package(Iconv) ++find_package(ICONV) + + if(CMAKE_USE_PTHREADS_INIT) + add_definitions(-DHAVE_LIBPTHREAD=1) diff --git a/depends/patches/qt/clang_18_libpng.patch b/depends/patches/qt/clang_18_libpng.patch new file mode 100644 index 0000000000..e807905b32 --- /dev/null +++ b/depends/patches/qt/clang_18_libpng.patch @@ -0,0 +1,40 @@ +fix Qt macOS build with Clang 18 + + See: + https://github.com/pnggroup/libpng/commit/893b8113f04d408cc6177c6de19c9889a48faa24. + + In a similar manner as zlib (madler/zlib#895), + libpng contains a header configuration that's no longer valid and + hasn't been exercised for the macOS target. + + - The target OS conditional macros are misused. Specifically + `TARGET_OS_MAC` covers all Apple targets, including iOS, and it + should not be checked with `#if defined` as they would always be + defined (to either 1 or 0) on Apple platforms. + - `#include ` no longer works for the macOS target and results + in a compilation failure. macOS ships all required functions in + `math.h`, and clients should use `math.h` instead. + +--- a/qtbase/src/3rdparty/libpng/pngpriv.h ++++ b/qtbase/src/3rdparty/libpng/pngpriv.h +@@ -514,18 +514,8 @@ + */ + # include + +-# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \ +- defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC) +- /* We need to check that hasn't already been included earlier +- * as it seems it doesn't agree with , yet we should really use +- * if possible. +- */ +-# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__) +-# include +-# endif +-# else +-# include +-# endif ++# include ++ + # if defined(_AMIGA) && defined(__SASC) && defined(_M68881) + /* Amiga SAS/C: We must include builtin FPU functions when compiling using + * MATH=68881 diff --git a/depends/patches/qt/dont_hardcode_pwd.patch b/depends/patches/qt/dont_hardcode_pwd.patch new file mode 100644 index 0000000000..a74e9cb098 --- /dev/null +++ b/depends/patches/qt/dont_hardcode_pwd.patch @@ -0,0 +1,27 @@ +commit 0e953866fc4672486e29e1ba6d83b4207e7b2f0b +Author: fanquake +Date: Tue Aug 18 15:09:06 2020 +0800 + + Don't hardcode pwd path + + Let a man use his builtins if he wants to! Also, removes the unnecessary + assumption that pwd lives under /bin/pwd. + + See #15581. + +diff --git a/qtbase/configure b/qtbase/configure +index 08b49a8d..faea5b55 100755 +--- a/qtbase/configure ++++ b/qtbase/configure +@@ -36,9 +36,9 @@ + relconf=`basename $0` + # the directory of this script is the "source tree" + relpath=`dirname $0` +-relpath=`(cd "$relpath"; /bin/pwd)` ++relpath=`(cd "$relpath"; pwd)` + # the current directory is the "build tree" or "object tree" +-outpath=`/bin/pwd` ++outpath=`pwd` + + WHICH="which" + diff --git a/depends/patches/qt/duplicate_lcqpafonts.patch b/depends/patches/qt/duplicate_lcqpafonts.patch new file mode 100644 index 0000000000..c460b51dcf --- /dev/null +++ b/depends/patches/qt/duplicate_lcqpafonts.patch @@ -0,0 +1,104 @@ +QtGui: Fix duplication of logging category lcQpaFonts + +Move it to qplatformfontdatabase.h. + +Upstream commit: + - Qt 6.0: ab01885e48873fb2ad71841a3f1627fe4d9cd835 + +--- a/qtbase/src/gui/text/qplatformfontdatabase.cpp ++++ b/qtbase/src/gui/text/qplatformfontdatabase.cpp +@@ -52,6 +52,8 @@ + + QT_BEGIN_NAMESPACE + ++Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") ++ + void qt_registerFont(const QString &familyname, const QString &stylename, + const QString &foundryname, int weight, + QFont::Style style, int stretch, bool antialiased, + +--- a/qtbase/src/gui/text/qplatformfontdatabase.h ++++ b/qtbase/src/gui/text/qplatformfontdatabase.h +@@ -50,6 +50,7 @@ + // + + #include ++#include + #include + #include + #include +@@ -62,6 +63,7 @@ + + QT_BEGIN_NAMESPACE + ++Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) + + class QWritingSystemsPrivate; + + +--- a/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm ++++ b/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm +@@ -86,8 +86,6 @@ + + QT_BEGIN_NAMESPACE + +-Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") +- + static float SYNTHETIC_ITALIC_SKEW = std::tan(14.f * std::acos(0.f) / 90.f); + + bool QCoreTextFontEngine::ct_getSfntTable(void *user_data, uint tag, uchar *buffer, uint *length) + +--- a/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h ++++ b/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h +@@ -64,8 +64,6 @@ + + QT_BEGIN_NAMESPACE + +-Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) +- + class QCoreTextFontEngine : public QFontEngine + { + Q_GADGET + +--- a/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp ++++ b/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp +@@ -68,8 +68,6 @@ + + QT_BEGIN_NAMESPACE + +-Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") +- + #ifndef QT_NO_DIRECTWRITE + // ### fixme: Consider direct linking of dwrite.dll once Windows Vista pre SP2 is dropped (QTBUG-49711) + + +--- a/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h ++++ b/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h +@@ -63,8 +63,6 @@ + + QT_BEGIN_NAMESPACE + +-Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) +- + class QWindowsFontEngineData + { + Q_DISABLE_COPY_MOVE(QWindowsFontEngineData) + +--- a/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp ++++ b/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +@@ -40,6 +40,7 @@ + #include "qgenericunixthemes_p.h" + + #include "qpa/qplatformtheme_p.h" ++#include "qpa/qplatformfontdatabase.h" + + #include + #include +@@ -76,7 +77,6 @@ + QT_BEGIN_NAMESPACE + + Q_DECLARE_LOGGING_CATEGORY(qLcTray) +-Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") + + ResourceHelper::ResourceHelper() + { diff --git a/depends/patches/qt/fix-macos-linker.patch b/depends/patches/qt/fix-macos-linker.patch new file mode 100644 index 0000000000..e439685656 --- /dev/null +++ b/depends/patches/qt/fix-macos-linker.patch @@ -0,0 +1,55 @@ +qmake: Don't error out if QMAKE_DEFAULT_LIBDIRS is empty on macOS + +The new linker in Xcode 15 doesn't provide any default linker or +framework paths when requested via -v, but still seems to use the +default paths documented in the ld man page. + +We trust that linker will do the right thing, even if we don't +know of its default linker paths. + +We also need to opt out of the default fallback logic to +set the libdirs to /lib and /usr/lib. + +This may result in UnixMakefileGenerator::findLibraries finding +different libraries than expected, if additional paths are +passed with -L, which will then take precedence for qmake, +even if the linker itself will use the library from the +SDK's default paths. This should hopefully not be an issue +in practice, as we don't turn -lFoo into absolute paths in +qmake, so the only risk is that we're picking up the wrong +prl files and adding additional dependencies that the lib +in the SDK doesn't have. + +Upstream commits: + - Qt 5.15.16: Not yet publicly available. + - Qt dev: cdf64b0e47115cc473e1afd1472b4b09e130b2a5 + +For other Qt branches see +https://codereview.qt-project.org/q/I2347b26e2df0828471373b0e15b8c9089274c65d + +--- old/qtbase/mkspecs/features/toolchain.prf ++++ new/qtbase/mkspecs/features/toolchain.prf +@@ -288,9 +288,12 @@ isEmpty($${target_prefix}.INCDIRS) { + } + } + } +- isEmpty(QMAKE_DEFAULT_LIBDIRS)|isEmpty(QMAKE_DEFAULT_INCDIRS): \ ++ isEmpty(QMAKE_DEFAULT_INCDIRS): \ + !integrity: \ +- error("failed to parse default search paths from compiler output") ++ error("failed to parse default include paths from compiler output") ++ isEmpty(QMAKE_DEFAULT_LIBDIRS): \ ++ !integrity:!darwin: \ ++ error("failed to parse default library paths from compiler output") + QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS) + } else: ghs { + cmd = $$QMAKE_CXX $$QMAKE_CXXFLAGS -$${LITERAL_HASH} -o /tmp/fake_output /tmp/fake_input.cpp +@@ -412,7 +415,7 @@ isEmpty($${target_prefix}.INCDIRS) { + QMAKE_DEFAULT_INCDIRS = $$split(INCLUDE, $$QMAKE_DIRLIST_SEP) + } + +- unix:if(!cross_compile|host_build) { ++ unix:!darwin:if(!cross_compile|host_build) { + isEmpty(QMAKE_DEFAULT_INCDIRS): QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include + isEmpty(QMAKE_DEFAULT_LIBDIRS): QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib + } diff --git a/depends/patches/qt/fix_qt_pkgconfig.patch b/depends/patches/qt/fix_qt_pkgconfig.patch new file mode 100644 index 0000000000..73f4d89f73 --- /dev/null +++ b/depends/patches/qt/fix_qt_pkgconfig.patch @@ -0,0 +1,11 @@ +--- old/qtbase/mkspecs/features/qt_module.prf ++++ new/qtbase/mkspecs/features/qt_module.prf +@@ -269,7 +269,7 @@ load(qt_installs) + load(qt_targets) + + # this builds on top of qt_common +-!internal_module:if(unix|mingw):!if(darwin:debug_and_release:CONFIG(debug, debug|release)) { ++if(unix|mingw):!if(darwin:debug_and_release:CONFIG(debug, debug|release)) { + CONFIG += create_pc + QMAKE_PKGCONFIG_DESTDIR = pkgconfig + host_build: \ diff --git a/depends/patches/qt/guix_cross_lib_path.patch b/depends/patches/qt/guix_cross_lib_path.patch new file mode 100644 index 0000000000..7911dc21d7 --- /dev/null +++ b/depends/patches/qt/guix_cross_lib_path.patch @@ -0,0 +1,17 @@ +Facilitate guix building with CROSS_LIBRARY_PATH + +See discussion in https://github.com/bitcoin/bitcoin/pull/15277. + +--- a/qtbase/mkspecs/features/toolchain.prf ++++ b/qtbase/mkspecs/features/toolchain.prf +@@ -236,8 +236,8 @@ isEmpty($${target_prefix}.INCDIRS) { + add_libraries = false + for (line, output) { + line ~= s/^[ \\t]*// # remove leading spaces +- contains(line, "LIBRARY_PATH=.*") { +- line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH= ++ contains(line, "(CROSS_)?LIBRARY_PATH=.*") { ++ line ~= s/^(CROSS_)?LIBRARY_PATH=// # remove leading (CROSS_)?LIBRARY_PATH= + equals(QMAKE_HOST.os, Windows): \ + paths = $$split(line, ;) + else: \ diff --git a/depends/patches/qt/mac-qmake.conf b/depends/patches/qt/mac-qmake.conf new file mode 100644 index 0000000000..a29db20004 --- /dev/null +++ b/depends/patches/qt/mac-qmake.conf @@ -0,0 +1,23 @@ +MAKEFILE_GENERATOR = UNIX +CONFIG += app_bundle incremental lib_version_first absolute_library_soname +QMAKE_INCREMENTAL_STYLE = sublib +include(../common/macx.conf) +include(../common/gcc-base-mac.conf) +include(../common/clang.conf) +include(../common/clang-mac.conf) +QMAKE_MAC_SDK_PATH=$${MAC_SDK_PATH} +QMAKE_XCODE_VERSION = $${XCODE_VERSION} +QMAKE_XCODE_DEVELOPER_PATH=/Developer +QMAKE_MAC_SDK=macosx +QMAKE_MAC_SDK.macosx.Path = $${MAC_SDK_PATH} +QMAKE_MAC_SDK.macosx.platform_name = macosx +QMAKE_MAC_SDK.macosx.SDKVersion = $${MAC_SDK_VERSION} +QMAKE_MAC_SDK.macosx.PlatformPath = /phony +QMAKE_CXXFLAGS += -fuse-ld=lld +!host_build: QMAKE_CFLAGS += -target $${MAC_TARGET} +!host_build: QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_CFLAGS +!host_build: QMAKE_CXXFLAGS += -target $${MAC_TARGET} +!host_build: QMAKE_LFLAGS += -target $${MAC_TARGET} +QMAKE_AR = $${CROSS_COMPILE}ar cq +QMAKE_RANLIB=$${CROSS_COMPILE}ranlib +load(qt_config) diff --git a/depends/patches/qt/memory_resource.patch b/depends/patches/qt/memory_resource.patch new file mode 100644 index 0000000000..312f0669f6 --- /dev/null +++ b/depends/patches/qt/memory_resource.patch @@ -0,0 +1,49 @@ +Fix unusable memory_resource on macos + +See https://bugreports.qt.io/browse/QTBUG-117484 +and https://bugreports.qt.io/browse/QTBUG-114316 + +--- a/qtbase/src/corelib/tools/qduplicatetracker_p.h ++++ b/qtbase/src/corelib/tools/qduplicatetracker_p.h +@@ -52,7 +52,7 @@ + + #include + +-#if QT_HAS_INCLUDE() && __cplusplus > 201402L ++#ifdef __cpp_lib_memory_resource + # include + # include + #else + +--- a/qtbase/src/corelib/global/qcompilerdetection.h ++++ b/qtbase/src/corelib/global/qcompilerdetection.h +@@ -1055,16 +1055,22 @@ + # endif // !_HAS_CONSTEXPR + # endif // !__GLIBCXX__ && !_LIBCPP_VERSION + # endif // Q_OS_QNX +-# if (defined(Q_CC_CLANG) || defined(Q_CC_INTEL)) && defined(Q_OS_MAC) && defined(__GNUC_LIBSTD__) \ +- && ((__GNUC_LIBSTD__-0) * 100 + __GNUC_LIBSTD_MINOR__-0 <= 402) ++# if (defined(Q_CC_CLANG) || defined(Q_CC_INTEL)) && defined(Q_OS_MAC) ++# if defined(__GNUC_LIBSTD__) && ((__GNUC_LIBSTD__-0) * 100 + __GNUC_LIBSTD_MINOR__-0 <= 402) + // Apple has not updated libstdc++ since 2007, which means it does not have + // or std::move. Let's disable these features +-# undef Q_COMPILER_INITIALIZER_LISTS +-# undef Q_COMPILER_RVALUE_REFS +-# undef Q_COMPILER_REF_QUALIFIERS ++# undef Q_COMPILER_INITIALIZER_LISTS ++# undef Q_COMPILER_RVALUE_REFS ++# undef Q_COMPILER_REF_QUALIFIERS + // Also disable , since it's clearly not there +-# undef Q_COMPILER_ATOMICS +-# endif ++# undef Q_COMPILER_ATOMICS ++# endif ++# if defined(__cpp_lib_memory_resource) \ ++ && ((defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 140000) \ ++ || (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 170000)) ++# undef __cpp_lib_memory_resource // Only supported on macOS 14 and iOS 17 ++# endif ++# endif // (defined(Q_CC_CLANG) || defined(Q_CC_INTEL)) && defined(Q_OS_MAC) + # if defined(Q_CC_CLANG) && defined(Q_CC_INTEL) && Q_CC_INTEL >= 1500 + // ICC 15.x and 16.0 have their own implementation of std::atomic, which is activated when in Clang mode + // (probably because libc++'s on OS X failed to compile), but they're missing some diff --git a/depends/patches/qt/no-xlib.patch b/depends/patches/qt/no-xlib.patch new file mode 100644 index 0000000000..0f7965d2ea --- /dev/null +++ b/depends/patches/qt/no-xlib.patch @@ -0,0 +1,61 @@ +From 9563cef873ae82e06f60708d706d054717e801ce Mon Sep 17 00:00:00 2001 +From: Carl Dong +Date: Thu, 18 Jul 2019 17:22:05 -0400 +Subject: [PATCH] Wrap xlib related code blocks in #if's + +They are not necessary to compile QT. + +--- a/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp ++++ b/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp +@@ -49,7 +49,9 @@ + #include + #include + #include ++#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) + #include ++#endif + #include + #include + +@@ -391,6 +393,7 @@ void QXcbCursor::changeCursor(QCursor *cursor, QWindow *window) + xcb_flush(xcb_connection()); + } + ++#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) + static int cursorIdForShape(int cshape) + { + int cursorId = 0; +@@ -444,6 +447,7 @@ static int cursorIdForShape(int cshape) + } + return cursorId; + } ++#endif + + xcb_cursor_t QXcbCursor::createNonStandardCursor(int cshape) + { +@@ -558,7 +562,9 @@ static xcb_cursor_t loadCursor(void *dpy, int cshape) + xcb_cursor_t QXcbCursor::createFontCursor(int cshape) + { + xcb_connection_t *conn = xcb_connection(); ++#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) + int cursorId = cursorIdForShape(cshape); ++#endif + xcb_cursor_t cursor = XCB_NONE; + + #if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) +@@ -590,6 +596,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) + // Non-standard X11 cursors are created from bitmaps + cursor = createNonStandardCursor(cshape); + ++#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) + // Create a glpyh cursor if everything else failed + if (!cursor && cursorId) { + cursor = xcb_generate_id(conn); +@@ -597,6 +604,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) + cursorId, cursorId + 1, + 0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0); + } ++#endif + + if (cursor && cshape >= 0 && cshape < Qt::LastCursor && connection()->hasXFixes()) { + const char *name = cursorNames[cshape].front(); diff --git a/depends/patches/qt/no_warnings_for_symbols.patch b/depends/patches/qt/no_warnings_for_symbols.patch new file mode 100644 index 0000000000..11cdc599ed --- /dev/null +++ b/depends/patches/qt/no_warnings_for_symbols.patch @@ -0,0 +1,11 @@ +--- a/qtbase/mkspecs/features/mac/no_warn_empty_obj_files.prf ++++ b/qtbase/mkspecs/features/mac/no_warn_empty_obj_files.prf +@@ -1,7 +1,7 @@ + # Prevent warnings about object files without any symbols. This is a common + # thing in Qt as we tend to build files unconditionally, and then use ifdefs + # to compile out parts that are not relevant. +-QMAKE_RANLIB += -no_warning_for_no_symbols ++# QMAKE_RANLIB += -no_warning_for_no_symbols + + # We have to tell 'ar' to not run ranlib by itself + QMAKE_AR += -S diff --git a/depends/patches/qt/qt.pro b/depends/patches/qt/qt.pro new file mode 100644 index 0000000000..06fe52c36f --- /dev/null +++ b/depends/patches/qt/qt.pro @@ -0,0 +1,20 @@ +# Create the super cache so modules will add themselves to it. +cache(, super) + +!QTDIR_build: cache(CONFIG, add, $$list(QTDIR_build)) + +prl = no_install_prl +CONFIG += $$prl +cache(CONFIG, add stash, prl) + +TEMPLATE = subdirs +SUBDIRS = qtbase qttools qttranslations qtsvg qtdeclarative qtwebchannel qtwebsockets + +qttools.depends = qtbase +qttranslations.depends = qttools +qtsvg.depends = qtbase +qtdeclarative.depends = qtbase qtsvg +qtwebchannel.depends = qtbase qtdeclarative +qtwebsockets.depends = qtbase qtdeclarative + +load(qt_configure) diff --git a/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch b/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch new file mode 100644 index 0000000000..f0c14a9400 --- /dev/null +++ b/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch @@ -0,0 +1,17 @@ +The moc executable loops through headers on CPLUS_INCLUDE_PATH and stumbles +on the GCC internal _GLIBCXX_VISIBILITY macro. Tell it to ignore it as it is +not supposed to be looking there to begin with. + +Upstream report: https://bugreports.qt.io/browse/QTBUG-83160 + +diff --git a/qtbase/src/tools/moc/main.cpp b/qtbase/src/tools/moc/main.cpp +--- a/qtbase/src/tools/moc/main.cpp ++++ b/qtbase/src/tools/moc/main.cpp +@@ -238,6 +238,7 @@ int runMoc(int argc, char **argv) + dummyVariadicFunctionMacro.arguments += Symbol(0, PP_IDENTIFIER, "__VA_ARGS__"); + pp.macros["__attribute__"] = dummyVariadicFunctionMacro; + pp.macros["__declspec"] = dummyVariadicFunctionMacro; ++ pp.macros["_GLIBCXX_VISIBILITY"] = dummyVariadicFunctionMacro; + + QString filename; + QString output; diff --git a/depends/patches/qt/qttools_src.pro b/depends/patches/qt/qttools_src.pro new file mode 100644 index 0000000000..6ef71a0942 --- /dev/null +++ b/depends/patches/qt/qttools_src.pro @@ -0,0 +1,6 @@ +TEMPLATE = subdirs +SUBDIRS = linguist + +fb = force_bootstrap +CONFIG += $$fb +cache(CONFIG, add, fb) diff --git a/depends/patches/qt/rcc_hardcode_timestamp.patch b/depends/patches/qt/rcc_hardcode_timestamp.patch new file mode 100644 index 0000000000..03f3897975 --- /dev/null +++ b/depends/patches/qt/rcc_hardcode_timestamp.patch @@ -0,0 +1,24 @@ +Hardcode last modified timestamp in Qt RCC + +This change allows the already built qt package to be reused even with +the SOURCE_DATE_EPOCH variable set, e.g., for Guix builds. + + +--- old/qtbase/src/tools/rcc/rcc.cpp ++++ new/qtbase/src/tools/rcc/rcc.cpp +@@ -227,14 +227,7 @@ void RCCFileInfo::writeDataInfo(RCCResourceLibrary &lib) + + if (lib.formatVersion() >= 2) { + // last modified time stamp +- const QDateTime lastModified = m_fileInfo.lastModified(); +- quint64 lastmod = quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0); +- static const quint64 sourceDate = 1000 * qgetenv("QT_RCC_SOURCE_DATE_OVERRIDE").toULongLong(); +- if (sourceDate != 0) +- lastmod = sourceDate; +- static const quint64 sourceDate2 = 1000 * qgetenv("SOURCE_DATE_EPOCH").toULongLong(); +- if (sourceDate2 != 0) +- lastmod = sourceDate2; ++ quint64 lastmod = quint64(1); + lib.writeNumber8(lastmod); + if (text || pass1) + lib.writeChar('\n'); diff --git a/depends/patches/qt/utc_from_string_no_optimize.patch b/depends/patches/qt/utc_from_string_no_optimize.patch new file mode 100644 index 0000000000..533ef59b37 --- /dev/null +++ b/depends/patches/qt/utc_from_string_no_optimize.patch @@ -0,0 +1,84 @@ +Modify optimisation flags for various functions. +This fixes non-determinism issues in the asm produced for +these function when cross-compiling on x86_64 and aarch64 for +the arm64-apple-darwin HOST. + +--- a/qtbase/src/corelib/itemmodels/qitemselectionmodel.cpp ++++ b/qtbase/src/corelib/itemmodels/qitemselectionmodel.cpp +@@ -1078,9 +1078,9 @@ void QItemSelectionModelPrivate::_q_layoutChanged(const QList &parents = QList(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); +- void _q_layoutChanged(const QList &parents = QList(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); ++ __attribute__ ((optnone)) void _q_layoutChanged(const QList &parents = QList(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); + + inline void remove(QList &r) + { + +--- a/qtbase/src/corelib/time/qdatetimeparser_p.h ++++ b/qtbase/src/corelib/time/qdatetimeparser_p.h +@@ -215,7 +215,7 @@ private: + : value(ok == Invalid ? -1 : val), used(read), zeroes(zs), state(ok) + {} + }; +- ParsedSection parseSection(const QDateTime ¤tValue, int sectionIndex, ++ __attribute__ ((optnone)) ParsedSection parseSection(const QDateTime ¤tValue, int sectionIndex, + int offset, QString *text) const; + int findMonth(const QString &str1, int monthstart, int sectionIndex, + int year, QString *monthName = nullptr, int *used = nullptr) const; + +--- a/qtbase/src/corelib/time/qtimezoneprivate_p.h ++++ b/qtbase/src/corelib/time/qtimezoneprivate_p.h +@@ -191,7 +191,7 @@ public: + virtual ~QUtcTimeZonePrivate(); + + // Fall-back for UTC[+-]\d+(:\d+){,2} IDs. +- static qint64 offsetFromUtcString(const QByteArray &id); ++ static __attribute__ ((optnone)) qint64 offsetFromUtcString(const QByteArray &id); + + QUtcTimeZonePrivate *clone() const override; + +--- a/qtbase/src/widgets/widgets/qcalendarwidget.cpp ++++ b/qtbase/src/widgets/widgets/qcalendarwidget.cpp +@@ -329,13 +329,13 @@ class QCalendarYearValidator : public QCalendarDateSectionValidator + + public: + QCalendarYearValidator(); +- virtual Section handleKey(int key) override; ++ __attribute__ ((optnone)) virtual Section handleKey(int key) override; + virtual QDate applyToDate(QDate date, QCalendar cal) const override; + virtual void setDate(QDate date, QCalendar cal) override; + virtual QString text() const override; + virtual QString text(QDate date, QCalendar cal, int repeat) const override; + private: +- int pow10(int n); ++ __attribute__ ((optnone)) int pow10(int n); + int m_pos; + int m_year; + int m_oldYear; diff --git a/depends/patches/qt/windows_lto.patch b/depends/patches/qt/windows_lto.patch new file mode 100644 index 0000000000..ea379a60f1 --- /dev/null +++ b/depends/patches/qt/windows_lto.patch @@ -0,0 +1,31 @@ +Qt (for Windows) fails to build under LTO, due to multiple definition issues, i.e + +multiple definition of `QAccessibleLineEdit::~QAccessibleLineEdit()'; + +Possibly related to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94156. + +diff --git a/qtbase/src/widgets/accessible/simplewidgets.cpp b/qtbase/src/widgets/accessible/simplewidgets.cpp +index 107fd729fe..0e61878f39 100644 +--- a/qtbase/src/widgets/accessible/simplewidgets.cpp ++++ b/qtbase/src/widgets/accessible/simplewidgets.cpp +@@ -109,6 +109,8 @@ QString qt_accHotKey(const QString &text); + \ingroup accessibility + */ + ++QAccessibleLineEdit::~QAccessibleLineEdit(){}; ++ + /*! + Creates a QAccessibleButton object for \a w. + */ +diff --git a/qtbase/src/widgets/accessible/simplewidgets_p.h b/qtbase/src/widgets/accessible/simplewidgets_p.h +index 73572e3059..658da86143 100644 +--- a/qtbase/src/widgets/accessible/simplewidgets_p.h ++++ b/qtbase/src/widgets/accessible/simplewidgets_p.h +@@ -155,6 +155,7 @@ class QAccessibleLineEdit : public QAccessibleWidget, public QAccessibleTextInte + public: + explicit QAccessibleLineEdit(QWidget *o, const QString &name = QString()); + ++ ~QAccessibleLineEdit(); + QString text(QAccessible::Text t) const override; + void setText(QAccessible::Text t, const QString &text) override; + QAccessible::State state() const override; diff --git a/depends/patches/qt/zlib-timebits64.patch b/depends/patches/qt/zlib-timebits64.patch new file mode 100644 index 0000000000..139c1dfa77 --- /dev/null +++ b/depends/patches/qt/zlib-timebits64.patch @@ -0,0 +1,31 @@ +From a566e156b3fa07b566ddbf6801b517a9dba04fa3 Mon Sep 17 00:00:00 2001 +From: Mark Adler +Date: Sat, 29 Jul 2023 22:13:09 -0700 +Subject: [PATCH] Avoid compiler complaints if _TIME_BITS defined when building + zlib. + +zlib does not use time_t, so _TIME_BITS is irrelevant. However it +may be defined anyway as part of a sledgehammer indiscriminately +applied to all builds. + +From https://github.com/madler/zlib/commit/a566e156b3fa07b566ddbf6801b517a9dba04fa3.patch +--- + qtbase/src/3rdparty/zlib/src/gzguts.h | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/qtbase/src/3rdparty/zlib/src/gzguts.h b/qtbase/src/3rdparty/zlib/src/gzguts.h +index e23f831f5..f9375047e 100644 +--- a/qtbase/src/3rdparty/zlib/src/gzguts.h ++++ b/qtbase/src/3rdparty/zlib/src/gzguts.h +@@ -26,9 +26,8 @@ + # ifndef _LARGEFILE_SOURCE + # define _LARGEFILE_SOURCE 1 + # endif +-# ifdef _FILE_OFFSET_BITS +-# undef _FILE_OFFSET_BITS +-# endif ++# undef _FILE_OFFSET_BITS ++# undef _TIME_BITS + #endif + + #ifdef HAVE_HIDDEN diff --git a/depends/patches/systemtap/remove_SDT_ASM_SECTION_AUTOGROUP_SUPPORT_check.patch b/depends/patches/systemtap/remove_SDT_ASM_SECTION_AUTOGROUP_SUPPORT_check.patch new file mode 100644 index 0000000000..c115bc43e8 --- /dev/null +++ b/depends/patches/systemtap/remove_SDT_ASM_SECTION_AUTOGROUP_SUPPORT_check.patch @@ -0,0 +1,27 @@ +Remove _SDT_ASM_SECTION_AUTOGROUP_SUPPORT check + +We assume that the assembler supports "?" in .pushsection directives. +This enables us to skip configure and make. + +See https://github.com/bitcoin/bitcoin/issues/23297. + +diff --git a/includes/sys/sdt.h b/includes/sys/sdt.h +index ca0162b..f96e0ee 100644 +--- a/includes/sys/sdt.h ++++ b/includes/sys/sdt.h +@@ -241,12 +241,10 @@ __extension__ extern unsigned long long __sdt_unsp; + nice with code in COMDAT sections, which comes up in C++ code. + Without that assembler support, some combinations of probe placements + in certain kinds of C++ code may produce link-time errors. */ +-#include "sdt-config.h" +-#if _SDT_ASM_SECTION_AUTOGROUP_SUPPORT ++/* PATCH: We assume that the assembler supports the feature. This ++ enables us to skip configure and make. In turn, this means we ++ require fewer dependencies and have shorter depend build times. */ + # define _SDT_ASM_AUTOGROUP "?" +-#else +-# define _SDT_ASM_AUTOGROUP "" +-#endif + + #define _SDT_DEF_MACROS \ + _SDT_ASM_1(.altmacro) \ diff --git a/depends/patches/tor/tor-001-disable-deprecated-android-log.patch b/depends/patches/tor/tor-001-disable-deprecated-android-log.patch new file mode 100644 index 0000000000..c1f310e953 --- /dev/null +++ b/depends/patches/tor/tor-001-disable-deprecated-android-log.patch @@ -0,0 +1,14 @@ +diff --git a/configure.ac b/configure.ac +--- a/configure.ac ++++ b/configure.ac +@@ -243,8 +243,8 @@ + AC_DEFINE([USE_ANDROID], [1], [Compile with Android specific features enabled]) + + dnl Check if the Android log library is available. +- AC_CHECK_HEADERS([android/log.h]) +- AC_SEARCH_LIBS(__android_log_write, [log]) ++ #AC_CHECK_HEADERS([android/log.h]) ++ #AC_SEARCH_LIBS(__android_log_write, [log]) + + fi + diff --git a/depends/patches/tor/tor-002-fix-openssl-checks.patch b/depends/patches/tor/tor-002-fix-openssl-checks.patch new file mode 100644 index 0000000000..9968cf08e9 --- /dev/null +++ b/depends/patches/tor/tor-002-fix-openssl-checks.patch @@ -0,0 +1,12 @@ +diff --git a/tor/configure.ac b/tor/configure.ac +--- a/configure.ac ++++ b/configure.ac +@@ -919,7 +919,7 @@ + dnl We look for SSL_cipher_get_id() because it is present in + dnl OpenSSL >=1.0.1, because it is not deprecated, and because Tor + dnl depends on it. +- [if (getenv("THIS_SHOULDNT_BE_SET_X201803")) SSL_CIPHER_get_id((void *)0);], [], ++ [;], [], + [/usr/local/opt/openssl /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /opt/openssl]) + + dnl XXXX check for OPENSSL_VERSION_NUMBER == SSLeay() diff --git a/depends/patches/zeromq/remove_libstd_link.patch b/depends/patches/zeromq/remove_libstd_link.patch new file mode 100644 index 0000000000..ddf91e6abf --- /dev/null +++ b/depends/patches/zeromq/remove_libstd_link.patch @@ -0,0 +1,25 @@ +commit 47d4cd12a2c051815ddda78adebdb3923b260d8a +Author: fanquake +Date: Tue Aug 18 14:45:40 2020 +0800 + + Remove needless linking against libstdc++ + + This is broken for a number of reasons, including: + - g++ understands "static-libstdc++ -lstdc++" to mean "link against + whatever libstdc++ exists, probably shared", which in itself is buggy. + - another stdlib (libc++ for example) may be in use + + See #11981. + +diff --git a/src/libzmq.pc.in b/src/libzmq.pc.in +index 233bc3a..3c2bf0d 100644 +--- a/src/libzmq.pc.in ++++ b/src/libzmq.pc.in +@@ -7,6 +7,6 @@ Name: libzmq + Description: 0MQ c++ library + Version: @VERSION@ + Libs: -L${libdir} -lzmq +-Libs.private: -lstdc++ @pkg_config_libs_private@ ++Libs.private: @pkg_config_libs_private@ + Requires.private: @pkg_config_names_private@ + Cflags: -I${includedir} @pkg_config_defines@ diff --git a/doc/CI-SECRETS.md b/doc/CI-SECRETS.md new file mode 100644 index 0000000000..cbeeabcae3 --- /dev/null +++ b/doc/CI-SECRETS.md @@ -0,0 +1,26 @@ +# GitHub Actions secrets & variables + +The build workflows (`.github/workflows/build-develop.yml`, `build-master.yml`) read +the values below. Configure them under **Settings → Secrets and variables → Actions**. + +All repository references in the workflows are dynamic — they resolve to the repo the +workflow runs in (`${{ github.repository_owner }}` / `${{ github.event.repository.name }}`), +so nothing is hardcoded to a specific fork. + +## Secrets + +| Secret | Required? | Used by | Value | +|---|---|---|---| +| `GITHUB_TOKEN` | Auto-provided | release upload steps | Provided automatically by GitHub Actions — do **not** create it. | +| `DOCKERHUB_USERNAME` | Only for the `buildDockerImage` job | Docker Hub login and the image push namespace (`/docker-aliaswalletd`) | Your Docker Hub username (not the email). | +| `DOCKERHUB_TOKEN` | Only for the `buildDockerImage` job | Docker Hub login | A Docker Hub access token (Docker Hub → Account settings → Security → New Access Token). | + +## Notes + +- If `DOCKERHUB_USERNAME` / `DOCKERHUB_TOKEN` are not set, only `buildDockerImage` fails; + the Linux / Windows / Windows-x86 / macOS / release jobs still succeed. +- `buildDockerImage` also checks out `/docker-aliaswalletd` (the Docker installer + repo) under the same owner as this repo. That repo must exist for the job to complete. +- The per-distro upload Dockerfiles (`Docker/*/Dockerfile`) take `ALIAS_USER` / + `ALIAS_REPOSITORY` build args; CI passes the current repo's owner/name automatically. + Their in-file defaults are only used for manual `docker build` runs. diff --git a/doc/CMakeEnvVars.png b/doc/CMakeEnvVars.png new file mode 100644 index 0000000000..28107593be Binary files /dev/null and b/doc/CMakeEnvVars.png differ diff --git a/doc/CMakeEnvVars_vcpkg.png b/doc/CMakeEnvVars_vcpkg.png new file mode 100644 index 0000000000..6c8a9c1b01 Binary files /dev/null and b/doc/CMakeEnvVars_vcpkg.png differ diff --git a/doc/Doxyfile b/doc/Doxyfile deleted file mode 100644 index 08d4f8c37f..0000000000 --- a/doc/Doxyfile +++ /dev/null @@ -1,1752 +0,0 @@ -# Doxyfile 1.7.4 - -# !!! Invoke doxygen from project root using: -# doxygen doc/Doxyfile - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Bitcoin - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 0.5.0 - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer -# a quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = "P2P Digital Currency" - -# With the PROJECT_LOGO tag one can specify an logo or icon that is -# included in the documentation. The maximum height of the logo should not -# exceed 55 pixels and the maximum width should not exceed 200 pixels. -# Doxygen will copy the logo to the output directory. - -PROJECT_LOGO = doc/bitcoin_logo_doxygen.png - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc/doxygen - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful if your file system -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = YES - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this -# tag. The format is ext=language, where ext is a file extension, and language -# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, -# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions -# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also makes the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and -# unions are shown inside the group in which they are included (e.g. using -# @ingroup) instead of on a separate page (for HTML and Man pages) or -# section (for LaTeX and RTF). - -INLINE_GROUPED_CLASSES = NO - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penalty. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will roughly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespaces are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to -# do proper type resolution of all parameters of a function it will reject a -# match between the prototype and the implementation of a member function even -# if there is only one candidate or it is obvious which candidate to choose -# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen -# will still accept a match between prototype and implementation in such cases. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or macro consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and macros in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. The create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_NO_PARAMDOC option can be enabled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = src - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh -# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.for *.vhd *.vhdl - -FILE_PATTERNS = *.c \ - *.cc \ - *.cxx \ - *.cpp \ - *.c++ \ - *.d \ - *.java \ - *.ii \ - *.ixx \ - *.ipp \ - *.i++ \ - *.inl \ - *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - *.idl \ - *.odl \ - *.cs \ - *.php \ - *.php3 \ - *.inc \ - *.m \ - *.mm \ - *.dox \ - *.py \ - *.f90 \ - *.f \ - *.for \ - *.vhd \ - *.vhdl - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty or if -# non of the patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) -# and it is also possible to disable source filtering for a specific pattern -# using *.ext= (so without naming a filter). This option only has effect when -# FILTER_SOURCE_FILES is enabled. - -FILTER_SOURCE_PATTERNS = - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. Note that when using a custom header you are responsible -# for the proper inclusion of any scripts and style sheets that doxygen -# needs, which is dependent on the configuration options used. -# It is adviced to generate a default header using "doxygen -w html -# header.html footer.html stylesheet.css YourConfigFile" and then modify -# that header. Note that the header is subject to change so you typically -# have to redo this when upgrading to a newer version of doxygen or when -# changing the value of configuration settings such as GENERATE_TREEVIEW! - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that -# the files will be copied as-is; there are no commands or markers available. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the stylesheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. - -ENUM_VALUES_PER_LINE = 4 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered bitmaps. Use this if you do not -# have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. - -USE_MATHJAX = NO - -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the -# mathjax.org site, so you can quickly see the result without installing -# MathJax, but it is strongly recommended to install a local copy of MathJax -# before deployment. - -MATHJAX_RELPATH = http://www.mathjax.org/mathjax - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a PHP enabled web server instead of at the web client -# using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server -# based approach is that it scales better to large projects and allows -# full text search. The disadvantages are that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for -# the generated latex document. The footer should contain everything after -# the last chapter. If it is left blank doxygen will generate a -# standard footer. Notice: only use this tag if you know what you are doing! - -LATEX_FOOTER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# pointed to by INCLUDE_PATH will be searched when a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition that -# overrules the definition found in the source code. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all references to function-like macros -# that are alone on a line, have an all uppercase name, and do not end with a -# semicolon, because these will confuse the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option also works with HAVE_DOT disabled, but it is recommended to -# install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is -# allowed to run in parallel. When set to 0 (the default) doxygen will -# base this on the number of processors available in the system. You can set it -# explicitly to a value larger than 0 to get control over the balance -# between CPU load and processing speed. - -DOT_NUM_THREADS = 0 - -# By default doxygen will write a font called Helvetica to the output -# directory and reference it in all dot files that doxygen generates. -# When you want a differently looking font you can specify the font name -# using DOT_FONTNAME. You need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will generate a graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are svg, png, jpg, or gif. -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the -# \mscfile command). - -MSCFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/doc/MacOSX-build-instructions-README.md b/doc/MacOSX-build-instructions-README.md new file mode 100644 index 0000000000..131f9cd483 --- /dev/null +++ b/doc/MacOSX-build-instructions-README.md @@ -0,0 +1,73 @@ +# Aliaswallet building from source for Mac OSX + +At first you need to clone the Git repository. ;-) + +## Build with Qt-Creator +### Install Qt SDK 5.12.2 (QtWebEngine) +- Qt SDK: https://www.qt.io/download-qt-installer + +Now you can open `/src/src.pro` on Qt-Creator. + + +## Build on cmdline +- Export path to Qt +``` +export QT_PATH=~/Qt/5.12.2/clang_64 +``` + +### Setup required libraries and env var's +#### Boost +- Determine amount of available cores to improve build speed +``` +system_profiler | grep "Total Number of Cores" +export CORES= +``` +- Download, extract and build Boost +``` +cd ~ +mkdir Boost +cd Boost +wget https://dl.bintray.com/boostorg/release/1.68.0/source/boost_1_68_0.tar.gz +tar xzf boost_1_68_0.tar.gz +cd boost_1_68_0 +./bootstrap.sh +./b2 \ + cxxflags="-std=c++0x" \ + address-model=64 \ + -j ${CORES}\ + install \ + --prefix=$(pwd) \ + --build-type=complete \ + --layout=tagged +``` +- Export path to Boost libraries and headers +``` +export BOOST_PATH=$(pwd) +``` + +#### OpenSSL +- Install OpenSSL 1.1.1 +- Export path to OpenSSL libraries and headers i. e. like this: +``` +export OPENSSL_PATH=/usr/local/Cellar/openssl@1.1/1.1.1d +``` + +#### Tor +- Download prepared Tor archive +``` +cd ~ +mkdir Tor +cd Tor +wget https://github.com/aliascash/resources/raw/master/resources/Aliaswallet.Tor.libraries.macOS.zip +``` + +### Build using helper scripts + +``` +cd +./scripts/mac-build.sh +rm -f Aliaswallet*.dmg +unzip ~/Tor/Tor.zip +# rm -rf src/bin/debug +./scripts/mac-deployqt.sh +``` diff --git a/doc/README b/doc/README deleted file mode 100644 index 0d435fd962..0000000000 --- a/doc/README +++ /dev/null @@ -1,20 +0,0 @@ -ShadowCoin - -Copyright (c) 2014 ShadowCoin Developers -Copyright (c) 2014 BlackCoin Developers -Copyright (c) 2013 NovaCoin Developers -Copyright (c) 2011-2012 PPCoin Developers -Distributed under the MIT/X11 software license, see the accompanying -file license.txt or http://www.opensource.org/licenses/mit-license.php. -This product includes software developed by the OpenSSL Project for use in -the OpenSSL Toolkit (http://www.openssl.org/). This product includes -cryptographic software written by Eric Young (eay@cryptsoft.com). - - -Intro ------ -ShadowCoin is a free open source project derived from Bitcoin, with -the goal of providing a long-term energy-efficient scrypt-based crypto-currency. -Built on the foundation of Bitcoin, PPCoin, NovaCoin and BlackCoin, innovations such as proof-of-stake -help further advance the field of crypto-currency. - diff --git a/doc/README.md b/doc/README.md new file mode 100644 index 0000000000..c81d44019e --- /dev/null +++ b/doc/README.md @@ -0,0 +1,6 @@ +# ALIAS Documentation + +## Build ALIAS +For detailed description checkout the content of our [Wiki](https://github.com/aliascash/documentation/wiki) or go straight to these pages there: +* Build on and for [Windows](https://github.com/aliascash/documentation/wiki/Build-Windows) +* Build on and for [Mac](https://github.com/aliascash/documentation/wiki/Build-Mac) diff --git a/doc/README_osx.txt b/doc/README_osx.txt new file mode 100644 index 0000000000..f589bfc676 --- /dev/null +++ b/doc/README_osx.txt @@ -0,0 +1,83 @@ +Deterministic OS X Dmg Notes. + +Working OS X DMGs are created in Linux by combining a recent clang, +the Apple's binutils (ld, ar, etc), and DMG authoring tools. + +Apple uses clang extensively for development and has upstreamed the necessary +functionality so that a vanilla clang can take advantage. It supports the use +of -F, -target, -mmacosx-version-min, and --sysroot, which are all necessary +when building for OS X. A pre-compiled version of 3.2 is used because it was not +available in the Precise repositories at the time this work was started. In the +future, it can be switched to use system packages instead. + +Apple's version of binutils (called cctools) contains lots of functionality +missing in the FSF's binutils. In addition to extra linker options for +frameworks and sysroots, several other tools are needed as well such as +install_name_tool, lipo, and nmedit. These do not build under linux, so they +have been patched to do so. The work here was used as a starting point: +https://github.com/mingwandroid/toolchain4 + +In order to build a working toolchain, the following source packages are needed +from Apple: cctools, dyld, and ld64. + +These tools inject timestamps by default, which produce non-deterministic +binaries. The ZERO_AR_DATE environment variable is used to disable that. + +This version of cctools has been patched to use the current version of clang's +headers and and its libLTO.so rather than those from llvmgcc, as it was +originally done in toolchain4. + +To complicate things further, all builds must target an Apple SDK. These SDKs +are free to download, but not redistributable. +To obtain it, register for a developer account, then download the Xcode 6.1.1 dmg: +https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/xcode_6.1.1/xcode_6.1.1.dmg + +This file is several gigabytes in size, but only a single directory inside is +needed: Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk + +Unfortunately, the usual linux tools (7zip, hpmount, loopback mount) are incapable of opening this file. +To create a tarball suitable for Gitian input, mount the dmg in OS X, then create it with: + $ tar -C /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ -czf MacOSX10.9.sdk.tar.gz MacOSX10.9.sdk + + +The Gitian descriptors build 2 sets of files: Linux tools, then Apple binaries +which are created using these tools. The build process has been designed to +avoid including the SDK's files in Gitian's outputs. All interim tarballs are +fully deterministic and may be freely redistributed. + +genisoimage is used to create the initial DMG. It is not deterministic as-is, +so it has been patched. A system genisoimage will work fine, but it will not +be deterministic because the file-order will change between invocations. +The patch can be seen here: +https://raw.githubusercontent.com/theuni/osx-cross-depends/master/patches/cdrtools/genisoimage.diff +No effort was made to fix this cleanly, so it likely leaks memory badly. But +it's only used for a single invocation, so that's no real concern. + +genisoimage cannot compress DMGs, so afterwards, the 'dmg' tool from the +libdmg-hfsplus project is used to compress it. There are several bugs in this +tool and its maintainer has seemingly abandoned the project. It has been forked +and is available (with fixes) here: https://github.com/theuni/libdmg-hfsplus . + +The 'dmg' tool has the ability to create DMGs from scratch as well, but this +functionality is broken. Only the compression feature is currently used. +Ideally, the creation could be fixed and genisoimage would no longer be necessary. + +Background images and other features can be added to DMG files by inserting a +.DS_Store before creation. The easiest way to create this file is to build a +DMG without one, move it to a device running OS X, customize the layout, then +grab the .DS_Store file for later use. That is the approach taken here. + +As of OS X Mavericks (10.9), using an Apple-blessed key to sign binaries is a +requirement in order to satisfy the new Gatekeeper requirements. Because this +private key cannot be shared, we'll have to be a bit creative in order for the +build process to remain somewhat deterministic. Here's how it works: + +- Builders use Gitian to create an unsigned release. This outputs an unsigned + dmg which users may choose to bless and run. It also outputs an unsigned app + structure in the form of a tarball, which also contains all of the tools + that have been previously (deterministically) built in order to create a + final dmg. +- The Apple keyholder uses this unsigned app to create a detached signature, + using the script that is also included there. +- Builders feed the unsigned app + detached signature back into Gitian. It + uses the pre-built tools to recombine the pieces into a deterministic dmg. diff --git a/doc/README_windows.txt b/doc/README_windows.txt deleted file mode 100644 index 1deded8f15..0000000000 --- a/doc/README_windows.txt +++ /dev/null @@ -1,20 +0,0 @@ -ShadowCoin - -Copyright (c) 2014 ShadowCoin Developers -Copyright (c) 2014 BlackCoin Developers -Copyright (c) 2013 NovaCoin Developers -Copyright (c) 2011-2013 PPCoin Developers -Distributed under the MIT/X11 software license, see the accompanying -file license.txt or http://www.opensource.org/licenses/mit-license.php. -This product includes software developed by the OpenSSL Project for use in -the OpenSSL Toolkit (http://www.openssl.org/). This product includes -cryptographic software written by Eric Young (eay@cryptsoft.com). - - -Intro ------ -ShadowCoin is a free open source project derived from Bitcoin, with -the goal of providing a long-term energy-efficient scrypt-based crypto-currency. -Built on the foundation of Bitcoin, PPCoin, NovaCoin and BlackCoin, innovations such as proof-of-stake -help further advance the field of crypto-currency. - diff --git a/doc/assets-attribution.txt b/doc/assets-attribution.txt deleted file mode 100644 index 2fdb6bc424..0000000000 --- a/doc/assets-attribution.txt +++ /dev/null @@ -1,58 +0,0 @@ -Code: src/strlcpy.h -Author: Todd C. Miller -License: ISC - -Icon: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, - src/qt/res/src/*.svg -Designer: Wladimir van der Laan -License: MIT - -Icon: src/qt/res/icons/address-book.png, src/qt/res/icons/export.png, - src/qt/res/icons/history.png, src/qt/res/icons/key.png, - src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png, - src/qt/res/icons/receive.png, src/qt/res/icons/send.png, - src/qt/res/icons/synced.png, src/qt/res/icons/filesave.png -Icon Pack: NUVOLA ICON THEME for KDE 3.x -Designer: David Vignoni (david@icon-king.com) - ICON KING - www.icon-king.com -License: LGPL -Site: http://www.icon-king.com/projects/nuvola/ - -Icon: src/qt/res/icons/connect*.png -Icon Pack: Human-O2 -Designer: schollidesign -License: GNU/GPL -Site: http://findicons.com/icon/93743/blocks_gnome_netstatus_0 - -Icon: src/qt/res/icons/transaction*.png -Designer: md2k7 -Site: https://forum.bitcoin.org/index.php?topic=15276.0 -License: You are free to do with these icons as you wish, including selling, - copying, modifying etc. - -Icon: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png, - src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png, - src/qt/res/icons/add.png, src/qt/res/icons/edit.png, - src/qt/res/icons/remove.png (edited) -Designer: http://www.everaldo.com -Icon Pack: Crystal SVG -License: LGPL - -Icon: src/qt/res/icons/bitcoin.png, src/qt/res/icons/toolbar.png -Designer: Bitboy (optimized for 16x16 by Wladimir van der Laan) -License: Public Domain -Site: http://forum.bitcoin.org/?topic=1756.0 - -Icon: scripts/img/reload.xcf (modified),src/qt/res/movies/update_spinner.mng -Icon Pack: Kids -Designer: Everaldo (Everaldo Coelho) -License: GNU/GPL -Site: http://findicons.com/icon/17102/reload?id=17102 - -Image: src/qt/res/images/splash2.jpg (Wallet image) -Designer: Crobbo (forum) -Site: https://bitcointalk.org/index.php?topic=32273.0 -License: Public domain - -ShadowCoin Logo -License: Creative Commons Attribution 4.0 International License diff --git a/doc/bitcoin_logo_doxygen.png b/doc/bitcoin_logo_doxygen.png deleted file mode 100644 index 5b41b02e18..0000000000 Binary files a/doc/bitcoin_logo_doxygen.png and /dev/null differ diff --git a/doc/build-docker.md b/doc/build-docker.md new file mode 100644 index 0000000000..daa4e405fa --- /dev/null +++ b/doc/build-docker.md @@ -0,0 +1,92 @@ +# Building the modernized ALIAS wallet in Docker + +The cleanest way to compile the modernized tree without fighting your +system's dependency versions. Docker provides Ubuntu 20.04 which ships +exactly the stack ALIAS was built against in 2020. + +## Prerequisites + + - Docker Desktop installed and running + ([Windows](https://www.docker.com/products/docker-desktop/), + [Linux](https://docs.docker.com/engine/install/), + [macOS](https://docs.docker.com/desktop/install/mac-install/)) + - About 4 GB free disk space for the image + - First build: ~30 minutes. Subsequent builds: a few minutes (Docker + caches the apt + leveldb + db4.8 layers). + +## One-shot build + +From the repository root: + +```sh +# Linux / macOS / WSL +docker build -t alias-modernized -f Dockerfile . +mkdir -p out +docker run --rm -v "$PWD/out:/host-out" alias-modernized \ + sh -c "cp -v /build-out/* /host-out/" +ls -la out/ +``` + +```powershell +# Windows PowerShell +pwsh -File scripts/build-in-docker.ps1 +``` + +Output binaries land in `./out/`: + - `aliaswalletd` — the daemon + - `aliaswallet` — the Qt GUI wallet + +## What the Dockerfile actually does + +1. Starts from `ubuntu:20.04`. +2. `apt install`s the exact build chain ALIAS needs: gcc, autoconf, + pkg-config, libssl-dev (1.1.1), libevent-dev, Boost 1.71, Qt 5.12.8, + libsnappy, libzstd, liblzma. +3. Clones `aliascash/leveldb` and `aliascash/db4.8` and builds them in + the layout ALIAS's `src/Makefile.am` expects (sibling directories + to the wallet source). +4. Copies the modernized source into `/build/alias-modernized` (the + `.dockerignore` excludes the `depends/`, `external.deprecated/`, + `test/` directories which aren't needed inside the container). +5. Runs `./autogen.sh && ./configure --enable-gui && make`. + +## What's expected to go wrong on first build + +The Phase 2 reorganization moved 74 files across 15 subdirs and +rewrote 356 `#include` paths. Verification has only been at the grep +level — nothing has been compiled yet. The first build is likely to +hit one of: + + - A transitive include that wasn't surfaced because the source still + pulled it in via another header. Surfaced by GCC's + `error: 'X' was not declared in this scope`. + - A Makefile.am path that wasn't updated (only `.cpp` paths were + updated; if any header is explicitly listed there for `BUILT_SOURCES` + or `EXTRA_DIST` it may still reference the old location). + - Qt MOC failing to find a header for `qt/moc_*.cpp` generation + because of the include reorg. + - `db4.8` upstream patches not applying on the version of GCC that + Ubuntu 20.04 ships. + +These are paper cuts that need fix-iterate. Capture the failing +command + error and we'll patch it. + +## Reproducibility + +The Dockerfile clones `aliascash/leveldb` and `aliascash/db4.8` at +`HEAD` of `master` rather than pinning to specific commits. For a +fully reproducible build, replace the `git clone --depth 1` lines with +explicit SHAs once the build is verified working. + +## Cross-compiling to Windows (alias.exe) + +Not implemented yet. The path is: in the Dockerfile, add the +`g++-mingw-w64-x86-64` apt package, then build `depends/` for +`HOST=x86_64-w64-mingw32` (which produces all dependencies as +MinGW-cross static libraries), and configure with the mingw triplet. +This is on the Phase 1 wiring follow-up. + +For now, the produced Linux ELF binaries run inside the container; to +get a `.exe` you currently still need ALIAS's existing windows builder +infrastructure under [external.deprecated/](../external.deprecated/) — +those scripts cross-compile via the same mingw toolchain. diff --git a/doc/build-msw.txt b/doc/build-msw.txt deleted file mode 100644 index 8bb7c0f16f..0000000000 --- a/doc/build-msw.txt +++ /dev/null @@ -1,84 +0,0 @@ -Copyright (c) 2009-2012 Bitcoin Developers -Distributed under the MIT/X11 software license, see the accompanying -file license.txt or http://www.opensource.org/licenses/mit-license.php. -This product includes software developed by the OpenSSL Project for use in -the OpenSSL Toolkit (http://www.openssl.org/). This product includes -cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP -software written by Thomas Bernard. - - -See readme-qt.rst for instructions on building ShadowCoin QT, the -graphical user interface. - -WINDOWS BUILD NOTES -=================== - -Compilers Supported -------------------- -TODO: What works? -Note: releases are cross-compiled using mingw running on Linux. - - -Dependencies ------------- -Libraries you need to download separately and build: - - default path download -OpenSSL \openssl-1.0.1b-mgw http://www.openssl.org/source/ -Berkeley DB \db-4.8.30.NC-mgw http://www.oracle.com/technology/software/products/berkeley-db/index.html -Boost \boost-1.47.0-mgw http://www.boost.org/users/download/ -miniupnpc \miniupnpc-1.6-mgw http://miniupnp.tuxfamily.org/files/ - -Their licenses: -OpenSSL Old BSD license with the problematic advertising requirement -Berkeley DB New BSD license with additional requirement that linked software must be free open source -Boost MIT-like license -miniupnpc New (3-clause) BSD license - -Versions used in this release: -OpenSSL 1.0.1b -Berkeley DB 4.8.30.NC -Boost 1.47.0 -miniupnpc 1.6 - - -OpenSSL -------- -MSYS shell: -un-tar sources with MSYS 'tar xfz' to avoid issue with symlinks (OpenSSL ticket 2377) -change 'MAKE' env. variable from 'C:\MinGW32\bin\mingw32-make.exe' to '/c/MinGW32/bin/mingw32-make.exe' - -cd /c/openssl-1.0.1b-mgw -./config -make - -Berkeley DB ------------ -MSYS shell: -cd /c/db-4.8.30.NC-mgw/build_unix -sh ../dist/configure --enable-mingw --enable-cxx -make - -Boost ------ -DOS prompt: -downloaded boost jam 3.1.18 -cd \boost-1.47.0-mgw -bjam toolset=gcc --build-type=complete stage - -MiniUPnPc ---------- -UPnP support is optional, make with USE_UPNP= to disable it. - -MSYS shell: -cd /c/miniupnpc-1.6-mgw -make -f Makefile.mingw -mkdir miniupnpc -cp *.h miniupnpc/ - -ShadowCoin -------- -DOS prompt: -cd \shadowcoin\src -mingw32-make -f makefile.mingw -strip shadowcoind.exe diff --git a/doc/build-osx.txt b/doc/build-osx.txt deleted file mode 100644 index 8597e9de85..0000000000 --- a/doc/build-osx.txt +++ /dev/null @@ -1,52 +0,0 @@ -Copyright (c) 2009-2012 Bitcoin Developers -Distributed under the MIT/X11 software license, see the accompanying file -license.txt or http://www.opensource.org/licenses/mit-license.php. This -product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit (http://www.openssl.org/). This product includes cryptographic -software written by Eric Young (eay@cryptsoft.com) and UPnP software written by -Thomas Bernard. - - -Mac OS X shadowcoind build instructions -Laszlo Hanyecz -Douglas Huff - - -See readme-qt.rst for instructions on building ShadowCoin QT, the -graphical user interface. - -Tested on 10.5 and 10.6 intel. PPC is not supported because it's big-endian. - -All of the commands should be executed in Terminal.app.. it's in -/Applications/Utilities - -You need to install XCode with all the options checked so that the compiler and -everything is available in /usr not just /Developer I think it comes on the DVD -but you can get the current version from http://developer.apple.com - - -1. Clone the github tree to get the source code: - -2. Download and install MacPorts from http://www.macports.org/ - -2a. (for 10.7 Lion) - Edit /opt/local/etc/macports/macports.conf and uncomment "build_arch i386" - -3. Install dependencies from MacPorts - -sudo port install boost db48 openssl miniupnpc - -Optionally install qrencode (and set USE_QRCODE=1): -sudo port install qrencode - -4. Now you should be able to build shadowcoind: - -cd shadowcoin/src -make -f makefile.osx - -Run: - ./shadowcoind --help # for a list of command-line options. -Run - ./shadowcoind -daemon # to start the shadowcoin daemon. -Run - ./shadowcoind help # When the daemon is running, to get a list of RPC commands diff --git a/doc/build-unix.txt b/doc/build-unix.txt deleted file mode 100644 index cb86f204cc..0000000000 --- a/doc/build-unix.txt +++ /dev/null @@ -1,153 +0,0 @@ -Copyright (c) 2009-2012 Bitcoin Developers -Distributed under the MIT/X11 software license, see the accompanying -file license.txt or http://www.opensource.org/licenses/mit-license.php. -This product includes software developed by the OpenSSL Project for use in -the OpenSSL Toolkit (http://www.openssl.org/). This product includes -cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP -software written by Thomas Bernard. - - -UNIX BUILD NOTES -================ - -To Build --------- - -cd src/ -make -f makefile.unix # Headless shadowcoin - -See readme-qt.rst for instructions on building ShadowCoin QT, -the graphical shadowcoin. - -Dependencies ------------- - - Library Purpose Description - ------- ------- ----------- - libssl SSL Support Secure communications - libdb Berkeley DB Blockchain & wallet storage - libboost Boost C++ Library - miniupnpc UPnP Support Optional firewall-jumping support - libqrencode QRCode generation Optional QRCode generation - -Note that libexecinfo should be installed, if you building under *BSD systems. -This library provides backtrace facility. - -miniupnpc may be used for UPnP port mapping. It can be downloaded from -http://miniupnp.tuxfamily.org/files/. UPnP support is compiled in and -turned off by default. Set USE_UPNP to a different value to control this: - USE_UPNP=- No UPnP support - miniupnp not required - USE_UPNP=0 (the default) UPnP support turned off by default at runtime - USE_UPNP=1 UPnP support turned on by default at runtime - -libqrencode may be used for QRCode image generation. It can be downloaded -from http://fukuchi.org/works/qrencode/index.html.en, or installed via -your package manager. Set USE_QRCODE to control this: - USE_QRCODE=0 (the default) No QRCode support - libqrcode not required - USE_QRCODE=1 QRCode support enabled - -Licenses of statically linked libraries: - Berkeley DB New BSD license with additional requirement that linked - software must be free open source - Boost MIT-like license - miniupnpc New (3-clause) BSD license - -Versions used in this release: - GCC 4.9.0 - OpenSSL 1.0.1g - Berkeley DB 5.3.28.NC - Boost 1.55.0 - miniupnpc 1.9.20140401 - -Dependency Build Instructions: Ubuntu & Debian ----------------------------------------------- -sudo apt-get install build-essential -sudo apt-get install libssl-dev -sudo apt-get install libdb++-dev -sudo apt-get install libboost-all-dev -sudo apt-get install libqrencode-dev - -If using Boost 1.37, append -mt to the boost libraries in the makefile. - - -Dependency Build Instructions: Gentoo -------------------------------------- - -emerge -av1 --noreplace boost openssl sys-libs/db - -Take the following steps to build (no UPnP support): - cd ${SHADOWCOIN_DIR}/src - make -f makefile.unix USE_UPNP= - strip shadowcoind - - -Notes ------ -The release is built with GCC and then "strip shadowcoind" to strip the debug -symbols, which reduces the executable size by about 90%. - - -miniupnpc ---------- -tar -xzvf miniupnpc-1.6.tar.gz -cd miniupnpc-1.6 -make -sudo su -make install - - -Berkeley DB ------------ -You need Berkeley DB. If you have to build Berkeley DB yourself: -../dist/configure --enable-cxx -make - - -Boost ------ -If you need to build Boost yourself: -sudo su -./bootstrap.sh -./bjam install - - -Security --------- -To help make your shadowcoin installation more secure by making certain attacks impossible to -exploit even if a vulnerability is found, you can take the following measures: - -* Position Independent Executable - Build position independent code to take advantage of Address Space Layout Randomization - offered by some kernels. An attacker who is able to cause execution of code at an arbitrary - memory location is thwarted if he doesn't know where anything useful is located. - The stack and heap are randomly located by default but this allows the code section to be - randomly located as well. - - On an Amd64 processor where a library was not compiled with -fPIC, this will cause an error - such as: "relocation R_X86_64_32 against `......' can not be used when making a shared object;" - - To build with PIE, use: - make -f makefile.unix ... -e PIE=1 - - To test that you have built PIE executable, install scanelf, part of paxutils, and use: - scanelf -e ./shadowcoin - - The output should contain: - TYPE - ET_DYN - -* Non-executable Stack - If the stack is executable then trivial stack based buffer overflow exploits are possible if - vulnerable buffers are found. By default, shadowcoin should be built with a non-executable stack - but if one of the libraries it uses asks for an executable stack or someone makes a mistake - and uses a compiler extension which requires an executable stack, it will silently build an - executable without the non-executable stack protection. - - To verify that the stack is non-executable after compiling use: - scanelf -e ./shadowcoin - - the output should contain: - STK/REL/PTL - RW- R-- RW- - - The STK RW- means that the stack is readable and writeable but not executable. diff --git a/doc/coding.txt b/doc/coding.txt deleted file mode 100644 index 59409859f9..0000000000 --- a/doc/coding.txt +++ /dev/null @@ -1,99 +0,0 @@ -Please be consistent with the existing coding style. - -Block style: - -bool Function(char* psz, int n) -{ - // Comment summarising what this section of code does - for (int i = 0; i < n; i++) - { - // When something fails, return early - if (!Something()) - return false; - ... - } - - // Success return is usually at the end - return true; -} - -- ANSI/Allman block style -- 4 space indenting, no tabs -- No extra spaces inside parenthesis; please don't do ( this ) -- No space after function names, one space after if, for and while - -Variable names begin with the type in lowercase, like nSomeVariable. -Please don't put the first word of the variable name in lowercase like -someVariable. - -Common types: -n integer number: short, unsigned short, int, unsigned int, - int64_t, uint64_t, sometimes char if used as a number -d double, float -f flag -hash uint256 -p pointer or array, one p for each level of indirection -psz pointer to null terminated string -str string object -v vector or similar list objects -map map or multimap -set set or multiset -bn CBigNum - -------------------------- -Locking/mutex usage notes - -The code is multi-threaded, and uses mutexes and the -CRITICAL_BLOCK/TRY_CRITICAL_BLOCK macros to protect data structures. - -Deadlocks due to inconsistent lock ordering (thread 1 locks cs_main -and then cs_wallet, while thread 2 locks them in the opposite order: -result, deadlock as each waits for the other to release its lock) are -a problem. Compile with -DDEBUG_LOCKORDER to get lock order -inconsistencies reported in the debug.log file. - -Re-architecting the core code so there are better-defined interfaces -between the various components is a goal, with any necessary locking -done by the components (e.g. see the self-contained CKeyStore class -and its cs_KeyStore lock for example). - -------- -Threads - -StartNode : Starts other threads. - -ThreadGetMyExternalIP : Determines outside-the-firewall IP address, -sends addr message to connected peers when it determines it. - -ThreadIRCSeed : Joins IRC bootstrapping channel, watching for new -peers and advertising this node's IP address. - -ThreadSocketHandler : Sends/Receives data from peers on port 8333. - -ThreadMessageHandler : Higher-level message handling (sending and -receiving). - -ThreadOpenConnections : Initiates new connections to peers. - -ThreadTopUpKeyPool : replenishes the keystore's keypool. - -ThreadCleanWalletPassphrase : re-locks an encrypted wallet after user -has unlocked it for a period of time. - -SendingDialogStartTransfer : used by pay-via-ip-address code (obsolete) - -ThreadDelayedRepaint : repaint the gui - -ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used -in 500ms. - -ThreadRPCServer : Remote procedure call handler, listens on port 8332 -for connections and services them. - -ThreadBitcoinMiner : Generates bitcoins - -ThreadMapPort : Universal plug-and-play startup/shutdown - -Shutdown : Does an orderly shutdown of everything - -ExitTimeout : Windows-only, sleeps 5 seconds then exits application diff --git a/doc/readme-qt.rst b/doc/readme-qt.rst deleted file mode 100644 index 58c4417fed..0000000000 --- a/doc/readme-qt.rst +++ /dev/null @@ -1,144 +0,0 @@ -Shadow: Qt5 GUI for ShadowCoin -=============================== - -Build instructions -=================== - -Debian -------- - -First, make sure that the required packages for Qt5 development of your -distribution are installed, for Debian and Ubuntu these are: - -:: - - apt-get install qt5-default qt5-qmake qtbase5-dev-tools qttools5-dev-tools build-essential libboost-dev libboost-system-dev libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev libssl-dev libdb++-dev libminiupnpc-dev libqt5webkit5-dev - -then execute the following: - -:: - - qmake - make - -Alternatively, install Qt Creator and open the `shadow.pro` file. - -An executable named `shadow` will be built. - - -Windows --------- - -Windows build instructions: - -- Download the `QT Windows SDK`_ and install it. You don't need the Symbian stuff, just the desktop Qt. - -- Compile openssl, boost and dbcxx. - -- Open the .pro file in QT creator and build as normal (ctrl-B) - -.. _`QT Windows SDK`: http://qt-project.org/downloads - - -Mac OS X --------- - -- Download and install the `Qt Mac OS X SDK`_. It is recommended to also install Apple's Xcode with UNIX tools. - -- Download and install `MacPorts`_. - -- Execute the following commands in a terminal to get the dependencies: - -:: - - sudo port selfupdate - sudo port install boost db48 miniupnpc - -- Open the .pro file in Qt Creator and build as normal (cmd-B) - -.. _`Qt Mac OS X SDK`: http://qt-project.org/downloads -.. _`MacPorts`: http://www.macports.org/install.php - - -Build configuration options -============================ - -UPNnP port forwarding ---------------------- - -To use UPnP for port forwarding behind a NAT router (recommended, as more connections overall allow for a faster and more stable shadowcoin experience), pass the following argument to qmake: - -:: - - qmake "USE_UPNP=1" - -(in **Qt Creator**, you can find the setting for additional qmake arguments under "Projects" -> "Build Settings" -> "Build Steps", then click "Details" next to **qmake**) - -This requires miniupnpc for UPnP port mapping. It can be downloaded from -http://miniupnp.tuxfamily.org/files/. UPnP support is not compiled in by default. - -Set USE_UPNP to a different value to control this: - -+------------+--------------------------------------------------------------------------+ -| USE_UPNP=- | no UPnP support, miniupnpc not required; | -+------------+--------------------------------------------------------------------------+ -| USE_UPNP=0 | (the default) built with UPnP, support turned off by default at runtime; | -+------------+--------------------------------------------------------------------------+ -| USE_UPNP=1 | build with UPnP support turned on by default at runtime. | -+------------+--------------------------------------------------------------------------+ - -Notification support for recent (k)ubuntu versions ---------------------------------------------------- - -To see desktop notifications on (k)ubuntu versions starting from 10.04, enable usage of the -FreeDesktop notification interface through DBUS using the following qmake option: - -:: - - qmake "USE_DBUS=1" - -Generation of QR codes ------------------------ - -libqrencode may be used to generate QRCode images for payment requests. -It can be downloaded from http://fukuchi.org/works/qrencode/index.html.en, or installed via your package manager. Pass the USE_QRCODE -flag to qmake to control this: - -+--------------+--------------------------------------------------------------------------+ -| USE_QRCODE=0 | (the default) No QRCode support - libarcode not required | -+--------------+--------------------------------------------------------------------------+ -| USE_QRCODE=1 | QRCode support enabled | -+--------------+--------------------------------------------------------------------------+ - - -Berkely DB version warning -========================== - -A warning for people using the *static binary* version of ShadowCoin on a Linux/UNIX-ish system (tl;dr: **Berkely DB databases are not forward compatible**). - -The static binary version of ShadowCoin is linked against libdb 5.0 (see also `this Debian issue`_). - -Now the nasty thing is that databases from 5.X are not compatible with 4.X. - -If the globally installed development package of Berkely DB installed on your system is 5.X, any source you -build yourself will be linked against that. The first time you run with a 5.X version the database will be upgraded, -and 4.X cannot open the new format. This means that you cannot go back to the old statically linked version without -significant hassle! - -.. _`this Debian issue`: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=621425 - -Ubuntu 11.10 warning -==================== - -Ubuntu 11.10 has a package called 'qt-at-spi' installed by default. At the time of writing, having that package -installed causes shadow to crash intermittently. The issue has been reported as `launchpad bug 857790`_, but -isn't yet fixed. - -Until the bug is fixed, you can remove the qt-at-spi package to work around the problem, though this will presumably -disable screen reader functionality for Qt apps: - -:: - - sudo apt-get remove qt-at-spi - -.. _`launchpad bug 857790`: https://bugs.launchpad.net/ubuntu/+source/qt-at-spi/+bug/857790 diff --git a/doc/release-process.txt b/doc/release-process.txt deleted file mode 100644 index ed23ef3505..0000000000 --- a/doc/release-process.txt +++ /dev/null @@ -1,142 +0,0 @@ -* update translations (ping tcatm on IRC for now) - -* update (commit) version in sources - bitcoin-qt.pro - src/version.h - share/setup.nsi - doc/README* - -* tag version in git - - git tag -a v0.5.1 - -* write release notes. git shortlog helps a lot: - - git shortlog --no-merges v0.5.0.. - -* perform gitian builds - - * From a directory containing the bitcoin source, gitian-builder and gitian.sigs - export SIGNER=(your gitian key, ie bluematt, sipa, etc) - export VERSION=0.5.1 - cd ./gitian-builder - - * Fetch and build inputs: - mkdir -p inputs; cd inputs/ - wget 'http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.6.tar.gz' -O miniupnpc-1.6.tar.gz - wget 'http://www.openssl.org/source/openssl-1.0.1b.tar.gz' - wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz' - wget 'http://zlib.net/zlib-1.2.6.tar.gz' - wget 'ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.5.9.tar.gz' - wget 'http://fukuchi.org/works/qrencode/qrencode-3.2.0.tar.bz2' - wget 'http://downloads.sourceforge.net/project/boost/boost/1.47.0/boost_1_47_0.tar.bz2' - wget 'http://download.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.4.tar.gz' - cd .. - ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/boost-win32.yml - cp build/out/boost-win32-1.47.0-gitian.zip inputs/ - ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/qt-win32.yml - cp build/out/qt-win32-4.7.4-gitian.zip inputs/ - ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/deps-win32.yml - cp build/out/bitcoin-deps-0.0.3.zip inputs/ - - * Build bitcoind and bitcoin-qt on Linux32, Linux64, and Win32: - ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian.yml - ./bin/gsign --signer $SIGNER --release ${VERSION} --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian.yml - pushd build/out - zip -r bitcoin-${VERSION}-linux-gitian.zip * - mv bitcoin-${VERSION}-linux-gitian.zip ../../ - popd - ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml - ./bin/gsign --signer $SIGNER --release ${VERSION}-win32 --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml - pushd build/out - zip -r bitcoin-${VERSION}-win32-gitian.zip * - mv bitcoin-${VERSION}-win32-gitian.zip ../../ - popd - - Build output expected: - 1. linux 32-bit and 64-bit binaries + source (bitcoin-${VERSION}-linux-gitian.zip) - 2. windows 32-bit binary, installer + source (bitcoin-${VERSION}-win32-gitian.zip) - 3. Gitian signatures (in gitian.sigs/${VERSION}[-win32]/(your gitian key)/ - -* repackage gitian builds for release as stand-alone zip/tar/installer exe - - * Linux .tar.gz: - unzip bitcoin-${VERSION}-linux-gitian.zip -d bitcoin-${VERSION}-linux - tar czvf bitcoin-${VERSION}-linux.tar.gz bitcoin-${VERSION}-linux - rm -rf bitcoin-${VERSION}-linux - - * Windows .zip and setup.exe: - unzip bitcoin-${VERSION}-win32-gitian.zip -d bitcoin-${VERSION}-win32 - mv bitcoin-${VERSION}-win32/bitcoin-*-setup.exe . - zip -r bitcoin-${VERSION}-win32.zip bitcoin-${VERSION}-win32 - rm -rf bitcoin-${VERSION}-win32 - -* perform Mac build - See this blog post for how Gavin set up his build environment to build the OSX - release; note that a patched version of macdeployqt is not needed anymore, as - the required functionality and fixes are implemented directly in macdeployqtplus: - http://gavintech.blogspot.com/2011/11/deploying-bitcoin-qt-on-osx.html - Gavin also had trouble with the macports py27-appscript package; he - ended up installing a version that worked with: /usr/bin/easy_install-2.7 appscript - - qmake RELEASE=1 USE_UPNP=1 USE_QRCODE=1 bitcoin-qt.pro - make - export QTDIR=/opt/local/share/qt4 # needed to find translations/qt_*.qm files - T=$(contrib/qt_translations.py $QTDIR/translations src/qt/locale) - python2.7 contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr $T -dmg -fancy contrib/macdeploy/fancy.plist - - Build output expected: - Bitcoin-Qt.dmg - -* upload builds to SourceForge - -* create SHA256SUMS for builds, and PGP-sign it - -* update bitcoin.org version - -* update forum version - -* update wiki download links - -* update wiki changelog: https://en.bitcoin.it/wiki/Changelog - -* Commit your signature to gitian.sigs: - pushd gitian.sigs - git add ${VERSION}/${SIGNER} - git add ${VERSION}-win32/${SIGNER} - git commit -a - git push # Assuming you can push to the gitian.sigs tree - popd - -------------------------------------------------------------------------- - -* After 3 or more people have gitian-built, repackage gitian-signed zips: - - * From a directory containing bitcoin source, gitian.sigs and gitian zips - export VERSION=0.5.1 - mkdir bitcoin-${VERSION}-linux-gitian - pushd bitcoin-${VERSION}-linux-gitian - unzip ../bitcoin-${VERSION}-linux-gitian.zip - mkdir gitian - cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/ - for signer in $(ls ../gitian.sigs/${VERSION}/); do - cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert - cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig - done - zip -r bitcoin-${VERSION}-linux-gitian.zip * - cp bitcoin-${VERSION}-linux-gitian.zip ../ - popd - mkdir bitcoin-${VERSION}-win32-gitian - pushd bitcoin-${VERSION}-win32-gitian - unzip ../bitcoin-${VERSION}-win32-gitian.zip - mkdir gitian - cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/ - for signer in $(ls ../gitian.sigs/${VERSION}-win32/); do - cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert - cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig - done - zip -r bitcoin-${VERSION}-win32-gitian.zip * - cp bitcoin-${VERSION}-win32-gitian.zip ../ - popd - - * Upload gitian zips to SourceForge diff --git a/doc/torrc b/doc/torrc new file mode 100644 index 0000000000..e8ac8854d9 --- /dev/null +++ b/doc/torrc @@ -0,0 +1,30 @@ +# to activate obfs4 bridges, this file must be copied to +# windows: %APPDATA%/spectrecoin/tor/ +Bridge obfs4 154.35.22.9:12166 C73ADBAC8ADFDBF0FC0F3F4E8091C0107D093716 cert=gEGKc5WN/bSjFa6UkG9hOcft1tuK+cV8hbZ0H6cqXiMPLqSbCh2Q3PHe5OOr6oMVORhoJA iat-mode=0 +Bridge obfs4 154.35.22.9:443 C73ADBAC8ADFDBF0FC0F3F4E8091C0107D093716 cert=gEGKc5WN/bSjFa6UkG9hOcft1tuK+cV8hbZ0H6cqXiMPLqSbCh2Q3PHe5OOr6oMVORhoJA iat-mode=0 +Bridge obfs4 38.229.33.83:80 0BAC39417268B96B9F514E7F63FA6FBA1A788955 cert=VwEFpk9F/UN9JED7XpG1XOjm/O8ZCXK80oPecgWnNDZDv5pdkhq1OpbAH0wNqOT6H6BmRQ iat-mode=1 +Bridge obfs4 154.35.22.13:443 FE7840FE1E21FE0A0639ED176EDA00A3ECA1E34D cert=fKnzxr+m+jWXXQGCaXe4f2gGoPXMzbL+bTBbXMYXuK0tMotd+nXyS33y2mONZWU29l81CA iat-mode=0 +Bridge obfs4 38.229.1.78:80 C8CBDB2464FC9804A69531437BCF2BE31FDD2EE4 cert=Hmyfd2ev46gGY7NoVxA9ngrPF2zCZtzskRTzoWXbxNkzeVnGFPWmrTtILRyqCTjHR+s9dg iat-mode=1 +Bridge obfs4 192.99.11.54:443 7B126FAB960E5AC6A629C729434FF84FB5074EC2 cert=VW5f8+IBUWpPFxF+rsiVy2wXkyTQG7vEd+rHeN2jV5LIDNu8wMNEOqZXPwHdwMVEBdqXEw iat-mode=0 +Bridge obfs4 154.35.22.12:80 00DC6C4FA49A65BD1472993CF6730D54F11E0DBB cert=N86E9hKXXXVz6G7w2z8wFfhIDztDAzZ/3poxVePHEYjbKDWzjkRDccFMAnhK75fc65pYSg iat-mode=0 +Bridge obfs4 85.17.30.79:443 FC259A04A328A07FED1413E9FC6526530D9FD87A cert=RutxZlu8BtyP+y0NX7bAVD41+J/qXNhHUrKjFkRSdiBAhIHIQLhKQ2HxESAKZprn/lR3KA iat-mode=0 +Bridge obfs4 192.95.36.142:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1 +Bridge obfs4 216.252.162.21:46089 0DB8799466902192B6C7576D58D4F7F714EC87C1 cert=XPUwcQPxEXExHfJYX58gZXN7mYpos7VNAHbkgERNFg+FCVNzuYo1Wp+uMscl3aR9hO2DRQ iat-mode=0 +Bridge obfs4 109.105.109.147:13764 BBB28DF0F201E706BE564EFE690FE9577DD8386D cert=KfMQN/tNMFdda61hMgpiMI7pbwU1T+wxjTulYnfw+4sgvG0zSH7N7fwT10BI8MUdAD7iJA iat-mode=2 +Bridge obfs4 154.35.22.10:80 8FB9F4319E89E5C6223052AA525A192AFBC85D55 cert=GGGS1TX4R81m3r0HBl79wKy1OtPPNR2CZUIrHjkRg65Vc2VR8fOyo64f9kmT1UAFG7j0HQ iat-mode=0 +Bridge obfs4 154.35.22.11:443 A832D176ECD5C7C6B58825AE22FC4C90FA249637 cert=YPbQqXPiqTUBfjGFLpm9JYEFTBvnzEJDKJxXG5Sxzrr/v2qrhGU4Jls9lHjLAhqpXaEfZw iat-mode=0 +Bridge obfs4 83.212.101.3:50002 A09D536DD1752D542E1FBB3C9CE4449D51298239 cert=lPRQ/MXdD1t5SRZ9MquYQNT9m5DV757jtdXdlePmRCudUU9CFUOX1Tm7/meFSyPOsud7Cw iat-mode=0 +Bridge obfs4 109.105.109.165:10527 8DFCD8FB3285E855F5A55EDDA35696C743ABFC4E cert=Bvg/itxeL4TWKLP6N1MaQzSOC6tcRIBv6q57DYAZc3b2AzuM+/TfB7mqTFEfXILCjEwzVA iat-mode=1 +Bridge obfs4 154.35.22.11:80 A832D176ECD5C7C6B58825AE22FC4C90FA249637 cert=YPbQqXPiqTUBfjGFLpm9JYEFTBvnzEJDKJxXG5Sxzrr/v2qrhGU4Jls9lHjLAhqpXaEfZw iat-mode=0 +Bridge obfs4 154.35.22.12:4304 00DC6C4FA49A65BD1472993CF6730D54F11E0DBB cert=N86E9hKXXXVz6G7w2z8wFfhIDztDAzZ/3poxVePHEYjbKDWzjkRDccFMAnhK75fc65pYSg iat-mode=0 +Bridge obfs4 154.35.22.11:16488 A832D176ECD5C7C6B58825AE22FC4C90FA249637 cert=YPbQqXPiqTUBfjGFLpm9JYEFTBvnzEJDKJxXG5Sxzrr/v2qrhGU4Jls9lHjLAhqpXaEfZw iat-mode=0 +Bridge obfs4 154.35.22.9:80 C73ADBAC8ADFDBF0FC0F3F4E8091C0107D093716 cert=gEGKc5WN/bSjFa6UkG9hOcft1tuK+cV8hbZ0H6cqXiMPLqSbCh2Q3PHe5OOr6oMVORhoJA iat-mode=0 +Bridge obfs4 85.31.186.26:443 91A6354697E6B02A386312F68D82CF86824D3606 cert=PBwr+S8JTVZo6MPdHnkTwXJPILWADLqfMGoVvhZClMq/Urndyd42BwX9YFJHZnBB3H0XCw iat-mode=0 +Bridge obfs4 85.31.186.98:443 011F2599C0E9B27EE74B353155E244813763C3E5 cert=ayq0XzCwhpdysn5o0EyDUbmSOx3X/oTEbzDMvczHOdBJKlvIdHHLJGkZARtT4dcBFArPPg iat-mode=0 +Bridge obfs4 154.35.22.10:443 8FB9F4319E89E5C6223052AA525A192AFBC85D55 cert=GGGS1TX4R81m3r0HBl79wKy1OtPPNR2CZUIrHjkRg65Vc2VR8fOyo64f9kmT1UAFG7j0HQ iat-mode=0 +Bridge obfs4 154.35.22.13:16815 FE7840FE1E21FE0A0639ED176EDA00A3ECA1E34D cert=fKnzxr+m+jWXXQGCaXe4f2gGoPXMzbL+bTBbXMYXuK0tMotd+nXyS33y2mONZWU29l81CA iat-mode=0 +Bridge obfs4 [2001:470:b381:bfff:216:3eff:fe23:d6c3]:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1 +Bridge obfs4 37.218.240.34:40035 88CD36D45A35271963EF82E511C8827A24730913 cert=eGXYfWODcgqIdPJ+rRupg4GGvVGfh25FWaIXZkit206OSngsp7GAIiGIXOJJROMxEqFKJg iat-mode=1 +Bridge obfs4 154.35.22.10:15937 8FB9F4319E89E5C6223052AA525A192AFBC85D55 cert=GGGS1TX4R81m3r0HBl79wKy1OtPPNR2CZUIrHjkRg65Vc2VR8fOyo64f9kmT1UAFG7j0HQ iat-mode=0 +Bridge obfs4 37.218.245.14:38224 D9A82D2F9C2F65A18407B1D2B764F130847F8B5D cert=bjRaMrr1BRiAW8IE9U5z27fQaYgOhX1UCmOpg2pFpoMvo6ZgQMzLsaTzzQNTlm7hNcb+Sg iat-mode=0 +UseBridges 1 \ No newline at end of file diff --git a/doc/translation_process.md b/doc/translation_process.md deleted file mode 100644 index 3ddfc0cbf4..0000000000 --- a/doc/translation_process.md +++ /dev/null @@ -1,80 +0,0 @@ -Translations -============ - -The Qt GUI can be easily translated into other languages. Here's how we -handle those translations. - -Files and Folders ------------------ - -### bitcoin-qt.pro - -This file takes care of generating `.qm` files from `.ts` files. It is mostly -automated. - -### src/qt/bitcoin.qrc - -This file must be updated whenever a new translation is added. Please note that -files must end with `.qm`, not `.ts`. - - - locale/bitcoin_en.qm - ... - - -### src/qt/locale/ - -This directory contains all translations. Filenames must adhere to this format: - - bitcoin_xx_YY.ts or bitcoin_xx.ts - -#### Source file - -`src/qt/locale/bitcoin_en.ts` is treated in a special way. It is used as the -source for all other translations. Whenever a string in the code is changed -this file must be updated to reflect those changes. Usually, this can be -accomplished by running `lupdate` (included in the Qt SDK). - -An updated source file should be merged to github and transifex will pick it -up from there. Afterwards the new strings show up as "Remaining" in transifex -and can be translated. - -Syncing with transifex ----------------------- - -We are using http://transifex.net as a frontend for translating the client. - -https://www.transifex.net/projects/p/bitcoin/resource/tx/ - -The "transifex client" (see: http://help.transifex.net/features/client/) -will help with fetching new translations from transifex. Use the following -config to be able to connect with the client. - -### .tx/config - - [main] - host = https://www.transifex.net - - [bitcoin.tx] - file_filter = src/qt/locale/bitcoin_.ts - source_file = src/qt/locale/bitcoin_en.ts - source_lang = en - -### .tx/config (for Windows) - - [main] - host = https://www.transifex.net - - [bitcoin.tx] - file_filter = src\qt\locale\bitcoin_.ts - source_file = src\qt\locale\bitcoin_en.ts - source_lang = en - -It is also possible to directly download new translations one by one from transifex. - -### Fetching new translations - -1. `tx pull -a` -2. update `src/qt/bitcoin.qrc` manually or via - `ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitcoin_\(.*\)\).ts/locale/\1.qm<\/file>/'` -3. `git add` new translations from `src/qt/locale/` diff --git a/external.deprecated/.gitignore b/external.deprecated/.gitignore new file mode 100644 index 0000000000..809df7bc19 --- /dev/null +++ b/external.deprecated/.gitignore @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: © 2025 ALIAS Developer +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT +leveldb/ +libevent/ +libzstd/ +openssl-cmake/ diff --git a/external.deprecated/berkeleydb-cmake/CMakeLists.txt b/external.deprecated/berkeleydb-cmake/CMakeLists.txt new file mode 100644 index 0000000000..aa6f1480f4 --- /dev/null +++ b/external.deprecated/berkeleydb-cmake/CMakeLists.txt @@ -0,0 +1,44 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Inspired by The ViaDuck Project for building OpenSSL + +cmake_minimum_required(VERSION 3.2) +project(berkeleydb-cmake) + +set(BERKELEYDB_ARCHIVE_LOCATION OFF CACHE STRING "Location of BerkeleyDB archive") +set(BERKELEYDB_BUILD_VERSION OFF CACHE STRING "BerkeleyDB version to build") +set(CROSS_ANDROID OFF CACHE BOOL "Cross-compiling for Android?") +set(CROSS OFF CACHE BOOL "Cross-compiling?") +set(CROSS_TARGET OFF CACHE STRING "Cross-compilation target") + +# Allow including our modules +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") + +# Mimic system db targets +add_library(bdb INTERFACE) + +# Set up fake targets +add_library(bdb_lib STATIC IMPORTED GLOBAL) + +target_link_libraries(bdb INTERFACE bdb_lib) + +# Set up prefix +set(BERKELEYDB_PREFIX ${CMAKE_CURRENT_BINARY_DIR}) +message(STATUS "BERKELEYDB_PREFIX: ${BERKELEYDB_PREFIX}") + +set(BERKELEYDB_LIBDB_PATH ${BERKELEYDB_PREFIX}/usr/local/BerkeleyDB.${BERKELEYDB_BUILD_VERSION_SHORT}/lib/libdb_cxx.a) +message(STATUS "BERKELEYDB_LIBDB_PATH: ${BERKELEYDB_LIBDB_PATH}") + +# Set up BerkeleyDB target +include(BuildBerkeleyDB) + +# Set import locations +set_target_properties(bdb_lib PROPERTIES IMPORTED_LOCATION ${BERKELEYDB_LIBDB_PATH}) + +# Set include locations +target_include_directories(bdb BEFORE INTERFACE ${BERKELEYDB_PREFIX}/usr/local/BerkeleyDB.${BERKELEYDB_BUILD_VERSION_SHORT}/include) + +# Add fake targets to common target +add_dependencies(bdb_lib berkeleydb) diff --git a/external.deprecated/berkeleydb-cmake/cmake/BuildBerkeleyDB.cmake b/external.deprecated/berkeleydb-cmake/cmake/BuildBerkeleyDB.cmake new file mode 100644 index 0000000000..7ff2e0056b --- /dev/null +++ b/external.deprecated/berkeleydb-cmake/cmake/BuildBerkeleyDB.cmake @@ -0,0 +1,241 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Inspired by The ViaDuck Project for building OpenSSL + +include(ProcessorCount) +include(ExternalProject) + +find_package(Git REQUIRED) +find_package(PythonInterp 3 REQUIRED) + +find_program(PATCH_PROGRAM patch) +if (NOT PATCH_PROGRAM) + message(FATAL_ERROR "Cannot find patch utility. This is only required for Android cross-compilation but due to script complexity " + "the requirement is always enforced") +endif() + +ProcessorCount(NUM_JOBS) +set(OS "UNIX") + +if (BERKELEYDB_ARCHIVE_HASH) + set(BERKELEYDB_CHECK_HASH URL_HASH SHA256=${BERKELEYDB_ARCHIVE_HASH}) +endif() + +if (EXISTS ${BERKELEYDB_LIBDB_PATH}) + message(STATUS "Not building BerkeleyDB again. Remove ${BERKELEYDB_LIBDB_PATH} for rebuild") +else() + if (WIN32 AND NOT CROSS) + # yep, windows needs special treatment, but neither cygwin nor msys, since they provide an UNIX-like environment + + if (MINGW) + set(OS "WIN32") + message(WARNING "Building on windows is experimental") + + find_program(MSYS_BASH "bash.exe" PATHS "C:/Msys/" "C:/MinGW/msys/" PATH_SUFFIXES "/1.0/bin/" "/bin/" + DOC "Path to MSYS installation") + if (NOT MSYS_BASH) + message(FATAL_ERROR "Specify MSYS installation path") + endif(NOT MSYS_BASH) + + set(MINGW_MAKE ${CMAKE_MAKE_PROGRAM}) + message(WARNING "Assuming your make program is a sibling of your compiler (resides in same directory)") +# elseif(NOT (CYGWIN OR MSYS)) +# message(FATAL_ERROR "Unsupported compiler infrastructure") + endif(MINGW) + + set(MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) + elseif(NOT UNIX) + message(FATAL_ERROR "Unsupported platform") + else() + # we can only use GNU make, no exotic things like Ninja (MSYS always uses GNU make) + find_program(MAKE_PROGRAM make) + endif() + + # save old git values for core.autocrlf and core.eol +# execute_process(COMMAND ${GIT_EXECUTABLE} config --global --get core.autocrlf OUTPUT_VARIABLE GIT_CORE_AUTOCRLF OUTPUT_STRIP_TRAILING_WHITESPACE) +# execute_process(COMMAND ${GIT_EXECUTABLE} config --global --get core.eol OUTPUT_VARIABLE GIT_CORE_EOL OUTPUT_STRIP_TRAILING_WHITESPACE) + + # On windows we need to replace path to perl since CreateProcess(..) cannot handle unix paths + if (WIN32 AND NOT CROSS) + set(PERL_PATH_FIX_INSTALL sed -i -- 's/\\/usr\\/bin\\/perl/perl/g' Makefile) + else() + set(PERL_PATH_FIX_INSTALL true) + endif() + + # CROSS and CROSS_ANDROID cannot both be set (because of internal reasons) + if (CROSS AND CROSS_ANDROID) + # if user set CROSS_ANDROID and CROSS we assume he wants CROSS_ANDROID, so set CROSS to OFF + set(CROSS OFF) + endif() + + if (CROSS_ANDROID) + set(OS "LINUX_CROSS_ANDROID") + endif() + + # python helper script for corrent building environment + set(BUILD_ENV_TOOL ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/building_env.py ${OS} ${MSYS_BASH} ${MINGW_MAKE}) + + # disable everything we dont need + #set(CONFIGURE_BERKELEYDB_MODULES no-cast no-md2 no-md4 no-mdc2 no-rc4 no-rc5 no-engine no-idea no-mdc2 no-rc5 no-camellia no-ssl3 no-heartbeats no-gost no-deprecated no-capieng no-comp no-dtls no-psk no-srp no-dso no-dsa no-rc2 no-des) + + # additional configure script parameters + #set(CONFIGURE_BERKELEYDB_PARAMS --libdir=lib) + set(CONFIGURE_BERKELEYDB_PARAMS + --disable-cryptography + --disable-partition + --disable-compression + --disable-replication + --enable-cxx + --prefix=${CMAKE_INSTALL_PREFIX} + --with-pic + ) + + # cross-compiling + if (CROSS) + set(COMMAND_CONFIGURE ../dist/configure ${CONFIGURE_BERKELEYDB_PARAMS} --cross-compile-prefix=${CROSS_PREFIX} ${CROSS_TARGET} ${CONFIGURE_BERKELEYDB_MODULES}) + set(COMMAND_TEST "true") + elseif(CROSS_ANDROID) + + # Android specific configuration options +# set(CONFIGURE_BERKELEYDB_MODULES ${CONFIGURE_BERKELEYDB_MODULES} no-hw) + + set(CFLAGS ${CMAKE_C_FLAGS}) + set(CXXFLAGS ${CMAKE_CXX_FLAGS}) + + # Silence warnings about unused arguments (Clang specific) + set(CFLAGS "${CMAKE_C_FLAGS} -Qunused-arguments") + set(CXXFLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments") + + # Required environment configuration is already set (by e.g. ndk) so no need to fiddle around with all the options ... + if (NOT ANDROID) + message(FATAL_ERROR "Use NDK cmake toolchain or cmake android autoconfig") + endif() + + if (ARMEABI_V7A) + set(BERKELEYDB_PLATFORM "--host armv7") +# set(CONFIGURE_BERKELEYDB_PARAMS ${CONFIGURE_BERKELEYDB_PARAMS} "-march=armv7-a") + else() + if (CMAKE_ANDROID_ARCH_ABI MATCHES "arm64-v8a") + set(BERKELEYDB_PLATFORM "--host arm") + else() + set(BERKELEYDB_PLATFORM "--host ${CMAKE_ANDROID_ARCH_ABI}") + endif() + endif() + + set(ANDROID_STRING "android") + if (CMAKE_ANDROID_ARCH_ABI MATCHES "64") + set(ANDROID_STRING "${ANDROID_STRING}64") + endif() + + # copy over both sysroots to a common sysroot (workaround OpenSSL failing without one single sysroot) + string(REPLACE "-clang" "" ANDROID_TOOLCHAIN_NAME ${ANDROID_TOOLCHAIN_NAME}) + file(COPY ${ANDROID_TOOLCHAIN_ROOT}/sysroot/usr/lib/${ANDROID_TOOLCHAIN_NAME}/${ANDROID_PLATFORM_LEVEL}/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/sysroot/usr/lib/) + file(COPY ${ANDROID_TOOLCHAIN_ROOT}/sysroot/usr/lib/${ANDROID_TOOLCHAIN_NAME}/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/sysroot/usr/lib/ PATTERN *.*) + file(COPY ${CMAKE_SYSROOT}/usr/include DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/sysroot/usr/) + + # ... but we have to convert all the CMake options to environment variables! + set(CROSS_SYSROOT ${CMAKE_CURRENT_BINARY_DIR}/sysroot/) + set(AS ${CMAKE_ASM_COMPILER}) + set(AR ${CMAKE_AR}) + set(LD ${CMAKE_LINKER}) + set(LDFLAGS ${CMAKE_MODULE_LINKER_FLAGS}) + + # have to surround variables with double quotes, otherwise they will be merged together without any separator + set(CC "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN} ${CFLAGS} -target ${CMAKE_C_COMPILER_TARGET}") + set(CXX "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN} ${CFLAGS} -target ${CMAKE_CXX_COMPILER_TARGET}") + + message(STATUS "AS: ${AS}") + message(STATUS "AR: ${AR}") + message(STATUS "LD: ${LD}") + message(STATUS "LDFLAGS: ${LDFLAGS}") + message(STATUS "CC: ${CC}") + message(STATUS "CXX: ${CXX}") + message(STATUS "ANDROID_TOOLCHAIN_ROOT: ${ANDROID_TOOLCHAIN_ROOT}") + + set(COMMAND_CONFIGURE ../dist/configure ${CONFIGURE_BERKELEYDB_PARAMS} ${BERKELEYDB_PLATFORM} ${CONFIGURE_BERKELEYDB_MODULES}) + set(COMMAND_TEST "true") + set(CONFIGURE_DIR build_android) + else() # detect host system automatically + set(COMMAND_CONFIGURE ../dist/configure ${CONFIGURE_BERKELEYDB_PARAMS} ${CONFIGURE_BERKELEYDB_MODULES}) + set(CONFIGURE_DIR build_unix) + endif() + + # Add berkeleydb target + ExternalProject_Add(berkeleydb +# URL https://download.oracle.com/otn/berkeley-db/db-${BERKELEYDB_BUILD_VERSION}.tar.gz +# URL file:///home/spectre/db-6.2.38.zip + URL ${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz + ${BERKELEYDB_CHECK_HASH} + UPDATE_COMMAND "" + PATCH_COMMAND patch -p2 -d ${BERKELEYDB_PREFIX}/berkeleydb-prefix/src/berkeleydb < ${CMAKE_CURRENT_SOURCE_DIR}/patches/db-atomic.patch + COMMAND patch -p1 -d ${BERKELEYDB_PREFIX}/berkeleydb-prefix/src/berkeleydb < ${CMAKE_CURRENT_SOURCE_DIR}/patches/fix-string-is-not-a-string-literal.patch + + # Update config.guess and config.sub as it's too old to detect aarch64 + COMMAND rm -f ${BERKELEYDB_PREFIX}/berkeleydb-prefix/src/berkeleydb/dist/config.guess ${BERKELEYDB_PREFIX}/berkeleydb-prefix/src/berkeleydb/dist/config.sub + COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/patches/config.guess ${BERKELEYDB_PREFIX}/berkeleydb-prefix/src/berkeleydb/dist/config.guess + COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/patches/config.sub ${BERKELEYDB_PREFIX}/berkeleydb-prefix/src/berkeleydb/dist/config.sub + COMMAND chmod +x ${BERKELEYDB_PREFIX}/berkeleydb-prefix/src/berkeleydb/dist/config.guess ${BERKELEYDB_PREFIX}/berkeleydb-prefix/src/berkeleydb/dist/config.sub + + CONFIGURE_COMMAND ${BUILD_ENV_TOOL} /${CONFIGURE_DIR} ${COMMAND_CONFIGURE} + + BUILD_COMMAND ${BUILD_ENV_TOOL} /${CONFIGURE_DIR} ${MAKE_PROGRAM} -j ${NUM_JOBS} + BUILD_BYPRODUCTS ${BERKELEYDB_LIBDB_PATH} + + INSTALL_COMMAND ${BUILD_ENV_TOOL} /${CONFIGURE_DIR} ${PERL_PATH_FIX_INSTALL} + COMMAND ${BUILD_ENV_TOOL} /${CONFIGURE_DIR} ${MAKE_PROGRAM} DESTDIR=${CMAKE_CURRENT_BINARY_DIR} install + COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} ${CMAKE_BINARY_DIR} # force CMake-reload + + LOG_INSTALL 1 + LOG_CONFIGURE 1 + ) + + # set git config values to berkeleydb requirements (no impact on linux though) +# ExternalProject_Add_Step(berkeleydb setGitConfig +# COMMAND ${GIT_EXECUTABLE} config --global core.autocrlf false +# COMMAND ${GIT_EXECUTABLE} config --global core.eol lf +# DEPENDEES +# DEPENDERS download +# ALWAYS ON +# ) + + # Set, don't abort if it fails (due to variables being empty). To realize this we must only call git if the configs + # are set globally, otherwise do a no-op command ("echo 1", since "true" is not available everywhere) +# if (GIT_CORE_AUTOCRLF) +# set (GIT_CORE_AUTOCRLF_CMD ${GIT_EXECUTABLE} config --global core.autocrlf ${GIT_CORE_AUTOCRLF}) +# else() +# set (GIT_CORE_AUTOCRLF_CMD echo) +# endif() +# if (GIT_CORE_EOL) +# set (GIT_CORE_EOL_CMD ${GIT_EXECUTABLE} config --global core.eol ${GIT_CORE_EOL}) +# else() +# set (GIT_CORE_EOL_CMD echo) +# endif() + ## + + # Set git config values to previous values +# ExternalProject_Add_Step(berkeleydb restoreGitConfig +# # Unset first (is required, since old value could be omitted, which wouldn't take any effect in "set" +# COMMAND ${GIT_EXECUTABLE} config --global --unset core.autocrlf +# COMMAND ${GIT_EXECUTABLE} config --global --unset core.eol +# +# COMMAND ${GIT_CORE_AUTOCRLF_CMD} +# COMMAND ${GIT_CORE_EOL_CMD} +# +# DEPENDEES download +# DEPENDERS configure +# ALWAYS ON +# ) + + # Write environment to file, is picked up by python script + get_cmake_property(_variableNames VARIABLES) + foreach (_variableName ${_variableNames}) + if (NOT _variableName MATCHES "lines") + set(OUT_FILE "${OUT_FILE}${_variableName}=\"${${_variableName}}\"\n") + endif() + endforeach() + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/buildenv.txt ${OUT_FILE}) + + set_target_properties(bdb_lib PROPERTIES IMPORTED_LOCATION ${BERKELEYDB_LIBDB_PATH}) +endif() diff --git a/external.deprecated/berkeleydb-cmake/patches/.gitignore b/external.deprecated/berkeleydb-cmake/patches/.gitignore new file mode 100644 index 0000000000..8b055cc833 --- /dev/null +++ b/external.deprecated/berkeleydb-cmake/patches/.gitignore @@ -0,0 +1,2 @@ +!config.guess +!config.sub diff --git a/external.deprecated/berkeleydb-cmake/patches/config.guess b/external.deprecated/berkeleydb-cmake/patches/config.guess new file mode 100644 index 0000000000..e02a2ae472 --- /dev/null +++ b/external.deprecated/berkeleydb-cmake/patches/config.guess @@ -0,0 +1,2005 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2020 Free Software Foundation, Inc. + +timestamp='2020-09-19' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to . + +me=$(echo "$0" | sed -e 's,.*/,,') + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2020 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0; do + case $1 in + --time-stamp | --time* | -t) + echo "$timestamp" + exit + ;; + --version | -v) + echo "$version" + exit + ;; + --help | --h* | -h) + echo "$usage" + exit + ;; + --) # Stop option processing + shift + break + ;; + -) # Use stdin as input. + break ;; + -*) + echo "$me: invalid option $1$help" >&2 + exit 1 + ;; + *) + break + ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp"; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null); } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2; } || + { + echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + exit 1 + } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) + echo "int x;" >"$dummy.c" + for driver in cc gcc c89 c99; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1; then + CC_FOR_BUILD="$driver" + break + fi + done + if test x"$CC_FOR_BUILD" = x; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if test -f /.attbin/uname; then + PATH=$PATH:/.attbin + export PATH +fi + +UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown +UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown +UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown +UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown + +case "$UNAME_SYSTEM" in +Linux | GNU | GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + set_cc_for_build + cat <<-EOF >"$dummy.c" + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + #include + #ifdef __DEFINED_va_list + LIBC=musl + #else + LIBC=gnu + #endif + #endif + EOF + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')" + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in +*:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || + "/sbin/$sysctl" 2>/dev/null || + "/usr/sbin/$sysctl" 2>/dev/null || + echo unknown)) + case "$UNAME_MACHINE_ARCH" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,') + endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p') + machine="${arch}${endian}"-unknown + ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "$UNAME_MACHINE_ARCH" in + earm*) + os=netbsdelf + ;; + arm* | i386 | m68k | ns32k | sh3* | sparc | vax) + set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null | + grep -q __ELF__; then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "$UNAME_MACHINE_ARCH" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr") + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "$UNAME_VERSION" in + Debian*) + release='-gnu' + ;; + *) + release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2) + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "$machine-${os}${release}${abi-}" + exit + ;; +*:Bitrig:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//') + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" + exit + ;; +*:OpenBSD:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//') + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit + ;; +*:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//') + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit + ;; +*:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" + exit + ;; +*:ekkoBSD:*:*) + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" + exit + ;; +*:SolidBSD:*:*) + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit + ;; +*:OS108:*:*) + echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" + exit + ;; +macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" + exit + ;; +*:MirBSD:*:*) + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" + exit + ;; +*:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix + exit + ;; +*:Twizzler:*:*) + echo "$UNAME_MACHINE"-unknown-twizzler + exit + ;; +*:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit + ;; +mips:OSF1:*.*) + echo mips-dec-osf1 + exit + ;; +alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}') + ;; + *5.*) + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}') + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1) + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha + ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha + ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha + ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 + ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 + ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 + ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 + ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 + ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 + ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 + ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 + ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 + ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 + ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 + ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 + ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)" + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode + ;; +Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit + ;; +*:[Aa]miga[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-amigaos + exit + ;; +*:[Mm]orph[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-morphos + exit + ;; +*:OS/390:*:*) + echo i370-ibm-openedition + exit + ;; +*:z/VM:*:*) + echo s390-ibm-zvmoe + exit + ;; +*:OS400:*:*) + echo powerpc-ibm-os400 + exit + ;; +arm:RISC*:1.[012]*:* | arm:riscix:1.[012]*:*) + echo arm-acorn-riscix"$UNAME_RELEASE" + exit + ;; +arm*:riscos:*:* | arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit + ;; +SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit + ;; +Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "$( (/bin/universe) 2>/dev/null)" = att; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit + ;; +NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit + ;; +DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit + ;; +DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case $(/usr/bin/uname -p) in + sparc) + echo sparc-icl-nx7 + exit + ;; + esac + ;; +s390x:SunOS:*:*) + echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit + ;; +sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit + ;; +sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit + ;; +i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux"$UNAME_RELEASE" + exit + ;; +i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if test "$CC_FOR_BUILD" != no_compiler_found; then + if ( + echo '#ifdef __amd64' + echo IS_64BIT_ARCH + echo '#endif' + ) | + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep IS_64BIT_ARCH >/dev/null; then + SUN_ARCH=x86_64 + fi + fi + echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit + ;; +sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit + ;; +sun4*:SunOS:*:*) + case "$(/usr/bin/arch -k)" in + Series* | S4*) + UNAME_RELEASE=$(uname -v) + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos"$(echo "$UNAME_RELEASE" | sed -e 's/-/_/')" + exit + ;; +sun3*:SunOS:*:*) + echo m68k-sun-sunos"$UNAME_RELEASE" + exit + ;; +sun*:*:4.2BSD:*) + UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null) + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case "$(/bin/arch)" in + sun3) + echo m68k-sun-sunos"$UNAME_RELEASE" + ;; + sun4) + echo sparc-sun-sunos"$UNAME_RELEASE" + ;; + esac + exit + ;; +aushp:SunOS:*:*) + echo sparc-auspex-sunos"$UNAME_RELEASE" + exit + ;; +# The situation for MiNT is a little confusing. The machine name +# can be virtually everything (everything which is not +# "atarist" or "atariste" at least should have a processor +# > m68000). The system name ranges from "MiNT" over "FreeMiNT" +# to the lowercase version "mint" (or "freemint"). Finally +# the system name "TOS" denotes a system which is actually not +# MiNT. But MiNT is downward compatible to TOS, so this should +# be no problem. +atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit + ;; +atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit + ;; +*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit + ;; +milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint"$UNAME_RELEASE" + exit + ;; +hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint"$UNAME_RELEASE" + exit + ;; +*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint"$UNAME_RELEASE" + exit + ;; +m68k:machten:*:*) + echo m68k-apple-machten"$UNAME_RELEASE" + exit + ;; +powerpc:machten:*:*) + echo powerpc-apple-machten"$UNAME_RELEASE" + exit + ;; +RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit + ;; +RISC*:ULTRIX:*:*) + echo mips-dec-ultrix"$UNAME_RELEASE" + exit + ;; +VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix"$UNAME_RELEASE" + exit + ;; +2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix"$UNAME_RELEASE" + exit + ;; +mips:*:*:UMIPS | mips:*:*:RISCos) + set_cc_for_build + sed 's/^ //' <"$dummy.c" +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') && + SYSTEM_NAME=$("$dummy" "$dummyarg") && + { + echo "$SYSTEM_NAME" + exit + } + echo mips-mips-riscos"$UNAME_RELEASE" + exit + ;; +Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit + ;; +Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit + ;; +Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit + ;; +Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit + ;; +m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit + ;; +m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit + ;; +m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit + ;; +AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=$(/usr/bin/uname -p) + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110; then + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || + test "$TARGET_BINARY_INTERFACE"x = x; then + echo m88k-dg-dgux"$UNAME_RELEASE" + else + echo m88k-dg-dguxbcs"$UNAME_RELEASE" + fi + else + echo i586-dg-dgux"$UNAME_RELEASE" + fi + exit + ;; +M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit + ;; +M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit + ;; +XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit + ;; +Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit + ;; +*:IRIX*:*:*) + echo mips-sgi-irix"$(echo "$UNAME_RELEASE" | sed -e 's/-/_/g')" + exit + ;; +????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit + ;; # Note that: echo "'`uname -s`'" gives 'AIX ' +i*86:AIX:*:*) + echo i386-ibm-aix + exit + ;; +ia64:AIX:*:*) + if test -x /usr/bin/oslevel; then + IBM_REV=$(/usr/bin/oslevel) + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" + exit + ;; +*:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + set_cc_for_build + sed 's/^ //' <"$dummy.c" + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy"); then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit + ;; +*:AIX:*:[4567]) + IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }') + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if test -x /usr/bin/lslpp; then + IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/) + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" + exit + ;; +*:AIX:*:*) + echo rs6000-ibm-aix + exit + ;; +ibmrt:4.4BSD:* | romp-ibm:4.4BSD:*) + echo romp-ibm-bsd4.4 + exit + ;; +ibmrt:*BSD:* | romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to + exit + ;; # report: romp-ibm BSD 4.3 +*:BOSX:*:*) + echo rs6000-bull-bosx + exit + ;; +DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit + ;; +9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit + ;; +hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit + ;; +9000/[34678]??:HP-UX:*:*) + HPUX_REV=$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//') + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if test -x /usr/bin/getconf; then + sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null) + sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null) + case "$sc_cpu_version" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "$sc_kernel_bits" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if test "$HP_ARCH" = ""; then + set_cc_for_build + sed 's/^ //' <"$dummy.c" + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy") + test -z "$HP_ARCH" && HP_ARCH=hppa + fi + ;; + esac + if test "$HP_ARCH" = hppa2.0w; then + set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__; then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" + exit + ;; +ia64:HP-UX:*:*) + HPUX_REV=$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//') + echo ia64-hp-hpux"$HPUX_REV" + exit + ;; +3050*:HI-UX:*:*) + set_cc_for_build + sed 's/^ //' <"$dummy.c" + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") && + { + echo "$SYSTEM_NAME" + exit + } + echo unknown-hitachi-hiuxwe2 + exit + ;; +9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + echo hppa1.1-hp-bsd + exit + ;; +9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit + ;; +*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit + ;; +hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + echo hppa1.1-hp-osf + exit + ;; +hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit + ;; +i*86:OSF1:*:*) + if test -x /usr/sbin/sysversion; then + echo "$UNAME_MACHINE"-unknown-osf1mk + else + echo "$UNAME_MACHINE"-unknown-osf1 + fi + exit + ;; +parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit + ;; +C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit + ;; +C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc; then + echo c32-convex-bsd + else + echo c2-convex-bsd + fi + exit + ;; +C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit + ;; +C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit + ;; +C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit + ;; +CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit + ;; +CRAY*[A-Z]90:*:*:*) + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" | + sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit + ;; +CRAY*TS:*:*:*) + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit + ;; +CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit + ;; +CRAY*SV1:*:*:*) + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit + ;; +*:UNICOS/mp:*:*) + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit + ;; +F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz) + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/') + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit + ;; +5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/') + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit + ;; +i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" + exit + ;; +sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi"$UNAME_RELEASE" + exit + ;; +*:BSD/OS:*:*) + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit + ;; +arm:FreeBSD:*:*) + UNAME_PROCESSOR=$(uname -p) + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null | + grep -q __ARM_PCS_VFP; then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE} | sed -e 's/[-(].*//')"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE} | sed -e 's/[-(].*//')"-gnueabihf + fi + exit + ;; +*:FreeBSD:*:*) + UNAME_PROCESSOR=$(/usr/bin/uname -p) + case "$UNAME_PROCESSOR" in + amd64) + UNAME_PROCESSOR=x86_64 + ;; + i386) + UNAME_PROCESSOR=i586 + ;; + esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE" | sed -e 's/[-(].*//')" + exit + ;; +i*:CYGWIN*:*) + echo "$UNAME_MACHINE"-pc-cygwin + exit + ;; +*:MINGW64*:*) + echo "$UNAME_MACHINE"-pc-mingw64 + exit + ;; +*:MINGW*:*) + echo "$UNAME_MACHINE"-pc-mingw32 + exit + ;; +*:MSYS*:*) + echo "$UNAME_MACHINE"-pc-msys + exit + ;; +i*:PW*:*) + echo "$UNAME_MACHINE"-pc-pw32 + exit + ;; +*:Interix*:*) + case "$UNAME_MACHINE" in + x86) + echo i586-pc-interix"$UNAME_RELEASE" + exit + ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix"$UNAME_RELEASE" + exit + ;; + IA64) + echo ia64-unknown-interix"$UNAME_RELEASE" + exit + ;; + esac + ;; +i*:UWIN*:*) + echo "$UNAME_MACHINE"-pc-uwin + exit + ;; +amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-pc-cygwin + exit + ;; +prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit + ;; +*:GNU:*:*) + # the GNU system + echo "$(echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE" | sed -e 's,/.*$,,')" + exit + ;; +*:GNU/*:*:*) + # other systems with GNU libc and userland + echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE" | sed -e 's/[-(].*//')-$LIBC" + exit + ;; +*:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix + exit + ;; +aarch64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +alpha:Linux:*:*) + case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0; then LIBC=gnulibc1; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +arc:Linux:*:* | arceb:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +arm*:Linux:*:*) + set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null | + grep -q __ARM_EABI__; then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null | + grep -q __ARM_PCS_VFP; then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + else + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + fi + fi + exit + ;; +avr32*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +cris:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit + ;; +crisv32:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit + ;; +e2k:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +frv:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +hexagon:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +i*86:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit + ;; +ia64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +m32r*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +m68*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +mips:Linux:*:* | mips64:Linux:*:*) + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 + sed 's/^ //' <"$dummy.c" + #undef CPU + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + MIPS_ENDIAN=el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + MIPS_ENDIAN= + #else + MIPS_ENDIAN= + #endif + #endif +EOF + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')" + test "x$CPU" != x && { + echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI" + exit + } + ;; +mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +openrisc*:Linux:*:*) + echo or1k-unknown-linux-"$LIBC" + exit + ;; +or32:Linux:*:* | or1k*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +padre:Linux:*:*) + echo sparc-unknown-linux-"$LIBC" + exit + ;; +parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-"$LIBC" + exit + ;; +parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; + esac + exit + ;; +ppc64:Linux:*:*) + echo powerpc64-unknown-linux-"$LIBC" + exit + ;; +ppc:Linux:*:*) + echo powerpc-unknown-linux-"$LIBC" + exit + ;; +ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-"$LIBC" + exit + ;; +ppcle:Linux:*:*) + echo powerpcle-unknown-linux-"$LIBC" + exit + ;; +riscv32:Linux:*:* | riscv64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +s390:Linux:*:* | s390x:Linux:*:*) + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" + exit + ;; +sh64*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +sh*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +sparc:Linux:*:* | sparc64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +tile*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +vax:Linux:*:*) + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" + exit + ;; +x86_64:Linux:*:*) + set_cc_for_build + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + if ( + echo '#ifdef __ILP32__' + echo IS_X32 + echo '#endif' + ) | + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep IS_X32 >/dev/null; then + LIBCABI="$LIBC"x32 + fi + fi + echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" + exit + ;; +xtensa*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit + ;; +i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit + ;; +i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" + exit + ;; +i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo "$UNAME_MACHINE"-pc-os2-emx + exit + ;; +i*86:XTS-300:*:STOP) + echo "$UNAME_MACHINE"-unknown-stop + exit + ;; +i*86:atheos:*:*) + echo "$UNAME_MACHINE"-unknown-atheos + exit + ;; +i*86:syllable:*:*) + echo "$UNAME_MACHINE"-pc-syllable + exit + ;; +i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos"$UNAME_RELEASE" + exit + ;; +i*86:*DOS:*:*) + echo "$UNAME_MACHINE"-pc-msdosdjgpp + exit + ;; +i*86:*:4.*:*) + UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//') + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" + fi + exit + ;; +i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case $(/bin/uname -X | grep "^Machine") in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent* | *Celeron) UNAME_MACHINE=i686 ;; + esac + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" + exit + ;; +i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=$(sed -n 's/.*Version //p' /dev/null >/dev/null; then + UNAME_REL=$( (/bin/uname -X | grep Release | sed -e 's/.*= //')) + (/bin/uname -X | grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X | grep '^Machine.*Pentium' >/dev/null) && + UNAME_MACHINE=i586 + (/bin/uname -X | grep '^Machine.*Pent *II' >/dev/null) && + UNAME_MACHINE=i686 + (/bin/uname -X | grep '^Machine.*Pentium Pro' >/dev/null) && + UNAME_MACHINE=i686 + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv32 + fi + exit + ;; +pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit + ;; +Intel:Mach:3*:*) + echo i386-pc-mach3 + exit + ;; +paragon:*:*:*) + echo i860-intel-osf1 + exit + ;; +i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1; then + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 + fi + exit + ;; +mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit + ;; +mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit + ;; +M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit + ;; +M68*:*:R3V[5678]*:*) + test -r /sysV68 && { + echo 'm68k-motorola-sysv' + exit + } + ;; +3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid && + OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' /dev/null | grep 86 >/dev/null && + { + echo i486-ncr-sysv4.3"$OS_REL" + exit + } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null && + { + echo i586-ncr-sysv4.3"$OS_REL" + exit + } + ;; +3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null && + { + echo i486-ncr-sysv4 + exit + } + ;; +NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid && + OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' /dev/null | grep 86 >/dev/null && + { + echo i486-ncr-sysv4.3"$OS_REL" + exit + } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null && + { + echo i586-ncr-sysv4.3"$OS_REL" + exit + } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null && + { + echo i586-ncr-sysv4.3"$OS_REL" + exit + } + ;; +m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos"$UNAME_RELEASE" + exit + ;; +mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit + ;; +TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos"$UNAME_RELEASE" + exit + ;; +rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos"$UNAME_RELEASE" + exit + ;; +PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos"$UNAME_RELEASE" + exit + ;; +SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv"$UNAME_RELEASE" + exit + ;; +RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit + ;; +RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit + ;; +*:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null; then + UNAME_MACHINE=$( (uname -p) 2>/dev/null) + echo "$UNAME_MACHINE"-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit + ;; +PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit + ;; +*:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit + ;; +*:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit + ;; +i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo "$UNAME_MACHINE"-stratus-vos + exit + ;; +*:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit + ;; +mc68*:A/UX:*:*) + echo m68k-apple-aux"$UNAME_RELEASE" + exit + ;; +news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit + ;; +R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if test -d /usr/nec; then + echo mips-nec-sysv"$UNAME_RELEASE" + else + echo mips-unknown-sysv"$UNAME_RELEASE" + fi + exit + ;; +BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit + ;; +BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit + ;; +BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit + ;; +BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit + ;; +x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit + ;; +SX-4:SUPER-UX:*:*) + echo sx4-nec-superux"$UNAME_RELEASE" + exit + ;; +SX-5:SUPER-UX:*:*) + echo sx5-nec-superux"$UNAME_RELEASE" + exit + ;; +SX-6:SUPER-UX:*:*) + echo sx6-nec-superux"$UNAME_RELEASE" + exit + ;; +SX-7:SUPER-UX:*:*) + echo sx7-nec-superux"$UNAME_RELEASE" + exit + ;; +SX-8:SUPER-UX:*:*) + echo sx8-nec-superux"$UNAME_RELEASE" + exit + ;; +SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux"$UNAME_RELEASE" + exit + ;; +SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux"$UNAME_RELEASE" + exit + ;; +Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody"$UNAME_RELEASE" + exit + ;; +*:Rhapsody:*:*) + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" + exit + ;; +arm64:Darwin:*:*) + echo aarch64-apple-darwin"$UNAME_RELEASE" + exit + ;; +*:Darwin:*:*) + UNAME_PROCESSOR=$(uname -p) + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select >/dev/null 2>/dev/null && + ! xcode-select --print-path >/dev/null 2>/dev/null; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build + fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + if ( + echo '#ifdef __LP64__' + echo IS_64BIT_ARCH + echo '#endif' + ) | + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep IS_64BIT_ARCH >/dev/null; then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if ( + echo '#ifdef __POWERPC__' + echo IS_PPC + echo '#endif' + ) | + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep IS_PPC >/dev/null; then + UNAME_PROCESSOR=powerpc + fi + elif test "$UNAME_PROCESSOR" = i386; then + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE + fi + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" + exit + ;; +*:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=$(uname -p) + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" + exit + ;; +*:QNX:*:4*) + echo i386-pc-qnx + exit + ;; +NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" + exit + ;; +NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk"$UNAME_RELEASE" + exit + ;; +NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit + ;; +NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit + ;; +NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" + exit + ;; +*:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit + ;; +BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit + ;; +DS/*:UNIX_System_V:*:*) + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" + exit + ;; +*:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + # shellcheck disable=SC2154 + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo "$UNAME_MACHINE"-unknown-plan9 + exit + ;; +*:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit + ;; +*:TENEX:*:*) + echo pdp10-unknown-tenex + exit + ;; +KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit + ;; +XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit + ;; +*:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit + ;; +*:ITS:*:*) + echo pdp10-unknown-its + exit + ;; +SEI:*:*:SEIUX) + echo mips-sei-seiux"$UNAME_RELEASE" + exit + ;; +*:DragonFly:*:*) + echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE" | sed -e 's/[-(].*//')" + exit + ;; +*:*VMS:*:*) + UNAME_MACHINE=$( (uname -p) 2>/dev/null) + case "$UNAME_MACHINE" in + A*) + echo alpha-dec-vms + exit + ;; + I*) + echo ia64-dec-vms + exit + ;; + V*) + echo vax-dec-vms + exit + ;; + esac + ;; +*:XENIX:*:SysV) + echo i386-pc-xenix + exit + ;; +i*86:skyos:*:*) + echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')" + exit + ;; +i*86:rdos:*:*) + echo "$UNAME_MACHINE"-pc-rdos + exit + ;; +i*86:AROS:*:*) + echo "$UNAME_MACHINE"-pc-aros + exit + ;; +x86_64:VMkernel:*:*) + echo "$UNAME_MACHINE"-unknown-esx + exit + ;; +amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit + ;; +*:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" + exit + ;; +esac + +# No uname command or uname output not recognized. +set_cc_for_build +cat >"$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null); + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) && + { + echo "$SYSTEM_NAME" + exit + } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { + echo "$ISP-apollo-$SYSTYPE" + exit +} + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in +mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 <&2 </dev/null || echo unknown) +uname -r = $( (uname -r) 2>/dev/null || echo unknown) +uname -s = $( (uname -s) 2>/dev/null || echo unknown) +uname -v = $( (uname -v) 2>/dev/null || echo unknown) + +/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null) +/bin/uname -X = $( (/bin/uname -X) 2>/dev/null) + +hostinfo = $( (hostinfo) 2>/dev/null) +/bin/universe = $( (/bin/universe) 2>/dev/null) +/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null) +/bin/arch = $( (/bin/arch) 2>/dev/null) +/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null) +/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null) + +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" +EOF +fi + +exit 1 + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/external.deprecated/berkeleydb-cmake/patches/config.sub b/external.deprecated/berkeleydb-cmake/patches/config.sub new file mode 100644 index 0000000000..8167d0871e --- /dev/null +++ b/external.deprecated/berkeleydb-cmake/patches/config.sub @@ -0,0 +1,1853 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2020 Free Software Foundation, Inc. + +timestamp='2020-10-13' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2020 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo "$1" + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Split fields of configuration type +# shellcheck disable=SC2162 +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 + ;; + *-*-*-*) + basic_machine=$field1-$field2 + basic_os=$field3-$field4 + ;; + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + basic_os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + basic_os=linux-android + ;; + *) + basic_machine=$field1-$field2 + basic_os=$field3 + ;; + esac + ;; + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + basic_os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + basic_os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + basic_os= + ;; + *) + basic_machine=$field1 + basic_os=$field2 + ;; + esac + ;; + esac + ;; + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + basic_os=bsd + ;; + a29khif) + basic_machine=a29k-amd + basic_os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= + ;; + am29k) + basic_machine=a29k-none + basic_os=bsd + ;; + amdahl) + basic_machine=580-amdahl + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + basic_os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + basic_os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + basic_os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + basic_os=bsd + ;; + aros) + basic_machine=i386-pc + basic_os=aros + ;; + aux) + basic_machine=m68k-apple + basic_os=aux + ;; + balance) + basic_machine=ns32k-sequent + basic_os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + basic_os=linux + ;; + cegcc) + basic_machine=arm-unknown + basic_os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + basic_os=bsd + ;; + convex-c2) + basic_machine=c2-convex + basic_os=bsd + ;; + convex-c32) + basic_machine=c32-convex + basic_os=bsd + ;; + convex-c34) + basic_machine=c34-convex + basic_os=bsd + ;; + convex-c38) + basic_machine=c38-convex + basic_os=bsd + ;; + cray) + basic_machine=j90-cray + basic_os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + basic_os= + ;; + da30) + basic_machine=m68k-da30 + basic_os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + basic_os= + ;; + delta88) + basic_machine=m88k-motorola + basic_os=sysv3 + ;; + dicos) + basic_machine=i686-pc + basic_os=dicos + ;; + djgpp) + basic_machine=i586-pc + basic_os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + basic_os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + basic_os=ose + ;; + gmicro) + basic_machine=tron-gmicro + basic_os=sysv + ;; + go32) + basic_machine=i386-pc + basic_os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + basic_os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + basic_os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + basic_os=hms + ;; + harris) + basic_machine=m88k-harris + basic_os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + basic_os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + basic_os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + basic_os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + basic_os=proelf + ;; + i386mach) + basic_machine=i386-mach + basic_os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + basic_os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + basic_os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + basic_os=sysv + ;; + merlin) + basic_machine=ns32k-utek + basic_os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + basic_os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + basic_os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + basic_os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + basic_os=coff + ;; + morphos) + basic_machine=powerpc-unknown + basic_os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + basic_os=moxiebox + ;; + msdos) + basic_machine=i386-pc + basic_os=msdos + ;; + msys) + basic_machine=i686-pc + basic_os=msys + ;; + mvs) + basic_machine=i370-ibm + basic_os=mvs + ;; + nacl) + basic_machine=le32-unknown + basic_os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + basic_os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + basic_os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + basic_os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + basic_os=newsos + ;; + news1000) + basic_machine=m68030-sony + basic_os=newsos + ;; + necv70) + basic_machine=v70-nec + basic_os=sysv + ;; + nh3000) + basic_machine=m68k-harris + basic_os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + basic_os=cxux + ;; + nindy960) + basic_machine=i960-intel + basic_os=nindy + ;; + mon960) + basic_machine=i960-intel + basic_os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + basic_os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + basic_os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + basic_os=ose + ;; + os68k) + basic_machine=m68k-none + basic_os=os68k + ;; + paragon) + basic_machine=i860-intel + basic_os=osf + ;; + parisc) + basic_machine=hppa-unknown + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp + ;; + pw32) + basic_machine=i586-unknown + basic_os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + basic_os=rdos + ;; + rdos32) + basic_machine=i386-pc + basic_os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + basic_os=coff + ;; + sa29200) + basic_machine=a29k-amd + basic_os=udi + ;; + sei) + basic_machine=mips-sei + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= + ;; + sps7) + basic_machine=m68k-bull + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= + ;; + stratus) + basic_machine=i860-stratus + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= + ;; + sun2os3) + basic_machine=m68000-sun + basic_os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= + ;; + sun3os3) + basic_machine=m68k-sun + basic_os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= + ;; + sun4os3) + basic_machine=sparc-sun + basic_os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + basic_os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= + ;; + sv1) + basic_machine=sv1-cray + basic_os=unicos + ;; + symmetry) + basic_machine=i386-sequent + basic_os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + basic_os=unicos + ;; + t90) + basic_machine=t90-cray + basic_os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + basic_os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + basic_os=tpf + ;; + udi29k) + basic_machine=a29k-amd + basic_os=udi + ;; + ultra3) + basic_machine=a29k-nyu + basic_os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + basic_os=none + ;; + vaxv) + basic_machine=vax-dec + basic_os=sysv + ;; + vms) + basic_machine=vax-dec + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + basic_os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + basic_os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + basic_os=vxworks + ;; + xbox) + basic_machine=i686-pc + basic_os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + basic_os=unicos + ;; + *) + basic_machine=$1 + basic_os= + ;; + esac + ;; +esac + +# Decode 1-component or ad-hoc basic machines +case $basic_machine in + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond + ;; + op50n) + cpu=hppa1.1 + vendor=oki + ;; + op60c) + cpu=hppa1.1 + vendor=oki + ;; + ibm*) + cpu=i370 + vendor=ibm + ;; + orion105) + cpu=clipper + vendor=highlevel + ;; + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple + ;; + pmac | pmac-mpw) + cpu=powerpc + vendor=apple + ;; + + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + cpu=m68000 + vendor=att + ;; + 3b*) + cpu=we32k + vendor=att + ;; + bluegene*) + cpu=powerpc + vendor=ibm + basic_os=cnk + ;; + decsystem10* | dec10*) + cpu=pdp10 + vendor=dec + basic_os=tops10 + ;; + decsystem20* | dec20*) + cpu=pdp10 + vendor=dec + basic_os=tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + cpu=m68k + vendor=motorola + ;; + dpx2*) + cpu=m68k + vendor=bull + basic_os=sysv3 + ;; + encore | umax | mmax) + cpu=ns32k + vendor=encore + ;; + elxsi) + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} + ;; + fx2800) + cpu=i860 + vendor=alliant + ;; + genix) + cpu=ns32k + vendor=ns + ;; + h3050r* | hiux*) + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + cpu=m68000 + vendor=hp + ;; + hp9k3[2-9][0-9]) + cpu=m68k + vendor=hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + i*86v32) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv32 + ;; + i*86v4*) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv4 + ;; + i*86v) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv + ;; + i*86sol2) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=solaris2 + ;; + j90 | j90-cray) + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} + ;; + iris | iris4d) + cpu=mips + vendor=sgi + case $basic_os in + irix*) + ;; + *) + basic_os=irix4 + ;; + esac + ;; + miniframe) + cpu=m68000 + vendor=convergent + ;; + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + basic_os=mint + ;; + news-3600 | risc-news) + cpu=mips + vendor=sony + basic_os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) + ;; + ns2*) + basic_os=nextstep2 + ;; + *) + basic_os=nextstep3 + ;; + esac + ;; + np1) + cpu=np1 + vendor=gould + ;; + op50n-* | op60c-*) + cpu=hppa1.1 + vendor=oki + basic_os=proelf + ;; + pa-hitachi) + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 + ;; + pbd) + cpu=sparc + vendor=tti + ;; + pbb) + cpu=m68k + vendor=tti + ;; + pc532) + cpu=ns32k + vendor=pc532 + ;; + pn) + cpu=pn + vendor=gould + ;; + power) + cpu=power + vendor=ibm + ;; + ps2) + cpu=i386 + vendor=ibm + ;; + rm[46]00) + cpu=mips + vendor=siemens + ;; + rtpc | rtpc-*) + cpu=romp + vendor=ibm + ;; + sde) + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} + ;; + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks + ;; + tower | tower-32) + cpu=m68k + vendor=ncr + ;; + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu + ;; + w65) + cpu=w65 + vendor=wdc + ;; + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf + ;; + none) + cpu=none + vendor=none + ;; + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine + ;; + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` + ;; + + *-*) + # shellcheck disable=SC2162 + IFS="-" read cpu vendor <&2 + exit 1 + ;; + esac + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $vendor in + digital*) + vendor=dec + ;; + commodore*) + vendor=cbm + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if test x$basic_os != x +then + +# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just +# set os. +case $basic_os in + gnu/linux*) + kernel=linux + os=`echo $basic_os | sed -e 's|gnu/linux|gnu|'` + ;; + os2-emx) + kernel=os2 + os=`echo $basic_os | sed -e 's|os2-emx|emx|'` + ;; + nto-qnx*) + kernel=nto + os=`echo $basic_os | sed -e 's|nto-qnx|qnx|'` + ;; + *-*) + # shellcheck disable=SC2162 + IFS="-" read kernel os <&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os in + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* ) + ;; + uclinux-uclibc* ) + ;; + -dietlibc* | -newlib* | -musl* | -uclibc* ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + exit 1 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + nto-qnx*) + ;; + os2-emx) + ;; + *-eabi* | *-gnueabi*) + ;; + -*) + # Blank kernel with real OS is always fine. + ;; + *-*) + echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + exit 1 + ;; +esac + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +case $vendor in + unknown) + case $cpu-$os in + *-riscix*) + vendor=acorn + ;; + *-sunos*) + vendor=sun + ;; + *-cnk* | *-aix*) + vendor=ibm + ;; + *-beos*) + vendor=be + ;; + *-hpux*) + vendor=hp + ;; + *-mpeix*) + vendor=hp + ;; + *-hiux*) + vendor=hitachi + ;; + *-unos*) + vendor=crds + ;; + *-dgux*) + vendor=dg + ;; + *-luna*) + vendor=omron + ;; + *-genix*) + vendor=ns + ;; + *-clix*) + vendor=intergraph + ;; + *-mvs* | *-opened*) + vendor=ibm + ;; + *-os400*) + vendor=ibm + ;; + s390-* | s390x-*) + vendor=ibm + ;; + *-ptx*) + vendor=sequent + ;; + *-tpf*) + vendor=ibm + ;; + *-vxsim* | *-vxworks* | *-windiss*) + vendor=wrs + ;; + *-aux*) + vendor=apple + ;; + *-hms*) + vendor=hitachi + ;; + *-mpw* | *-macos*) + vendor=apple + ;; + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) + vendor=atari + ;; + *-vos*) + vendor=stratus + ;; + esac + ;; +esac + +echo "$cpu-$vendor-${kernel:+$kernel-}$os" +exit + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/external.deprecated/berkeleydb-cmake/patches/db-atomic.patch b/external.deprecated/berkeleydb-cmake/patches/db-atomic.patch new file mode 100644 index 0000000000..99d03e9156 --- /dev/null +++ b/external.deprecated/berkeleydb-cmake/patches/db-atomic.patch @@ -0,0 +1,141 @@ +diff --git a/src/dbinc/atomic.h b/src/dbinc/atomic.h +index 6a858f7..9f338dc 100644 +--- a/src/dbinc/atomic.h ++++ b/src/dbinc/atomic.h +@@ -70,7 +70,7 @@ typedef struct { + * These have no memory barriers; the caller must include them when necessary. + */ + #define atomic_read(p) ((p)->value) +-#define atomic_init(p, val) ((p)->value = (val)) ++#define atomic_init_db(p, val) ((p)->value = (val)) + + #ifdef HAVE_ATOMIC_SUPPORT + +@@ -144,7 +144,7 @@ typedef LONG volatile *interlocked_val; + #define atomic_inc(env, p) __atomic_inc(p) + #define atomic_dec(env, p) __atomic_dec(p) + #define atomic_compare_exchange(env, p, o, n) \ +- __atomic_compare_exchange((p), (o), (n)) ++ __atomic_compare_exchange_db((p), (o), (n)) + static inline int __atomic_inc(db_atomic_t *p) + { + int temp; +@@ -176,7 +176,7 @@ static inline int __atomic_dec(db_atomic_t *p) + * http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html + * which configure could be changed to use. + */ +-static inline int __atomic_compare_exchange( ++static inline int __atomic_compare_exchange_db( + db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval) + { + atomic_value_t was; +@@ -206,7 +206,7 @@ static inline int __atomic_compare_exchange( + #define atomic_dec(env, p) (--(p)->value) + #define atomic_compare_exchange(env, p, oldval, newval) \ + (DB_ASSERT(env, atomic_read(p) == (oldval)), \ +- atomic_init(p, (newval)), 1) ++ atomic_init_db(p, (newval)), 1) + #else + #define atomic_inc(env, p) __atomic_inc(env, p) + #define atomic_dec(env, p) __atomic_dec(env, p) +diff --git a/src/mp/mp_fget.c b/src/mp/mp_fget.c +index 16de695..d0dcc29 100644 +--- a/src/mp/mp_fget.c ++++ b/src/mp/mp_fget.c +@@ -649,7 +649,7 @@ alloc: /* Allocate a new buffer header and data space. */ + + /* Initialize enough so we can call __memp_bhfree. */ + alloc_bhp->flags = 0; +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + #ifdef DIAGNOSTIC + if ((uintptr_t)alloc_bhp->buf & (sizeof(size_t) - 1)) { + __db_errx(env, DB_STR("3025", +@@ -955,7 +955,7 @@ alloc: /* Allocate a new buffer header and data space. */ + MVCC_MPROTECT(bhp->buf, mfp->pagesize, + PROT_READ); + +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + MUTEX_LOCK(env, alloc_bhp->mtx_buf); + alloc_bhp->priority = bhp->priority; + alloc_bhp->pgno = bhp->pgno; +diff --git a/src/mp/mp_mvcc.c b/src/mp/mp_mvcc.c +index 770bad8..e28cce0 100644 +--- a/src/mp/mp_mvcc.c ++++ b/src/mp/mp_mvcc.c +@@ -276,7 +276,7 @@ __memp_bh_freeze(dbmp, infop, hp, bhp, need_frozenp) + #else + memcpy(frozen_bhp, bhp, SSZA(BH, buf)); + #endif +- atomic_init(&frozen_bhp->ref, 0); ++ atomic_init_db(&frozen_bhp->ref, 0); + if (mutex != MUTEX_INVALID) + frozen_bhp->mtx_buf = mutex; + else if ((ret = __mutex_alloc(env, MTX_MPOOL_BH, +@@ -428,7 +428,7 @@ __memp_bh_thaw(dbmp, infop, hp, frozen_bhp, alloc_bhp) + #endif + alloc_bhp->mtx_buf = mutex; + MUTEX_LOCK(env, alloc_bhp->mtx_buf); +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + F_CLR(alloc_bhp, BH_FROZEN); + } + +diff --git a/src/mp/mp_region.c b/src/mp/mp_region.c +index 4952030..47645f8 100644 +--- a/src/mp/mp_region.c ++++ b/src/mp/mp_region.c +@@ -245,7 +245,7 @@ __memp_init(env, dbmp, reginfo_off, htab_buckets, max_nreg) + MTX_MPOOL_FILE_BUCKET, 0, &htab[i].mtx_hash)) != 0) + return (ret); + SH_TAILQ_INIT(&htab[i].hash_bucket); +- atomic_init(&htab[i].hash_page_dirty, 0); ++ atomic_init_db(&htab[i].hash_page_dirty, 0); + } + + /* +@@ -302,7 +302,7 @@ no_prealloc: + } else + hp->mtx_hash = mtx_base + (i % dbenv->mp_mtxcount); + SH_TAILQ_INIT(&hp->hash_bucket); +- atomic_init(&hp->hash_page_dirty, 0); ++ atomic_init_db(&hp->hash_page_dirty, 0); + #ifdef HAVE_STATISTICS + hp->hash_io_wait = 0; + hp->hash_frozen = hp->hash_thawed = hp->hash_frozen_freed = 0; +diff --git a/src/mutex/mut_method.c b/src/mutex/mut_method.c +index 09353b0..177353c 100644 +--- a/src/mutex/mut_method.c ++++ b/src/mutex/mut_method.c +@@ -474,7 +474,7 @@ atomic_compare_exchange(env, v, oldval, newval) + MUTEX_LOCK(env, mtx); + ret = atomic_read(v) == oldval; + if (ret) +- atomic_init(v, newval); ++ atomic_init_db(v, newval); + MUTEX_UNLOCK(env, mtx); + + return (ret); +diff --git a/src/mutex/mut_tas.c b/src/mutex/mut_tas.c +index 106b161..fc4de9d 100644 +--- a/src/mutex/mut_tas.c ++++ b/src/mutex/mut_tas.c +@@ -47,7 +47,7 @@ __db_tas_mutex_init(env, mutex, flags) + + #ifdef HAVE_SHARED_LATCHES + if (F_ISSET(mutexp, DB_MUTEX_SHARED)) +- atomic_init(&mutexp->sharecount, 0); ++ atomic_init_db(&mutexp->sharecount, 0); + else + #endif + if (MUTEX_INIT(&mutexp->tas)) { +@@ -536,7 +536,7 @@ __db_tas_mutex_unlock(env, mutex) + F_CLR(mutexp, DB_MUTEX_LOCKED); + /* Flush flag update before zeroing count */ + MEMBAR_EXIT(); +- atomic_init(&mutexp->sharecount, 0); ++ atomic_init_db(&mutexp->sharecount, 0); + } else { + DB_ASSERT(env, sharecount > 0); + MEMBAR_EXIT(); \ No newline at end of file diff --git a/external.deprecated/berkeleydb-cmake/patches/fix-string-is-not-a-string-literal.patch b/external.deprecated/berkeleydb-cmake/patches/fix-string-is-not-a-string-literal.patch new file mode 100644 index 0000000000..6f90a760ef --- /dev/null +++ b/external.deprecated/berkeleydb-cmake/patches/fix-string-is-not-a-string-literal.patch @@ -0,0 +1,29 @@ +--- a/txn/txn.c 2010-04-12 20:25:37.000000000 +0000 ++++ b/txn/txn.c 2019-11-22 19:42:03.584526294 +0000 +@@ -77,8 +77,6 @@ + static int __txn_undo __P((DB_TXN *)); + static void __txn_set_txn_lsnp __P((DB_TXN *, DB_LSN **, DB_LSN **)); + +-static char *TxnAlloc = "Unable to allocate a transaction handle"; +- + /* + * __txn_begin_pp -- + * ENV->txn_begin pre/post processing. +@@ -168,7 +166,7 @@ + + *txnpp = NULL; + if ((ret = __os_calloc(env, 1, sizeof(DB_TXN), &txn)) != 0) { +- __db_errx(env, TxnAlloc); ++ __db_errx(env, "Unable to allocate a transaction handle"); + return (ret); + } + +@@ -315,7 +313,7 @@ + int ret; + + if ((ret = __os_calloc(env, 1, sizeof(DB_TXN), &txn)) != 0) { +- __db_errx(env, TxnAlloc); ++ __db_errx(env, "Unable to allocate a transaction handle"); + return (ret); + } + diff --git a/external.deprecated/berkeleydb-cmake/scripts/building_env.py b/external.deprecated/berkeleydb-cmake/scripts/building_env.py new file mode 100644 index 0000000000..3f2401d63e --- /dev/null +++ b/external.deprecated/berkeleydb-cmake/scripts/building_env.py @@ -0,0 +1,73 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Inspired by The ViaDuck Project for building OpenSSL + +# creates a building environment for berkeleydb +# - working directory +# - on windows: uses msys' bash for command execution (berkeleydb's scripts need an UNIX-like environment with perl) + +from subprocess import PIPE, Popen +from sys import argv, exit +import os, re + +env = os.environ +l = [] + +os_s = argv[1] # operating system +offset = 2 # 0: this script's path, 1: operating system + +if os_s == "WIN32": + offset = 4 # 2: MSYS_BASH_PATH, 3: CMAKE_MAKE_PROGRAM + + # + bash = argv[2] + msys_path = os.path.dirname(bash) + mingw_path = os.path.dirname(argv[3]) + + # append ; to PATH if needed + if not env['PATH'].endswith(";"): + env['PATH'] += ";" + + # include path of msys binaries (perl, cd etc.) and building tools (gcc, ld etc.) + env['PATH'] = ";".join([msys_path, mingw_path])+";"+env['PATH'] + env['MAKEFLAGS'] = '' # otherwise: internal error: invalid --jobserver-fds string `gmake_semaphore_1824' + + +binary_berkeleydb_dir_source = argv[offset]+"/" # downloaded berkeleydb source dir +l.extend(argv[offset+1:]) # routed commands + +l[0] = '"'+l[0]+'"' + +# ensure target dir exists for mingw cross +target_dir = binary_berkeleydb_dir_source+"/../../../usr/local/bin" +if not os.path.exists(target_dir): + os.makedirs(target_dir) + +# read environment from file if cross-compiling +if os_s == "LINUX_CROSS_ANDROID": + expr = re.compile('^(.*?)="(.*?)"', re.MULTILINE | re.DOTALL) + f = open(binary_berkeleydb_dir_source+"/../../../../buildenv.txt", "r") + content = f.read() + f.close() + + for k, v in expr.findall(content): + # print('k: ' + k + ', v: ' + v) + if "\n" in k.strip(): + print('Skipping multiline key') + elif k != "PATH": + env[k] = v.replace('"', '') + else: + env[k] = v.replace('"', '')+":"+env[k] + +proc = None +if os_s == "WIN32": + # we must emulate a UNIX environment to build berkeleydb using mingw + proc = Popen(bash, env=env, cwd=binary_berkeleydb_dir_source, stdin=PIPE, universal_newlines=True) + proc.communicate(input=" ".join(l)+" || exit $?") +else: + proc = Popen(" ".join(l)+" || exit $?", shell=True, env=env, cwd=binary_berkeleydb_dir_source) + proc.communicate() + +exit(proc.returncode) diff --git a/external.deprecated/libxz-cmake/CMakeLists.txt b/external.deprecated/libxz-cmake/CMakeLists.txt new file mode 100644 index 0000000000..40fb90da7e --- /dev/null +++ b/external.deprecated/libxz-cmake/CMakeLists.txt @@ -0,0 +1,44 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Inspired by The ViaDuck Project for building OpenSSL + +cmake_minimum_required(VERSION 3.2) +project(libxz-cmake) + +set(LIBLZMA_ARCHIVE_LOCATION OFF CACHE STRING "Location of XZLib archive") +set(LIBLZMA_BUILD_VERSION OFF CACHE STRING "XZLib version to build") +set(CROSS_ANDROID OFF CACHE BOOL "Cross-compiling for Android?") +set(CROSS OFF CACHE BOOL "Cross-compiling?") +set(CROSS_TARGET OFF CACHE STRING "Cross-compilation target") + +# Allow including our modules +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") + +# Mimic system db targets +add_library(liblzma INTERFACE) + +# Set up fake targets +add_library(lib_lzma STATIC IMPORTED GLOBAL) + +target_link_libraries(liblzma INTERFACE lib_lzma) + +# Set up prefix +set(LIBLZMA_PREFIX ${CMAKE_CURRENT_BINARY_DIR}) +message(STATUS "LIBLZMA_PREFIX: ${LIBLZMA_PREFIX}") + +set(LIBLZMA_PATH ${LIBLZMA_PREFIX}/usr/local/lib/liblzma.a) +message(STATUS "LIBLZMA_PATH ${LIBLZMA_PATH}") + +# Set up XZLib target +include(BuildXZLib) + +# Set import locations +set_target_properties(lib_lzma PROPERTIES IMPORTED_LOCATION ${LIBLZMA_PATH}) + +# Set include locations +target_include_directories(liblzma BEFORE INTERFACE ${LIBLZMA_PREFIX}/usr/local/include) + +# Add fake targets to common target +add_dependencies(lib_lzma libxzExternal) diff --git a/external.deprecated/libxz-cmake/cmake/BuildXZLib.cmake b/external.deprecated/libxz-cmake/cmake/BuildXZLib.cmake new file mode 100644 index 0000000000..1e1be044d6 --- /dev/null +++ b/external.deprecated/libxz-cmake/cmake/BuildXZLib.cmake @@ -0,0 +1,223 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Inspired by The ViaDuck Project for building OpenSSL + +include(ProcessorCount) +include(ExternalProject) + +find_package(Git REQUIRED) +find_package(PythonInterp 3 REQUIRED) + +find_program(PATCH_PROGRAM patch) +if (NOT PATCH_PROGRAM) + message(FATAL_ERROR "Cannot find patch utility. This is only required for Android cross-compilation but due to script complexity " + "the requirement is always enforced") +endif() + +ProcessorCount(NUM_JOBS) +set(OS "UNIX") + +if (LIBXZ_ARCHIVE_HASH) + set(LIBLZMA_CHECK_HASH URL_HASH SHA256=${LIBXZ_ARCHIVE_HASH}) +endif() + +if (EXISTS ${LIBLZMA_PATH}) + message(STATUS "Not building XZLib again. Remove ${LIBLZMA_PATH} for rebuild") +else() + if (WIN32 AND NOT CROSS) + # yep, windows needs special treatment, but neither cygwin nor msys, since they provide an UNIX-like environment + + if (MINGW) + set(OS "WIN32") + message(WARNING "Building on windows is experimental") + + find_program(MSYS_BASH "bash.exe" PATHS "C:/Msys/" "C:/MinGW/msys/" PATH_SUFFIXES "/1.0/bin/" "/bin/" + DOC "Path to MSYS installation") + if (NOT MSYS_BASH) + message(FATAL_ERROR "Specify MSYS installation path") + endif(NOT MSYS_BASH) + + set(MINGW_MAKE ${CMAKE_MAKE_PROGRAM}) + message(WARNING "Assuming your make program is a sibling of your compiler (resides in same directory)") + elseif(NOT (CYGWIN OR MSYS)) + message(FATAL_ERROR "Unsupported compiler infrastructure") + endif(MINGW) + + set(MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) + elseif(NOT UNIX) + message(FATAL_ERROR "Unsupported platform") + else() + # we can only use GNU make, no exotic things like Ninja (MSYS always uses GNU make) + find_program(MAKE_PROGRAM make) + endif() + + # save old git values for core.autocrlf and core.eol + #execute_process(COMMAND ${GIT_EXECUTABLE} config --global --get core.autocrlf OUTPUT_VARIABLE GIT_CORE_AUTOCRLF OUTPUT_STRIP_TRAILING_WHITESPACE) + #execute_process(COMMAND ${GIT_EXECUTABLE} config --global --get core.eol OUTPUT_VARIABLE GIT_CORE_EOL OUTPUT_STRIP_TRAILING_WHITESPACE) + + # On windows we need to replace path to perl since CreateProcess(..) cannot handle unix paths + if (WIN32 AND NOT CROSS) + set(PERL_PATH_FIX_INSTALL sed -i -- 's/\\/usr\\/bin\\/perl/perl/g' Makefile) + else() + set(PERL_PATH_FIX_INSTALL true) + endif() + + # CROSS and CROSS_ANDROID cannot both be set (because of internal reasons) + if (CROSS AND CROSS_ANDROID) + # if user set CROSS_ANDROID and CROSS we assume he wants CROSS_ANDROID, so set CROSS to OFF + set(CROSS OFF) + endif() + + if (CROSS_ANDROID) + set(OS "LINUX_CROSS_ANDROID") + endif() + + # python helper script for corrent building environment + set(BUILD_ENV_TOOL ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/building_env.py ${OS} ${MSYS_BASH} ${MINGW_MAKE}) + + # disable everything we dont need + set(CONFIGURE_LIBLZMA_MODULES --disable-doc --disable-scripts --disable-xz --disable-xzdec --disable-lzmadec --disable-lzmainfo --disable-lzma-links) + + # additional configure script parameters + set(CONFIGURE_LIBLZMA_PARAMS --enable-shared --enable-static) + + # cross-compiling + if (CROSS) + set(COMMAND_CONFIGURE ../dist/configure ${CONFIGURE_LIBLZMA_PARAMS} --cross-compile-prefix=${CROSS_PREFIX} ${CROSS_TARGET} ${CONFIGURE_LIBLZMA_MODULES} --prefix=/usr/local/) + set(COMMAND_TEST "true") + elseif(CROSS_ANDROID) + + # Android specific configuration options + #set(CONFIGURE_LIBLZMA_MODULES ${CONFIGURE_LIBLZMA_MODULES} no-hw) + + set(CFLAGS ${CMAKE_C_FLAGS}) + set(CXXFLAGS ${CMAKE_CXX_FLAGS}) + + # Silence warnings about unused arguments (Clang specific) + set(CFLAGS "${CMAKE_C_FLAGS} -Qunused-arguments") + set(CXXFLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments") + + # Required environment configuration is already set (by e.g. ndk) so no need to fiddle around with all the options ... + if (NOT ANDROID) + message(FATAL_ERROR "Use NDK cmake toolchain or cmake android autoconfig") + endif() + + if (ARMEABI_V7A) + set(LIBLZMA_PLATFORM "--host armv7") + #set(CONFIGURE_LIBLZMA_PARAMS ${CONFIGURE_LIBLZMA_PARAMS} "-march=armv7-a") + else() + if (CMAKE_ANDROID_ARCH_ABI MATCHES "arm64-v8a") + set(LIBLZMA_PLATFORM "--host=aarch64-linux-android") + else() + set(LIBLZMA_PLATFORM "--host=${CMAKE_ANDROID_ARCH_ABI}") + endif() + endif() + + set(ANDROID_STRING "android") + if (CMAKE_ANDROID_ARCH_ABI MATCHES "64") + set(ANDROID_STRING "${ANDROID_STRING}64") + endif() + + # copy over both sysroots to a common sysroot (workaround OpenSSL failing without one single sysroot) + string(REPLACE "-clang" "" ANDROID_TOOLCHAIN_NAME ${ANDROID_TOOLCHAIN_NAME}) + file(COPY ${ANDROID_TOOLCHAIN_ROOT}/sysroot/usr/lib/${ANDROID_TOOLCHAIN_NAME}/${ANDROID_PLATFORM_LEVEL}/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/sysroot/usr/lib/) + file(COPY ${ANDROID_TOOLCHAIN_ROOT}/sysroot/usr/lib/${ANDROID_TOOLCHAIN_NAME}/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/sysroot/usr/lib/ PATTERN *.*) + file(COPY ${CMAKE_SYSROOT}/usr/include DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/sysroot/usr/) + + # ... but we have to convert all the CMake options to environment variables! + set(CROSS_SYSROOT ${CMAKE_CURRENT_BINARY_DIR}/sysroot/) + set(AS ${CMAKE_ASM_COMPILER}) + set(AR ${CMAKE_AR}) + set(LD ${CMAKE_LINKER}) + set(LDFLAGS ${CMAKE_MODULE_LINKER_FLAGS}) + + # have to surround variables with double quotes, otherwise they will be merged together without any separator + set(CC "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN} ${CFLAGS} -target ${CMAKE_C_COMPILER_TARGET}") + set(CXX "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN} ${CFLAGS} -target ${CMAKE_CXX_COMPILER_TARGET}") + + message(STATUS "AS: ${AS}") + message(STATUS "AR: ${AR}") + message(STATUS "LD: ${LD}") + message(STATUS "LDFLAGS: ${LDFLAGS}") + message(STATUS "CC: ${CC}") + message(STATUS "CXX: ${CXX}") + message(STATUS "ANDROID_TOOLCHAIN_ROOT: ${ANDROID_TOOLCHAIN_ROOT}") + + set(COMMAND_AUTOGEN ./autogen.sh) + set(COMMAND_CONFIGURE ./configure --prefix=/usr/local/ ${CONFIGURE_LIBLZMA_PARAMS} ${LIBLZMA_PLATFORM} ${CONFIGURE_LIBLZMA_MODULES}) + set(COMMAND_TEST "true") + else() # detect host system automatically + set(COMMAND_AUTOGEN ./autogen.sh) + set(COMMAND_CONFIGURE ./configure --prefix=/usr/local/ ${CONFIGURE_LIBLZMA_PARAMS} ${CONFIGURE_LIBLZMA_MODULES}) + endif() + + # Add liblzma target + ExternalProject_Add(libxzExternal + URL ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz + ${LIBLZMA_CHECK_HASH} + UPDATE_COMMAND "" + COMMAND ${COMMAND_AUTOGEN} + CONFIGURE_COMMAND ${BUILD_ENV_TOOL} ${COMMAND_CONFIGURE} + BUILD_COMMAND ${BUILD_ENV_TOOL} /${CONFIGURE_DIR} ${MAKE_PROGRAM} -j ${NUM_JOBS} + BUILD_BYPRODUCTS ${LIBLZMA_PATH} + INSTALL_COMMAND ${BUILD_ENV_TOOL} /${CONFIGURE_DIR} ${PERL_PATH_FIX_INSTALL} + COMMAND ${BUILD_ENV_TOOL} /${CONFIGURE_DIR} ${MAKE_PROGRAM} DESTDIR=${CMAKE_CURRENT_BINARY_DIR} install + COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} ${CMAKE_BINARY_DIR} # force CMake-reload + + COMMAND cp -r ${LIBLZMA_PREFIX}/usr/ ${LIBLZMA_PREFIX}/.. + + LOG_CONFIGURE 1 + LOG_BUILD 1 + LOG_INSTALL 1 + ) + + # set git config values to liblzma requirements (no impact on linux though) + # ExternalProject_Add_Step(liblzma setGitConfig + # COMMAND ${GIT_EXECUTABLE} config --global core.autocrlf false + # COMMAND ${GIT_EXECUTABLE} config --global core.eol lf + # DEPENDEES + # DEPENDERS download + # ALWAYS ON + # ) + + # Set, don't abort if it fails (due to variables being empty). To realize this we must only call git if the configs + # are set globally, otherwise do a no-op command ("echo 1", since "true" is not available everywhere) + # if (GIT_CORE_AUTOCRLF) + # set (GIT_CORE_AUTOCRLF_CMD ${GIT_EXECUTABLE} config --global core.autocrlf ${GIT_CORE_AUTOCRLF}) + # else() + # set (GIT_CORE_AUTOCRLF_CMD echo) + # endif() + # if (GIT_CORE_EOL) + # set (GIT_CORE_EOL_CMD ${GIT_EXECUTABLE} config --global core.eol ${GIT_CORE_EOL}) + # else() + # set (GIT_CORE_EOL_CMD echo) + # endif() + ## + + # Set git config values to previous values + # ExternalProject_Add_Step(liblzma restoreGitConfig + # # Unset first (is required, since old value could be omitted, which wouldn't take any effect in "set" + # COMMAND ${GIT_EXECUTABLE} config --global --unset core.autocrlf + # COMMAND ${GIT_EXECUTABLE} config --global --unset core.eol + # + # COMMAND ${GIT_CORE_AUTOCRLF_CMD} + # COMMAND ${GIT_CORE_EOL_CMD} + # + # DEPENDEES download + # DEPENDERS configure + # ALWAYS ON + # ) + + # Write environment to file, is picked up by python script + get_cmake_property(_variableNames VARIABLES) + foreach (_variableName ${_variableNames}) + if (NOT _variableName MATCHES "lines") + set(OUT_FILE "${OUT_FILE}${_variableName}=\"${${_variableName}}\"\n") + endif() + endforeach() + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/buildenv.txt ${OUT_FILE}) + + set_target_properties(lib_lzma PROPERTIES IMPORTED_LOCATION ${LIBLZMA_PATH}) +endif() diff --git a/external.deprecated/libxz-cmake/scripts/building_env.py b/external.deprecated/libxz-cmake/scripts/building_env.py new file mode 100644 index 0000000000..781d9f7aa2 --- /dev/null +++ b/external.deprecated/libxz-cmake/scripts/building_env.py @@ -0,0 +1,73 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Inspired by The ViaDuck Project for building OpenSSL + +# creates a building environment for berkeleydb +# - working directory +# - on windows: uses msys' bash for command execution (berkeleydb's scripts need an UNIX-like environment with perl) + +from subprocess import PIPE, Popen +from sys import argv, exit +import os, re + +env = os.environ +l = [] + +os_s = argv[1] # operating system +offset = 2 # 0: this script's path, 1: operating system + +if os_s == "WIN32": + offset = 4 # 2: MSYS_BASH_PATH, 3: CMAKE_MAKE_PROGRAM + + # + bash = argv[2] + msys_path = os.path.dirname(bash) + mingw_path = os.path.dirname(argv[3]) + + # append ; to PATH if needed + if not env['PATH'].endswith(";"): + env['PATH'] += ";" + + # include path of msys binaries (perl, cd etc.) and building tools (gcc, ld etc.) + env['PATH'] = ";".join([msys_path, mingw_path])+";"+env['PATH'] + env['MAKEFLAGS'] = '' # otherwise: internal error: invalid --jobserver-fds string `gmake_semaphore_1824' + + +binary_berkeleydb_dir_source = argv[offset]+"/" # downloaded berkeleydb source dir +l.extend(argv[offset+1:]) # routed commands + +l[0] = '"'+l[0]+'"' + +# ensure target dir exists for mingw cross +target_dir = binary_berkeleydb_dir_source+"/../../../usr/local/bin" +if not os.path.exists(target_dir): + os.makedirs(target_dir) + +# read environment from file if cross-compiling +if os_s == "LINUX_CROSS_ANDROID": + expr = re.compile('^(.*?)="(.*?)"', re.MULTILINE | re.DOTALL) + f = open(binary_berkeleydb_dir_source+"../../../buildenv.txt", "r") + content = f.read() + f.close() + + for k, v in expr.findall(content): + # print('k: ' + k + ', v: ' + v) + if "\n" in k.strip(): + print('Skipping multiline key') + elif k != "PATH": + env[k] = v.replace('"', '') + else: + env[k] = v.replace('"', '')+":"+env[k] + +proc = None +if os_s == "WIN32": + # we must emulate a UNIX environment to build berkeleydb using mingw + proc = Popen(bash, env=env, cwd=binary_berkeleydb_dir_source, stdin=PIPE, universal_newlines=True) + proc.communicate(input=" ".join(l)+" || exit $?") +else: + proc = Popen(" ".join(l)+" || exit $?", shell=True, env=env, cwd=binary_berkeleydb_dir_source) + proc.communicate() + +exit(proc.returncode) diff --git a/external.deprecated/tor-cmake/CMakeLists.txt b/external.deprecated/tor-cmake/CMakeLists.txt new file mode 100644 index 0000000000..9b8ea7d746 --- /dev/null +++ b/external.deprecated/tor-cmake/CMakeLists.txt @@ -0,0 +1,51 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Inspired by The ViaDuck Project for building OpenSSL + +cmake_minimum_required(VERSION 3.2) +project(tor-cmake) + +set(TOR_ARCHIVE_LOCATION OFF CACHE STRING "Location of Tor archive") +set(TOR_BUILD_VERSION OFF CACHE STRING "Tor version to build") +set(CROSS_ANDROID OFF CACHE BOOL "Cross-compiling for Android?") +set(CROSS OFF CACHE BOOL "Cross-compiling?") +set(CROSS_TARGET OFF CACHE STRING "Cross-compilation target") + +# Allow including our modules +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") + +# Mimic system db targets +add_library(libtor INTERFACE) + +# Set up fake targets +add_library(lib_tor STATIC IMPORTED GLOBAL) + +target_link_libraries(libtor INTERFACE lib_tor) + +# Set up prefix +set(TOR_LIBTOR_PREFIX ${CMAKE_CURRENT_BINARY_DIR}) +message(STATUS "TOR_LIBTOR_PREFIX: ${TOR_LIBTOR_PREFIX}") + +set(TOR_LIBTOR_PATH ${TOR_LIBTOR_PREFIX}/usr/local/bin/tor) +message(STATUS "TOR_LIBTOR_PATH ${TOR_LIBTOR_PATH}") + +# Set up Tor target +include(BuildTor) + +# Set import locations +set_target_properties(lib_tor PROPERTIES IMPORTED_LOCATION ${TOR_LIBTOR_PATH}) + +# Set include locations +target_include_directories(libtor BEFORE INTERFACE ${TOR_LIBTOR_PREFIX}/usr/local/include) + +#set(TOR_INCLUDE_PATH +# ${TOR_LIBTOR_PREFIX}/libtorExternal-prefix/src/libtorExternal/ +# ${TOR_LIBTOR_PREFIX}/libtorExternal-prefix/src/libtorExternal/src/app/main/ +# ${TOR_LIBTOR_PREFIX}/libtorExternal-prefix/src/libtorExternal/src/feature/api/ +# PARENT_SCOPE +# ) + +# Add fake targets to common target +add_dependencies(lib_tor libtorExternal) diff --git a/external.deprecated/tor-cmake/cmake/BuildTor.cmake b/external.deprecated/tor-cmake/cmake/BuildTor.cmake new file mode 100644 index 0000000000..e909addbbb --- /dev/null +++ b/external.deprecated/tor-cmake/cmake/BuildTor.cmake @@ -0,0 +1,264 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Inspired by The ViaDuck Project for building OpenSSL + +include(ProcessorCount) +include(ExternalProject) + +find_package(Git REQUIRED) +find_package(PythonInterp 3 REQUIRED) + +find_program(PATCH_PROGRAM patch) +if (NOT PATCH_PROGRAM) + message(FATAL_ERROR "Cannot find patch utility. This is only required for Android cross-compilation but due to script complexity " + "the requirement is always enforced") +endif() + +ProcessorCount(NUM_JOBS) +set(OS "UNIX") + +if (TOR_ARCHIVE_HASH) + set(TOR_CHECK_HASH URL_HASH SHA256=${TOR_ARCHIVE_HASH}) +endif() + +if (EXISTS ${TOR_LIBTOR_PATH}) + message(STATUS "Not building Tor again. Remove ${TOR_LIBTOR_PATH} for rebuild") +else() + if (WIN32 AND NOT CROSS) + # yep, windows needs special treatment, but neither cygwin nor msys, since they provide an UNIX-like environment + + if (MINGW) + set(OS "WIN32") + message(WARNING "Building on windows is experimental") + + find_program(MSYS_BASH "bash.exe" PATHS "C:/Msys/" "C:/MinGW/msys/" PATH_SUFFIXES "/1.0/bin/" "/bin/" + DOC "Path to MSYS installation") + if (NOT MSYS_BASH) + message(FATAL_ERROR "Specify MSYS installation path") + endif(NOT MSYS_BASH) + + set(MINGW_MAKE ${CMAKE_MAKE_PROGRAM}) + message(WARNING "Assuming your make program is a sibling of your compiler (resides in same directory)") + elseif(NOT (CYGWIN OR MSYS)) + message(FATAL_ERROR "Unsupported compiler infrastructure") + endif(MINGW) + + set(MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) + elseif(NOT UNIX) + message(FATAL_ERROR "Unsupported platform") + else() + # we can only use GNU make, no exotic things like Ninja (MSYS always uses GNU make) + find_program(MAKE_PROGRAM make) + endif() + + # save old git values for core.autocrlf and core.eol + #execute_process(COMMAND ${GIT_EXECUTABLE} config --global --get core.autocrlf OUTPUT_VARIABLE GIT_CORE_AUTOCRLF OUTPUT_STRIP_TRAILING_WHITESPACE) + #execute_process(COMMAND ${GIT_EXECUTABLE} config --global --get core.eol OUTPUT_VARIABLE GIT_CORE_EOL OUTPUT_STRIP_TRAILING_WHITESPACE) + + # On windows we need to replace path to perl since CreateProcess(..) cannot handle unix paths + if (WIN32 AND NOT CROSS) + set(PERL_PATH_FIX_INSTALL sed -i -- 's/\\/usr\\/bin\\/perl/perl/g' Makefile) + else() + set(PERL_PATH_FIX_INSTALL true) + endif() + + # CROSS and CROSS_ANDROID cannot both be set (because of internal reasons) + if (CROSS AND CROSS_ANDROID) + # if user set CROSS_ANDROID and CROSS we assume he wants CROSS_ANDROID, so set CROSS to OFF + set(CROSS OFF) + endif() + + if (CROSS_ANDROID) + set(OS "LINUX_CROSS_ANDROID") + endif() + + # python helper script for corrent building environment + set(BUILD_ENV_TOOL ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/building_env.py ${OS} ${MSYS_BASH} ${MINGW_MAKE}) + + # Copy headers to library install location during build, so Tor could find them +# file(COPY ${libevent_SOURCE_DIR}/include DESTINATION ${TOR_LIBTOR_PREFIX}/../libevent/) +# file(COPY ${libzstd_SOURCE_DIR}/../../../lib/zstd.h DESTINATION ${TOR_LIBTOR_PREFIX}/../libzstd/build/cmake/include/) + + # cross-compiling + if (CROSS) + set(COMMAND_CONFIGURE ./configure ${CONFIGURE_TOR_PARAMS} --cross-compile-prefix=${CROSS_PREFIX} ${CROSS_TARGET} --prefix=/usr/local/) + set(COMMAND_TEST "true") + elseif(CROSS_ANDROID) + + set(CFLAGS ${CMAKE_C_FLAGS}) + set(CXXFLAGS ${CMAKE_CXX_FLAGS}) + + # Silence warnings about unused arguments (Clang specific) + set(CFLAGS "${CMAKE_C_FLAGS} -Qunused-arguments -fuse-ld=gold") + set(CXXFLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments -fuse-ld=gold") + + # Required environment configuration is already set (by e.g. ndk) so no need to fiddle around with all the options ... + if (NOT ANDROID) + message(FATAL_ERROR "Use NDK cmake toolchain or cmake android autoconfig") + endif() + + # additional configure script parameters + set(CONFIGURE_TOR_PARAMS + ZSTD_CFLAGS='-I${TOR_LIBTOR_PREFIX}/../libzstd/build/cmake/include' + ZSTD_LIBS='-L${TOR_LIBTOR_PREFIX}/../libzstd/build/cmake/lib -lzstd' + LZMA_CFLAGS='-I${TOR_LIBTOR_PREFIX}/../usr/local/include' + LZMA_LIBS='-L${TOR_LIBTOR_PREFIX}/../usr/local/lib -llzma' + --enable-android + --enable-lzma + --enable-pic + --enable-restart-debugging + --with-libevent-dir=${TOR_LIBTOR_PREFIX}/../usr/local + --with-openssl-dir=${TOR_LIBTOR_PREFIX}/../usr/local + --with-zlib-dir=${TOR_LIBTOR_PREFIX}/sysroot/usr + --enable-zstd + --enable-static-tor + --disable-module-dirauth + --disable-tool-name-check + --disable-asciidoc + ) + + if (ARMEABI_V7A) + set(TOR_PLATFORM "--host armv7") + #set(CONFIGURE_TOR_PARAMS ${CONFIGURE_TOR_PARAMS} "-march=armv7-a") + else() + if (CMAKE_ANDROID_ARCH_ABI MATCHES "arm64-v8a") + set(TOR_PLATFORM "--host=aarch64-linux-android") + else() + set(TOR_PLATFORM "--host=${CMAKE_ANDROID_ARCH_ABI}") + endif() + endif() + + set(ANDROID_STRING "android") + if (CMAKE_ANDROID_ARCH_ABI MATCHES "64") + set(ANDROID_STRING "${ANDROID_STRING}64") + endif() + + # copy over both sysroots to a common sysroot (workaround OpenSSL failing without one single sysroot) + string(REPLACE "-clang" "" ANDROID_TOOLCHAIN_NAME ${ANDROID_TOOLCHAIN_NAME}) + file(COPY ${ANDROID_TOOLCHAIN_ROOT}/sysroot/usr/lib/${ANDROID_TOOLCHAIN_NAME}/${ANDROID_PLATFORM_LEVEL}/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/sysroot/usr/lib/) + file(COPY ${ANDROID_TOOLCHAIN_ROOT}/sysroot/usr/lib/${ANDROID_TOOLCHAIN_NAME}/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/sysroot/usr/lib/ PATTERN *.*) + file(COPY ${CMAKE_SYSROOT}/usr/include DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/sysroot/usr/) + + # ... but we have to convert all the CMake options to environment variables! + set(CROSS_SYSROOT ${CMAKE_CURRENT_BINARY_DIR}/sysroot/) + set(AS ${CMAKE_ASM_COMPILER}) + set(AR ${CMAKE_AR}) + set(LD ${CMAKE_LINKER}) + set(LDFLAGS ${CMAKE_MODULE_LINKER_FLAGS}) + + # have to surround variables with double quotes, otherwise they will be merged together without any separator + set(CC "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN} ${CFLAGS} -target ${CMAKE_C_COMPILER_TARGET}") + set(CXX "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN} ${CFLAGS} -target ${CMAKE_CXX_COMPILER_TARGET}") + + message(STATUS "AS: ${AS}") + message(STATUS "AR: ${AR}") + message(STATUS "LD: ${LD}") + message(STATUS "LDFLAGS: ${LDFLAGS}") + message(STATUS "CC: ${CC}") + message(STATUS "CXX: ${CXX}") + message(STATUS "ANDROID_TOOLCHAIN_ROOT: ${ANDROID_TOOLCHAIN_ROOT}") + + set(COMMAND_AUTOGEN ./autogen.sh) + set(COMMAND_CONFIGURE ./configure --prefix=/usr/local/ ${CONFIGURE_TOR_PARAMS} ${TOR_PLATFORM}) + set(COMMAND_TEST "true") + else() # detect host system automatically + + # additional configure script parameters +# ZSTD_CFLAGS='-I${TOR_LIBTOR_PREFIX}/../libzstd/build/cmake/include' +# ZSTD_LIBS='-L${TOR_LIBTOR_PREFIX}/../libzstd/build/cmake/lib -lzstd' +# LZMA_CFLAGS='-I${TOR_LIBTOR_PREFIX}/../usr/local/include' +# LZMA_LIBS='-L${TOR_LIBTOR_PREFIX}/../usr/local/lib -llzma' + set(CONFIGURE_TOR_PARAMS + CFLAGS='-fuse-ld=gold' + --enable-lzma + --enable-pic + --enable-restart-debugging + --with-libevent-dir=${TOR_LIBTOR_PREFIX}/../usr/local + --with-openssl-dir=${TOR_LIBTOR_PREFIX}/../usr/local + --with-zlib-dir=/usr/lib/x86_64-linux-gnu + --enable-zstd + --enable-static-tor + --disable-module-dirauth + --disable-tool-name-check + --disable-asciidoc + ) + + set(COMMAND_AUTOGEN ./autogen.sh) + set(COMMAND_CONFIGURE ./configure --prefix=/usr/local/ ${CONFIGURE_TOR_PARAMS} && "echo '#define HAVE_ZSTD_ESTIMATECSTREAMSIZE 1' >> ${TOR_LIBTOR_PREFIX}/libtorExternal-prefix/src/libtorExternal/orconfig.h") + endif() + + # Add libtor target + ExternalProject_Add(libtorExternal + URL ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz + ${TOR_CHECK_HASH} + UPDATE_COMMAND "" + COMMAND ${COMMAND_AUTOGEN} +# DEPENDS ssl_lib zstd event + + PATCH_COMMAND ${PATCH_PROGRAM} -p1 --forward -r - < ${CMAKE_CURRENT_SOURCE_DIR}/patches/Tor-001-disable-deprecated-android-log.patch || true + COMMAND ${PATCH_PROGRAM} -p1 --forward -r - < ${CMAKE_CURRENT_SOURCE_DIR}/patches/Tor-002-fix-openssl-checks.patch || true + + CONFIGURE_COMMAND ${BUILD_ENV_TOOL} ${COMMAND_CONFIGURE} + BUILD_COMMAND ${BUILD_ENV_TOOL} /${CONFIGURE_DIR} ${MAKE_PROGRAM} -j ${NUM_JOBS} + BUILD_BYPRODUCTS ${TOR_LIBTOR_PATH} + INSTALL_COMMAND ${BUILD_ENV_TOOL} /${CONFIGURE_DIR} ${PERL_PATH_FIX_INSTALL} + COMMAND ${BUILD_ENV_TOOL} /${CONFIGURE_DIR} ${MAKE_PROGRAM} DESTDIR=${TOR_LIBTOR_PREFIX}/.. install +# COMMAND ${BUILD_ENV_TOOL} /${CONFIGURE_DIR} ${MAKE_PROGRAM} DESTDIR=${CMAKE_CURRENT_BINARY_DIR} install + COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} ${CMAKE_BINARY_DIR} # force CMake-reload + + LOG_CONFIGURE 1 + LOG_BUILD 1 + LOG_INSTALL 1 + ) +# ExternalProject_Add_StepDependencies(libtorExternal install openssl libeventExternal libzExternal) + + # set git config values to libtor requirements (no impact on linux though) + # ExternalProject_Add_Step(libtor setGitConfig + # COMMAND ${GIT_EXECUTABLE} config --global core.autocrlf false + # COMMAND ${GIT_EXECUTABLE} config --global core.eol lf + # DEPENDEES + # DEPENDERS download + # ALWAYS ON + # ) + + # Set, don't abort if it fails (due to variables being empty). To realize this we must only call git if the configs + # are set globally, otherwise do a no-op command ("echo 1", since "true" is not available everywhere) + # if (GIT_CORE_AUTOCRLF) + # set (GIT_CORE_AUTOCRLF_CMD ${GIT_EXECUTABLE} config --global core.autocrlf ${GIT_CORE_AUTOCRLF}) + # else() + # set (GIT_CORE_AUTOCRLF_CMD echo) + # endif() + # if (GIT_CORE_EOL) + # set (GIT_CORE_EOL_CMD ${GIT_EXECUTABLE} config --global core.eol ${GIT_CORE_EOL}) + # else() + # set (GIT_CORE_EOL_CMD echo) + # endif() + ## + + # Set git config values to previous values + # ExternalProject_Add_Step(libtor restoreGitConfig + # # Unset first (is required, since old value could be omitted, which wouldn't take any effect in "set" + # COMMAND ${GIT_EXECUTABLE} config --global --unset core.autocrlf + # COMMAND ${GIT_EXECUTABLE} config --global --unset core.eol + # + # COMMAND ${GIT_CORE_AUTOCRLF_CMD} + # COMMAND ${GIT_CORE_EOL_CMD} + # + # DEPENDEES download + # DEPENDERS configure + # ALWAYS ON + # ) + + # Write environment to file, is picked up by python script + get_cmake_property(_variableNames VARIABLES) + foreach (_variableName ${_variableNames}) + if (NOT _variableName MATCHES "lines") + set(OUT_FILE "${OUT_FILE}${_variableName}=\"${${_variableName}}\"\n") + endif() + endforeach() + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/buildenv.txt ${OUT_FILE}) + + set_target_properties(lib_tor PROPERTIES IMPORTED_LOCATION ${TOR_LIBTOR_PATH}) +endif() diff --git a/external.deprecated/tor-cmake/patches/Tor-001-disable-deprecated-android-log.patch b/external.deprecated/tor-cmake/patches/Tor-001-disable-deprecated-android-log.patch new file mode 100644 index 0000000000..c1f310e953 --- /dev/null +++ b/external.deprecated/tor-cmake/patches/Tor-001-disable-deprecated-android-log.patch @@ -0,0 +1,14 @@ +diff --git a/configure.ac b/configure.ac +--- a/configure.ac ++++ b/configure.ac +@@ -243,8 +243,8 @@ + AC_DEFINE([USE_ANDROID], [1], [Compile with Android specific features enabled]) + + dnl Check if the Android log library is available. +- AC_CHECK_HEADERS([android/log.h]) +- AC_SEARCH_LIBS(__android_log_write, [log]) ++ #AC_CHECK_HEADERS([android/log.h]) ++ #AC_SEARCH_LIBS(__android_log_write, [log]) + + fi + diff --git a/external.deprecated/tor-cmake/patches/Tor-002-fix-openssl-checks.patch b/external.deprecated/tor-cmake/patches/Tor-002-fix-openssl-checks.patch new file mode 100644 index 0000000000..9968cf08e9 --- /dev/null +++ b/external.deprecated/tor-cmake/patches/Tor-002-fix-openssl-checks.patch @@ -0,0 +1,12 @@ +diff --git a/tor/configure.ac b/tor/configure.ac +--- a/configure.ac ++++ b/configure.ac +@@ -919,7 +919,7 @@ + dnl We look for SSL_cipher_get_id() because it is present in + dnl OpenSSL >=1.0.1, because it is not deprecated, and because Tor + dnl depends on it. +- [if (getenv("THIS_SHOULDNT_BE_SET_X201803")) SSL_CIPHER_get_id((void *)0);], [], ++ [;], [], + [/usr/local/opt/openssl /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /opt/openssl]) + + dnl XXXX check for OPENSSL_VERSION_NUMBER == SSLeay() diff --git a/external.deprecated/tor-cmake/scripts/building_env.py b/external.deprecated/tor-cmake/scripts/building_env.py new file mode 100644 index 0000000000..781d9f7aa2 --- /dev/null +++ b/external.deprecated/tor-cmake/scripts/building_env.py @@ -0,0 +1,73 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Inspired by The ViaDuck Project for building OpenSSL + +# creates a building environment for berkeleydb +# - working directory +# - on windows: uses msys' bash for command execution (berkeleydb's scripts need an UNIX-like environment with perl) + +from subprocess import PIPE, Popen +from sys import argv, exit +import os, re + +env = os.environ +l = [] + +os_s = argv[1] # operating system +offset = 2 # 0: this script's path, 1: operating system + +if os_s == "WIN32": + offset = 4 # 2: MSYS_BASH_PATH, 3: CMAKE_MAKE_PROGRAM + + # + bash = argv[2] + msys_path = os.path.dirname(bash) + mingw_path = os.path.dirname(argv[3]) + + # append ; to PATH if needed + if not env['PATH'].endswith(";"): + env['PATH'] += ";" + + # include path of msys binaries (perl, cd etc.) and building tools (gcc, ld etc.) + env['PATH'] = ";".join([msys_path, mingw_path])+";"+env['PATH'] + env['MAKEFLAGS'] = '' # otherwise: internal error: invalid --jobserver-fds string `gmake_semaphore_1824' + + +binary_berkeleydb_dir_source = argv[offset]+"/" # downloaded berkeleydb source dir +l.extend(argv[offset+1:]) # routed commands + +l[0] = '"'+l[0]+'"' + +# ensure target dir exists for mingw cross +target_dir = binary_berkeleydb_dir_source+"/../../../usr/local/bin" +if not os.path.exists(target_dir): + os.makedirs(target_dir) + +# read environment from file if cross-compiling +if os_s == "LINUX_CROSS_ANDROID": + expr = re.compile('^(.*?)="(.*?)"', re.MULTILINE | re.DOTALL) + f = open(binary_berkeleydb_dir_source+"../../../buildenv.txt", "r") + content = f.read() + f.close() + + for k, v in expr.findall(content): + # print('k: ' + k + ', v: ' + v) + if "\n" in k.strip(): + print('Skipping multiline key') + elif k != "PATH": + env[k] = v.replace('"', '') + else: + env[k] = v.replace('"', '')+":"+env[k] + +proc = None +if os_s == "WIN32": + # we must emulate a UNIX environment to build berkeleydb using mingw + proc = Popen(bash, env=env, cwd=binary_berkeleydb_dir_source, stdin=PIPE, universal_newlines=True) + proc.communicate(input=" ".join(l)+" || exit $?") +else: + proc = Popen(" ".join(l)+" || exit $?", shell=True, env=env, cwd=binary_berkeleydb_dir_source) + proc.communicate() + +exit(proc.returncode) diff --git a/m4/ax_cxx_compile_stdcxx.m4 b/m4/ax_cxx_compile_stdcxx.m4 new file mode 100644 index 0000000000..5032bba809 --- /dev/null +++ b/m4/ax_cxx_compile_stdcxx.m4 @@ -0,0 +1,982 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the specified +# version of the C++ standard. If necessary, add switches to CXX and +# CXXCPP to enable support. VERSION may be '11' (for the C++11 standard) +# or '14' (for the C++14 standard). +# +# The second argument, if specified, indicates whether you insist on an +# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. +# -std=c++11). If neither is specified, you get whatever works, with +# preference for an extended mode. +# +# The third argument, if specified 'mandatory' or if left unspecified, +# indicates that baseline support for the specified C++ standard is +# required and that the macro should error out if no mode with that +# support is found. If specified 'optional', then configuration proceeds +# regardless, after defining HAVE_CXX${VERSION} if and only if a +# supporting mode is found. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik +# Copyright (c) 2012 Zack Weinberg +# Copyright (c) 2013 Roy Stogner +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov +# Copyright (c) 2015 Paul Norman +# Copyright (c) 2015 Moritz Klammler +# Copyright (c) 2016 Krzesimir Nowak +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 7 + +dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro +dnl (serial version number 13). + +AX_REQUIRE_DEFINED([AC_MSG_WARN]) +AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl + m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"], + [$1], [14], [ax_cxx_compile_alternatives="14 1y"], + [$1], [17], [ax_cxx_compile_alternatives="17 1z"], + [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl + m4_if([$2], [], [], + [$2], [ext], [], + [$2], [noext], [], + [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl + m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true], + [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], + [$3], [optional], [ax_cxx_compile_cxx$1_required=false], + [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) + AC_LANG_PUSH([C++])dnl + ac_success=no + AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, + ax_cv_cxx_compile_cxx$1, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [ax_cv_cxx_compile_cxx$1=yes], + [ax_cv_cxx_compile_cxx$1=no])]) + if test x$ax_cv_cxx_compile_cxx$1 = xyes; then + ac_success=yes + fi + + m4_if([$2], [noext], [], [dnl + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + switch="-std=gnu++${alternative}" + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + fi]) + + m4_if([$2], [ext], [], [dnl + if test x$ac_success = xno; then + dnl HP's aCC needs +std=c++11 according to: + dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf + dnl Cray's crayCC needs "-h std=c++11" + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi]) + AC_LANG_POP([C++]) + if test x$ax_cxx_compile_cxx$1_required = xtrue; then + if test x$ac_success = xno; then + AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.]) + fi + fi + if test x$ac_success = xno; then + HAVE_CXX$1=0 + AC_MSG_NOTICE([No compiler with C++$1 support was found]) + else + HAVE_CXX$1=1 + AC_DEFINE(HAVE_CXX$1,1, + [define if the compiler supports basic C++$1 syntax]) + fi + AC_SUBST(HAVE_CXX$1) + m4_if([$1], [17], [AC_MSG_WARN([C++17 is not yet standardized, so the checks may change in incompatible ways anytime])]) +]) + + +dnl Test body for checking C++11 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 +) + + +dnl Test body for checking C++14 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 +) + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 +) + +dnl Tests for new features in C++11 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[ + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + +]]) + + +dnl Tests for new features in C++14 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[ + +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201402L + +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 +{ + + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + + } + + namespace test_binary_literals + { + + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + + } + + namespace test_generalized_constexpr + { + + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + + } + + namespace test_lambda_init_capture + { + + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + + } + + namespace test_digit_separators + { + + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + + } + + namespace test_return_type_deduction + { + + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } + + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L + +]]) + + +dnl Tests for new features in C++17 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[ + +// If the compiler admits that it is not ready for C++17, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus <= 201402L + +#error "This is not a C++17 compiler" + +#else + +#if defined(__clang__) + #define REALLY_CLANG +#else + #if defined(__GNUC__) + #define REALLY_GCC + #endif +#endif + +#include +#include +#include + +namespace cxx17 +{ + +#if !defined(REALLY_CLANG) + namespace test_constexpr_lambdas + { + + // TODO: test it with clang++ from git + + constexpr int foo = [](){return 42;}(); + + } +#endif // !defined(REALLY_CLANG) + + namespace test::nested_namespace::definitions + { + + } + + namespace test_fold_expression + { + + template + int multiply(Args... args) + { + return (args * ... * 1); + } + + template + bool all(Args... args) + { + return (args && ...); + } + + } + + namespace test_extended_static_assert + { + + static_assert (true); + + } + + namespace test_auto_brace_init_list + { + + auto foo = {5}; + auto bar {5}; + + static_assert(std::is_same, decltype(foo)>::value); + static_assert(std::is_same::value); + } + + namespace test_typename_in_template_template_parameter + { + + template typename X> struct D; + + } + + namespace test_fallthrough_nodiscard_maybe_unused_attributes + { + + int f1() + { + return 42; + } + + [[nodiscard]] int f2() + { + [[maybe_unused]] auto unused = f1(); + + switch (f1()) + { + case 17: + f1(); + [[fallthrough]]; + case 42: + f1(); + } + return f1(); + } + + } + + namespace test_extended_aggregate_initialization + { + + struct base1 + { + int b1, b2 = 42; + }; + + struct base2 + { + base2() { + b3 = 42; + } + int b3; + }; + + struct derived : base1, base2 + { + int d; + }; + + derived d1 {{1, 2}, {}, 4}; // full initialization + derived d2 {{}, {}, 4}; // value-initialized bases + + } + + namespace test_general_range_based_for_loop + { + + struct iter + { + int i; + + int& operator* () + { + return i; + } + + const int& operator* () const + { + return i; + } + + iter& operator++() + { + ++i; + return *this; + } + }; + + struct sentinel + { + int i; + }; + + bool operator== (const iter& i, const sentinel& s) + { + return i.i == s.i; + } + + bool operator!= (const iter& i, const sentinel& s) + { + return !(i == s); + } + + struct range + { + iter begin() const + { + return {0}; + } + + sentinel end() const + { + return {5}; + } + }; + + void f() + { + range r {}; + + for (auto i : r) + { + [[maybe_unused]] auto v = i; + } + } + + } + + namespace test_lambda_capture_asterisk_this_by_value + { + + struct t + { + int i; + int foo() + { + return [*this]() + { + return i; + }(); + } + }; + + } + + namespace test_enum_class_construction + { + + enum class byte : unsigned char + {}; + + byte foo {42}; + + } + + namespace test_constexpr_if + { + + template + int f () + { + if constexpr(cond) + { + return 13; + } + else + { + return 42; + } + } + + } + + namespace test_selection_statement_with_initializer + { + + int f() + { + return 13; + } + + int f2() + { + if (auto i = f(); i > 0) + { + return 3; + } + + switch (auto i = f(); i + 4) + { + case 17: + return 2; + + default: + return 1; + } + } + + } + +#if !defined(REALLY_CLANG) + namespace test_template_argument_deduction_for_class_templates + { + + // TODO: test it with clang++ from git + + template + struct pair + { + pair (T1 p1, T2 p2) + : m1 {p1}, + m2 {p2} + {} + + T1 m1; + T2 m2; + }; + + void f() + { + [[maybe_unused]] auto p = pair{13, 42u}; + } + + } +#endif // !defined(REALLY_CLANG) + + namespace test_non_type_auto_template_parameters + { + + template + struct B + {}; + + B<5> b1; + B<'a'> b2; + + } + +#if !defined(REALLY_CLANG) + namespace test_structured_bindings + { + + // TODO: test it with clang++ from git + + int arr[2] = { 1, 2 }; + std::pair pr = { 1, 2 }; + + auto f1() -> int(&)[2] + { + return arr; + } + + auto f2() -> std::pair& + { + return pr; + } + + struct S + { + int x1 : 2; + volatile double y1; + }; + + S f3() + { + return {}; + } + + auto [ x1, y1 ] = f1(); + auto& [ xr1, yr1 ] = f1(); + auto [ x2, y2 ] = f2(); + auto& [ xr2, yr2 ] = f2(); + const auto [ x3, y3 ] = f3(); + + } +#endif // !defined(REALLY_CLANG) + +#if !defined(REALLY_CLANG) + namespace test_exception_spec_type_system + { + + // TODO: test it with clang++ from git + + struct Good {}; + struct Bad {}; + + void g1() noexcept; + void g2(); + + template + Bad + f(T*, T*); + + template + Good + f(T1*, T2*); + + static_assert (std::is_same_v); + + } +#endif // !defined(REALLY_CLANG) + + namespace test_inline_variables + { + + template void f(T) + {} + + template inline T g(T) + { + return T{}; + } + + template<> inline void f<>(int) + {} + + template<> int g<>(int) + { + return 5; + } + + } + +} // namespace cxx17 + +#endif // __cplusplus <= 201402L + +]]) diff --git a/m4/ax_subdirs_configure.m4 b/m4/ax_subdirs_configure.m4 new file mode 100644 index 0000000000..55e16c6b8f --- /dev/null +++ b/m4/ax_subdirs_configure.m4 @@ -0,0 +1,337 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_subdirs_configure.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_SUBDIRS_CONFIGURE( [subdirs], [mandatory arguments], [possibly merged arguments], [replacement arguments], [forbidden arguments]) +# +# DESCRIPTION +# +# AX_SUBDIRS_CONFIGURE attempts to be the equivalent of AC_CONFIG_SUBDIRS +# with customizable options for configure scripts. +# +# Run the configure script for each directory from the comma-separated m4 +# list 'subdirs'. This macro can be used multiple times. All arguments of +# this macro must be comma-separated lists. +# +# All command line arguments from the parent configure script will be +# given to the subdirectory configure script after the following +# modifications (in that order): +# +# 1. The arguments from the 'mandatory arguments' list shall always be +# appended to the argument list. +# +# 2. The arguments from the 'possibly merged arguments' list shall be +# added if not present in the arguments of the parent configure script or +# merged with the existing argument otherwise. +# +# 3. The arguments from the 'replacement arguments' list shall be added if +# not present in the arguments of the parent configure script or replace +# the existing argument otherwise. +# +# 4. The arguments from the 'forbidden arguments' list shall always be +# removed from the argument list. +# +# The lists 'mandatory arguments' and 'forbidden arguments' can hold any +# kind of argument. The 'possibly merged arguments' and 'replacement +# arguments' expect their arguments to be of the form --option-name=value. +# +# This macro aims to remain as close as possible to the AC_CONFIG_SUBDIRS +# macro. It corrects the paths for '--cache-file' and '--srcdir' and adds +# '--disable-option-checking' and '--silent' if necessary. +# +# This macro also sets the output variable subdirs_extra to the list of +# directories recorded with AX_SUBDIRS_CONFIGURE. This variable can be +# used in Makefile rules or substituted in configured files. +# +# This macro shall do nothing more than managing the arguments of the +# configure script. Just like when using AC_CONFIG_SUBDIRS, it is up to +# the user to check any requirements or define and substitute any required +# variable for the remainder of the project. +# +# Configure scripts recorded with AX_SUBDIRS_CONFIGURE may be executed +# before configure scripts recorded with AC_CONFIG_SUBDIRS. +# +# Without additional arguments, the behaviour of AX_SUBDIRS_CONFIGURE +# should be identical to the behaviour of AC_CONFIG_SUBDIRS, apart from +# the contents of the variables subdirs and subdirs_extra (except that +# AX_SUBDIRS_CONFIGURE expects a comma-separated m4 list): +# +# AC_CONFIG_SUBDIRS([something]) +# AX_SUBDIRS_CONFIGURE([something]) +# +# This macro may be called multiple times. +# +# Usage example: +# +# Let us assume our project has 4 dependencies, namely A, B, C and D. Here +# are some characteristics of our project and its dependencies: +# +# - A does not require any special option. +# +# - we want to build B with an optional feature which can be enabled with +# its configure script's option '--enable-special-feature'. +# +# - B's configure script is strange and has an option '--with-B=build'. +# After close inspection of its documentation, we don't want B to receive +# this option. +# +# - C and D both need B. +# +# - Just like our project, C and D can build B themselves with the option +# '--with-B=build'. +# +# - We want C and D to use the B we build instead of building it +# themselves. +# +# Our top-level configure script will be called as follows: +# +# $ --with-A=build --with-B=build --with-C=build \ +# --with-D=build --some-option +# +# Thus we have to make sure that: +# +# - neither B, C or D receive the option '--with-B=build' +# +# - C and D know where to find the headers and libraries of B. +# +# Under those conditions, we can use the AC_CONFIG_SUBDIRS macro for A, +# but need to use AX_SUBDIRS_CONFIGURE for B, C and D: +# +# - B must receive '--enable-special-feature' but cannot receive +# '--with-B=build' +# +# - C and D cannot receive '--with-B=build' (or else it would be built +# thrice) and need to be told where to find B (since we are building it, +# it would probably not be available in standard paths). +# +# Here is a configure.ac snippet that solves our problem: +# +# AC_CONFIG_SUBDIRS([dependencies/A]) +# AX_SUBDIRS_CONFIGURE( +# [dependencies/B], [--enable-special-feature], [], [], +# [--with-B=build]) +# AX_SUBDIRS_CONFIGURE( +# [[dependencies/C],[dependencies/D]], +# [], +# [[CPPFLAGS=-I${ac_top_srcdir}/dependencies/B -I${ac_top_builddir}/dependencies/B], +# [LDFLAGS=-L${ac_abs_top_builddir}/dependencies/B/.libs]], +# [--with-B=system], +# []) +# +# If using automake, the following can be added to the Makefile.am (we use +# both $(subdirs) and $(subdirs_extra) since our example above used both +# AC_CONFIG_SUBDIRS and AX_SUBDIRS_CONFIGURE): +# +# SUBDIRS = $(subdirs) $(subdirs_extra) +# +# LICENSE +# +# Copyright (c) 2017 Harenome Ranaivoarivony-Razanajato +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# Under Section 7 of GPL version 3, you are granted additional permissions +# described in the Autoconf Configure Script Exception, version 3.0, as +# published by the Free Software Foundation. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . + +#serial 3 + +AC_DEFUN([AX_SUBDIRS_CONFIGURE], +[ + dnl Calls to AC_CONFIG_SUBDIRS perform preliminary steps and build a list + dnl '$subdirs' which is used later by _AC_OUTPUT_SUBDIRS (used by AC_OUTPUT) + dnl to actually run the configure scripts. + dnl This macro performs similiar preliminary steps but uses + dnl AC_CONFIG_COMMANDS_PRE to delay the final tasks instead of building an + dnl intermediary list and relying on another macro. + dnl + dnl Since each configure script can get different options, a special variable + dnl named 'ax_sub_configure_args_' is constructed for each + dnl subdirectory. + + # Various preliminary checks. + AC_REQUIRE([AC_DISABLE_OPTION_CHECKING]) + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) + AS_LITERAL_IF([$1], [], + [AC_DIAGNOSE([syntax], [$0: you should use literals])]) + + m4_foreach(subdir_path, [$1], + [ + ax_dir="subdir_path" + + dnl Build the argument list in a similiar fashion to AC_CONFIG_SUBDIRS. + dnl A few arguments found in the final call to the configure script are not + dnl added here because they rely on variables that may not yet be available + dnl (see below the part that is similiar to _AC_OUTPUT_SUBDIRS). + # Do not complain, so a configure script can configure whichever parts of a + # large source tree are present. + if test -d "$srcdir/$ax_dir"; then + _AC_SRCDIRS(["$ax_dir"]) + # Remove --cache-file, --srcdir, and --disable-option-checking arguments + # so they do not pile up. + ax_args= + ax_prev= + eval "set x $ac_configure_args" + shift + for ax_arg; do + if test -n "$ax_prev"; then + ax_prev= + continue + fi + case $ax_arg in + -cache-file | --cache-file | --cache-fil | --cache-fi | --cache-f \ + | --cache- | --cache | --cach | --cac | --ca | --c) + ax_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ + | --c=*) + ;; + --config-cache | -C) + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ax_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + ;; + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ax_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* \ + | --p=*) + ;; + --disable-option-checking) + ;; + *) case $ax_arg in + *\'*) ax_arg=$(AS_ECHO(["$ax_arg"]) | sed "s/'/'\\\\\\\\''/g");; + esac + AS_VAR_APPEND([ax_args], [" '$ax_arg'"]) ;; + esac + done + # Always prepend --disable-option-checking to silence warnings, since + # different subdirs can have different --enable and --with options. + ax_args="--disable-option-checking $ax_args" + # Options that must be added as they are provided. + m4_ifnblank([$2], [m4_foreach(opt, [$2], [AS_VAR_APPEND(ax_args, " 'opt'") + ])]) + # New options that may need to be merged with existing options. + m4_ifnblank([$3], [m4_foreach(opt, [$3], + [ax_candidate="opt" + ax_candidate_flag="${ax_candidate%%=*}" + ax_candidate_content="${ax_candidate#*=}" + if test "x$ax_candidate" != "x" -a "x$ax_candidate_flag" != "x"; then + if echo "$ax_args" | grep -- "${ax_candidate_flag}=" >/dev/null 2>&1; then + [ax_args=$(echo $ax_args | sed "s,\(${ax_candidate_flag}=[^']*\),\1 ${ax_candidate_content},")] + else + AS_VAR_APPEND(ax_args, " 'opt'") + fi + fi + ])]) + # New options that must replace existing options. + m4_ifnblank([$4], [m4_foreach(opt, [$4], + [ax_candidate="opt" + ax_candidate_flag="${ax_candidate%%=*}" + ax_candidate_content="${ax_candidate#*=}" + if test "x$ax_candidate" != "x" -a "x$ax_candidate_flag" != "x"; then + if echo "$ax_args" | grep -- "${ax_candidate_flag}=" >/dev/null 2>&1; then + [ax_args=$(echo $ax_args | sed "s,${ax_candidate_flag}=[^']*,${ax_candidate},")] + else + AS_VAR_APPEND(ax_args, " 'opt'") + fi + fi + ])]) + # Options that must be removed. + m4_ifnblank([$5], [m4_foreach(opt, [$5], [ax_args=$(echo $ax_args | sed "s,'opt',,") + ])]) + AS_VAR_APPEND([ax_args], [" '--srcdir=$ac_srcdir'"]) + + # Add the subdirectory to the list of target subdirectories. + ax_subconfigures="$ax_subconfigures $ax_dir" + # Save the argument list for this subdirectory. + dnl $1 is a path to some subdirectory: m4_bpatsubsts() is used to convert + dnl $1 into a valid shell variable name. + dnl For instance, "ax_sub_configure_args_path/to/subdir" becomes + dnl "ax_sub_configure_args_path_to_subdir". + ax_var=$(printf "$ax_dir" | tr -c "0-9a-zA-Z_" "_") + eval "ax_sub_configure_args_$ax_var=\"$ax_args\"" + eval "ax_sub_configure_$ax_var=\"yes\"" + else + AC_MSG_WARN([could not find source tree for $ax_dir]) + fi + + dnl Add some more arguments to the argument list and then actually run the + dnl configure script. This is mostly what happens in _AC_OUTPUT_SUBDIRS + dnl except it does not iterate over an intermediary list. + AC_CONFIG_COMMANDS_PRE( + dnl This very line can not be quoted! m4_foreach has some work here. + ax_dir="subdir_path" + [ + # Convert the path to the subdirectory into a shell variable name. + ax_var=$(printf "$ax_dir" | tr -c "0-9a-zA-Z_" "_") + ax_configure_ax_var=$(eval "echo \"\$ax_sub_configure_$ax_var\"") + if test "$no_recursion" != "yes" -a "x$ax_configure_ax_var" = "xyes"; then + AC_SUBST([subdirs_extra], ["$subdirs_extra $ax_dir"]) + ax_msg="=== configuring in $ax_dir ($(pwd)/$ax_dir)" + _AS_ECHO_LOG([$ax_msg]) + _AS_ECHO([$ax_msg]) + AS_MKDIR_P(["$ax_dir"]) + _AC_SRCDIRS(["$ax_dir"]) + + ax_popdir=$(pwd) + cd "$ax_dir" + + # Check for guested configure; otherwise get Cygnus style configure. + if test -f "$ac_srcdir/configure.gnu"; then + ax_sub_configure=$ac_srcdir/configure.gnu + elif test -f "$ac_srcdir/configure"; then + ax_sub_configure=$ac_srcdir/configure + elif test -f "$ac_srcdir/configure.in"; then + # This should be Cygnus configure. + ax_sub_configure=$ac_aux_dir/configure + else + AC_MSG_WARN([no configuration information is in $ax_dir]) + ax_sub_configure= + fi + + if test -n "$ax_sub_configure"; then + # Get the configure arguments for the current configure. + eval "ax_sub_configure_args=\"\$ax_sub_configure_args_${ax_var}\"" + + # Always prepend --prefix to ensure using the same prefix + # in subdir configurations. + ax_arg="--prefix=$prefix" + case $ax_arg in + *\'*) ax_arg=$(AS_ECHO(["$ax_arg"]) | sed "s/'/'\\\\\\\\''/g");; + esac + ax_sub_configure_args="'$ax_arg' $ax_sub_configure_args" + if test "$silent" = yes; then + ax_sub_configure_args="--silent $ax_sub_configure_args" + fi + # Make the cache file name correct relative to the subdirectory. + case $cache_file in + [[\\/]]* | ?:[[\\/]]* ) + ax_sub_cache_file=$cache_file ;; + *) # Relative name. + ax_sub_cache_file=$ac_top_build_prefix$cache_file ;; + esac + + AC_MSG_NOTICE([running $SHELL $ax_sub_configure $ax_sub_configure_args --cache-file=$ac_sub_cache_file]) + eval "\$SHELL \"$ax_sub_configure\" $ax_sub_configure_args --cache-file=\"$ax_sub_cache_file\"" \ + || AC_MSG_ERROR([$ax_sub_configure failed for $ax_dir]) + fi + + cd "$ax_popdir" + fi + ]) + ]) +]) diff --git a/m4/boost.m4 b/m4/boost.m4 new file mode 100644 index 0000000000..dae504502d --- /dev/null +++ b/m4/boost.m4 @@ -0,0 +1,1574 @@ +# boost.m4: Locate Boost headers and libraries for autoconf-based projects. +# Copyright (C) 2007-2011, 2014 Benoit Sigoure +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Additional permission under section 7 of the GNU General Public +# License, version 3 ("GPLv3"): +# +# If you convey this file as part of a work that contains a +# configuration script generated by Autoconf, you may do so under +# terms of your choice. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +m4_define([_BOOST_SERIAL], [m4_translit([ +# serial 26 +], [# +], [])]) + +# Original sources can be found at http://github.com/tsuna/boost.m4 +# You can fetch the latest version of the script by doing: +# wget http://github.com/tsuna/boost.m4/raw/master/build-aux/boost.m4 + +# ------ # +# README # +# ------ # + +# This file provides several macros to use the various Boost libraries. +# The first macro is BOOST_REQUIRE. It will simply check if it's possible to +# find the Boost headers of a given (optional) minimum version and it will +# define BOOST_CPPFLAGS accordingly. It will add an option --with-boost to +# your configure so that users can specify non standard locations. +# If the user's environment contains BOOST_ROOT and --with-boost was not +# specified, --with-boost=$BOOST_ROOT is implicitly used. +# For more README and documentation, go to http://github.com/tsuna/boost.m4 +# Note: THESE MACROS ASSUME THAT YOU USE LIBTOOL. If you don't, don't worry, +# simply read the README, it will show you what to do step by step. + +m4_pattern_forbid([^_?(BOOST|Boost)_]) + + +# _BOOST_SED_CPP(SED-PROGRAM, PROGRAM, +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# -------------------------------------------------------- +# Same as AC_EGREP_CPP, but leave the result in conftest.i. +# +# SED-PROGRAM is *not* overquoted, as in AC_EGREP_CPP. It is expanded +# in double-quotes, so escape your double quotes. +# +# It could be useful to turn this into a macro which extracts the +# value of any macro. +m4_define([_BOOST_SED_CPP], +[AC_LANG_PUSH([C++])dnl +AC_LANG_PREPROC_REQUIRE()dnl +AC_REQUIRE([AC_PROG_SED])dnl +AC_LANG_CONFTEST([AC_LANG_SOURCE([[$2]])]) +AS_IF([dnl eval is necessary to expand ac_cpp. +dnl Ultrix and Pyramid sh refuse to redirect output of eval, so use subshell. +dnl Beware of Windows end-of-lines, for instance if we are running +dnl some Windows programs under Wine. In that case, boost/version.hpp +dnl is certainly using "\r\n", but the regular Unix shell will only +dnl strip `\n' with backquotes, not the `\r'. This results in +dnl boost_cv_lib_version='1_37\r' for instance, which breaks +dnl everything else. +dnl Cannot use 'dnl' after [$4] because a trailing dnl may break AC_CACHE_CHECK +dnl +dnl Beware that GCC 5, when expanding macros, may embed # line directives +dnl a within single line: +dnl +dnl # 1 "conftest.cc" +dnl # 1 "" +dnl # 1 "" +dnl # 1 "conftest.cc" +dnl # 1 "/opt/local/include/boost/version.hpp" 1 3 +dnl # 2 "conftest.cc" 2 +dnl boost-lib-version = +dnl # 2 "conftest.cc" 3 +dnl "1_56" +dnl +dnl So get rid of the # and empty lines, and glue the remaining ones together. +(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | + grep -v '#' | + grep -v '^[[[:space:]]]*$' | + tr -d '\r' | + tr -s '\n' ' ' | + $SED -n -e "$1" >conftest.i 2>&1], + [$3], + [$4]) +rm -rf conftest* +AC_LANG_POP([C++])dnl +])# _BOOST_SED_CPP + + + +# BOOST_REQUIRE([VERSION], [ACTION-IF-NOT-FOUND]) +# ----------------------------------------------- +# Look for Boost. If version is given, it must either be a literal of the form +# "X.Y.Z" where X, Y and Z are integers (the ".Z" part being optional) or a +# variable "$var". +# Defines the value BOOST_CPPFLAGS. This macro only checks for headers with +# the required version, it does not check for any of the Boost libraries. +# On # success, defines HAVE_BOOST. On failure, calls the optional +# ACTION-IF-NOT-FOUND action if one was supplied. +# Otherwise aborts with an error message. +AC_DEFUN_ONCE([BOOST_REQUIRE], +[AC_REQUIRE([AC_PROG_CXX])dnl +AC_REQUIRE([AC_PROG_GREP])dnl +echo "$as_me: this is boost.m4[]_BOOST_SERIAL" >&AS_MESSAGE_LOG_FD +boost_save_IFS=$IFS +boost_version_req=$1 +IFS=. +set x $boost_version_req 0 0 0 +IFS=$boost_save_IFS +shift +boost_version_req=`expr "$[1]" '*' 100000 + "$[2]" '*' 100 + "$[3]"` +boost_version_req_string=$[1].$[2].$[3] +AC_ARG_WITH([boost], + [AS_HELP_STRING([--with-boost=DIR], + [prefix of Boost $1 @<:@guess@:>@])])dnl +AC_ARG_VAR([BOOST_ROOT],[Location of Boost installation])dnl +# If BOOST_ROOT is set and the user has not provided a value to +# --with-boost, then treat BOOST_ROOT as if it the user supplied it. +if test x"$BOOST_ROOT" != x; then + if test x"$with_boost" = x; then + AC_MSG_NOTICE([Detected BOOST_ROOT; continuing with --with-boost=$BOOST_ROOT]) + with_boost=$BOOST_ROOT + else + AC_MSG_NOTICE([Detected BOOST_ROOT=$BOOST_ROOT, but overridden by --with-boost=$with_boost]) + fi +fi +AC_SUBST([DISTCHECK_CONFIGURE_FLAGS], + ["$DISTCHECK_CONFIGURE_FLAGS '--with-boost=$with_boost'"])dnl +boost_save_CPPFLAGS=$CPPFLAGS + AC_CACHE_CHECK([for Boost headers version >= $boost_version_req_string], + [boost_cv_inc_path], + [boost_cv_inc_path=no +AC_LANG_PUSH([C++])dnl +m4_pattern_allow([^BOOST_VERSION$])dnl + AC_LANG_CONFTEST([AC_LANG_PROGRAM([[#include +#if !defined BOOST_VERSION +# error BOOST_VERSION is not defined +#elif BOOST_VERSION < $boost_version_req +# error Boost headers version < $boost_version_req +#endif +]])]) + # If the user provided a value to --with-boost, use it and only it. + case $with_boost in #( + ''|yes) set x '' /opt/local/include /usr/local/include /opt/include \ + /usr/include C:/Boost/include;; #( + *) set x "$with_boost/include" "$with_boost";; + esac + shift + for boost_dir + do + # Without --layout=system, Boost (or at least some versions) installs + # itself in /include/boost-. This inner loop helps to + # find headers in such directories. + # + # Any ${boost_dir}/boost-x_xx directories are searched in reverse version + # order followed by ${boost_dir}. The final '.' is a sentinel for + # searching $boost_dir" itself. Entries are whitespace separated. + # + # I didn't indent this loop on purpose (to avoid over-indented code) + boost_layout_system_search_list=`cd "$boost_dir" 2>/dev/null \ + && ls -1 | "${GREP}" '^boost-' | sort -rn -t- -k2 \ + && echo .` + for boost_inc in $boost_layout_system_search_list + do + if test x"$boost_inc" != x.; then + boost_inc="$boost_dir/$boost_inc" + else + boost_inc="$boost_dir" # Uses sentinel in boost_layout_system_search_list + fi + if test x"$boost_inc" != x; then + # We are going to check whether the version of Boost installed + # in $boost_inc is usable by running a compilation that + # #includes it. But if we pass a -I/some/path in which Boost + # is not installed, the compiler will just skip this -I and + # use other locations (either from CPPFLAGS, or from its list + # of system include directories). As a result we would use + # header installed on the machine instead of the /some/path + # specified by the user. So in that precise case (trying + # $boost_inc), make sure the version.hpp exists. + # + # Use test -e as there can be symlinks. + test -e "$boost_inc/boost/version.hpp" || continue + CPPFLAGS="$CPPFLAGS -I$boost_inc" + fi + AC_COMPILE_IFELSE([], [boost_cv_inc_path=yes], [boost_cv_version=no]) + if test x"$boost_cv_inc_path" = xyes; then + if test x"$boost_inc" != x; then + boost_cv_inc_path=$boost_inc + fi + break 2 + fi + done + done +AC_LANG_POP([C++])dnl + ]) + case $boost_cv_inc_path in #( + no) + boost_errmsg="cannot find Boost headers version >= $boost_version_req_string" + m4_if([$2], [], [AC_MSG_ERROR([$boost_errmsg])], + [AC_MSG_NOTICE([$boost_errmsg])]) + $2 + ;;#( + yes) + BOOST_CPPFLAGS= + ;;#( + *) + AC_SUBST([BOOST_CPPFLAGS], ["-I$boost_cv_inc_path"])dnl + ;; + esac + if test x"$boost_cv_inc_path" != xno; then + AC_DEFINE([HAVE_BOOST], [1], + [Defined if the requested minimum BOOST version is satisfied]) + AC_CACHE_CHECK([for Boost's header version], + [boost_cv_lib_version], + [m4_pattern_allow([^BOOST_LIB_VERSION$])dnl + _BOOST_SED_CPP([[/^boost-lib-version = /{s///;s/[\" ]//g;p;q;}]], + [#include +boost-lib-version = BOOST_LIB_VERSION], + [boost_cv_lib_version=`cat conftest.i`])]) + # e.g. "134" for 1_34_1 or "135" for 1_35 + boost_major_version=`echo "$boost_cv_lib_version" | sed 's/_//;s/_.*//'` + case $boost_major_version in #( + '' | *[[!0-9]]*) + AC_MSG_ERROR([invalid value: boost_major_version='$boost_major_version']) + ;; + esac +fi +CPPFLAGS=$boost_save_CPPFLAGS +])# BOOST_REQUIRE + + +# BOOST_STATIC() +# -------------- +# Add the "--enable-static-boost" configure argument. If this argument is given +# on the command line, static versions of the libraries will be looked up. +AC_DEFUN([BOOST_STATIC], + [AC_ARG_ENABLE([static-boost], + [AS_HELP_STRING([--enable-static-boost], + [Prefer the static boost libraries over the shared ones [no]])], + [enable_static_boost=yes], + [enable_static_boost=no])])# BOOST_STATIC + + +# BOOST_FIND_HEADER([HEADER-NAME], [ACTION-IF-NOT-FOUND], [ACTION-IF-FOUND]) +# -------------------------------------------------------------------------- +# Wrapper around AC_CHECK_HEADER for Boost headers. Useful to check for +# some parts of the Boost library which are only made of headers and don't +# require linking (such as Boost.Foreach). +# +# Default ACTION-IF-NOT-FOUND: Fail with a fatal error unless Boost couldn't be +# found in the first place, in which case by default a notice is issued to the +# user. Presumably if we haven't died already it's because it's OK to not have +# Boost, which is why only a notice is issued instead of a hard error. +# +# Default ACTION-IF-FOUND: define the preprocessor symbol HAVE_ in +# case of success # (where HEADER-NAME is written LIKE_THIS, e.g., +# HAVE_BOOST_FOREACH_HPP). +AC_DEFUN([BOOST_FIND_HEADER], +[AC_REQUIRE([BOOST_REQUIRE])dnl +if test x"$boost_cv_inc_path" = xno; then + m4_default([$2], [AC_MSG_NOTICE([Boost not available, not searching for $1])]) +else +AC_LANG_PUSH([C++])dnl +boost_save_CPPFLAGS=$CPPFLAGS +CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" +AC_CHECK_HEADER([$1], + [m4_default([$3], [AC_DEFINE(AS_TR_CPP([HAVE_$1]), [1], + [Define to 1 if you have <$1>])])], + [m4_default([$2], [AC_MSG_ERROR([cannot find $1])])]) +CPPFLAGS=$boost_save_CPPFLAGS +AC_LANG_POP([C++])dnl +fi +])# BOOST_FIND_HEADER + + +# BOOST_FIND_LIBS([COMPONENT-NAME], [CANDIDATE-LIB-NAMES], +# [PREFERRED-RT-OPT], [HEADER-NAME], [CXX-TEST], +# [CXX-PROLOGUE]) +# -------------------------------------------------------------- +# Look for the Boost library COMPONENT-NAME (e.g., `thread', for +# libboost_thread) under the possible CANDIDATE-LIB-NAMES (e.g., +# "thread_win32 thread"). Check that HEADER-NAME works and check that +# libboost_LIB-NAME can link with the code CXX-TEST. The optional +# argument CXX-PROLOGUE can be used to include some C++ code before +# the `main' function. +# +# Invokes BOOST_FIND_HEADER([HEADER-NAME]) (see above). +# +# Boost libraries typically come compiled with several flavors (with different +# runtime options) so PREFERRED-RT-OPT is the preferred suffix. A suffix is one +# or more of the following letters: sgdpn (in that order). s = static +# runtime, d = debug build, g = debug/diagnostic runtime, p = STLPort build, +# n = (unsure) STLPort build without iostreams from STLPort (it looks like `n' +# must always be used along with `p'). Additionally, PREFERRED-RT-OPT can +# start with `mt-' to indicate that there is a preference for multi-thread +# builds. Some sample values for PREFERRED-RT-OPT: (nothing), mt, d, mt-d, gdp +# ... If you want to make sure you have a specific version of Boost +# (eg, >= 1.33) you *must* invoke BOOST_REQUIRE before this macro. +AC_DEFUN([BOOST_FIND_LIBS], +[AC_REQUIRE([BOOST_REQUIRE])dnl +AC_REQUIRE([_BOOST_FIND_COMPILER_TAG])dnl +AC_REQUIRE([BOOST_STATIC])dnl +AC_REQUIRE([_BOOST_GUESS_WHETHER_TO_USE_MT])dnl +if test x"$boost_cv_inc_path" = xno; then + AC_MSG_NOTICE([Boost not available, not searching for the Boost $1 library]) +else +dnl The else branch is huge and wasn't intended on purpose. +AC_LANG_PUSH([C++])dnl +AS_VAR_PUSHDEF([Boost_lib], [boost_cv_lib_$1])dnl +AS_VAR_PUSHDEF([Boost_lib_LDFLAGS], [boost_cv_lib_$1_LDFLAGS])dnl +AS_VAR_PUSHDEF([Boost_lib_LDPATH], [boost_cv_lib_$1_LDPATH])dnl +AS_VAR_PUSHDEF([Boost_lib_LIBS], [boost_cv_lib_$1_LIBS])dnl +BOOST_FIND_HEADER([$4]) +boost_save_CPPFLAGS=$CPPFLAGS +CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" +AC_CACHE_CHECK([for the Boost $1 library], [Boost_lib], + [_BOOST_FIND_LIBS($@)]) +case $Boost_lib in #( + (no) _AC_MSG_LOG_CONFTEST + AC_MSG_ERROR([cannot find the flags to link with Boost $1]) + ;; +esac +AC_SUBST(AS_TR_CPP([BOOST_$1_LDFLAGS]), [$Boost_lib_LDFLAGS])dnl +AC_SUBST(AS_TR_CPP([BOOST_$1_LDPATH]), [$Boost_lib_LDPATH])dnl +AC_SUBST([BOOST_LDPATH], [$Boost_lib_LDPATH])dnl +AC_SUBST(AS_TR_CPP([BOOST_$1_LIBS]), [$Boost_lib_LIBS])dnl +CPPFLAGS=$boost_save_CPPFLAGS +AS_VAR_POPDEF([Boost_lib])dnl +AS_VAR_POPDEF([Boost_lib_LDFLAGS])dnl +AS_VAR_POPDEF([Boost_lib_LDPATH])dnl +AS_VAR_POPDEF([Boost_lib_LIBS])dnl +AC_LANG_POP([C++])dnl +fi +]) + + +# BOOST_FIND_LIB([LIB-NAME], +# [PREFERRED-RT-OPT], [HEADER-NAME], [CXX-TEST], +# [CXX-PROLOGUE]) +# -------------------------------------------------------------- +# Backward compatibility wrapper for BOOST_FIND_LIBS. +AC_DEFUN([BOOST_FIND_LIB], +[BOOST_FIND_LIBS([$1], $@)]) + + +# _BOOST_FIND_LIBS([LIB-NAME], [CANDIDATE-LIB-NAMES], +# [PREFERRED-RT-OPT], [HEADER-NAME], [CXX-TEST], +# [CXX-PROLOGUE]) +# -------------------------------------------------------------- +# Real implementation of BOOST_FIND_LIBS: rely on these local macros: +# Boost_lib, Boost_lib_LDFLAGS, Boost_lib_LDPATH, Boost_lib_LIBS +# +# The algorithm is as follows: first look for a given library name +# according to the user's PREFERRED-RT-OPT. For each library name, we +# prefer to use the ones that carry the tag (toolset name). Each +# library is searched through the various standard paths were Boost is +# usually installed. If we can't find the standard variants, we try +# to enforce -mt (for instance on MacOSX, libboost_thread.dylib +# doesn't exist but there's -obviously- libboost_thread-mt.dylib). +AC_DEFUN([_BOOST_FIND_LIBS], +[Boost_lib=no + case "$3" in #( + (mt | mt-) boost_mt=-mt; boost_rtopt=;; #( + (mt* | mt-*) boost_mt=-mt; boost_rtopt=`expr "X$3" : 'Xmt-*\(.*\)'`;; #( + (*) boost_mt=; boost_rtopt=$3;; + esac + if test $enable_static_boost = yes; then + boost_rtopt="s$boost_rtopt" + fi + # Find the proper debug variant depending on what we've been asked to find. + case $boost_rtopt in #( + (*d*) boost_rt_d=$boost_rtopt;; #( + (*[[sgpn]]*) # Insert the `d' at the right place (in between `sg' and `pn') + boost_rt_d=`echo "$boost_rtopt" | sed 's/\(s*g*\)\(p*n*\)/\1\2/'`;; #( + (*) boost_rt_d='-d';; + esac + # If the PREFERRED-RT-OPT are not empty, prepend a `-'. + test -n "$boost_rtopt" && boost_rtopt="-$boost_rtopt" + $boost_guess_use_mt && boost_mt=-mt + # Look for the abs path the static archive. + # $libext is computed by Libtool but let's make sure it's non empty. + test -z "$libext" && + AC_MSG_ERROR([the libext variable is empty, did you invoke Libtool?]) + boost_save_ac_objext=$ac_objext + # Generate the test file. + AC_LANG_CONFTEST([AC_LANG_PROGRAM([#include <$4> +$6], [$5])]) +dnl Optimization hacks: compiling C++ is slow, especially with Boost. What +dnl we're trying to do here is guess the right combination of link flags +dnl (LIBS / LDFLAGS) to use a given library. This can take several +dnl iterations before it succeeds and is thus *very* slow. So what we do +dnl instead is that we compile the code first (and thus get an object file, +dnl typically conftest.o). Then we try various combinations of link flags +dnl until we succeed to link conftest.o in an executable. The problem is +dnl that the various TRY_LINK / COMPILE_IFELSE macros of Autoconf always +dnl remove all the temporary files including conftest.o. So the trick here +dnl is to temporarily change the value of ac_objext so that conftest.o is +dnl preserved accross tests. This is obviously fragile and I will burn in +dnl hell for not respecting Autoconf's documented interfaces, but in the +dnl mean time, it optimizes the macro by a factor of 5 to 30. +dnl Another small optimization: the first argument of AC_COMPILE_IFELSE left +dnl empty because the test file is generated only once above (before we +dnl start the for loops). + AC_COMPILE_IFELSE([], + [ac_objext=do_not_rm_me_plz], + [AC_MSG_ERROR([cannot compile a test that uses Boost $1])]) + ac_objext=$boost_save_ac_objext + boost_failed_libs= +# Don't bother to ident the following nested for loops, only the 2 +# innermost ones matter. +for boost_lib_ in $2; do +for boost_tag_ in -$boost_cv_lib_tag ''; do +for boost_ver_ in -$boost_cv_lib_version ''; do +for boost_mt_ in $boost_mt -mt ''; do +for boost_rtopt_ in $boost_rtopt '' -d; do + for boost_lib in \ + boost_$boost_lib_$boost_tag_$boost_mt_$boost_rtopt_$boost_ver_ \ + boost_$boost_lib_$boost_tag_$boost_rtopt_$boost_ver_ \ + boost_$boost_lib_$boost_tag_$boost_mt_$boost_ver_ \ + boost_$boost_lib_$boost_tag_$boost_ver_ + do + # Avoid testing twice the same lib + case $boost_failed_libs in #( + (*@$boost_lib@*) continue;; + esac + # If with_boost is empty, we'll search in /lib first, which is not quite + # right so instead we'll try to a location based on where the headers are. + boost_tmp_lib=$with_boost + test x"$with_boost" = x && boost_tmp_lib=${boost_cv_inc_path%/include} + for boost_ldpath in "$boost_tmp_lib/lib" '' \ + /opt/local/lib* /usr/local/lib* /opt/lib* /usr/lib* \ + "$with_boost" C:/Boost/lib /lib* + do + # Don't waste time with directories that don't exist. + if test x"$boost_ldpath" != x && test ! -e "$boost_ldpath"; then + continue + fi + boost_save_LDFLAGS=$LDFLAGS + # Are we looking for a static library? + case $boost_ldpath:$boost_rtopt_ in #( + (*?*:*s*) # Yes (Non empty boost_ldpath + s in rt opt) + Boost_lib_LIBS="$boost_ldpath/lib$boost_lib.$libext" + test -e "$Boost_lib_LIBS" || continue;; #( + (*) # No: use -lboost_foo to find the shared library. + Boost_lib_LIBS="-l$boost_lib";; + esac + boost_save_LIBS=$LIBS + LIBS="$Boost_lib_LIBS $LIBS" + test x"$boost_ldpath" != x && LDFLAGS="$LDFLAGS -L$boost_ldpath" +dnl First argument of AC_LINK_IFELSE left empty because the test file is +dnl generated only once above (before we start the for loops). + _BOOST_AC_LINK_IFELSE([], + [Boost_lib=yes], [Boost_lib=no]) + ac_objext=$boost_save_ac_objext + LDFLAGS=$boost_save_LDFLAGS + LIBS=$boost_save_LIBS + if test x"$Boost_lib" = xyes; then + # Check or used cached result of whether or not using -R or + # -rpath makes sense. Some implementations of ld, such as for + # Mac OSX, require -rpath but -R is the flag known to work on + # other systems. https://github.com/tsuna/boost.m4/issues/19 + AC_CACHE_VAL([boost_cv_rpath_link_ldflag], + [case $boost_ldpath in + '') # Nothing to do. + boost_cv_rpath_link_ldflag= + boost_rpath_link_ldflag_found=yes;; + *) + for boost_cv_rpath_link_ldflag in -Wl,-R, -Wl,-rpath,; do + LDFLAGS="$boost_save_LDFLAGS -L$boost_ldpath $boost_cv_rpath_link_ldflag$boost_ldpath" + LIBS="$boost_save_LIBS $Boost_lib_LIBS" + _BOOST_AC_LINK_IFELSE([], + [boost_rpath_link_ldflag_found=yes + break], + [boost_rpath_link_ldflag_found=no]) + done + ;; + esac + AS_IF([test "x$boost_rpath_link_ldflag_found" != "xyes"], + [AC_MSG_ERROR([Unable to determine whether to use -R or -rpath])]) + LDFLAGS=$boost_save_LDFLAGS + LIBS=$boost_save_LIBS + ]) + test x"$boost_ldpath" != x && + Boost_lib_LDFLAGS="-L$boost_ldpath $boost_cv_rpath_link_ldflag$boost_ldpath" + Boost_lib_LDPATH="$boost_ldpath" + break 7 + else + boost_failed_libs="$boost_failed_libs@$boost_lib@" + fi + done + done +done +done +done +done +done # boost_lib_ +rm -f conftest.$ac_objext +]) + + + +# --------------------------------------- # +# Checks for the various Boost libraries. # +# --------------------------------------- # + +# List of boost libraries: http://www.boost.org/libs/libraries.htm +# The page http://beta.boost.org/doc/libs is useful: it gives the first release +# version of each library (among other things). + +# BOOST_DEFUN(LIBRARY, CODE) +# -------------------------- +# Define BOOST_ as a macro that runs CODE. +# +# Use indir to avoid the warning on underquoted macro name given to AC_DEFUN. +m4_define([BOOST_DEFUN], +[m4_indir([AC_DEFUN], + m4_toupper([BOOST_$1]), +[m4_pushdef([BOOST_Library], [$1])dnl +$2 +m4_popdef([BOOST_Library])dnl +]) +]) + +# BOOST_ARRAY() +# ------------- +# Look for Boost.Array +BOOST_DEFUN([Array], +[BOOST_FIND_HEADER([boost/array.hpp])]) + + +# BOOST_ASIO() +# ------------ +# Look for Boost.Asio (new in Boost 1.35). +BOOST_DEFUN([Asio], +[AC_REQUIRE([BOOST_SYSTEM])dnl +BOOST_FIND_HEADER([boost/asio.hpp])]) + + +# BOOST_ASSIGN() +# ------------- +# Look for Boost.Assign +BOOST_DEFUN([Assign], +[BOOST_FIND_HEADER([boost/assign.hpp])]) + + +# BOOST_BIND() +# ------------ +# Look for Boost.Bind. +BOOST_DEFUN([Bind], +[BOOST_FIND_HEADER([boost/bind/bind.hpp])]) + + +# BOOST_CHRONO() +# -------------- +# Look for Boost.Chrono. +BOOST_DEFUN([Chrono], +[# Do we have to check for Boost.System? This link-time dependency was +# added as of 1.35.0. If we have a version <1.35, we must not attempt to +# find Boost.System as it didn't exist by then. +if test $boost_major_version -ge 135; then + BOOST_SYSTEM([$1]) +fi # end of the Boost.System check. +boost_filesystem_save_LIBS=$LIBS +boost_filesystem_save_LDFLAGS=$LDFLAGS +m4_pattern_allow([^BOOST_SYSTEM_(LIBS|LDFLAGS)$])dnl +LIBS="$LIBS $BOOST_SYSTEM_LIBS" +LDFLAGS="$LDFLAGS $BOOST_SYSTEM_LDFLAGS" +BOOST_FIND_LIB([chrono], [$1], + [boost/chrono.hpp], + [boost::chrono::thread_clock d;]) +if test $enable_static_boost = yes && test $boost_major_version -ge 135; then + BOOST_CHRONO_LIBS="$BOOST_CHRONO_LIBS $BOOST_SYSTEM_LIBS" +fi +LIBS=$boost_filesystem_save_LIBS +LDFLAGS=$boost_filesystem_save_LDFLAGS +])# BOOST_CHRONO + + +# BOOST_CONTEXT([PREFERRED-RT-OPT]) +# ----------------------------------- +# Look for Boost.Context. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. +# +# * This library was introduced in Boost 1.51.0 +# * The signatures of make_fcontext() and jump_fcontext were changed in 1.56.0 +# * A dependency on boost_thread appears in 1.57.0 +BOOST_DEFUN([Context], +[boost_context_save_LIBS=$LIBS + boost_context_save_LDFLAGS=$LDFLAGS +if test $boost_major_version -ge 157; then + BOOST_THREAD([$1]) + m4_pattern_allow([^BOOST_THREAD_(LIBS|LDFLAGS)$])dnl + LIBS="$LIBS $BOOST_THREAD_LIBS" + LDFLAGS="$LDFLAGS $BOOST_THREAD_LDFLAGS" +fi +BOOST_FIND_LIB([context], [$1], + [boost/context/all.hpp],[[ + +// creates a stack +void * stack_pointer = new void*[4096]; +std::size_t const size = sizeof(void*[4096]); + +#if BOOST_VERSION <= 105100 +ctx::make_fcontext(&fc, f); +return ctx::jump_fcontext(&fcm, &fc, 3) == 6; + +#else + +fc = ctx::make_fcontext(stack_pointer, size, f); +return ctx::jump_fcontext(&fcm, fc, 3) == 6; + +#endif + + +]],[dnl + +#include +#if BOOST_VERSION <= 105100 + +namespace ctx = boost::ctx; + +static ctx::fcontext_t fcm, fc; + +static void f(intptr_t i) { + ctx::jump_fcontext(&fc, &fcm, i * 2); +} + +#elif BOOST_VERSION <= 105500 + +namespace ctx = boost::context; + +// context +static ctx::fcontext_t fcm, *fc; + +// context-function +static void f(intptr_t i) { + ctx::jump_fcontext(fc, &fcm, i * 2); +} + +#else + +namespace ctx = boost::context; + +// context +static ctx::fcontext_t fcm, fc; + +// context-function +static void f(intptr_t i) { + ctx::jump_fcontext(&fc, fcm, i * 2); +} +#endif +]) +LIBS=$boost_context_save_LIBS +LDFLAGS=$boost_context_save_LDFLAGS +])# BOOST_CONTEXT + + +# BOOST_CONVERSION() +# ------------------ +# Look for Boost.Conversion (cast / lexical_cast) +BOOST_DEFUN([Conversion], +[BOOST_FIND_HEADER([boost/cast.hpp]) +BOOST_FIND_HEADER([boost/lexical_cast.hpp]) +])# BOOST_CONVERSION + + +# BOOST_COROUTINE([PREFERRED-RT-OPT]) +# ----------------------------------- +# Look for Boost.Coroutine. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. This library was introduced in Boost +# 1.53.0 +BOOST_DEFUN([Coroutine], +[ +boost_coroutine_save_LIBS=$LIBS +boost_coroutine_save_LDFLAGS=$LDFLAGS +# Link-time dependency from coroutine to context +BOOST_CONTEXT([$1]) +# Starting from Boost 1.55 a dependency on Boost.System is added +if test $boost_major_version -ge 155; then + BOOST_SYSTEM([$1]) +fi +m4_pattern_allow([^BOOST_(CONTEXT|SYSTEM)_(LIBS|LDFLAGS)]) +LIBS="$LIBS $BOOST_CONTEXT_LIBS $BOOST_SYSTEM_LIBS" +LDFLAGS="$LDFLAGS $BOOST_CONTEXT_LDFLAGS" + +# in 1.53 coroutine was a header only library +if test $boost_major_version -eq 153; then + BOOST_FIND_HEADER([boost/coroutine/coroutine.hpp]) +else + BOOST_FIND_LIB([coroutine], [$1], + [boost/coroutine/coroutine.hpp], + [ + #include + #if BOOST_VERSION <= 105500 + boost::coroutines::coroutine coro; coro.get(); + #else + boost::coroutines::asymmetric_coroutine::pull_type coro; coro.get(); + #endif + ]) +fi +# Link-time dependency from coroutine to context, existed only in 1.53, in 1.54 +# coroutine doesn't use context from its headers but from its library. +if test $boost_major_version -eq 153 || test $enable_static_boost = yes && test $boost_major_version -ge 154; then + BOOST_COROUTINE_LIBS="$BOOST_COROUTINE_LIBS $BOOST_CONTEXT_LIBS" + BOOST_COROUTINE_LDFLAGS="$BOOST_COROUTINE_LDFLAGS $BOOST_CONTEXT_LDFLAGS" +fi +if test $enable_static_boost = yes && test $boost_major_version -ge 155; then + BOOST_COROUTINE_LIBS="$BOOST_COROUTINE_LIBS $BOOST_SYSTEM_LIBS" + BOOST_COROUTINE_LDFLAGS="$BOOST_COROUTINE_LDFLAGS $BOOST_SYSTEM_LDFLAGS" +fi +LIBS=$boost_coroutine_save_LIBS +LDFLAGS=$boost_coroutine_save_LDFLAGS +])# BOOST_COROUTINE + + +# BOOST_CRC() +# ----------- +# Look for Boost.CRC +BOOST_DEFUN([CRC], +[BOOST_FIND_HEADER([boost/crc.hpp]) +])# BOOST_CRC + + +# BOOST_DATE_TIME([PREFERRED-RT-OPT]) +# ----------------------------------- +# Look for Boost.Date_Time. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Date_Time], +[BOOST_FIND_LIB([date_time], [$1], + [boost/date_time/posix_time/posix_time.hpp], + [boost::posix_time::ptime t;]) +])# BOOST_DATE_TIME + + +# BOOST_FILESYSTEM([PREFERRED-RT-OPT]) +# ------------------------------------ +# Look for Boost.Filesystem. For the documentation of PREFERRED-RT-OPT, see +# the documentation of BOOST_FIND_LIB above. +# Do not check for boost/filesystem.hpp because this file was introduced in +# 1.34. +BOOST_DEFUN([Filesystem], +[# Do we have to check for Boost.System? This link-time dependency was +# added as of 1.35.0. If we have a version <1.35, we must not attempt to +# find Boost.System as it didn't exist by then. +if test $boost_major_version -ge 135; then + BOOST_SYSTEM([$1]) +fi # end of the Boost.System check. +boost_filesystem_save_LIBS=$LIBS +boost_filesystem_save_LDFLAGS=$LDFLAGS +m4_pattern_allow([^BOOST_SYSTEM_(LIBS|LDFLAGS)$])dnl +LIBS="$LIBS $BOOST_SYSTEM_LIBS" +LDFLAGS="$LDFLAGS $BOOST_SYSTEM_LDFLAGS" +BOOST_FIND_LIB([filesystem], [$1], + [boost/filesystem/path.hpp], [boost::filesystem::path p;]) +if test $enable_static_boost = yes && test $boost_major_version -ge 135; then + BOOST_FILESYSTEM_LIBS="$BOOST_FILESYSTEM_LIBS $BOOST_SYSTEM_LIBS" +fi +LIBS=$boost_filesystem_save_LIBS +LDFLAGS=$boost_filesystem_save_LDFLAGS +])# BOOST_FILESYSTEM + + +# BOOST_FLYWEIGHT() +# ----------------- +# Look for Boost.Flyweight. +BOOST_DEFUN([Flyweight], +[dnl There's a hidden dependency on pthreads. +AC_REQUIRE([_BOOST_PTHREAD_FLAG])dnl +BOOST_FIND_HEADER([boost/flyweight.hpp]) +AC_SUBST([BOOST_FLYWEIGHT_LIBS], [$boost_cv_pthread_flag]) +]) + + +# BOOST_FOREACH() +# --------------- +# Look for Boost.Foreach. +BOOST_DEFUN([Foreach], +[BOOST_FIND_HEADER([boost/foreach.hpp])]) + + +# BOOST_FORMAT() +# -------------- +# Look for Boost.Format. +# Note: we can't check for boost/format/format_fwd.hpp because the header isn't +# standalone. It can't be compiled because it triggers the following error: +# boost/format/detail/config_macros.hpp:88: error: 'locale' in namespace 'std' +# does not name a type +BOOST_DEFUN([Format], +[BOOST_FIND_HEADER([boost/format.hpp])]) + + +# BOOST_FUNCTION() +# ---------------- +# Look for Boost.Function +BOOST_DEFUN([Function], +[BOOST_FIND_HEADER([boost/function.hpp])]) + + +# BOOST_GEOMETRY() +# ---------------- +# Look for Boost.Geometry (new since 1.47.0). +BOOST_DEFUN([Geometry], +[BOOST_FIND_HEADER([boost/geometry.hpp]) +])# BOOST_GEOMETRY + + +# BOOST_GRAPH([PREFERRED-RT-OPT]) +# ------------------------------- +# Look for Boost.Graphs. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Graph], +[boost_graph_save_LIBS=$LIBS +boost_graph_save_LDFLAGS=$LDFLAGS +# Link-time dependency from graph to regex was added as of 1.40.0. +if test $boost_major_version -ge 140; then + BOOST_REGEX([$1]) + m4_pattern_allow([^BOOST_REGEX_(LIBS|LDFLAGS)$])dnl + LIBS="$LIBS $BOOST_REGEX_LIBS" + LDFLAGS="$LDFLAGS $BOOST_REGEX_LDFLAGS" +fi +BOOST_FIND_LIB([graph], [$1], + [boost/graph/adjacency_list.hpp], [boost::adjacency_list<> g;]) +LIBS=$boost_graph_save_LIBS +LDFLAGS=$boost_graph_save_LDFLAGS +])# BOOST_GRAPH + + +# BOOST_IOSTREAMS([PREFERRED-RT-OPT]) +# ----------------------------------- +# Look for Boost.IOStreams. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([IOStreams], +[BOOST_FIND_LIB([iostreams], [$1], + [boost/iostreams/device/file_descriptor.hpp], + [boost::iostreams::file_descriptor fd; fd.close();]) +])# BOOST_IOSTREAMS + + +# BOOST_HASH() +# ------------ +# Look for Boost.Functional/Hash +BOOST_DEFUN([Hash], +[BOOST_FIND_HEADER([boost/functional/hash.hpp])]) + + +# BOOST_LAMBDA() +# -------------- +# Look for Boost.Lambda +BOOST_DEFUN([Lambda], +[BOOST_FIND_HEADER([boost/lambda/lambda.hpp])]) + + +# BOOST_LOCALE() +# -------------- +# Look for Boost.Locale +BOOST_DEFUN([Locale], +[ +boost_locale_save_LIBS=$LIBS +boost_locale_save_LDFLAGS=$LDFLAGS +# require SYSTEM for boost-1.50.0 and up +if test $boost_major_version -ge 150; then + BOOST_SYSTEM([$1]) + m4_pattern_allow([^BOOST_SYSTEM_(LIBS|LDFLAGS)$])dnl + LIBS="$LIBS $BOOST_SYSTEM_LIBS" + LDFLAGS="$LDFLAGS $BOOST_SYSTEM_LDFLAGS" +fi # end of the Boost.System check. +BOOST_FIND_LIB([locale], [$1], + [boost/locale.hpp], + [[boost::locale::generator gen; std::locale::global(gen(""));]]) +LIBS=$boost_locale_save_LIBS +LDFLAGS=$boost_locale_save_LDFLAGS +])# BOOST_LOCALE + +# BOOST_LOG([PREFERRED-RT-OPT]) +# ----------------------------- +# Look for Boost.Log. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Log], +[boost_log_save_LIBS=$LIBS +boost_log_save_LDFLAGS=$LDFLAGS +BOOST_SYSTEM([$1]) +BOOST_FILESYSTEM([$1]) +BOOST_DATE_TIME([$1]) +m4_pattern_allow([^BOOST_(SYSTEM|FILESYSTEM|DATE_TIME)_(LIBS|LDFLAGS)$])dnl +LIBS="$LIBS $BOOST_DATE_TIME_LIBS $BOOST_FILESYSTEM_LIBS $BOOST_SYSTEM_LIBS" +LDFLAGS="$LDFLAGS $BOOST_DATE_TIME_LDFLAGS $BOOST_FILESYSTEM_LDFLAGS $BOOST_SYSTEM_LDFLAGS" +BOOST_FIND_LIB([log], [$1], + [boost/log/core/core.hpp], + [boost::log::attribute a; a.get_value();]) +LIBS=$boost_log_save_LIBS +LDFLAGS=$boost_log_save_LDFLAGS +])# BOOST_LOG + + +# BOOST_LOG_SETUP([PREFERRED-RT-OPT]) +# ----------------------------------- +# Look for Boost.Log. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Log_Setup], +[boost_log_setup_save_LIBS=$LIBS +boost_log_setup_save_LDFLAGS=$LDFLAGS +BOOST_LOG([$1]) +m4_pattern_allow([^BOOST_LOG_(LIBS|LDFLAGS)$])dnl +LIBS="$LIBS $BOOST_LOG_LIBS" +LDFLAGS="$LDFLAGS $BOOST_LOG_LDFLAGS" +BOOST_FIND_LIB([log_setup], [$1], + [boost/log/utility/setup/from_settings.hpp], + [boost::log::basic_settings bs; bs.empty();]) +LIBS=$boost_log_setup_save_LIBS +LDFLAGS=$boost_log_setup_save_LDFLAGS +])# BOOST_LOG_SETUP + + +# BOOST_MATH() +# ------------ +# Look for Boost.Math +# TODO: This library isn't header-only but it comes in multiple different +# flavors that don't play well with BOOST_FIND_LIB (e.g, libboost_math_c99, +# libboost_math_c99f, libboost_math_c99l, libboost_math_tr1, +# libboost_math_tr1f, libboost_math_tr1l). This macro must be fixed to do the +# right thing anyway. +BOOST_DEFUN([Math], +[BOOST_FIND_HEADER([boost/math/special_functions.hpp])]) + + +# BOOST_MPI([PREFERRED-RT-OPT]) +# ------------------------------- +# Look for Boost MPI. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. Uses MPICXX variable if it is +# set, otherwise tries CXX +# +BOOST_DEFUN([MPI], +[boost_save_CXX=${CXX} +boost_save_CXXCPP=${CXXCPP} +if test x"${MPICXX}" != x; then + CXX=${MPICXX} + CXXCPP="${MPICXX} -E" +fi +BOOST_FIND_LIB([mpi], [$1], + [boost/mpi.hpp], + [int argc = 0; + char **argv = 0; + boost::mpi::environment env(argc,argv);]) +CXX=${boost_save_CXX} +CXXCPP=${boost_save_CXXCPP} +])# BOOST_MPI + + +# BOOST_MULTIARRAY() +# ------------------ +# Look for Boost.MultiArray +BOOST_DEFUN([MultiArray], +[BOOST_FIND_HEADER([boost/multi_array.hpp])]) + + +# BOOST_NUMERIC_UBLAS() +# -------------------------- +# Look for Boost.NumericUblas (Basic Linear Algebra) +BOOST_DEFUN([Numeric_Ublas], +[BOOST_FIND_HEADER([boost/numeric/ublas/vector.hpp]) +])# BOOST_NUMERIC_UBLAS + + +# BOOST_NUMERIC_CONVERSION() +# -------------------------- +# Look for Boost.NumericConversion (policy-based numeric conversion) +BOOST_DEFUN([Numeric_Conversion], +[BOOST_FIND_HEADER([boost/numeric/conversion/converter.hpp]) +])# BOOST_NUMERIC_CONVERSION + + +# BOOST_OPTIONAL() +# ---------------- +# Look for Boost.Optional +BOOST_DEFUN([Optional], +[BOOST_FIND_HEADER([boost/optional.hpp])]) + + +# BOOST_PREPROCESSOR() +# -------------------- +# Look for Boost.Preprocessor +BOOST_DEFUN([Preprocessor], +[BOOST_FIND_HEADER([boost/preprocessor/repeat.hpp])]) + + +# BOOST_RANGE() +# -------------------- +# Look for Boost.Range +BOOST_DEFUN([Range], +[BOOST_FIND_HEADER([boost/range/adaptors.hpp])]) + +# BOOST_UNORDERED() +# ----------------- +# Look for Boost.Unordered +BOOST_DEFUN([Unordered], +[BOOST_FIND_HEADER([boost/unordered_map.hpp])]) + + +# BOOST_UUID() +# ------------ +# Look for Boost.Uuid +BOOST_DEFUN([Uuid], +[BOOST_FIND_HEADER([boost/uuid/uuid.hpp])]) + + +# BOOST_PROGRAM_OPTIONS([PREFERRED-RT-OPT]) +# ----------------------------------------- +# Look for Boost.Program_options. For the documentation of PREFERRED-RT-OPT, +# see the documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Program_Options], +[BOOST_FIND_LIB([program_options], [$1], + [boost/program_options.hpp], + [boost::program_options::options_description d("test");]) +])# BOOST_PROGRAM_OPTIONS + + + +# _BOOST_PYTHON_CONFIG(VARIABLE, FLAG) +# ------------------------------------ +# Save VARIABLE, and define it via `python-config --FLAG`. +# Substitute BOOST_PYTHON_VARIABLE. +m4_define([_BOOST_PYTHON_CONFIG], +[AC_SUBST([BOOST_PYTHON_$1], + [`python-config --$2 2>/dev/null`])dnl +boost_python_save_$1=$$1 +$1="$$1 $BOOST_PYTHON_$1"]) + + +# BOOST_PYTHON([PREFERRED-RT-OPT]) +# -------------------------------- +# Look for Boost.Python. For the documentation of PREFERRED-RT-OPT, +# see the documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Python], +[_BOOST_PYTHON_CONFIG([CPPFLAGS], [includes]) +_BOOST_PYTHON_CONFIG([LDFLAGS], [ldflags]) +_BOOST_PYTHON_CONFIG([LIBS], [libs]) +m4_pattern_allow([^BOOST_PYTHON_MODULE$])dnl +BOOST_FIND_LIBS([python], [python python3], [$1], + [boost/python.hpp], + [], [BOOST_PYTHON_MODULE(empty) {}]) +CPPFLAGS=$boost_python_save_CPPFLAGS +LDFLAGS=$boost_python_save_LDFLAGS +LIBS=$boost_python_save_LIBS +])# BOOST_PYTHON + + +# BOOST_REF() +# ----------- +# Look for Boost.Ref +BOOST_DEFUN([Ref], +[BOOST_FIND_HEADER([boost/ref.hpp])]) + + +# BOOST_REGEX([PREFERRED-RT-OPT]) +# ------------------------------- +# Look for Boost.Regex. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Regex], +[BOOST_FIND_LIB([regex], [$1], + [boost/regex.hpp], + [boost::regex exp("*"); boost::regex_match("foo", exp);]) +])# BOOST_REGEX + + +# BOOST_SERIALIZATION([PREFERRED-RT-OPT]) +# --------------------------------------- +# Look for Boost.Serialization. For the documentation of PREFERRED-RT-OPT, see +# the documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Serialization], +[BOOST_FIND_LIB([serialization], [$1], + [boost/archive/text_oarchive.hpp], + [std::ostream* o = 0; // Cheap way to get an ostream... + boost::archive::text_oarchive t(*o);]) +])# BOOST_SERIALIZATION + + +# BOOST_SIGNALS([PREFERRED-RT-OPT]) +# --------------------------------- +# Look for Boost.Signals. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Signals], +[BOOST_FIND_LIB([signals], [$1], + [boost/signal.hpp], + [boost::signal s;]) +])# BOOST_SIGNALS + + +# BOOST_SIGNALS2() +# ---------------- +# Look for Boost.Signals2 (new since 1.39.0). +BOOST_DEFUN([Signals2], +[BOOST_FIND_HEADER([boost/signals2.hpp]) +])# BOOST_SIGNALS2 + + +# BOOST_SMART_PTR() +# ----------------- +# Look for Boost.SmartPtr +BOOST_DEFUN([Smart_Ptr], +[BOOST_FIND_HEADER([boost/scoped_ptr.hpp]) +BOOST_FIND_HEADER([boost/shared_ptr.hpp]) +]) + + +# BOOST_STATICASSERT() +# -------------------- +# Look for Boost.StaticAssert +BOOST_DEFUN([StaticAssert], +[BOOST_FIND_HEADER([boost/static_assert.hpp])]) + + +# BOOST_STRING_ALGO() +# ------------------- +# Look for Boost.StringAlgo +BOOST_DEFUN([String_Algo], +[BOOST_FIND_HEADER([boost/algorithm/string.hpp]) +]) + + +# BOOST_SYSTEM([PREFERRED-RT-OPT]) +# -------------------------------- +# Look for Boost.System. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. This library was introduced in Boost +# 1.35.0. +BOOST_DEFUN([System], +[BOOST_FIND_LIB([system], [$1], + [boost/system/error_code.hpp], + [boost::system::error_code e; e.clear();]) +])# BOOST_SYSTEM + + +# BOOST_TEST([PREFERRED-RT-OPT]) +# ------------------------------ +# Look for Boost.Test. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Test], +[m4_pattern_allow([^BOOST_CHECK$])dnl +BOOST_FIND_LIB([unit_test_framework], [$1], + [boost/test/unit_test.hpp], [BOOST_CHECK(2 == 2);], + [using boost::unit_test::test_suite; + test_suite* init_unit_test_suite(int argc, char ** argv) + { return NULL; }]) +])# BOOST_TEST + + +# BOOST_THREAD([PREFERRED-RT-OPT]) +# --------------------------------- +# Look for Boost.Thread. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Thread], +[dnl Having the pthread flag is required at least on GCC3 where +dnl boost/thread.hpp would complain if we try to compile without +dnl -pthread on GNU/Linux. +AC_REQUIRE([_BOOST_PTHREAD_FLAG])dnl +boost_thread_save_LIBS=$LIBS +boost_thread_save_LDFLAGS=$LDFLAGS +boost_thread_save_CPPFLAGS=$CPPFLAGS +# Link-time dependency from thread to system was added as of 1.49.0. +if test $boost_major_version -ge 149; then +BOOST_SYSTEM([$1]) +fi # end of the Boost.System check. +m4_pattern_allow([^BOOST_SYSTEM_(LIBS|LDFLAGS)$])dnl +LIBS="$LIBS $BOOST_SYSTEM_LIBS $boost_cv_pthread_flag" +LDFLAGS="$LDFLAGS $BOOST_SYSTEM_LDFLAGS" +CPPFLAGS="$CPPFLAGS $boost_cv_pthread_flag" + +# When compiling for the Windows platform, the threads library is named +# differently. This suffix doesn't exist in new versions of Boost, or +# possibly new versions of GCC on mingw I am assuming it's Boost's change for +# now and I am setting version to 1.48, for lack of knowledge as to when this +# change occurred. +if test $boost_major_version -lt 148; then + case $host_os in + (*mingw*) boost_thread_lib_ext=_win32;; + esac +fi +BOOST_FIND_LIBS([thread], [thread$boost_thread_lib_ext], + [$1], + [boost/thread.hpp], [boost::thread t; boost::mutex m;]) + +case $host_os in + (*mingw*) boost_thread_w32_socket_link=-lws2_32;; +esac + +BOOST_THREAD_LIBS="$BOOST_THREAD_LIBS $BOOST_SYSTEM_LIBS $boost_cv_pthread_flag $boost_thread_w32_socket_link" +BOOST_THREAD_LDFLAGS="$BOOST_SYSTEM_LDFLAGS" +BOOST_CPPFLAGS="$BOOST_CPPFLAGS $boost_cv_pthread_flag" +LIBS=$boost_thread_save_LIBS +LDFLAGS=$boost_thread_save_LDFLAGS +CPPFLAGS=$boost_thread_save_CPPFLAGS +])# BOOST_THREAD + +AU_ALIAS([BOOST_THREADS], [BOOST_THREAD]) + + +# BOOST_TOKENIZER() +# ----------------- +# Look for Boost.Tokenizer +BOOST_DEFUN([Tokenizer], +[BOOST_FIND_HEADER([boost/tokenizer.hpp])]) + + +# BOOST_TRIBOOL() +# --------------- +# Look for Boost.Tribool +BOOST_DEFUN([Tribool], +[BOOST_FIND_HEADER([boost/logic/tribool_fwd.hpp]) +BOOST_FIND_HEADER([boost/logic/tribool.hpp]) +]) + + +# BOOST_TUPLE() +# ------------- +# Look for Boost.Tuple +BOOST_DEFUN([Tuple], +[BOOST_FIND_HEADER([boost/tuple/tuple.hpp])]) + + +# BOOST_TYPETRAITS() +# -------------------- +# Look for Boost.TypeTraits +BOOST_DEFUN([TypeTraits], +[BOOST_FIND_HEADER([boost/type_traits.hpp])]) + + +# BOOST_UTILITY() +# --------------- +# Look for Boost.Utility (noncopyable, result_of, base-from-member idiom, +# etc.) +BOOST_DEFUN([Utility], +[BOOST_FIND_HEADER([boost/utility.hpp])]) + + +# BOOST_VARIANT() +# --------------- +# Look for Boost.Variant. +BOOST_DEFUN([Variant], +[BOOST_FIND_HEADER([boost/variant/variant_fwd.hpp]) +BOOST_FIND_HEADER([boost/variant.hpp])]) + + +# BOOST_POINTER_CONTAINER() +# ------------------------ +# Look for Boost.PointerContainer +BOOST_DEFUN([Pointer_Container], +[BOOST_FIND_HEADER([boost/ptr_container/ptr_deque.hpp]) +BOOST_FIND_HEADER([boost/ptr_container/ptr_list.hpp]) +BOOST_FIND_HEADER([boost/ptr_container/ptr_vector.hpp]) +BOOST_FIND_HEADER([boost/ptr_container/ptr_array.hpp]) +BOOST_FIND_HEADER([boost/ptr_container/ptr_set.hpp]) +BOOST_FIND_HEADER([boost/ptr_container/ptr_map.hpp]) +])# BOOST_POINTER_CONTAINER + + +# BOOST_WAVE([PREFERRED-RT-OPT]) +# ------------------------------ +# NOTE: If you intend to use Wave/Spirit with thread support, make sure you +# call BOOST_THREAD first. +# Look for Boost.Wave. For the documentation of PREFERRED-RT-OPT, see the +# documentation of BOOST_FIND_LIB above. +BOOST_DEFUN([Wave], +[AC_REQUIRE([BOOST_FILESYSTEM])dnl +AC_REQUIRE([BOOST_DATE_TIME])dnl +boost_wave_save_LIBS=$LIBS +boost_wave_save_LDFLAGS=$LDFLAGS +m4_pattern_allow([^BOOST_((FILE)?SYSTEM|DATE_TIME|THREAD)_(LIBS|LDFLAGS)$])dnl +LIBS="$LIBS $BOOST_SYSTEM_LIBS $BOOST_FILESYSTEM_LIBS $BOOST_DATE_TIME_LIBS \ +$BOOST_THREAD_LIBS" +LDFLAGS="$LDFLAGS $BOOST_SYSTEM_LDFLAGS $BOOST_FILESYSTEM_LDFLAGS \ +$BOOST_DATE_TIME_LDFLAGS $BOOST_THREAD_LDFLAGS" +BOOST_FIND_LIB([wave], [$1], + [boost/wave.hpp], + [boost::wave::token_id id; get_token_name(id);]) +LIBS=$boost_wave_save_LIBS +LDFLAGS=$boost_wave_save_LDFLAGS +])# BOOST_WAVE + + +# BOOST_XPRESSIVE() +# ----------------- +# Look for Boost.Xpressive (new since 1.36.0). +BOOST_DEFUN([Xpressive], +[BOOST_FIND_HEADER([boost/xpressive/xpressive.hpp])]) + + +# ----------------- # +# Internal helpers. # +# ----------------- # + + +# _BOOST_PTHREAD_FLAG() +# --------------------- +# Internal helper for BOOST_THREAD. Computes boost_cv_pthread_flag +# which must be used in CPPFLAGS and LIBS. +# +# Yes, we *need* to put the -pthread thing in CPPFLAGS because with GCC3, +# boost/thread.hpp will trigger a #error if -pthread isn't used: +# boost/config/requires_threads.hpp:47:5: #error "Compiler threading support +# is not turned on. Please set the correct command line options for +# threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)" +# +# Based on ACX_PTHREAD: http://autoconf-archive.cryp.to/acx_pthread.html +AC_DEFUN([_BOOST_PTHREAD_FLAG], +[AC_REQUIRE([AC_PROG_CXX])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_LANG_PUSH([C++])dnl +AC_CACHE_CHECK([for the flags needed to use pthreads], [boost_cv_pthread_flag], +[ boost_cv_pthread_flag= + # The ordering *is* (sometimes) important. Some notes on the + # individual items follow: + # (none): in case threads are in libc; should be tried before -Kthread and + # other compiler flags to prevent continual compiler warnings + # -lpthreads: AIX (must check this before -lpthread) + # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) + # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) + # -llthread: LinuxThreads port on FreeBSD (also preferred to -pthread) + # -pthread: GNU Linux/GCC (kernel threads), BSD/GCC (userland threads) + # -pthreads: Solaris/GCC + # -mthreads: MinGW32/GCC, Lynx/GCC + # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it + # doesn't hurt to check since this sometimes defines pthreads too; + # also defines -D_REENTRANT) + # ... -mt is also the pthreads flag for HP/aCC + # -lpthread: GNU Linux, etc. + # --thread-safe: KAI C++ + case $host_os in #( + *solaris*) + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + boost_pthread_flags="-pthreads -lpthread -mt -pthread";; #( + *) + boost_pthread_flags="-lpthreads -Kthread -kthread -llthread -pthread \ + -pthreads -mthreads -lpthread --thread-safe -mt";; + esac + # Generate the test file. + AC_LANG_CONFTEST([AC_LANG_PROGRAM([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0);])]) + for boost_pthread_flag in '' $boost_pthread_flags; do + boost_pthread_ok=false +dnl Re-use the test file already generated. + boost_pthreads__save_LIBS=$LIBS + LIBS="$LIBS $boost_pthread_flag" + AC_LINK_IFELSE([], + [if grep ".*$boost_pthread_flag" conftest.err; then + echo "This flag seems to have triggered warnings" >&AS_MESSAGE_LOG_FD + else + boost_pthread_ok=:; boost_cv_pthread_flag=$boost_pthread_flag + fi]) + LIBS=$boost_pthreads__save_LIBS + $boost_pthread_ok && break + done +]) +AC_LANG_POP([C++])dnl +])# _BOOST_PTHREAD_FLAG + + +# _BOOST_gcc_test(MAJOR, MINOR) +# ----------------------------- +# Internal helper for _BOOST_FIND_COMPILER_TAG. +m4_define([_BOOST_gcc_test], +["defined __GNUC__ && __GNUC__ == $1 && __GNUC_MINOR__ == $2 && !defined __ICC @ gcc$1$2"])dnl + +# _BOOST_mingw_test(MAJOR, MINOR) +# ----------------------------- +# Internal helper for _BOOST_FIND_COMPILER_TAG. +m4_define([_BOOST_mingw_test], +["defined __GNUC__ && __GNUC__ == $1 && __GNUC_MINOR__ == $2 && !defined __ICC && \ + (defined WIN32 || defined WINNT || defined _WIN32 || defined __WIN32 \ + || defined __WIN32__ || defined __WINNT || defined __WINNT__) @ mgw$1$2"])dnl + + +# _BOOST_FIND_COMPILER_TAG() +# -------------------------- +# Internal. When Boost is installed without --layout=system, each library +# filename will hold a suffix that encodes the compiler used during the +# build. The Boost build system seems to call this a `tag'. +AC_DEFUN([_BOOST_FIND_COMPILER_TAG], +[AC_REQUIRE([AC_PROG_CXX])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_CACHE_CHECK([for the toolset name used by Boost for $CXX], + [boost_cv_lib_tag], +[boost_cv_lib_tag=unknown +if test x$boost_cv_inc_path != xno; then + AC_LANG_PUSH([C++])dnl + # The following tests are mostly inspired by boost/config/auto_link.hpp + # The list is sorted to most recent/common to oldest compiler (in order + # to increase the likelihood of finding the right compiler with the + # least number of compilation attempt). + # Beware that some tests are sensible to the order (for instance, we must + # look for MinGW before looking for GCC3). + # I used one compilation test per compiler with a #error to recognize + # each compiler so that it works even when cross-compiling (let me know + # if you know a better approach). + # Known missing tags (known from Boost's tools/build/v2/tools/common.jam): + # como, edg, kcc, bck, mp, sw, tru, xlc + # I'm not sure about my test for `il' (be careful: Intel's ICC pre-defines + # the same defines as GCC's). + for i in \ + _BOOST_mingw_test(6, 2) \ + _BOOST_gcc_test(6, 2) \ + _BOOST_mingw_test(6, 1) \ + _BOOST_gcc_test(6, 1) \ + _BOOST_mingw_test(6, 0) \ + _BOOST_gcc_test(6, 0) \ + _BOOST_mingw_test(5, 3) \ + _BOOST_gcc_test(5, 3) \ + _BOOST_mingw_test(5, 2) \ + _BOOST_gcc_test(5, 2) \ + _BOOST_mingw_test(5, 1) \ + _BOOST_gcc_test(5, 1) \ + _BOOST_mingw_test(5, 0) \ + _BOOST_gcc_test(5, 0) \ + _BOOST_mingw_test(4, 10) \ + _BOOST_gcc_test(4, 10) \ + _BOOST_mingw_test(4, 9) \ + _BOOST_gcc_test(4, 9) \ + _BOOST_mingw_test(4, 8) \ + _BOOST_gcc_test(4, 8) \ + _BOOST_mingw_test(4, 7) \ + _BOOST_gcc_test(4, 7) \ + _BOOST_mingw_test(4, 6) \ + _BOOST_gcc_test(4, 6) \ + _BOOST_mingw_test(4, 5) \ + _BOOST_gcc_test(4, 5) \ + _BOOST_mingw_test(4, 4) \ + _BOOST_gcc_test(4, 4) \ + _BOOST_mingw_test(4, 3) \ + _BOOST_gcc_test(4, 3) \ + _BOOST_mingw_test(4, 2) \ + _BOOST_gcc_test(4, 2) \ + _BOOST_mingw_test(4, 1) \ + _BOOST_gcc_test(4, 1) \ + _BOOST_mingw_test(4, 0) \ + _BOOST_gcc_test(4, 0) \ + "defined __GNUC__ && __GNUC__ == 3 && !defined __ICC \ + && (defined WIN32 || defined WINNT || defined _WIN32 || defined __WIN32 \ + || defined __WIN32__ || defined __WINNT || defined __WINNT__) @ mgw" \ + _BOOST_gcc_test(3, 4) \ + _BOOST_gcc_test(3, 3) \ + "defined _MSC_VER && _MSC_VER >= 1500 @ vc90" \ + "defined _MSC_VER && _MSC_VER == 1400 @ vc80" \ + _BOOST_gcc_test(3, 2) \ + "defined _MSC_VER && _MSC_VER == 1310 @ vc71" \ + _BOOST_gcc_test(3, 1) \ + _BOOST_gcc_test(3, 0) \ + "defined __BORLANDC__ @ bcb" \ + "defined __ICC && (defined __unix || defined __unix__) @ il" \ + "defined __ICL @ iw" \ + "defined _MSC_VER && _MSC_VER == 1300 @ vc7" \ + _BOOST_gcc_test(2, 95) \ + "defined __MWERKS__ && __MWERKS__ <= 0x32FF @ cw9" \ + "defined _MSC_VER && _MSC_VER < 1300 && !defined UNDER_CE @ vc6" \ + "defined _MSC_VER && _MSC_VER < 1300 && defined UNDER_CE @ evc4" \ + "defined __MWERKS__ && __MWERKS__ <= 0x31FF @ cw8" + do + boost_tag_test=`expr "X$i" : 'X\([[^@]]*\) @ '` + boost_tag=`expr "X$i" : 'X[[^@]]* @ \(.*\)'` + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#if $boost_tag_test +/* OK */ +#else +# error $boost_tag_test +#endif +]])], [boost_cv_lib_tag=$boost_tag; break], []) + done +AC_LANG_POP([C++])dnl + case $boost_cv_lib_tag in #( + # Some newer (>= 1.35?) versions of Boost seem to only use "gcc" as opposed + # to "gcc41" for instance. + *-gcc | *'-gcc ') :;; #( Don't re-add -gcc: it's already in there. + gcc*) + boost_tag_x= + case $host_os in #( + darwin*) + if test $boost_major_version -ge 136; then + # The `x' added in r46793 of Boost. + boost_tag_x=x + fi;; + esac + # We can specify multiple tags in this variable because it's used by + # BOOST_FIND_LIB that does a `for tag in -$boost_cv_lib_tag' ... + boost_cv_lib_tag="$boost_tag_x$boost_cv_lib_tag -${boost_tag_x}gcc" + ;; #( + unknown) + AC_MSG_WARN([[could not figure out which toolset name to use for $CXX]]) + boost_cv_lib_tag= + ;; + esac +fi])dnl end of AC_CACHE_CHECK +])# _BOOST_FIND_COMPILER_TAG + + +# _BOOST_GUESS_WHETHER_TO_USE_MT() +# -------------------------------- +# Compile a small test to try to guess whether we should favor MT (Multi +# Thread) flavors of Boost. Sets boost_guess_use_mt accordingly. +AC_DEFUN([_BOOST_GUESS_WHETHER_TO_USE_MT], +[# Check whether we do better use `mt' even though we weren't ask to. +AC_LANG_PUSH([C++])dnl +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#if defined _REENTRANT || defined _MT || defined __MT__ +/* use -mt */ +#else +# error MT not needed +#endif +]])], [boost_guess_use_mt=:], [boost_guess_use_mt=false]) +AC_LANG_POP([C++])dnl +]) + +# _BOOST_AC_LINK_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# ------------------------------------------------------------------- +# Fork of _AC_LINK_IFELSE that preserves conftest.o across calls. Fragile, +# will break when Autoconf changes its internals. Requires that you manually +# rm -f conftest.$ac_objext in between to really different tests, otherwise +# you will try to link a conftest.o left behind by a previous test. +# Used to aggressively optimize BOOST_FIND_LIB (see the big comment in this +# macro). +# +# Don't use "break" in the actions, as it would short-circuit some code +# this macro runs after the actions. +m4_define([_BOOST_AC_LINK_IFELSE], +[m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl +rm -f conftest$ac_exeext +boost_save_ac_ext=$ac_ext +boost_use_source=: +# If we already have a .o, re-use it. We change $ac_ext so that $ac_link +# tries to link the existing object file instead of compiling from source. +test -f conftest.$ac_objext && ac_ext=$ac_objext && boost_use_source=false && + _AS_ECHO_LOG([re-using the existing conftest.$ac_objext]) +AS_IF([_AC_DO_STDERR($ac_link) && { + test -z "$ac_[]_AC_LANG_ABBREV[]_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_executable_p conftest$ac_exeext +dnl FIXME: use AS_TEST_X instead when 2.61 is widespread enough. + }], + [$2], + [if $boost_use_source; then + _AC_MSG_LOG_CONFTEST + fi + $3]) +ac_objext=$boost_save_ac_objext +ac_ext=$boost_save_ac_ext +dnl Delete also the IPA/IPO (Inter Procedural Analysis/Optimization) +dnl information created by the PGI compiler (conftest_ipa8_conftest.oo), +dnl as it would interfere with the next link command. +rm -f core conftest.err conftest_ipa8_conftest.oo \ + conftest$ac_exeext m4_ifval([$1], [conftest.$ac_ext])[]dnl +])# _BOOST_AC_LINK_IFELSE + +# Local Variables: +# mode: autoconf +# End: diff --git a/m4/libtool.m4 b/m4/libtool.m4 new file mode 100644 index 0000000000..10ab2844c4 --- /dev/null +++ b/m4/libtool.m4 @@ -0,0 +1,8388 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +]) + +# serial 58 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[[012]][[,.]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + m4_if([$1], [CXX], +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[[45]]*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 new file mode 100644 index 0000000000..94b0829766 --- /dev/null +++ b/m4/ltoptions.m4 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 new file mode 100644 index 0000000000..48bc9344a4 --- /dev/null +++ b/m4/ltsugar.m4 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 new file mode 100644 index 0000000000..fa04b52a3b --- /dev/null +++ b/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 4179 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.6' +macro_revision='2.4.6' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 new file mode 100644 index 0000000000..c6b26f88f6 --- /dev/null +++ b/m4/lt~obsolete.m4 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/release-notes.txt b/release-notes.txt deleted file mode 100644 index 1e6cf6fe4a..0000000000 --- a/release-notes.txt +++ /dev/null @@ -1,160 +0,0 @@ - -Shadowcoin Release Notes - - -Version 1.3.3.0 - - - Added BIP44 support - - - Added BIP39 support - - - Added smaller ring signatures - https://bitcointalk.org/index.php?topic=972541.msg10619684 - - - The goal for this release is to implement a framework for BIP32 - on which to build, the more interesting features possible with bip32 keys can - be implemented later. For this release we aim to implement a hierarchical - deterministic wallet - which means you can recover all the keys in a wallet - using only the master key. - - - Added basic BIP32 support - - - - Each extended key can derive 2^31 normal child keys and 2^31 hardened - child keys. - - - - - All new keys are deterministically generated from a master key. - - The complete wallet state (except key labels) can be recreated from - a single master key. - - - When the wallet is first started a new master bip32 key will be generated - from the master key, internal (child 1) and external (child 0) chains are - derived from the master key. - - The wallet will only generate a master key automatically once. - If the first master key is removed a new key will need to be imported - manually for the wallet to be able to generate keys. - - - - New prefix for base58 data - - extended key identifiers are represented in the same way as normal - shadow addresses, to prevent confusion a new prefix has been added. - Extended key identifiers begin with 'x' on live, on testnet with 'X' - - - New rpc function extkey, alias: bip32 - - - path - The path is a backslash deliminated string of digits. - m/3/4h/5 - Only backslashes, digits and m, h and ' may occur in the path. - - The tokens m and 0 can only be first or last in the path. - - - examples: - - extkey - - returns the child key according to the path - - extkey gen - - generates new key from random data - - extkey - Match bip32.org keys: bip32 gen "pass" 50000 "Bitcoin seed" - - - Notes - - The change address of anon transactions is picked as the first stealth - address of default account else the first legacy stealth address. - - - Added Gitian build descriptors - - See contrib/gitian-descriptors/README - - - SMSG ScanBlock harvest public keys from coinstake transactions - - - Added "Txn Type" field to txnreport - - - Added 'env' parameter to getinfo - - returns more environment specific information - - - Added simple command line interface to shadowcoind - - enabled with new parameter "cli" when not started as a daemon - - - Added createmultisig rpc command - - createmultisig does the same as existing command addmultisigaddress - except that the resulting address and script are not added to the wallet. - - - decoderawtransaction scriptPubKey includes the hex representation - - hex of a prevout scriptPubKey is required for signrawtransaction - - - signrawtransaction works when private keys are passed in as parameters - - adds redeemScript to the tempKeystore - - - Added option to disable SMSG scanning of incoming blocks. - - smsgoptions set scanIncoming false - - - smsgoptions command is now case insensitive - - smsgoptions list takes a bool parameter to list option descriptions - - - dumpprivkey takes a pubkey as input - - - More unit tests enabled - - The coin_selection_tests sometimes fail, it's related to the nSpendTime - parameter and isn't a real error. - - - Gui improvements - - Lock icon goes orange when system unlocked for staking only. - - Table pagination icons limited to 5. - - - - -Version 1.3.2.0 - - - Implemented PoS V2 - - - - Removed Thin mode staking - The network relies on full nodes for security. - Staking should be a reward for maintaining a full node. - - - - Removed hash from DiskBlockIndex - hash is saved in the key, no need to save it twice, 32 bytes saved per block - Key prefix "blockindex" changed to "bidx", 36 bytes saved per block - - - The TXDB version has been raised to 70510. - - On first boot the nodes will wipe any database before 70509 and initialise - a reindex, which will reload the TXDB from the stored blockchain. - - For Databases of verson 70509 an migration will run, significantly faster - than a reindex. All existing nodes should be on txdb version 70509. - - Thin nodes don't store the blockchain and will need to redownload. - - Note: Reindexing the chain could cause your failed stake transactions to be - detected as occuring during the reindex, and displayed at the top of the - transaction list. They can be removed by running clearwallettransactions - followed by reloadanondata. - - - - - Enabled unit tests - Compile: make -f makefile.unix test_shadow - Run: ./test_shadow --log_level=all - - - - - - printstakemodifier, printcoinstake and printcoinage are replaced by debugpos - - - - - - - - - - - - - diff --git a/scripts/.gitignore b/scripts/.gitignore new file mode 100644 index 0000000000..5ffd3ea162 --- /dev/null +++ b/scripts/.gitignore @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +.buildconfig diff --git a/scripts/build-boost-for-android.sh b/scripts/build-boost-for-android.sh new file mode 100755 index 0000000000..c962eefe71 --- /dev/null +++ b/scripts/build-boost-for-android.sh @@ -0,0 +1,128 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# =========================================================================== + +# =========================================================================== +# Store path from where script was called, determine own location +# and source helper content from there +callDir=$(pwd) +ownLocation="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +cd "${ownLocation}" || die 1 "Unable to cd into own location ${ownLocation}" +. ./include/helpers_console.sh +_init +. ./include/handle_buildconfig.sh + +ANDROID_NDK_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Android +ANDROID_NDK_ROOT=${ANDROID_NDK_ARCHIVE_LOCATION}/android-ndk-${ANDROID_NDK_VERSION} +ANDROID_ARCH=arm64 +ANDROID_API=22 +BOOST_LIBS_TO_BUILD=chrono + +helpMe() { + echo " + + Helper script to build Boost for Android. + + Usage: + ${0} [options] + + Optional parameters: + -a + -l + -n + Path to ndk directory. + -p + -v + Boost version to build. Default: ${BOOST_VERSION} + -h Show this help + + " +} + +HOST_SYSTEM='linux' + +# Determine system +# Determine amount of cores: +if [[ "$OSTYPE" == "linux-gnu" ]]; then + CORES_TO_USE=$(grep -c ^processor /proc/cpuinfo) +elif [[ "$OSTYPE" == "darwin"* ]]; then + # Mac OSX + CORES_TO_USE=$(system_profiler SPHardwareDataType | grep "Total Number of Cores" | tr -s " " | cut -d " " -f 6) + HOST_SYSTEM='darwin' +else + CORES_TO_USE=1 +fi + +while getopts a:l:n:p:v:h? option; do + case ${option} in + a) ANDROID_ARCH="${OPTARG}";; + c) CORES_TO_USE="${OPTARG}";; + l) BOOST_LIBS_TO_BUILD="${OPTARG}";; + n) ANDROID_NDK_ROOT="${OPTARG}";; + p) ANDROID_API="${OPTARG}";; + v) BOOST_VERSION="${OPTARG}";; + h|?) helpMe && exit 0;; + *) die 90 "invalid option \"${OPTARG}\"";; + esac +done + +info " -> Boost $BOOST_VERSION..." +cd "${callDir}" + +case ${ANDROID_ARCH} in + arm64) + jamEntry1="7.0~arm64" + jamEntry2="aarch64" + ;; + *) + jamEntry1="${ANDROID_ARCH}" + jamEntry2="${ANDROID_ARCH}" + ;; +esac + +set -eu +info " -> Generating config..." +echo "path-constant ndk : ${ANDROID_NDK_ROOT} ;" > "${ANDROID_ARCH}"-config.jam +if [[ "${ANDROID_ARCH}" = "armv7a" ]] ; then + echo "using clang : ${jamEntry1} : \$(ndk)/toolchains/llvm/prebuilt/${HOST_SYSTEM}-x86_64/bin/${jamEntry2}-linux-androideabi${ANDROID_API}-clang++ ;" >> "${ANDROID_ARCH}"-config.jam +else + echo "using clang : ${jamEntry1} : \$(ndk)/toolchains/llvm/prebuilt/${HOST_SYSTEM}-x86_64/bin/${jamEntry2}-linux-android${ANDROID_API}-clang++ ;" >> "${ANDROID_ARCH}"-config.jam +fi + +info " -> Bootstrapping..." +#./bootstrap.sh #--with-toolset=clang +./bootstrap.sh #--with-libraries=${BOOST_LIBS_TO_BUILD} + +info " -> Building boost with './b2 -d+2 \ + -j ${CORES_TO_USE} \ + --reconfigure \ + target-os=android \ + toolset=clang-${jamEntry1} \ + link=static \ + variant=release \ + threading=multi \ + cxxflags="-std=c++14 -fPIC" \ + --with-${BOOST_LIBS_TO_BUILD//,/ --with-} \ + --user-config=${ANDROID_ARCH}-config.jam \ + --prefix=$(pwd)/../boost_${BOOST_VERSION//./_} \ + install'" +./b2 -d+2 \ + -j "${CORES_TO_USE}" \ + --reconfigure \ + target-os=android \ + toolset=clang-"${jamEntry1}" \ + link=static \ + variant=release \ + threading=multi \ + cxxflags="-std=c++14 -fPIC" \ + --with-${BOOST_LIBS_TO_BUILD//,/ --with-} \ + --user-config="${ANDROID_ARCH}"-config.jam \ + --prefix="$(pwd)"/../boost_"${BOOST_VERSION//./_}" \ + install +info " -> Done!" +#read a diff --git a/scripts/build-in-docker.ps1 b/scripts/build-in-docker.ps1 new file mode 100644 index 0000000000..b57fbca0bc --- /dev/null +++ b/scripts/build-in-docker.ps1 @@ -0,0 +1,74 @@ +# Build the modernized Alias wallet inside Docker. +# +# Usage: +# pwsh -File scripts/build-in-docker.ps1 # Linux build (default) +# pwsh -File scripts/build-in-docker.ps1 -Target windows # Windows cross-compile +# +# Output: +# ./dist/linux-x86_64/aliaswalletd +# ./dist/linux-x86_64/aliaswallet +# ./dist/windows-x86_64/*.exe (when -Target windows) +# +# Requirements: +# - Docker Desktop installed and running +# - ~4 GB free disk space for the Linux build image, +# ~10 GB for the Windows cross-compile (depends/ builds Qt+Boost+OpenSSL). +# - First Linux build: ~30 min. First Windows build: ~100-130 min. + +[CmdletBinding()] +param( + [ValidateSet("linux","windows")] + [string]$Target = "linux", + [int]$Jobs = 4 +) + +$ErrorActionPreference = "Stop" + +# Sanity check Docker is up. +$d = Get-Command docker -ErrorAction SilentlyContinue +if (-not $d) { + Write-Error "Docker is not on PATH. Install Docker Desktop and re-open this shell." + exit 1 +} +try { + docker info --format '{{.ServerVersion}}' | Out-Null +} catch { + Write-Error "Docker daemon is not running. Start Docker Desktop and try again." + exit 1 +} + +switch ($Target) { + "linux" { $image = "alias-modernized:latest"; $dockerfile = "Dockerfile"; $outArch = "linux-x86_64" } + "windows" { $image = "alias-modernized-win:latest"; $dockerfile = "Dockerfile.win"; $outArch = "windows-x86_64" } +} + +$repoRoot = Resolve-Path (Join-Path $PSScriptRoot "..") +Set-Location $repoRoot + +Write-Host "Target: $Target" +Write-Host "Repo root: $repoRoot" +Write-Host "Image tag: $image" +Write-Host "Dockerfile: $dockerfile" +Write-Host "Output dir: dist/$outArch/" +Write-Host "Jobs: $Jobs" +Write-Host "" + +# Build +Write-Host "==> docker build (this is the long step)" +docker build --progress=plain --build-arg JOBS=$Jobs -t $image -f $dockerfile . +if ($LASTEXITCODE -ne 0) { + Write-Error "docker build failed." + exit $LASTEXITCODE +} + +# Extract artifacts to dist/-/ +$outDir = Join-Path $repoRoot "dist/$outArch" +if (-not (Test-Path $outDir)) { New-Item -ItemType Directory -Path $outDir -Force | Out-Null } + +Write-Host "" +Write-Host "==> extracting artifacts to $outDir" +docker run --rm -v "${outDir}:/host-out" $image sh -c "cp -v /build-out/* /host-out/ 2>/dev/null || true" + +Write-Host "" +Write-Host "==> artifacts:" +Get-ChildItem $outDir | Select-Object Name, @{N='MB';E={[math]::Round($_.Length/1MB,1)}}, LastWriteTime diff --git a/scripts/cmake-build-android_arm64.sh b/scripts/cmake-build-android_arm64.sh new file mode 100755 index 0000000000..bd5c7c2f10 --- /dev/null +++ b/scripts/cmake-build-android_arm64.sh @@ -0,0 +1,1121 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2019-10-22 HLXEasy +# +# This script can be used to build Alias for Android using CMake +# +# =========================================================================== + +# =========================================================================== +# Store path from where script was called, determine own location +# and source helper content from there +callDir=$(pwd) +ownLocation="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "${ownLocation}" || die 1 "Unable to cd into own location ${ownLocation}" +. ./include/helpers_console.sh +_init +. ./include/handle_buildconfig.sh + +##### ### # Global definitions # ### ######################################## +##### ### # Android # ### ################################################### +ANDROID_NDK_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Android +ANDROID_NDK_ROOT=${ANDROID_NDK_ARCHIVE_LOCATION}/android-ndk-${ANDROID_NDK_VERSION} +ANDROID_TOOLCHAIN_CMAKE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake +ANDROID_ARCH=arm64 +ANDROID_ABI=arm64-v8a +ANDROID_API=26 + +##### ### # Android Qt # ### ################################################ +ANDROID_QT_DIR=${QT_INSTALLATION_PATH}/${QT_VERSION_ANDROID}/android +ANDROID_QT_LIBRARYDIR=${ANDROID_QT_DIR}/lib + +##### ### # Boost # ### ##################################################### +# Location of Boost will be resolved by trying to find required Boost libs +BOOST_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Boost +BOOST_REQUIRED_LIBS='chrono filesystem iostreams program_options system thread regex date_time atomic' +# regex date_time atomic + +##### ### # Qt # ### ######################################################## +# Location of Qt will be resolved by trying to find required Qt libs +QT_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Qt +QT_REQUIRED_LIBS='Core Widgets WebView WebChannel WebSockets QuickWidgets Quick Gui Qml Network' + +##### ### # BerkeleyDB # ### ################################################ +# Location of archive will be resolved like this: +# ${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz +BERKELEYDB_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/BerkeleyDB + +##### ### # OpenSSL # ### ################################################### +# Location of archive will be resolved like this: +# ${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz +#OPENSSL_ARCHIVE_LOCATION=https://mirror.viaduck.org/openssl +OPENSSL_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/OpenSSL + +##### ### # EventLib # ### ################################################## +# Location of archive will be resolved like this: +# ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz +LIBEVENT_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/EventLib + +##### ### # ZLib # ### ###################################################### +# Location of archive will be resolved like this: +# ${LIBZ_ARCHIVE_LOCATION}/v${LIBZ_BUILD_VERSION}.tar.gz +LIBZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/ZLib + +##### ### # XZLib # ### ##################################################### +# Location of archive will be resolved like this: +# ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz +LIBXZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/XZLib + +##### ### # Tor # ### ####################################################### +# Location of archive will be resolved like this: +# ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz +TOR_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Tor + +BUILD_DIR=cmake-build-cmdline-android${ANDROID_API}_${ANDROID_ARCH} + +helpMe() { + echo " + + Helper script to build Alias wallet and daemon using CMake. + Required library archives will be downloaded once and will be used + on subsequent builds. This includes also Android NDK. + + Default download location is ~/Archives. You can change this by + modifying '${ownLocation}/scripts/.buildconfig'. + + Usage: + ${0} [options] + + Optional parameters: + -c + The amount of cores to use for build. If not using this option + the script determines the available cores on this machine. + Not used for build steps of external libraries like OpenSSL or + BerkeleyDB. + -d Do _not_ build Alias but only the dependencies. Used to prepare + build slaves a/o builder docker images. + -f Perform fullbuild by cleanup all generated data from previous + build runs. + -g Build GUI (Qt) components + -o Perfom only Alias fullbuild. Only the alias buildfolder + will be wiped out before. All other folders stay in place. + -p + Build/install the required dependencies onto the given directory. + With this option the required dependencies could be located outside + the Git clone. This is useful + a) to have them only once at the local machine, even if working + with multiple Git clones and + b) to have them separated from the project itself, which is a must + if using Qt Creator. Otherwise Qt Creator always scans and finds + all the other content again and again. + Given value must be an absolute path or relative to the root of the + Git clone. + -s Use Qt from system + -t Build with included Tor + -h Show this help + + " +} + +# ===== Start of openssl functions =========================================== +checkOpenSSLArchive() { + if [[ -e "${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using OpenSSL archive ${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz" + else + OPENSSL_ARCHIVE_URL=https://mirror.viaduck.org/openssl/openssl-${OPENSSL_BUILD_VERSION}.tar.gz + info " -> Downloading OpenSSL archive ${OPENSSL_ARCHIVE_URL}" + if [[ ! -e ${OPENSSL_ARCHIVE_LOCATION} ]]; then + mkdir -p ${OPENSSL_ARCHIVE_LOCATION} + fi + cd ${OPENSSL_ARCHIVE_LOCATION} + wget ${OPENSSL_ARCHIVE_URL} + cd - >/dev/null + fi +} + +# For OpenSSL we're using a fork of https://github.com/viaduck/openssl-cmake +# with some slight modifications for Alias +checkOpenSSLClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d openssl-cmake ]]; then + info " -> Updating openssl-cmake clone" + cd openssl-cmake + git pull --prune + else + info " -> Cloning openssl-cmake" + git clone --branch alias https://github.com/aliascash/openssl-cmake.git openssl-cmake + fi + cd "${currentDir}" +} + +checkOpenSSLBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl" + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished openssl build and install" + else + die ${rtc} " => OpenSSL build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkOpenSSL() { + info "" + info "OpenSSL:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libssl.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libssl.a, skip build" + else + checkOpenSSLArchive + checkOpenSSLClone + checkOpenSSLBuild + fi +} +# ===== End of openssl functions ============================================= + +# ============================================================================ + +# ===== Start of berkeleydb functions ======================================== +checkBerkeleyDBArchive() { + if [[ -e "${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using BerkeleyDB archive ${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz" + else + BERKELEYDB_ARCHIVE_URL=https://download.oracle.com/berkeley-db/db-${BERKELEYDB_BUILD_VERSION}.tar.gz + info " -> Downloading BerkeleyDB archive ${BERKELEYDB_ARCHIVE_URL}" + if [[ ! -e ${BERKELEYDB_ARCHIVE_LOCATION} ]]; then + mkdir -p ${BERKELEYDB_ARCHIVE_LOCATION} + fi + cd ${BERKELEYDB_ARCHIVE_LOCATION} || die 1 "Unable to cd into ${BERKELEYDB_ARCHIVE_LOCATION}" + wget ${BERKELEYDB_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkBerkeleyDBBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb" + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished BerkeleyDB (libdb) build and install" + else + die ${rtc} " => BerkeleyDB (libdb) build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkBerkeleyDB() { + info "" + info "BerkeleyDB:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install/lib/libdb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install/lib/libdb.a, skip build" + else + checkBerkeleyDBArchive + checkBerkeleyDBBuild + fi +} +# ===== End of berkeleydb functions ========================================== + +# ============================================================================ + +# ===== Start of boost functions ============================================= +checkBoostArchive() { + local currentDir=$(pwd) + if [[ ! -e ${BOOST_ARCHIVE_LOCATION} ]]; then + mkdir -p ${BOOST_ARCHIVE_LOCATION} + fi + cd ${BOOST_ARCHIVE_LOCATION} || die 1 "Unable to cd into ${BOOST_ARCHIVE_LOCATION}" + if [[ ! -e "boost_${BOOST_VERSION//./_}.tar.gz" ]]; then + info " -> Downloading Boost archive" + wget https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION//./_}.tar.gz + else + info " -> Using existing Boost archive" + fi + + info " -> Verifying Boost archive checksum" + determinedChecksum=$(sha256sum boost_${BOOST_VERSION//./_}.tar.gz | awk '{ print $1 }') + info " Expected checksum: ${BOOST_ARCHIVE_HASH}" + info " Determined checksum: ${determinedChecksum}" + if [[ "${BOOST_ARCHIVE_HASH}" != "${determinedChecksum}" ]] ; then + die 2 " => Checksum of downloaded Boost archive not matching expected value!" + else + info " -> Checksum OK" + fi +} + +buildBoost() { + info " -> Building Boost on ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + cd "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + info " -> Cleanup before extraction" + rm -rf boost_${BOOST_VERSION//./_} + info " -> Extracting Boost archive" + tar xzf ${BOOST_ARCHIVE_LOCATION}/boost_${BOOST_VERSION//./_}.tar.gz + info " -> Building Boost" + cd boost_${BOOST_VERSION//./_} || die 1 "Unable to cd into boost_${BOOST_VERSION//./_}" + "${ownLocation}"/build-boost-for-android.sh -v ${BOOST_VERSION} -a ${ANDROID_ARCH} -p ${ANDROID_API} -n ${ANDROID_NDK_ROOT} -l "${BOOST_REQUIRED_LIBS// /,}" + cd "${currentDir}" || die 1 "Unable to cd into ${currentDir}" +} + +checkBoost() { + info "" + info "Boost:" + info " -> Searching required static Boost libs" + BOOST_ROOT=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/boost_${BOOST_VERSION//./_} + BOOST_INCLUDEDIR=${BOOST_ROOT}/include + BOOST_LIBRARYDIR=${BOOST_ROOT}/lib + boostBuildRequired=false + if [[ -d ${BOOST_LIBRARYDIR} ]]; then + for currentBoostDependency in ${BOOST_REQUIRED_LIBS}; do + if [[ -e ${BOOST_LIBRARYDIR}/libboost_${currentBoostDependency}.a ]]; then + info " -> ${currentBoostDependency}: OK" + else + warning " => ${currentBoostDependency}: Not found!" + boostBuildRequired=true + fi + done + else + warning " => Boost library directory ${BOOST_LIBRARYDIR} not found!" + boostBuildRequired=true + fi + if ${boostBuildRequired} ; then + checkBoostArchive + buildBoost + else + info " => All Boost requirements found" + fi +} +# ===== End of boost functions =============================================== + +# ============================================================================ + +# ===== Start of Qt functions ================================================ +checkQt() { + info "" + info "Qt:" + info " -> Searching required Qt libs" + qtComponentMissing=false + if [[ -d ${ANDROID_QT_LIBRARYDIR} ]]; then + # libQt5Quick.so + for currentQtDependency in ${QT_REQUIRED_LIBS}; do + if [[ -n $(find ${ANDROID_QT_LIBRARYDIR}/ -name "libQt5${currentQtDependency}_${ANDROID_ABI}.so") ]]; then + info " -> ${currentQtDependency}: OK" + else + warning " -> ${currentQtDependency}: Not found!" + qtComponentMissing=true + fi + done + else + info " -> Qt library directory ${ANDROID_QT_LIBRARYDIR} not found" + qtComponentMissing=true + fi + if ${qtComponentMissing}; then + error " -> Qt ${QT_VERSION}: Not all required components found!" + error "" + die 43 "Stopping build because of missing Qt" + + # Maybe used later: Build Qt ourself + local currentDir=$(pwd) + if [[ ! -e ${QT_ARCHIVE_LOCATION} ]]; then + mkdir -p ${QT_ARCHIVE_LOCATION} + fi + cd ${QT_ARCHIVE_LOCATION} + if [[ ! -e "qt-everywhere-src-${QT_VERSION}.tar.xz" ]]; then + info " -> Downloading Qt archive" + wget https://download.qt.io/archive/qt/${QT_VERSION%.*}/${QT_VERSION}/single/qt-everywhere-src-${QT_VERSION}.tar.xz + else + info " -> Using existing Qt archive" + fi + info " -> Verifying archive checksum" + determinedMD5Sum=$(md5sum qt-everywhere-src-${QT_VERSION}.tar.xz | cut -d ' ' -f 1) + if [[ "${determinedMD5Sum}" != "${QT_ARCHIVE_HASH}" ]]; then + warning " => Checksum of downloaded archive not matching expected value of ${QT_ARCHIVE_HASH}: ${determinedMD5Sum}" + else + info " -> Archive checksum ok" + fi + info " -> Cleanup before extraction" + rm -rf qt-everywhere-src-${QT_VERSION} + info " -> Extracting Qt archive" + tar xf qt-everywhere-src-${QT_VERSION}.tar.xz + info " -> Configuring Qt build" + cd qt-everywhere-src-${QT_VERSION} + ./configure \ + -xplatform android-clang \ + --disable-rpath \ + -nomake tests \ + -nomake examples \ + -android-ndk ${ANDROID_NDK_ROOT} \ + -android-sdk ${ANDROID_SDK_ROOT} \ + -android-arch ${ANDROID_ABI} \ + -android-ndk-platform android-${ANDROID_API} \ + -no-warnings-are-errors \ + -opensource \ + -confirm-license \ + -silent \ + -prefix ${ANDROID_QT_INSTALLATION_DIR} || die 23 "Error during Qt configure step" + info " -> Building Qt" + make -j"${CORES_TO_USE}" || die 24 "Error during Qt build step" + info " -> Installing Qt" + make install || die 25 "Error during Qt install step" + cd "${currentDir}" + fi +} +# ===== End of Qt functions ================================================== + +# ============================================================================ + +# ===== Start of libevent functions ========================================== +checkEventLibArchive() { + if [[ -e "${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" ]]; then + info " -> Using EventLib archive ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" + else + LIBEVENT_ARCHIVE_URL=https://github.com/libevent/libevent/releases/download/release-${LIBEVENT_BUILD_VERSION}-stable/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz + info " -> Downloading EventLib archive ${LIBEVENT_ARCHIVE_URL}" + if [[ ! -e ${LIBEVENT_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBEVENT_ARCHIVE_LOCATION} + fi + cd ${LIBEVENT_ARCHIVE_LOCATION} + wget ${LIBEVENT_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkEventLibClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d libevent ]]; then + info " -> Updating libevent clone" + cd libevent + git pull --prune + else + info " -> Cloning libevent" + git clone https://github.com/libevent/libevent.git libevent + fi + cd "${currentDir}" +} + +checkEventLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libevent build, installing..." + make install || die $? " => Error during installation of libevent" + else + die ${rtc} " => libevent build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkEventLib() { + info "" + info "EventLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a, skip build" + else + checkEventLibClone + checkEventLibBuild + fi +} +# ===== End of libevent functions ============================================ + +# ============================================================================ + +# ===== Start of leveldb functions =========================================== +checkLevelDBClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d leveldb ]]; then + info " -> Updating LevelDB clone" + cd leveldb + git pull --prune + else + info " -> Cloning LevelDB" + git clone https://github.com/google/leveldb.git leveldb + cd leveldb + fi + info " -> Checkout release ${LEVELDB_VERSION}" + git checkout ${LEVELDB_VERSION_TAG} + cd "${currentDir}" +} + +checkLevelDBBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libevent build, installing..." + make install || die $? "Error during installation of libleveldb" + else + die ${rtc} " => libleveldb build failed with return code ${rtc}" + fi + # read a + cd - >/dev/null +} + +checkLevelDB() { + info "" + info "LevelDB:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a, skip build" + else + checkLevelDBClone + checkLevelDBBuild + fi +} +# ===== End of leveldb functions ============================================= + +# ============================================================================ + +# ===== Start of libzstd functions =========================================== +checkZStdLibArchive() { + if [[ -e "${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using ZLib archive ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" + else + LIBZ_ARCHIVE_URL=https://github.com/facebook/zstd/releases/download/v${LIBZ_BUILD_VERSION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + info " -> Downloading ZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBZ_ARCHIVE_LOCATION} + fi + cd ${LIBZ_ARCHIVE_LOCATION} + wget ${LIBZ_ARCHIVE_URL} + cd - >/dev/null + fi + cd ${ownLocation}/../external + if [[ -d libzstd ]]; then + info " -> Directory external/libzstd already existing. Remove it to extract it again" + else + info " -> Extracting zstd-${LIBZ_BUILD_VERSION}.tar.gz..." + tar xzf ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + mv zstd-${LIBZ_BUILD_VERSION} libzstd + fi + cd - >/dev/null +} + +checkZStdLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libzstd build, installing..." + make install || die $? "Error during installation of libzstd" + else + die ${rtc} " => libzstd build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkZStdLib() { + info "" + info "ZStdLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a, skip build" + else + checkZStdLibArchive + checkZStdLibBuild + fi +} +# ===== End of libzstd functions ============================================= + +# ============================================================================ + +# ===== Start of libxz functions ============================================= +checkXZLibArchive() { + if [[ -e "${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using XZLib archive ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" + else + LIBXZ_ARCHIVE_URL=https://tukaani.org/xz/xz-${LIBXZ_BUILD_VERSION}.tar.gz + info " -> Downloading XZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBXZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBXZ_ARCHIVE_LOCATION} + fi + cd ${LIBXZ_ARCHIVE_LOCATION} + wget ${LIBXZ_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkXZLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libxz build and install" + else + die ${rtc} " => libxz build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkXZLib() { + info "" + info "XZLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a, skip build" + else + checkXZLibArchive + checkXZLibBuild + fi +} +# ===== End of libxz functions =============================================== + +# ============================================================================ + +# ===== Start of tor functions =============================================== +checkTorArchive() { + if [[ -e "${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz" ]]; then + info " -> Using Tor archive ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz" + else + # TOR_ARCHIVE_URL=https://github.com/torproject/tor/archive/tor-${TOR_BUILD_VERSION}.tar.gz + TOR_ARCHIVE_URL=https://github.com/guardianproject/tor/archive/tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz + info " -> Downloading Tor archive ${TOR_ARCHIVE_URL}" + if [[ ! -e ${TOR_ARCHIVE_LOCATION} ]]; then + mkdir -p ${TOR_ARCHIVE_LOCATION} + fi + cd ${TOR_ARCHIVE_LOCATION} + wget ${TOR_ARCHIVE_URL} -O tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz + cd - >/dev/null + fi +} + +checkTorBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished tor build and install" + else + die ${rtc} " => Tor build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkTor() { + info "" + info "Tor:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor, skip build" + else + checkTorArchive + checkTorBuild + fi +} +# ===== End of libxz functions =============================================== + +# ============================================================================ + +# ===== Start of NDK functions =============================================== +checkNDKArchive() { + info "" + info "NDK:" + info " -> Searching Android toolchain file ${ANDROID_TOOLCHAIN_CMAKE}" + if [[ -e ${ANDROID_TOOLCHAIN_CMAKE} ]]; then + info " -> Found it! :-)" + else + warning " -> Android toolchain file ${ANDROID_TOOLCHAIN_CMAKE} not found!" + local currentDir=$(pwd) + if [[ ! -e ${ANDROID_NDK_ARCHIVE_LOCATION} ]]; then + mkdir -p ${ANDROID_NDK_ARCHIVE_LOCATION} + fi + cd ${ANDROID_NDK_ARCHIVE_LOCATION} + if [[ -e "${ANDROID_NDK_ARCHIVE}" ]]; then + info " -> Using existing NDK archive" + else + ANDROID_NDK_ARCHIVE_URL=https://dl.google.com/android/repository/${ANDROID_NDK_ARCHIVE} + info " -> Downloading NDK archive ${ANDROID_NDK_ARCHIVE_URL}" + wget ${ANDROID_NDK_ARCHIVE_URL} + fi + info " -> Cleanup before extraction" + rm -rf android-ndk-${ANDROID_NDK_VERSION} + info " -> Extracting NDK archive" + unzip ${ANDROID_NDK_ARCHIVE} + cd - >/dev/null + fi +} +# ===== End of NDK functions ================================================= + +# ============================================================================ + +# Determine system +# Determine amount of cores: +if [[ "$OSTYPE" == "linux-gnu" ]]; then + CORES_TO_USE=$(grep -c ^processor /proc/cpuinfo) + ANDROID_NDK_ARCHIVE=android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip +elif [[ "$OSTYPE" == "darwin"* ]]; then + # Mac OSX + CORES_TO_USE=$(system_profiler SPHardwareDataType | grep "Total Number of Cores" | tr -s " " | cut -d " " -f 6) + ANDROID_NDK_ARCHIVE=android-ndk-${ANDROID_NDK_VERSION}-darwin-x86_64.zip +#elif [[ "$OSTYPE" == "cygwin" ]]; then +# # POSIX compatibility layer and Linux environment emulation for Windows +#elif [[ "$OSTYPE" == "msys" ]]; then +# # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) +#elif [[ "$OSTYPE" == "win32" ]]; then +# # I'm not sure this can happen. +#elif [[ "$OSTYPE" == "freebsd"* ]]; then +# CORES_TO_USE=1 +else + CORES_TO_USE=1 +fi + +FULLBUILD=false +ENABLE_GUI=false +ENABLE_GUI_PARAMETERS='OFF' +BUILD_ONLY_ALIAS=false +BUILD_ONLY_DEPENDENCIES=false +WITH_TOR=false +GIVEN_DEPENDENCIES_BUILD_DIR='' + +while getopts a:c:dfgop:th? option; do + case ${option} in + a) ANDROID_TOOLCHAIN_CMAKE="${OPTARG}" ;; + c) CORES_TO_USE="${OPTARG}" ;; + d) BUILD_ONLY_DEPENDENCIES=true ;; + f) FULLBUILD=true ;; + g) + ENABLE_GUI=true + ENABLE_GUI_PARAMETERS="ON -DQT_CMAKE_MODULE_PATH=${ANDROID_QT_LIBRARYDIR}/cmake" + ;; + o) BUILD_ONLY_ALIAS=true ;; + p) GIVEN_DEPENDENCIES_BUILD_DIR="${OPTARG}" ;; + t) WITH_TOR=true ;; + h | ?) helpMe && exit 0 ;; + *) die 90 "invalid option \"${OPTARG}\"" ;; + esac +done + +# Go to alias-wallet repository root directory +cd .. + +# ============================================================================ +# Handle given path to dependency location +if [[ -n "${GIVEN_DEPENDENCIES_BUILD_DIR}" ]] ; then + # ${GIVEN_DEPENDENCIES_BUILD_DIR} is set, + # so store given path on build configuration + if [[ "${GIVEN_DEPENDENCIES_BUILD_DIR}" = /* ]]; then + # Absolute path given + DEPENDENCIES_BUILD_DIR=${GIVEN_DEPENDENCIES_BUILD_DIR} + else + # Relative path given + DEPENDENCIES_BUILD_DIR=${ownLocation}/../${GIVEN_DEPENDENCIES_BUILD_DIR} + fi + storeDependenciesBuildDir "${DEPENDENCIES_BUILD_DIR}" +fi + +# ============================================================================ +# If ${DEPENDENCIES_BUILD_DIR} is empty, no path to the dependencies is given +# or stored on script/.buildproperties. In this case use default location +# inside of Git clone +if [[ -z "${DEPENDENCIES_BUILD_DIR}" ]] ; then + DEPENDENCIES_BUILD_DIR=${ownLocation}/.. +fi + +info "" +info "Building/using dependencies on/from directory:" +info " -> ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + +if [[ ! -d ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR} ]]; then + info "" + info "Creating dependency build directory ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + mkdir -p "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + info " -> Done" +fi + +cd "${DEPENDENCIES_BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}" +DEPENDENCIES_BUILD_DIR=$(pwd) + +# ============================================================================ +# Handle which parts should be build +cd "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" +if ${FULLBUILD}; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +# ============================================================================ +# Check a/o build requirements/dependencies +checkNDKArchive +checkBoost +checkBerkeleyDB +checkLevelDB +checkOpenSSL +if ${WITH_TOR}; then + checkXZLib + checkZStdLib + checkEventLib + checkTor +fi +if ${ENABLE_GUI}; then + checkQt +fi + +# ============================================================================ +# Only dependencies should be build, so exit here +if ${BUILD_ONLY_DEPENDENCIES}; then + info "" + info "Checked a/o built all required dependencies." + exit +fi + +# ============================================================================ +# Dependencies are ready. Go ahead with the main project +ALIAS_BUILD_DIR=${ownLocation}/../${BUILD_DIR}/aliaswallet +if [[ ! -d ${ALIAS_BUILD_DIR} ]]; then + info "" + info "Creating Alias build directory ${ALIAS_BUILD_DIR}" + mkdir -p "${ALIAS_BUILD_DIR}" + info " -> Done" +fi +cd "${ALIAS_BUILD_DIR}" || die 1 "Unable to cd into Alias build directory '${ALIAS_BUILD_DIR}'" + +# Update $ALIAS_BUILD_DIR with full path +ALIAS_BUILD_DIR=$(pwd) + +# If requested, cleanup leftovers from previous build +if [[ ${FULLBUILD} = true ]] || [[ ${BUILD_ONLY_ALIAS} = true ]]; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +info "" +info "Generating Alias build configuration" +read -r -d '' cmd < Finished" +else + error " => Finished with return code ${rtc}" +fi +cd "${callDir}" || die 1 "Unable to cd back to where we came from (${callDir})" diff --git a/scripts/cmake-build-android_armv7.sh b/scripts/cmake-build-android_armv7.sh new file mode 100755 index 0000000000..a317f92ff3 --- /dev/null +++ b/scripts/cmake-build-android_armv7.sh @@ -0,0 +1,1122 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2019-10-22 HLXEasy +# +# This script can be used to build Alias for Android using CMake +# +# =========================================================================== + +# =========================================================================== +# Store path from where script was called, determine own location +# and source helper content from there +callDir=$(pwd) +ownLocation="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "${ownLocation}" || die 1 "Unable to cd into own location ${ownLocation}" +. ./include/helpers_console.sh +_init +. ./include/handle_buildconfig.sh + +##### ### # Global definitions # ### ######################################## +##### ### # Android # ### ################################################### +ANDROID_NDK_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Android +ANDROID_NDK_ROOT=${ANDROID_NDK_ARCHIVE_LOCATION}/android-ndk-${ANDROID_NDK_VERSION} +ANDROID_TOOLCHAIN_CMAKE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake +ANDROID_ARCH=armv7a +ANDROID_ABI=armeabi-v7a +ANDROID_API=26 + +##### ### # Android Qt # ### ################################################ +ANDROID_QT_DIR=${QT_INSTALLATION_PATH}/${QT_VERSION_ANDROID}/android +ANDROID_QT_LIBRARYDIR=${ANDROID_QT_DIR}/lib + +##### ### # Boost # ### ##################################################### +# Location of Boost will be resolved by trying to find required Boost libs +BOOST_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Boost +BOOST_REQUIRED_LIBS='chrono filesystem iostreams program_options system thread regex date_time atomic' +# regex date_time atomic + +##### ### # Qt # ### ######################################################## +# Location of Qt will be resolved by trying to find required Qt libs +QT_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Qt +QT_REQUIRED_LIBS='Core Widgets WebView WebChannel WebSockets QuickWidgets Quick Gui Qml Network' + +##### ### # BerkeleyDB # ### ################################################ +# Location of archive will be resolved like this: +# ${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz +BERKELEYDB_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/BerkeleyDB + +##### ### # OpenSSL # ### ################################################### +# Location of archive will be resolved like this: +# ${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz +#OPENSSL_ARCHIVE_LOCATION=https://mirror.viaduck.org/openssl +OPENSSL_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/OpenSSL + +##### ### # EventLib # ### ################################################## +# Location of archive will be resolved like this: +# ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz +LIBEVENT_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/EventLib + +##### ### # ZLib # ### ###################################################### +# Location of archive will be resolved like this: +# ${LIBZ_ARCHIVE_LOCATION}/v${LIBZ_BUILD_VERSION}.tar.gz +LIBZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/ZLib + +##### ### # XZLib # ### ##################################################### +# Location of archive will be resolved like this: +# ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz +LIBXZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/XZLib + +##### ### # Tor # ### ####################################################### +# Location of archive will be resolved like this: +# ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz +TOR_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Tor + +BUILD_DIR=cmake-build-cmdline-android${ANDROID_API}_${ANDROID_ARCH} + +helpMe() { + echo " + + Helper script to build Alias wallet and daemon using CMake. + Required library archives will be downloaded once and will be used + on subsequent builds. This includes also Android NDK. + + Default download location is ~/Archives. You can change this by + modifying '${ownLocation}/scripts/.buildconfig'. + + Usage: + ${0} [options] + + Optional parameters: + -c + The amount of cores to use for build. If not using this option + the script determines the available cores on this machine. + Not used for build steps of external libraries like OpenSSL or + BerkeleyDB. + -d Do _not_ build Alias but only the dependencies. Used to prepare + build slaves a/o builder docker images. + -f Perform fullbuild by cleanup all generated data from previous + build runs. + -g Build GUI (Qt) components + -o Perfom only Alias fullbuild. Only the alias buildfolder + will be wiped out before. All other folders stay in place. + -p + Build/install the required dependencies onto the given directory. + With this option the required dependencies could be located outside + the Git clone. This is useful + a) to have them only once at the local machine, even if working + with multiple Git clones and + b) to have them separated from the project itself, which is a must + if using Qt Creator. Otherwise Qt Creator always scans and finds + all the other content again and again. + Given value must be an absolute path or relative to the root of the + Git clone. + -s Use Qt from system + -t Build with included Tor + -h Show this help + + " +} + +# ===== Start of openssl functions =========================================== +checkOpenSSLArchive() { + if [[ -e "${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using OpenSSL archive ${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz" + else + OPENSSL_ARCHIVE_URL=https://mirror.viaduck.org/openssl/openssl-${OPENSSL_BUILD_VERSION}.tar.gz + info " -> Downloading OpenSSL archive ${OPENSSL_ARCHIVE_URL}" + if [[ ! -e ${OPENSSL_ARCHIVE_LOCATION} ]]; then + mkdir -p ${OPENSSL_ARCHIVE_LOCATION} + fi + cd ${OPENSSL_ARCHIVE_LOCATION} + wget ${OPENSSL_ARCHIVE_URL} + cd - >/dev/null + fi +} + +# For OpenSSL we're using a fork of https://github.com/viaduck/openssl-cmake +# with some slight modifications for Alias +checkOpenSSLClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d openssl-cmake ]]; then + info " -> Updating openssl-cmake clone" + cd openssl-cmake + git pull --prune + else + info " -> Cloning openssl-cmake" + git clone --branch alias https://github.com/aliascash/openssl-cmake.git openssl-cmake + fi + cd "${currentDir}" +} + +checkOpenSSLBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl" + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished openssl build and install" + else + die ${rtc} " => OpenSSL build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkOpenSSL() { + info "" + info "OpenSSL:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libssl.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libssl.a, skip build" + else + checkOpenSSLArchive + checkOpenSSLClone + checkOpenSSLBuild + fi +} +# ===== End of openssl functions ============================================= + +# ============================================================================ + +# ===== Start of berkeleydb functions ======================================== +checkBerkeleyDBArchive() { + if [[ -e "${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using BerkeleyDB archive ${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz" + else + BERKELEYDB_ARCHIVE_URL=https://download.oracle.com/berkeley-db/db-${BERKELEYDB_BUILD_VERSION}.tar.gz + info " -> Downloading BerkeleyDB archive ${BERKELEYDB_ARCHIVE_URL}" + if [[ ! -e ${BERKELEYDB_ARCHIVE_LOCATION} ]]; then + mkdir -p ${BERKELEYDB_ARCHIVE_LOCATION} + fi + cd ${BERKELEYDB_ARCHIVE_LOCATION} || die 1 "Unable to cd into ${BERKELEYDB_ARCHIVE_LOCATION}" + wget ${BERKELEYDB_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkBerkeleyDBBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb" + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished BerkeleyDB (libdb) build and install" + else + die ${rtc} " => BerkeleyDB (libdb) build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkBerkeleyDB() { + info "" + info "BerkeleyDB:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install/lib/libdb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install/lib/libdb.a, skip build" + else + checkBerkeleyDBArchive + checkBerkeleyDBBuild + fi +} +# ===== End of berkeleydb functions ========================================== + +# ============================================================================ + +# ===== Start of boost functions ============================================= +checkBoostArchive() { + local currentDir=$(pwd) + if [[ ! -e ${BOOST_ARCHIVE_LOCATION} ]]; then + mkdir -p ${BOOST_ARCHIVE_LOCATION} + fi + cd ${BOOST_ARCHIVE_LOCATION} || die 1 "Unable to cd into ${BOOST_ARCHIVE_LOCATION}" + if [[ ! -e "boost_${BOOST_VERSION//./_}.tar.gz" ]]; then + info " -> Downloading Boost archive" + wget https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION//./_}.tar.gz + else + info " -> Using existing Boost archive" + fi + + info " -> Verifying Boost archive checksum" + determinedChecksum=$(sha256sum boost_${BOOST_VERSION//./_}.tar.gz | awk '{ print $1 }') + info " Expected checksum: ${BOOST_ARCHIVE_HASH}" + info " Determined checksum: ${determinedChecksum}" + if [[ "${BOOST_ARCHIVE_HASH}" != "${determinedChecksum}" ]] ; then + die 2 " => Checksum of downloaded Boost archive not matching expected value!" + else + info " -> Checksum OK" + fi +} + +buildBoost() { + info " -> Building Boost on ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + cd "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + info " -> Cleanup before extraction" + rm -rf boost_${BOOST_VERSION//./_} + info " -> Extracting Boost archive" + tar xzf ${BOOST_ARCHIVE_LOCATION}/boost_${BOOST_VERSION//./_}.tar.gz + info " -> Building Boost" + cd boost_${BOOST_VERSION//./_} || die 1 "Unable to cd into boost_${BOOST_VERSION//./_}" + "${ownLocation}"/build-boost-for-android.sh -v ${BOOST_VERSION} -a ${ANDROID_ARCH} -p ${ANDROID_API} -n ${ANDROID_NDK_ROOT} -l "${BOOST_REQUIRED_LIBS// /,}" + cd "${currentDir}" || die 1 "Unable to cd into ${currentDir}" +} + +checkBoost() { + info "" + info "Boost:" + info " -> Searching required static Boost libs" + BOOST_ROOT=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/boost_${BOOST_VERSION//./_} + BOOST_INCLUDEDIR=${BOOST_ROOT}/include + BOOST_LIBRARYDIR=${BOOST_ROOT}/lib + boostBuildRequired=false + if [[ -d ${BOOST_LIBRARYDIR} ]]; then + for currentBoostDependency in ${BOOST_REQUIRED_LIBS}; do + if [[ -e ${BOOST_LIBRARYDIR}/libboost_${currentBoostDependency}.a ]]; then + info " -> ${currentBoostDependency}: OK" + else + warning " => ${currentBoostDependency}: Not found!" + boostBuildRequired=true + fi + done + else + warning " => Boost library directory ${BOOST_LIBRARYDIR} not found!" + boostBuildRequired=true + fi + if ${boostBuildRequired} ; then + checkBoostArchive + buildBoost + else + info " => All Boost requirements found" + fi +} +# ===== End of boost functions =============================================== + +# ============================================================================ + +# ===== Start of Qt functions ================================================ +checkQt() { + info "" + info "Qt:" + info " -> Searching required Qt libs" + qtComponentMissing=false + if [[ -d ${ANDROID_QT_LIBRARYDIR} ]]; then + # libQt5Quick.so + for currentQtDependency in ${QT_REQUIRED_LIBS}; do + if [[ -n $(find ${ANDROID_QT_LIBRARYDIR}/ -name "libQt5${currentQtDependency}_${ANDROID_ABI}.so") ]]; then + info " -> ${currentQtDependency}: OK" + else + warning " -> ${currentQtDependency}: Not found!" + qtComponentMissing=true + fi + done + else + info " -> Qt library directory ${ANDROID_QT_LIBRARYDIR} not found" + qtComponentMissing=true + fi + if ${qtComponentMissing}; then + error " -> Qt ${QT_VERSION}: Not all required components found!" + error "" + die 43 "Stopping build because of missing Qt" + + # Maybe used later: Build Qt ourself + local currentDir=$(pwd) + if [[ ! -e ${QT_ARCHIVE_LOCATION} ]]; then + mkdir -p ${QT_ARCHIVE_LOCATION} + fi + cd ${QT_ARCHIVE_LOCATION} + if [[ ! -e "qt-everywhere-src-${QT_VERSION}.tar.xz" ]]; then + info " -> Downloading Qt archive" + wget https://download.qt.io/archive/qt/${QT_VERSION%.*}/${QT_VERSION}/single/qt-everywhere-src-${QT_VERSION}.tar.xz + else + info " -> Using existing Qt archive" + fi + info " -> Verifying archive checksum" + determinedMD5Sum=$(md5sum qt-everywhere-src-${QT_VERSION}.tar.xz | cut -d ' ' -f 1) + if [[ "${determinedMD5Sum}" != "${QT_ARCHIVE_HASH}" ]]; then + warning " => Checksum of downloaded archive not matching expected value of ${QT_ARCHIVE_HASH}: ${determinedMD5Sum}" + else + info " -> Archive checksum ok" + fi + info " -> Cleanup before extraction" + rm -rf qt-everywhere-src-${QT_VERSION} + info " -> Extracting Qt archive" + tar xf qt-everywhere-src-${QT_VERSION}.tar.xz + info " -> Configuring Qt build" + cd qt-everywhere-src-${QT_VERSION} + ./configure \ + -xplatform android-clang \ + --disable-rpath \ + -nomake tests \ + -nomake examples \ + -android-ndk ${ANDROID_NDK_ROOT} \ + -android-sdk ${ANDROID_SDK_ROOT} \ + -android-arch ${ANDROID_ABI} \ + -android-ndk-platform android-${ANDROID_API} \ + -no-warnings-are-errors \ + -opensource \ + -confirm-license \ + -silent \ + -prefix ${ANDROID_QT_INSTALLATION_DIR} || die 23 "Error during Qt configure step" + info " -> Building Qt" + make -j"${CORES_TO_USE}" || die 24 "Error during Qt build step" + info " -> Installing Qt" + make install || die 25 "Error during Qt install step" + cd "${currentDir}" + fi +} +# ===== End of Qt functions ================================================== + +# ============================================================================ + +# ===== Start of libevent functions ========================================== +checkEventLibArchive() { + if [[ -e "${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" ]]; then + info " -> Using EventLib archive ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" + else + LIBEVENT_ARCHIVE_URL=https://github.com/libevent/libevent/releases/download/release-${LIBEVENT_BUILD_VERSION}-stable/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz + info " -> Downloading EventLib archive ${LIBEVENT_ARCHIVE_URL}" + if [[ ! -e ${LIBEVENT_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBEVENT_ARCHIVE_LOCATION} + fi + cd ${LIBEVENT_ARCHIVE_LOCATION} + wget ${LIBEVENT_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkEventLibClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d libevent ]]; then + info " -> Updating libevent clone" + cd libevent + git pull --prune + else + info " -> Cloning libevent" + git clone https://github.com/libevent/libevent.git libevent + fi + cd "${currentDir}" +} + +checkEventLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libevent build, installing..." + make install || die $? " => Error during installation of libevent" + else + die ${rtc} " => libevent build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkEventLib() { + info "" + info "EventLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a, skip build" + else + checkEventLibClone + checkEventLibBuild + fi +} +# ===== End of libevent functions ============================================ + +# ============================================================================ + +# ===== Start of leveldb functions =========================================== +checkLevelDBClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d leveldb ]]; then + info " -> Updating LevelDB clone" + cd leveldb + git pull --prune + else + info " -> Cloning LevelDB" + git clone https://github.com/google/leveldb.git leveldb + cd leveldb + fi + info " -> Checkout release ${LEVELDB_VERSION}" + git checkout ${LEVELDB_VERSION_TAG} + cd "${currentDir}" +} + +checkLevelDBBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libevent build, installing..." + make install || die $? "Error during installation of libleveldb" + else + die ${rtc} " => libleveldb build failed with return code ${rtc}" + fi + # read a + cd - >/dev/null +} + +checkLevelDB() { + info "" + info "LevelDB:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a, skip build" + else + checkLevelDBClone + checkLevelDBBuild + fi +} +# ===== End of leveldb functions ============================================= + +# ============================================================================ + +# ===== Start of libzstd functions =========================================== +checkZStdLibArchive() { + if [[ -e "${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using ZLib archive ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" + else + LIBZ_ARCHIVE_URL=https://github.com/facebook/zstd/releases/download/v${LIBZ_BUILD_VERSION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + info " -> Downloading ZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBZ_ARCHIVE_LOCATION} + fi + cd ${LIBZ_ARCHIVE_LOCATION} + wget ${LIBZ_ARCHIVE_URL} + cd - >/dev/null + fi + cd ${ownLocation}/../external + if [[ -d libzstd ]]; then + info " -> Directory external/libzstd already existing. Remove it to extract it again" + else + info " -> Extracting zstd-${LIBZ_BUILD_VERSION}.tar.gz..." + tar xzf ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + mv zstd-${LIBZ_BUILD_VERSION} libzstd + fi + cd - >/dev/null +} + +checkZStdLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libzstd build, installing..." + make install || die $? "Error during installation of libzstd" + else + die ${rtc} " => libzstd build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkZStdLib() { + info "" + info "ZStdLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a, skip build" + else + checkZStdLibArchive + checkZStdLibBuild + fi +} +# ===== End of libzstd functions ============================================= + +# ============================================================================ + +# ===== Start of libxz functions ============================================= +checkXZLibArchive() { + if [[ -e "${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using XZLib archive ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" + else + LIBXZ_ARCHIVE_URL=https://tukaani.org/xz/xz-${LIBXZ_BUILD_VERSION}.tar.gz + info " -> Downloading XZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBXZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBXZ_ARCHIVE_LOCATION} + fi + cd ${LIBXZ_ARCHIVE_LOCATION} + wget ${LIBXZ_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkXZLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libxz build and install" + else + die ${rtc} " => libxz build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkXZLib() { + info "" + info "XZLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a, skip build" + else + checkXZLibArchive + checkXZLibBuild + fi +} +# ===== End of libxz functions =============================================== + +# ============================================================================ + +# ===== Start of tor functions =============================================== +checkTorArchive() { + if [[ -e "${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz" ]]; then + info " -> Using Tor archive ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz" + else + # TOR_ARCHIVE_URL=https://github.com/torproject/tor/archive/tor-${TOR_BUILD_VERSION}.tar.gz + TOR_ARCHIVE_URL=https://github.com/guardianproject/tor/archive/tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz + info " -> Downloading Tor archive ${TOR_ARCHIVE_URL}" + if [[ ! -e ${TOR_ARCHIVE_LOCATION} ]]; then + mkdir -p ${TOR_ARCHIVE_LOCATION} + fi + cd ${TOR_ARCHIVE_LOCATION} + wget ${TOR_ARCHIVE_URL} -O tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz + cd - >/dev/null + fi +} + +checkTorBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished tor build and install" + else + die ${rtc} " => Tor build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkTor() { + info "" + info "Tor:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor, skip build" + else + checkTorArchive + checkTorBuild + fi +} +# ===== End of libxz functions =============================================== + +# ============================================================================ + +# ===== Start of NDK functions =============================================== +checkNDKArchive() { + info "" + info "NDK:" + info " -> Searching Android toolchain file ${ANDROID_TOOLCHAIN_CMAKE}" + if [[ -e ${ANDROID_TOOLCHAIN_CMAKE} ]]; then + info " -> Found it! :-)" + else + warning " -> Android toolchain file ${ANDROID_TOOLCHAIN_CMAKE} not found!" + local currentDir=$(pwd) + if [[ ! -e ${ANDROID_NDK_ARCHIVE_LOCATION} ]]; then + mkdir -p ${ANDROID_NDK_ARCHIVE_LOCATION} + fi + cd ${ANDROID_NDK_ARCHIVE_LOCATION} + if [[ -e "${ANDROID_NDK_ARCHIVE}" ]]; then + info " -> Using existing NDK archive" + else + ANDROID_NDK_ARCHIVE_URL=https://dl.google.com/android/repository/${ANDROID_NDK_ARCHIVE} + info " -> Downloading NDK archive ${ANDROID_NDK_ARCHIVE_URL}" + wget ${ANDROID_NDK_ARCHIVE_URL} + fi + info " -> Cleanup before extraction" + rm -rf android-ndk-${ANDROID_NDK_VERSION} + info " -> Extracting NDK archive" + unzip ${ANDROID_NDK_ARCHIVE} + cd - >/dev/null + fi +} +# ===== End of NDK functions ================================================= + +# ============================================================================ + +# Determine system +# Determine amount of cores: +if [[ "$OSTYPE" == "linux-gnu" ]]; then + CORES_TO_USE=$(grep -c ^processor /proc/cpuinfo) + ANDROID_NDK_ARCHIVE=android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip +elif [[ "$OSTYPE" == "darwin"* ]]; then + # Mac OSX + CORES_TO_USE=$(system_profiler SPHardwareDataType | grep "Total Number of Cores" | tr -s " " | cut -d " " -f 6) + ANDROID_NDK_ARCHIVE=android-ndk-${ANDROID_NDK_VERSION}-darwin-x86_64.zip +#elif [[ "$OSTYPE" == "cygwin" ]]; then +# # POSIX compatibility layer and Linux environment emulation for Windows +#elif [[ "$OSTYPE" == "msys" ]]; then +# # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) +#elif [[ "$OSTYPE" == "win32" ]]; then +# # I'm not sure this can happen. +#elif [[ "$OSTYPE" == "freebsd"* ]]; then +# CORES_TO_USE=1 +else + CORES_TO_USE=1 +fi + +FULLBUILD=false +ENABLE_GUI=false +ENABLE_GUI_PARAMETERS='OFF' +BUILD_ONLY_ALIAS=false +BUILD_ONLY_DEPENDENCIES=false +WITH_TOR=false +GIVEN_DEPENDENCIES_BUILD_DIR='' + +while getopts a:c:dfgop:th? option; do + case ${option} in + a) ANDROID_TOOLCHAIN_CMAKE="${OPTARG}" ;; + c) CORES_TO_USE="${OPTARG}" ;; + d) BUILD_ONLY_DEPENDENCIES=true ;; + f) FULLBUILD=true ;; + g) + ENABLE_GUI=true + ENABLE_GUI_PARAMETERS="ON -DQT_CMAKE_MODULE_PATH=${ANDROID_QT_LIBRARYDIR}/cmake" + ;; + o) BUILD_ONLY_ALIAS=true ;; + p) GIVEN_DEPENDENCIES_BUILD_DIR="${OPTARG}" ;; + t) WITH_TOR=true ;; + h | ?) helpMe && exit 0 ;; + *) die 90 "invalid option \"${OPTARG}\"" ;; + esac +done + +# Go to alias-wallet repository root directory +cd .. + +# ============================================================================ +# Handle given path to dependency location +if [[ -n "${GIVEN_DEPENDENCIES_BUILD_DIR}" ]] ; then + # ${GIVEN_DEPENDENCIES_BUILD_DIR} is set, + # so store given path on build configuration + if [[ "${GIVEN_DEPENDENCIES_BUILD_DIR}" = /* ]]; then + # Absolute path given + DEPENDENCIES_BUILD_DIR=${GIVEN_DEPENDENCIES_BUILD_DIR} + else + # Relative path given + DEPENDENCIES_BUILD_DIR=${ownLocation}/../${GIVEN_DEPENDENCIES_BUILD_DIR} + fi + storeDependenciesBuildDir "${DEPENDENCIES_BUILD_DIR}" +fi + +# ============================================================================ +# If ${DEPENDENCIES_BUILD_DIR} is empty, no path to the dependencies is given +# or stored on script/.buildproperties. In this case use default location +# inside of Git clone +if [[ -z "${DEPENDENCIES_BUILD_DIR}" ]] ; then + DEPENDENCIES_BUILD_DIR=${ownLocation}/.. +fi + +info "" +info "Building/using dependencies on/from directory:" +info " -> ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + +if [[ ! -d ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR} ]]; then + info "" + info "Creating dependency build directory ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + mkdir -p "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + info " -> Done" +fi + +cd "${DEPENDENCIES_BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}" +DEPENDENCIES_BUILD_DIR=$(pwd) + +# ============================================================================ +# Handle which parts should be build +cd "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" +if ${FULLBUILD}; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +# ============================================================================ +# Check a/o build requirements/dependencies +checkNDKArchive +checkBoost +checkBerkeleyDB +checkLevelDB +checkOpenSSL +if ${WITH_TOR}; then + checkXZLib + checkZStdLib + checkEventLib + checkTor +fi +if ${ENABLE_GUI}; then + checkQt +fi + +# ============================================================================ +# Only dependencies should be build, so exit here +if ${BUILD_ONLY_DEPENDENCIES}; then + info "" + info "Checked a/o built all required dependencies." + exit +fi + +# ============================================================================ +# Dependencies are ready. Go ahead with the main project +ALIAS_BUILD_DIR=${ownLocation}/../${BUILD_DIR}/aliaswallet +if [[ ! -d ${ALIAS_BUILD_DIR} ]]; then + info "" + info "Creating Alias build directory ${ALIAS_BUILD_DIR}" + mkdir -p "${ALIAS_BUILD_DIR}" + info " -> Done" +fi +cd "${ALIAS_BUILD_DIR}" || die 1 "Unable to cd into Alias build directory '${ALIAS_BUILD_DIR}'" + +# Update $ALIAS_BUILD_DIR with full path +ALIAS_BUILD_DIR=$(pwd) + +# If requested, cleanup leftovers from previous build +if [[ ${FULLBUILD} = true ]] || [[ ${BUILD_ONLY_ALIAS} = true ]]; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +info "" +info "Generating Alias build configuration" +read -r -d '' cmd < Finished" +else + error " => Finished with return code ${rtc}" +fi +cd "${callDir}" || die 1 "Unable to cd back to where we came from (${callDir})" diff --git a/scripts/cmake-build-android_x86-64.sh b/scripts/cmake-build-android_x86-64.sh new file mode 100755 index 0000000000..3acf597194 --- /dev/null +++ b/scripts/cmake-build-android_x86-64.sh @@ -0,0 +1,1121 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2019-10-22 HLXEasy +# +# This script can be used to build Alias for Android using CMake +# +# =========================================================================== + +# =========================================================================== +# Store path from where script was called, determine own location +# and source helper content from there +callDir=$(pwd) +ownLocation="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "${ownLocation}" || die 1 "Unable to cd into own location ${ownLocation}" +. ./include/helpers_console.sh +_init +. ./include/handle_buildconfig.sh + +##### ### # Global definitions # ### ######################################## +##### ### # Android # ### ################################################### +ANDROID_NDK_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Android +ANDROID_NDK_ROOT=${ANDROID_NDK_ARCHIVE_LOCATION}/android-ndk-${ANDROID_NDK_VERSION} +ANDROID_TOOLCHAIN_CMAKE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake +ANDROID_ARCH=x86_64 +ANDROID_ABI=x86_64 +ANDROID_API=26 + +##### ### # Android Qt # ### ################################################ +ANDROID_QT_DIR=${QT_INSTALLATION_PATH}/${QT_VERSION_ANDROID}/android +ANDROID_QT_LIBRARYDIR=${ANDROID_QT_DIR}/lib + +##### ### # Boost # ### ##################################################### +# Location of Boost will be resolved by trying to find required Boost libs +BOOST_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Boost +BOOST_REQUIRED_LIBS='chrono filesystem iostreams program_options system thread regex date_time atomic' +# regex date_time atomic + +##### ### # Qt # ### ######################################################## +# Location of Qt will be resolved by trying to find required Qt libs +QT_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Qt +QT_REQUIRED_LIBS='Core Widgets WebView WebChannel WebSockets QuickWidgets Quick Gui Qml Network' + +##### ### # BerkeleyDB # ### ################################################ +# Location of archive will be resolved like this: +# ${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz +BERKELEYDB_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/BerkeleyDB + +##### ### # OpenSSL # ### ################################################### +# Location of archive will be resolved like this: +# ${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz +#OPENSSL_ARCHIVE_LOCATION=https://mirror.viaduck.org/openssl +OPENSSL_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/OpenSSL + +##### ### # EventLib # ### ################################################## +# Location of archive will be resolved like this: +# ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz +LIBEVENT_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/EventLib + +##### ### # ZLib # ### ###################################################### +# Location of archive will be resolved like this: +# ${LIBZ_ARCHIVE_LOCATION}/v${LIBZ_BUILD_VERSION}.tar.gz +LIBZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/ZLib + +##### ### # XZLib # ### ##################################################### +# Location of archive will be resolved like this: +# ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz +LIBXZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/XZLib + +##### ### # Tor # ### ####################################################### +# Location of archive will be resolved like this: +# ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz +TOR_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Tor + +BUILD_DIR=cmake-build-cmdline-android${ANDROID_API}_${ANDROID_ARCH} + +helpMe() { + echo " + + Helper script to build Alias wallet and daemon using CMake. + Required library archives will be downloaded once and will be used + on subsequent builds. This includes also Android NDK. + + Default download location is ~/Archives. You can change this by + modifying '${ownLocation}/scripts/.buildconfig'. + + Usage: + ${0} [options] + + Optional parameters: + -c + The amount of cores to use for build. If not using this option + the script determines the available cores on this machine. + Not used for build steps of external libraries like OpenSSL or + BerkeleyDB. + -d Do _not_ build Alias but only the dependencies. Used to prepare + build slaves a/o builder docker images. + -f Perform fullbuild by cleanup all generated data from previous + build runs. + -g Build GUI (Qt) components + -o Perfom only Alias fullbuild. Only the alias buildfolder + will be wiped out before. All other folders stay in place. + -p + Build/install the required dependencies onto the given directory. + With this option the required dependencies could be located outside + the Git clone. This is useful + a) to have them only once at the local machine, even if working + with multiple Git clones and + b) to have them separated from the project itself, which is a must + if using Qt Creator. Otherwise Qt Creator always scans and finds + all the other content again and again. + Given value must be an absolute path or relative to the root of the + Git clone. + -s Use Qt from system + -t Build with included Tor + -h Show this help + + " +} + +# ===== Start of openssl functions =========================================== +checkOpenSSLArchive() { + if [[ -e "${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using OpenSSL archive ${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz" + else + OPENSSL_ARCHIVE_URL=https://mirror.viaduck.org/openssl/openssl-${OPENSSL_BUILD_VERSION}.tar.gz + info " -> Downloading OpenSSL archive ${OPENSSL_ARCHIVE_URL}" + if [[ ! -e ${OPENSSL_ARCHIVE_LOCATION} ]]; then + mkdir -p ${OPENSSL_ARCHIVE_LOCATION} + fi + cd ${OPENSSL_ARCHIVE_LOCATION} + wget ${OPENSSL_ARCHIVE_URL} + cd - >/dev/null + fi +} + +# For OpenSSL we're using a fork of https://github.com/viaduck/openssl-cmake +# with some slight modifications for Alias +checkOpenSSLClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d openssl-cmake ]]; then + info " -> Updating openssl-cmake clone" + cd openssl-cmake + git pull --prune + else + info " -> Cloning openssl-cmake" + git clone --branch alias https://github.com/aliascash/openssl-cmake.git openssl-cmake + fi + cd "${currentDir}" +} + +checkOpenSSLBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl" + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished openssl build and install" + else + die ${rtc} " => OpenSSL build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkOpenSSL() { + info "" + info "OpenSSL:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libssl.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libssl.a, skip build" + else + checkOpenSSLArchive + checkOpenSSLClone + checkOpenSSLBuild + fi +} +# ===== End of openssl functions ============================================= + +# ============================================================================ + +# ===== Start of berkeleydb functions ======================================== +checkBerkeleyDBArchive() { + if [[ -e "${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using BerkeleyDB archive ${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz" + else + BERKELEYDB_ARCHIVE_URL=https://download.oracle.com/berkeley-db/db-${BERKELEYDB_BUILD_VERSION}.tar.gz + info " -> Downloading BerkeleyDB archive ${BERKELEYDB_ARCHIVE_URL}" + if [[ ! -e ${BERKELEYDB_ARCHIVE_LOCATION} ]]; then + mkdir -p ${BERKELEYDB_ARCHIVE_LOCATION} + fi + cd ${BERKELEYDB_ARCHIVE_LOCATION} || die 1 "Unable to cd into ${BERKELEYDB_ARCHIVE_LOCATION}" + wget ${BERKELEYDB_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkBerkeleyDBBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb" + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished BerkeleyDB (libdb) build and install" + else + die ${rtc} " => BerkeleyDB (libdb) build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkBerkeleyDB() { + info "" + info "BerkeleyDB:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install/lib/libdb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install/lib/libdb.a, skip build" + else + checkBerkeleyDBArchive + checkBerkeleyDBBuild + fi +} +# ===== End of berkeleydb functions ========================================== + +# ============================================================================ + +# ===== Start of boost functions ============================================= +checkBoostArchive() { + local currentDir=$(pwd) + if [[ ! -e ${BOOST_ARCHIVE_LOCATION} ]]; then + mkdir -p ${BOOST_ARCHIVE_LOCATION} + fi + cd ${BOOST_ARCHIVE_LOCATION} || die 1 "Unable to cd into ${BOOST_ARCHIVE_LOCATION}" + if [[ ! -e "boost_${BOOST_VERSION//./_}.tar.gz" ]]; then + info " -> Downloading Boost archive" + wget https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION//./_}.tar.gz + else + info " -> Using existing Boost archive" + fi + + info " -> Verifying Boost archive checksum" + determinedChecksum=$(sha256sum boost_${BOOST_VERSION//./_}.tar.gz | awk '{ print $1 }') + info " Expected checksum: ${BOOST_ARCHIVE_HASH}" + info " Determined checksum: ${determinedChecksum}" + if [[ "${BOOST_ARCHIVE_HASH}" != "${determinedChecksum}" ]] ; then + die 2 " => Checksum of downloaded Boost archive not matching expected value!" + else + info " -> Checksum OK" + fi +} + +buildBoost() { + info " -> Building Boost on ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + cd "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + info " -> Cleanup before extraction" + rm -rf boost_${BOOST_VERSION//./_} + info " -> Extracting Boost archive" + tar xzf ${BOOST_ARCHIVE_LOCATION}/boost_${BOOST_VERSION//./_}.tar.gz + info " -> Building Boost" + cd boost_${BOOST_VERSION//./_} || die 1 "Unable to cd into boost_${BOOST_VERSION//./_}" + "${ownLocation}"/build-boost-for-android.sh -v ${BOOST_VERSION} -a ${ANDROID_ARCH} -p ${ANDROID_API} -n ${ANDROID_NDK_ROOT} -l "${BOOST_REQUIRED_LIBS// /,}" + cd "${currentDir}" || die 1 "Unable to cd into ${currentDir}" +} + +checkBoost() { + info "" + info "Boost:" + info " -> Searching required static Boost libs" + BOOST_ROOT=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/boost_${BOOST_VERSION//./_} + BOOST_INCLUDEDIR=${BOOST_ROOT}/include + BOOST_LIBRARYDIR=${BOOST_ROOT}/lib + boostBuildRequired=false + if [[ -d ${BOOST_LIBRARYDIR} ]]; then + for currentBoostDependency in ${BOOST_REQUIRED_LIBS}; do + if [[ -e ${BOOST_LIBRARYDIR}/libboost_${currentBoostDependency}.a ]]; then + info " -> ${currentBoostDependency}: OK" + else + warning " => ${currentBoostDependency}: Not found!" + boostBuildRequired=true + fi + done + else + warning " => Boost library directory ${BOOST_LIBRARYDIR} not found!" + boostBuildRequired=true + fi + if ${boostBuildRequired} ; then + checkBoostArchive + buildBoost + else + info " => All Boost requirements found" + fi +} +# ===== End of boost functions =============================================== + +# ============================================================================ + +# ===== Start of Qt functions ================================================ +checkQt() { + info "" + info "Qt:" + info " -> Searching required Qt libs" + qtComponentMissing=false + if [[ -d ${ANDROID_QT_LIBRARYDIR} ]]; then + # libQt5Quick.so + for currentQtDependency in ${QT_REQUIRED_LIBS}; do + if [[ -n $(find ${ANDROID_QT_LIBRARYDIR}/ -name "libQt5${currentQtDependency}_${ANDROID_ABI}.so") ]]; then + info " -> ${currentQtDependency}: OK" + else + warning " -> ${currentQtDependency}: Not found!" + qtComponentMissing=true + fi + done + else + info " -> Qt library directory ${ANDROID_QT_LIBRARYDIR} not found" + qtComponentMissing=true + fi + if ${qtComponentMissing}; then + error " -> Qt ${QT_VERSION}: Not all required components found!" + error "" + die 43 "Stopping build because of missing Qt" + + # Maybe used later: Build Qt ourself + local currentDir=$(pwd) + if [[ ! -e ${QT_ARCHIVE_LOCATION} ]]; then + mkdir -p ${QT_ARCHIVE_LOCATION} + fi + cd ${QT_ARCHIVE_LOCATION} + if [[ ! -e "qt-everywhere-src-${QT_VERSION}.tar.xz" ]]; then + info " -> Downloading Qt archive" + wget https://download.qt.io/archive/qt/${QT_VERSION%.*}/${QT_VERSION}/single/qt-everywhere-src-${QT_VERSION}.tar.xz + else + info " -> Using existing Qt archive" + fi + info " -> Verifying archive checksum" + determinedMD5Sum=$(md5sum qt-everywhere-src-${QT_VERSION}.tar.xz | cut -d ' ' -f 1) + if [[ "${determinedMD5Sum}" != "${QT_ARCHIVE_HASH}" ]]; then + warning " => Checksum of downloaded archive not matching expected value of ${QT_ARCHIVE_HASH}: ${determinedMD5Sum}" + else + info " -> Archive checksum ok" + fi + info " -> Cleanup before extraction" + rm -rf qt-everywhere-src-${QT_VERSION} + info " -> Extracting Qt archive" + tar xf qt-everywhere-src-${QT_VERSION}.tar.xz + info " -> Configuring Qt build" + cd qt-everywhere-src-${QT_VERSION} + ./configure \ + -xplatform android-clang \ + --disable-rpath \ + -nomake tests \ + -nomake examples \ + -android-ndk ${ANDROID_NDK_ROOT} \ + -android-sdk ${ANDROID_SDK_ROOT} \ + -android-arch ${ANDROID_ABI} \ + -android-ndk-platform android-${ANDROID_API} \ + -no-warnings-are-errors \ + -opensource \ + -confirm-license \ + -silent \ + -prefix ${ANDROID_QT_INSTALLATION_DIR} || die 23 "Error during Qt configure step" + info " -> Building Qt" + make -j"${CORES_TO_USE}" || die 24 "Error during Qt build step" + info " -> Installing Qt" + make install || die 25 "Error during Qt install step" + cd "${currentDir}" + fi +} +# ===== End of Qt functions ================================================== + +# ============================================================================ + +# ===== Start of libevent functions ========================================== +checkEventLibArchive() { + if [[ -e "${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" ]]; then + info " -> Using EventLib archive ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" + else + LIBEVENT_ARCHIVE_URL=https://github.com/libevent/libevent/releases/download/release-${LIBEVENT_BUILD_VERSION}-stable/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz + info " -> Downloading EventLib archive ${LIBEVENT_ARCHIVE_URL}" + if [[ ! -e ${LIBEVENT_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBEVENT_ARCHIVE_LOCATION} + fi + cd ${LIBEVENT_ARCHIVE_LOCATION} + wget ${LIBEVENT_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkEventLibClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d libevent ]]; then + info " -> Updating libevent clone" + cd libevent + git pull --prune + else + info " -> Cloning libevent" + git clone https://github.com/libevent/libevent.git libevent + fi + cd "${currentDir}" +} + +checkEventLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libevent build, installing..." + make install || die $? " => Error during installation of libevent" + else + die ${rtc} " => libevent build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkEventLib() { + info "" + info "EventLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a, skip build" + else + checkEventLibClone + checkEventLibBuild + fi +} +# ===== End of libevent functions ============================================ + +# ============================================================================ + +# ===== Start of leveldb functions =========================================== +checkLevelDBClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d leveldb ]]; then + info " -> Updating LevelDB clone" + cd leveldb + git pull --prune + else + info " -> Cloning LevelDB" + git clone https://github.com/google/leveldb.git leveldb + cd leveldb + fi + info " -> Checkout release ${LEVELDB_VERSION}" + git checkout ${LEVELDB_VERSION_TAG} + cd "${currentDir}" +} + +checkLevelDBBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libevent build, installing..." + make install || die $? "Error during installation of libleveldb" + else + die ${rtc} " => libleveldb build failed with return code ${rtc}" + fi + # read a + cd - >/dev/null +} + +checkLevelDB() { + info "" + info "LevelDB:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a, skip build" + else + checkLevelDBClone + checkLevelDBBuild + fi +} +# ===== End of leveldb functions ============================================= + +# ============================================================================ + +# ===== Start of libzstd functions =========================================== +checkZStdLibArchive() { + if [[ -e "${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using ZLib archive ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" + else + LIBZ_ARCHIVE_URL=https://github.com/facebook/zstd/releases/download/v${LIBZ_BUILD_VERSION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + info " -> Downloading ZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBZ_ARCHIVE_LOCATION} + fi + cd ${LIBZ_ARCHIVE_LOCATION} + wget ${LIBZ_ARCHIVE_URL} + cd - >/dev/null + fi + cd ${ownLocation}/../external + if [[ -d libzstd ]]; then + info " -> Directory external/libzstd already existing. Remove it to extract it again" + else + info " -> Extracting zstd-${LIBZ_BUILD_VERSION}.tar.gz..." + tar xzf ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + mv zstd-${LIBZ_BUILD_VERSION} libzstd + fi + cd - >/dev/null +} + +checkZStdLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libzstd build, installing..." + make install || die $? "Error during installation of libzstd" + else + die ${rtc} " => libzstd build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkZStdLib() { + info "" + info "ZStdLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a, skip build" + else + checkZStdLibArchive + checkZStdLibBuild + fi +} +# ===== End of libzstd functions ============================================= + +# ============================================================================ + +# ===== Start of libxz functions ============================================= +checkXZLibArchive() { + if [[ -e "${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using XZLib archive ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" + else + LIBXZ_ARCHIVE_URL=https://tukaani.org/xz/xz-${LIBXZ_BUILD_VERSION}.tar.gz + info " -> Downloading XZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBXZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBXZ_ARCHIVE_LOCATION} + fi + cd ${LIBXZ_ARCHIVE_LOCATION} + wget ${LIBXZ_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkXZLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libxz build and install" + else + die ${rtc} " => libxz build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkXZLib() { + info "" + info "XZLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a, skip build" + else + checkXZLibArchive + checkXZLibBuild + fi +} +# ===== End of libxz functions =============================================== + +# ============================================================================ + +# ===== Start of tor functions =============================================== +checkTorArchive() { + if [[ -e "${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz" ]]; then + info " -> Using Tor archive ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz" + else + # TOR_ARCHIVE_URL=https://github.com/torproject/tor/archive/tor-${TOR_BUILD_VERSION}.tar.gz + TOR_ARCHIVE_URL=https://github.com/guardianproject/tor/archive/tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz + info " -> Downloading Tor archive ${TOR_ARCHIVE_URL}" + if [[ ! -e ${TOR_ARCHIVE_LOCATION} ]]; then + mkdir -p ${TOR_ARCHIVE_LOCATION} + fi + cd ${TOR_ARCHIVE_LOCATION} + wget ${TOR_ARCHIVE_URL} -O tor-${TOR_BUILD_VERSION_ANDROID}.tar.gz + cd - >/dev/null + fi +} + +checkTorBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished tor build and install" + else + die ${rtc} " => Tor build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkTor() { + info "" + info "Tor:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor, skip build" + else + checkTorArchive + checkTorBuild + fi +} +# ===== End of libxz functions =============================================== + +# ============================================================================ + +# ===== Start of NDK functions =============================================== +checkNDKArchive() { + info "" + info "NDK:" + info " -> Searching Android toolchain file ${ANDROID_TOOLCHAIN_CMAKE}" + if [[ -e ${ANDROID_TOOLCHAIN_CMAKE} ]]; then + info " -> Found it! :-)" + else + warning " -> Android toolchain file ${ANDROID_TOOLCHAIN_CMAKE} not found!" + local currentDir=$(pwd) + if [[ ! -e ${ANDROID_NDK_ARCHIVE_LOCATION} ]]; then + mkdir -p ${ANDROID_NDK_ARCHIVE_LOCATION} + fi + cd ${ANDROID_NDK_ARCHIVE_LOCATION} + if [[ -e "${ANDROID_NDK_ARCHIVE}" ]]; then + info " -> Using existing NDK archive" + else + ANDROID_NDK_ARCHIVE_URL=https://dl.google.com/android/repository/${ANDROID_NDK_ARCHIVE} + info " -> Downloading NDK archive ${ANDROID_NDK_ARCHIVE_URL}" + wget ${ANDROID_NDK_ARCHIVE_URL} + fi + info " -> Cleanup before extraction" + rm -rf android-ndk-${ANDROID_NDK_VERSION} + info " -> Extracting NDK archive" + unzip ${ANDROID_NDK_ARCHIVE} + cd - >/dev/null + fi +} +# ===== End of NDK functions ================================================= + +# ============================================================================ + +# Determine system +# Determine amount of cores: +if [[ "$OSTYPE" == "linux-gnu" ]]; then + CORES_TO_USE=$(grep -c ^processor /proc/cpuinfo) + ANDROID_NDK_ARCHIVE=android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip +elif [[ "$OSTYPE" == "darwin"* ]]; then + # Mac OSX + CORES_TO_USE=$(system_profiler SPHardwareDataType | grep "Total Number of Cores" | tr -s " " | cut -d " " -f 6) + ANDROID_NDK_ARCHIVE=android-ndk-${ANDROID_NDK_VERSION}-darwin-x86_64.zip +#elif [[ "$OSTYPE" == "cygwin" ]]; then +# # POSIX compatibility layer and Linux environment emulation for Windows +#elif [[ "$OSTYPE" == "msys" ]]; then +# # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) +#elif [[ "$OSTYPE" == "win32" ]]; then +# # I'm not sure this can happen. +#elif [[ "$OSTYPE" == "freebsd"* ]]; then +# CORES_TO_USE=1 +else + CORES_TO_USE=1 +fi + +FULLBUILD=false +ENABLE_GUI=false +ENABLE_GUI_PARAMETERS='OFF' +BUILD_ONLY_ALIAS=false +BUILD_ONLY_DEPENDENCIES=false +WITH_TOR=false +GIVEN_DEPENDENCIES_BUILD_DIR='' + +while getopts a:c:dfgop:th? option; do + case ${option} in + a) ANDROID_TOOLCHAIN_CMAKE="${OPTARG}" ;; + c) CORES_TO_USE="${OPTARG}" ;; + d) BUILD_ONLY_DEPENDENCIES=true ;; + f) FULLBUILD=true ;; + g) + ENABLE_GUI=true + ENABLE_GUI_PARAMETERS="ON -DQT_CMAKE_MODULE_PATH=${ANDROID_QT_LIBRARYDIR}/cmake" + ;; + o) BUILD_ONLY_ALIAS=true ;; + p) GIVEN_DEPENDENCIES_BUILD_DIR="${OPTARG}" ;; + t) WITH_TOR=true ;; + h | ?) helpMe && exit 0 ;; + *) die 90 "invalid option \"${OPTARG}\"" ;; + esac +done + +# Go to alias-wallet repository root directory +cd .. + +# ============================================================================ +# Handle given path to dependency location +if [[ -n "${GIVEN_DEPENDENCIES_BUILD_DIR}" ]] ; then + # ${GIVEN_DEPENDENCIES_BUILD_DIR} is set, + # so store given path on build configuration + if [[ "${GIVEN_DEPENDENCIES_BUILD_DIR}" = /* ]]; then + # Absolute path given + DEPENDENCIES_BUILD_DIR=${GIVEN_DEPENDENCIES_BUILD_DIR} + else + # Relative path given + DEPENDENCIES_BUILD_DIR=${ownLocation}/../${GIVEN_DEPENDENCIES_BUILD_DIR} + fi + storeDependenciesBuildDir "${DEPENDENCIES_BUILD_DIR}" +fi + +# ============================================================================ +# If ${DEPENDENCIES_BUILD_DIR} is empty, no path to the dependencies is given +# or stored on script/.buildproperties. In this case use default location +# inside of Git clone +if [[ -z "${DEPENDENCIES_BUILD_DIR}" ]] ; then + DEPENDENCIES_BUILD_DIR=${ownLocation}/.. +fi + +info "" +info "Building/using dependencies on/from directory:" +info " -> ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + +if [[ ! -d ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR} ]]; then + info "" + info "Creating dependency build directory ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + mkdir -p "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + info " -> Done" +fi + +cd "${DEPENDENCIES_BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}" +DEPENDENCIES_BUILD_DIR=$(pwd) + +# ============================================================================ +# Handle which parts should be build +cd "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" +if ${FULLBUILD}; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +# ============================================================================ +# Check a/o build requirements/dependencies +checkNDKArchive +checkBoost +checkBerkeleyDB +checkLevelDB +checkOpenSSL +if ${WITH_TOR}; then + checkXZLib + checkZStdLib + checkEventLib + checkTor +fi +if ${ENABLE_GUI}; then + checkQt +fi + +# ============================================================================ +# Only dependencies should be build, so exit here +if ${BUILD_ONLY_DEPENDENCIES}; then + info "" + info "Checked a/o built all required dependencies." + exit +fi + +# ============================================================================ +# Dependencies are ready. Go ahead with the main project +ALIAS_BUILD_DIR=${ownLocation}/../${BUILD_DIR}/aliaswallet +if [[ ! -d ${ALIAS_BUILD_DIR} ]]; then + info "" + info "Creating Alias build directory ${ALIAS_BUILD_DIR}" + mkdir -p "${ALIAS_BUILD_DIR}" + info " -> Done" +fi +cd "${ALIAS_BUILD_DIR}" || die 1 "Unable to cd into Alias build directory '${ALIAS_BUILD_DIR}'" + +# Update $ALIAS_BUILD_DIR with full path +ALIAS_BUILD_DIR=$(pwd) + +# If requested, cleanup leftovers from previous build +if [[ ${FULLBUILD} = true ]] || [[ ${BUILD_ONLY_ALIAS} = true ]]; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +info "" +info "Generating Alias build configuration" +read -r -d '' cmd < Finished" +else + error " => Finished with return code ${rtc}" +fi +cd "${callDir}" || die 1 "Unable to cd back to where we came from (${callDir})" diff --git a/scripts/cmake-build-mac.sh b/scripts/cmake-build-mac.sh new file mode 100755 index 0000000000..dc73eb16d1 --- /dev/null +++ b/scripts/cmake-build-mac.sh @@ -0,0 +1,940 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2019-10-10 HLXEasy +# +# This script can be used to build Alias on and for Mac using CMake +# +# =========================================================================== + +# =========================================================================== +# Store path from where script was called, determine own location +# and source helper content from there +callDir=$(pwd) +ownLocation="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "${ownLocation}" || die 1 "Unable to cd into own location ${ownLocation}" +. ./include/helpers_console.sh +_init +. ./include/handle_buildconfig.sh + +##### ### # Global definitions # ### ######################################## +##### ### # Mac Qt # ### #################################################### +if [[ -z "${MAC_QT_DIR}" ]]; then + MAC_QT_DIR=${QT_INSTALLATION_PATH}/${QT_VERSION_MAC}/clang_64 +fi + +MAC_QT_LIBRARYDIR=${MAC_QT_DIR}/lib + +##### ### # Boost # ### ##################################################### +# Trying to find required Homebrew Boost libs +BOOST_REQUIRED_LIBS='chrono filesystem iostreams program_options system thread regex date_time atomic' +# regex date_time atomic + +##### ### # Qt # ### ######################################################## +# Location of Qt will be resolved by trying to find required Qt libs +QT_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Qt +QT_REQUIRED_LIBS='Core Widgets WebView WebChannel WebSockets QuickWidgets Quick Gui Qml Network' + +##### ### # EventLib # ### ################################################## +# Location of archive will be resolved like this: +# ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz +LIBEVENT_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/EventLib + +##### ### # ZLib # ### ###################################################### +# Location of archive will be resolved like this: +# ${LIBZ_ARCHIVE_LOCATION}/v${LIBZ_BUILD_VERSION}.tar.gz +LIBZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/ZLib + +##### ### # XZLib # ### ##################################################### +# Location of archive will be resolved like this: +# ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz +LIBXZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/XZLib + +##### ### # Tor # ### ####################################################### +# Location of archive will be resolved like this: +# ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz +TOR_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Tor +TOR_RESOURCE_ARCHIVE=Tor.libraries.MacOS.zip + +BUILD_DIR=cmake-build-cmdline-mac + +helpMe() { + echo " + + Helper script to build Alias wallet and daemon using CMake. + Required library archives will be downloaded once and will be used + on subsequent builds. + + Default download location is ~/Archives. You can change this by + modifying '${ownLocation}/scripts/.buildconfig'. + + Usage: + ${0} [options] + + Optional parameters: + -c + The amount of cores to use for build. If not using this option + the script determines the available cores on this machine. + Not used for build steps of external libraries like OpenSSL or + LevelDB. + -d Do _not_ build Alias but only the dependencies. Used to prepare + build slaves a/o builder docker images. + -f Perform fullbuild by cleanup all generated data from previous + build runs. + -g Build GUI (Qt) components + -o Perfom only Alias fullbuild. Only the alias buildfolder + will be wiped out before. All other folders stay in place. + -p + Build/install the required dependencies onto the given directory. + With this option the required dependencies could be located outside + the Git clone. This is useful + a) to have them only once at the local machine, even if working + with multiple Git clones and + b) to have them separated from the project itself, which is a must + if using Qt Creator. Otherwise Qt Creator always scans and finds + all the other content again and again. + Given value must be an absolute path or relative to the root of the + Git clone. + -t Build with included Tor + -h Show this help + + " +} + +# ===== Start of homebrew functions ========================================== +checkHomebrew() { + info "" + info "Homebrew:" + if homebrewVersion=$(brew --version 2>/dev/null) ; then + # Show only the first line of the version output + info " -> Found ${homebrewVersion/$'\n'*/}" + else + error " -> Homebrew not found!" + error " You need to install homebrew and after that BerkeleyDB v4, Boost and OpenSSL:" + error " brew install berkeley-db@4 boost openssl" + error "" + die 40 "Stopping build because of missing Homebrew" + fi +} +# ===== End of homebrew functions ============================================ + +# ============================================================================ + +# ===== Start of openssl functions =========================================== +checkOpenSSL() { + info "" + info "OpenSSL:" + info " -> Searching required Homebrew OpenSSL package" + opensslVersion=$(brew ls --versions openssl) + if [ $? -eq 0 ] ; then + info " -> Found ${opensslVersion}" + OPENSSL_VERSION_MAC=$(echo ${opensslVersion#* } | xargs) + OPENSSL_FOLDERNAME=$(echo ${opensslVersion% *} | xargs) + else + error " -> Required OpenSSL dependency not found!" + error " You need to install homebrew and install OpenSSL:" + error " brew install openssl" + error "" + die 41 "Stopping build because of missing OpenSSL" + fi +} +# ===== End of openssl functions ============================================= + +# ============================================================================ + +# ===== Start of berkeleydb functions ======================================== +checkBerkeleyDB() { + info "" + info "BerkeleyDB:" + info " -> Searching required Homebrew BerkeleyDB package" + berkeleydbVersion=$(brew ls --versions berkeley-db@4) + if [ $? -eq 0 ] ; then + info " -> Found ${berkeleydbVersion}" + else + error " -> Required BerkeleyDB dependency not found!" + error " You need to install homebrew and install BerkeleyDB v4:" + error " brew install berkeley-db@4" + error "" + die 41 "Stopping build because of missing BerkeleyDB" + fi +} +# ===== End of berkeleydb functions ========================================== + +# ============================================================================ + +# ===== Start of boost functions ============================================= +checkBoost() { + info "" + info "Boost:" + info " -> Searching required Homebrew Boost package" + boostVersion=$(brew ls --versions boost) + if [ $? -eq 0 ] ; then + info " -> Found ${boostVersion}" + if [[ -z "${BOOST_VERSION_MAC}" ]]; then + # Use only version from "boost 1.2.3" and trim potential whitespaces + BOOST_VERSION_MAC=$(echo ${boostVersion#* } | xargs) + fi + else + error " -> Required Boost dependencies not found!" + error " You need to install homebrew and install Boost:" + error " brew install boost" + error "" + die 42 "Stopping build because of missing Boost" + fi + BOOST_INCLUDEDIR=/usr/local/Cellar/boost/${BOOST_VERSION_MAC}/include + BOOST_LIBRARYDIR=/usr/local/Cellar/boost/${BOOST_VERSION_MAC}/lib +} +# ===== End of boost functions =============================================== + +# ============================================================================ + +# ===== Start of Qt functions ================================================ +checkQt() { + info "" + info "Qt:" + info " -> Searching required Qt libs" + qtComponentMissing=false + if [[ -d ${MAC_QT_LIBRARYDIR} ]]; then + # libQt5Quick.so + # for currentQtDependency in ${QT_REQUIRED_LIBS} ; do + # if [[ -n $(find ${MAC_QT_LIBRARYDIR}/ -name "libQt5${currentQtDependency}*") ]] ; then + # info " -> ${currentQtDependency}: OK" + # else + # warning " -> ${currentQtDependency}: Not found!" + # qtComponentMissing=true + # fi + # done + info " -> Found Qt library directory ${MAC_QT_LIBRARYDIR}" + info " Detailed check for required libs needs to be implemented" + else + info " -> Qt library directory ${MAC_QT_LIBRARYDIR} not found" + qtComponentMissing=true + fi + if ${qtComponentMissing}; then + error " -> Qt ${QT_VERSION_MAC} not found!" + error " You need to install Qt ${QT_VERSION_MAC}" + error "" + die 43 "Stopping build because of missing Qt component(s)" + fi +} +# ===== End of Qt functions ================================================== + +# ============================================================================ + +# ===== Start of libevent functions ========================================== +checkEventLibArchive() { + if [[ -e "${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" ]]; then + info " -> Using EventLib archive ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" + else + LIBEVENT_ARCHIVE_URL=https://github.com/libevent/libevent/releases/download/release-${LIBEVENT_BUILD_VERSION}-stable/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz + info " -> Downloading EventLib archive ${LIBEVENT_ARCHIVE_URL}" + if [[ ! -e ${LIBEVENT_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBEVENT_ARCHIVE_LOCATION} + fi + cd ${LIBEVENT_ARCHIVE_LOCATION} + wget ${LIBEVENT_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkEventLibClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d libevent ]]; then + info " -> Updating libevent clone" + cd libevent + git pull --prune + else + info " -> Cloning libevent" + git clone https://github.com/libevent/libevent.git libevent + fi + cd "${currentDir}" +} + +checkEventLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libevent build, installing..." + make install || die $? " => Error during installation of libevent" + else + die ${rtc} " => libevent build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkEventLib() { + info "" + info "EventLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a, skip build" + else + checkEventLibClone + checkEventLibBuild + fi +} +# ===== End of libevent functions ============================================ + +# ============================================================================ + +# ===== Start of leveldb functions =========================================== +checkLevelDBClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d leveldb ]]; then + info " -> Updating LevelDB clone" + cd leveldb + git pull --prune + else + info " -> Cloning LevelDB" + git clone https://github.com/google/leveldb.git leveldb + cd leveldb + fi + info " -> Checkout release ${LEVELDB_VERSION}" + git checkout ${LEVELDB_VERSION_TAG} + cd "${currentDir}" +} + +checkLevelDBBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libleveldb build, installing..." + make install || die $? "Error during installation of libleveldb" + else + die ${rtc} " => libleveldb build failed with return code ${rtc}" + fi + # read a + cd - >/dev/null +} + +checkLevelDB() { + info "" + info "LevelDB:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/local/lib/libleveldb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/local/lib/libleveldb.a, skip build" + else + checkLevelDBClone + checkLevelDBBuild + fi +} +# ===== End of leveldb functions ============================================= + +# ============================================================================ + +# ===== Start of wget functions =========================================== +checkWget() { + info "" + info "Wget:" + info " -> Searching required Homebrew wget package" + wgetVersion=$(brew ls --versions wget) + if [ $? -eq 0 ] ; then + info " -> Found ${wgetVersion}" + else + error " -> Required wget dependency not found!" + error " You need to install homebrew and install wget:" + error " brew install wget" + error "" + die 41 "Stopping build because of missing wget" + fi +} +# ===== End of wget functions ============================================= + +# ============================================================================ + +# ===== Start of libzstd functions =========================================== +checkZStdLibArchive() { + if [[ -e "${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using ZLib archive ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" + else + LIBZ_ARCHIVE_URL=https://github.com/facebook/zstd/releases/download/v${LIBZ_BUILD_VERSION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + info " -> Downloading ZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBZ_ARCHIVE_LOCATION} + fi + cd ${LIBZ_ARCHIVE_LOCATION} + wget ${LIBZ_ARCHIVE_URL} + cd - >/dev/null + fi + cd ${ownLocation}/../external + if [[ -d libzstd ]]; then + info " -> Directory external/libzstd already existing. Remove it to extract it again" + else + info " -> Extracting zstd-${LIBZ_BUILD_VERSION}.tar.gz..." + tar xzf ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + mv zstd-${LIBZ_BUILD_VERSION} libzstd + fi + cd - >/dev/null +} + +checkZStdLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libzstd build, installing..." + make install || die $? "Error during installation of libzstd" + else + die ${rtc} " => libzstd build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkZStdLib() { + info "" + info "ZStdLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a, skip build" + else + checkZStdLibArchive + checkZStdLibBuild + fi +} +# ===== End of libzstd functions ============================================= + +# ============================================================================ + +# ===== Start of libxz functions ============================================= +checkXZLibArchive() { + if [[ -e "${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using XZLib archive ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" + else + LIBXZ_ARCHIVE_URL=https://tukaani.org/xz/xz-${LIBXZ_BUILD_VERSION}.tar.gz + info " -> Downloading XZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBXZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBXZ_ARCHIVE_LOCATION} + fi + cd ${LIBXZ_ARCHIVE_LOCATION} + wget ${LIBXZ_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkXZLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libxz build and install" + else + die ${rtc} " => libxz build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkXZLib() { + info "" + info "XZLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a, skip build" + else + checkXZLibArchive + checkXZLibBuild + fi +} +# ===== End of libxz functions =============================================== + +# ============================================================================ + +# ===== Start of tor functions =============================================== +checkTorArchive() { + if [[ -e "${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using Tor archive ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz" + else + TOR_ARCHIVE_URL=https://github.com/torproject/tor/archive/tor-${TOR_BUILD_VERSION}.tar.gz + info " -> Downloading Tor archive ${TOR_ARCHIVE_URL}" + if [[ ! -e ${TOR_ARCHIVE_LOCATION} ]]; then + mkdir -p ${TOR_ARCHIVE_LOCATION} + fi + cd ${TOR_ARCHIVE_LOCATION} + wget ${TOR_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkTorBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished tor build and install" + else + die ${rtc} " => Tor build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkTor() { + info "" + info "Tor:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor, skip build" + else + checkTorArchive + checkTorBuild + fi +} + +checkTorMacArchive() { + info "" + info "Tor:" + if [[ -e "${TOR_ARCHIVE_LOCATION}/${TOR_RESOURCE_ARCHIVE}" ]]; then + info " -> Using Tor archive ${TOR_ARCHIVE_LOCATION}/${TOR_RESOURCE_ARCHIVE}" + else + TOR_ARCHIVE_URL=https://github.com/aliascash/resources/raw/master/resources/${TOR_RESOURCE_ARCHIVE} + info " -> Downloading Tor archive ${TOR_RESOURCE_ARCHIVE}" + if [[ ! -e ${TOR_ARCHIVE_LOCATION} ]]; then + mkdir -p ${TOR_ARCHIVE_LOCATION} + fi + cd ${TOR_ARCHIVE_LOCATION} + wget ${TOR_ARCHIVE_URL} + cd - >/dev/null + fi +} +# ===== End of tor functions ================================================= + +# ============================================================================ + +# Determine system +# Determine amount of cores: +if [[ "$OSTYPE" == "linux-gnu" ]]; then + CORES_TO_USE=$(grep -c ^processor /proc/cpuinfo) +elif [[ "$OSTYPE" == "darwin"* ]]; then + # Mac OSX + CORES_TO_USE=$(system_profiler SPHardwareDataType | grep "Total Number of Cores" | tr -s " " | cut -d " " -f 6) +#elif [[ "$OSTYPE" == "cygwin" ]]; then +# # POSIX compatibility layer and Linux environment emulation for Windows +#elif [[ "$OSTYPE" == "msys" ]]; then +# # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) +#elif [[ "$OSTYPE" == "win32" ]]; then +# # I'm not sure this can happen. +#elif [[ "$OSTYPE" == "freebsd"* ]]; then +# CORES_TO_USE=1 +else + CORES_TO_USE=1 +fi + +FULLBUILD=false +ENABLE_GUI=false +ENABLE_GUI_PARAMETERS='OFF' +BUILD_ONLY_ALIAS=false +BUILD_ONLY_DEPENDENCIES=false +WITH_TOR=false +GIVEN_DEPENDENCIES_BUILD_DIR='' + +while getopts c:dfgop:th? option; do + case ${option} in + c) CORES_TO_USE="${OPTARG}" ;; + d) BUILD_ONLY_DEPENDENCIES=true ;; + f) FULLBUILD=true ;; + g) + ENABLE_GUI=true + ENABLE_GUI_PARAMETERS="ON -DQT_CMAKE_MODULE_PATH=${MAC_QT_LIBRARYDIR}/cmake" + ;; + o) BUILD_ONLY_ALIAS=true ;; + p) GIVEN_DEPENDENCIES_BUILD_DIR="${OPTARG}" ;; + t) WITH_TOR=true ;; + h | ?) helpMe && exit 0 ;; + *) die 90 "invalid option \"${OPTARG}\"" ;; + esac +done + +# Go to alias-wallet repository root directory +cd .. + +# ============================================================================ +# Handle given path to dependency location +if [[ -n "${GIVEN_DEPENDENCIES_BUILD_DIR}" ]] ; then + # ${GIVEN_DEPENDENCIES_BUILD_DIR} is set, + # so store given path on build configuration + if [[ "${GIVEN_DEPENDENCIES_BUILD_DIR}" = /* ]]; then + # Absolute path given + DEPENDENCIES_BUILD_DIR=${GIVEN_DEPENDENCIES_BUILD_DIR} + else + # Relative path given + DEPENDENCIES_BUILD_DIR=${ownLocation}/../${GIVEN_DEPENDENCIES_BUILD_DIR} + fi + storeDependenciesBuildDir "${DEPENDENCIES_BUILD_DIR}" +fi + +# ============================================================================ +# If ${DEPENDENCIES_BUILD_DIR} is empty, no path to the dependencies is given +# or stored on script/.buildproperties. In this case use default location +# inside of Git clone +if [[ -z "${DEPENDENCIES_BUILD_DIR}" ]] ; then + DEPENDENCIES_BUILD_DIR=${ownLocation}/.. +fi + +info "" +info "Building/using dependencies on/from directory:" +info " -> ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + +if [[ ! -d ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR} ]]; then + info "" + info "Creating dependency build directory ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + mkdir -p "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + info " -> Done" +fi + +cd "${DEPENDENCIES_BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}" +DEPENDENCIES_BUILD_DIR=$(pwd) + +# ============================================================================ +# Handle which parts should be build +cd "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" +if ${FULLBUILD}; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +# ============================================================================ +# Check a/o build requirements/dependencies +checkHomebrew +checkBoost +checkBerkeleyDB +checkLevelDB +checkOpenSSL +checkWget +if ${WITH_TOR}; then + checkXZLib + checkZStdLib + checkEventLib + checkTor +else + checkTorMacArchive +fi +if ${ENABLE_GUI}; then + checkQt +fi + +# ============================================================================ +# Only dependencies should be build, so exit here +if ${BUILD_ONLY_DEPENDENCIES}; then + info "" + info "Checked a/o built all required dependencies." + exit +fi + +# ============================================================================ +# Dependencies are ready. Go ahead with the main project +ALIAS_BUILD_DIR=${ownLocation}/../${BUILD_DIR}/aliaswallet +if [[ ! -d ${ALIAS_BUILD_DIR} ]]; then + info "" + info "Creating Alias build directory ${ALIAS_BUILD_DIR}" + mkdir -p "${ALIAS_BUILD_DIR}" + info " -> Done" +fi +cd "${ALIAS_BUILD_DIR}" || die 1 "Unable to cd into Alias build directory '${ALIAS_BUILD_DIR}'" + +# Update $ALIAS_BUILD_DIR with full path +ALIAS_BUILD_DIR=$(pwd) + +# If requested, cleanup leftovers from previous build +if [[ ${FULLBUILD} = true ]] || [[ ${BUILD_ONLY_ALIAS} = true ]]; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +info "" +info "Generating Alias build configuration" +read -r -d '' cmd < Finished" +else + die 50 " => Failed with return code ${rtc}" +fi + +# Debug build: +#DEPLOY_QT_BINARY_TYPE_OPTION="-use-debug-libs" +DEPLOY_QT_BINARY_TYPE_OPTION='' + +if [[ -e ${MAC_QT_DIR}/bin/macdeployqt ]] ; then + info "" + info "Creating dmg:" + cd "${ALIAS_BUILD_DIR}" || die 1 "Unable to cd into ${ALIAS_BUILD_DIR}" + ${MAC_QT_DIR}/bin/macdeployqt \ + Alias.app \ + -qmldir="${ownLocation}"/../src/qt/res \ + -always-overwrite \ + -verbose=1 \ + "${DEPLOY_QT_BINARY_TYPE_OPTION}" + ${MAC_QT_DIR}/bin/macdeployqt \ + Alias.app \ + -dmg \ + -always-overwrite \ + -verbose=1 + info " -> Alias.dmg created" +else + die 23 "${MAC_QT_DIR}/bin/macdeployqt not found, unable to create dmg!" +fi + +info "" +info "Performing post build steps:" +info "============================" + +cd "${ALIAS_BUILD_DIR}" || die 1 "Unable to cd into Alias build directory '${ALIAS_BUILD_DIR}'" +cp Alias.dmg Alias.dmg.bak + +info "Change permision of .dmg file" +hdiutil convert "Alias.dmg" -format UDRW -o "Alias_Rw.dmg" +info " -> Done" + +info "Mount it and save the device" +PATH_AT_VOLUME=/Volumes/Alias +DEVICE=$(hdiutil attach -readwrite -noverify "Alias_Rw.dmg" | grep ${PATH_AT_VOLUME} | awk '{print $1}') +info " -> Done (${DEVICE})" + +sleep 2 + +info "Create symbolic link to application folder" +pushd "$PATH_AT_VOLUME" +ln -s /Applications +popd +info " -> Done" + +info "Copy background image in to package" +mkdir "$PATH_AT_VOLUME"/.background +cp "${ownLocation}"/../src/osx/app-slide-arrow.png "$PATH_AT_VOLUME"/.background/ +info " -> Done" + +info "Resize window, set background, change icon size, place icons in the right position, etc." +echo ' + tell application "Finder" + tell disk "Alias" ## check Path inside cd /Volume/ + open + set current view of container window to icon view + set toolbar visible of container window to false + set statusbar visible of container window to false + set the bounds of container window to {400, 100, 1200, 520} + set viewOptions to the icon view options of container window + set arrangement of viewOptions to not arranged + set icon size of viewOptions to 200 + set text size of viewOptions to 16 + set background picture of viewOptions to file ".background:app-slide-arrow.png" + set position of item "Alias.app" of container window to {180, 200} + set position of item "Applications" of container window to {620, 200} + close + open + update without registering applications + delay 2 + end tell + end tell +' | osascript +info " -> Done" + +sync + +info "Unmount" +hdiutil detach "${DEVICE}" +info " -> Done" + +info "Cleanup and convert" +rm -f "Alias.dmg" +hdiutil convert "Alias_Rw.dmg" -format UDZO -o "Alias.dmg" +rm -f "Alias_Rw.dmg" +info " -> Done" + +info " -> Finished: ${ALIAS_BUILD_DIR}/Alias.dmg" + +cd "${callDir}" || die 1 "Unable to cd back to where we came from (${callDir})" diff --git a/scripts/cmake-build-win-x86.bat b/scripts/cmake-build-win-x86.bat new file mode 100644 index 0000000000..c96b560a81 --- /dev/null +++ b/scripts/cmake-build-win-x86.bat @@ -0,0 +1,74 @@ +:: =========================================================================== +:: +:: SPDX-FileCopyrightText: © 2020 Alias Developers +:: SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +:: SPDX-License-Identifier: MIT +:: +:: Created: 2019-10-22 HLXEasy +:: +:: Helper script to build Alias on Windows using VS2019 and QT. +:: +:: =========================================================================== + +IF "%QTDIR_x86%" == "" GOTO NOQT +:YESQT + +IF "%VSDIR%" == "" GOTO NOVS +:YESVS + +IF "%CMAKEDIR_x86%" == "" GOTO NOCMAKE +:YESVS + +IF "%VCPKGDIR%" == "" GOTO NOVCPKG +:YESVS + +set SRC_DIR=%cd% +set BUILD_DIR=%cd%\build-x86 + +:: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" +IF NOT EXIST "%VSDIR%\VC\Auxiliary\Build\vcvars32.bat" ( + FOR /F "usebackq tokens=*" %%i IN (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath`) DO SET VSDIR=%%i +) +call "%VSDIR%\VC\Auxiliary\Build\vcvars32.bat" +cd +cd %SRC_DIR% +dir + +echo on + +rmdir /S /Q "%BUILD_DIR%\delivery" +mkdir "%BUILD_DIR%" +cd %BUILD_DIR% + +"%CMAKEDIR_x86%\cmake.exe" -D CMAKE_TOOLCHAIN_FILE=%VCPKGDIR%\scripts\buildsystems\vcpkg.cmake -D CMAKE_FIND_ROOT_PATH_MODE_LIBRARY=NEVER -D CMAKE_FIND_ROOT_PATH_MODE_INCLUDE=NEVER -D ENABLE_GUI=ON -D QT_CMAKE_MODULE_PATH=%QTDIR_x86%\lib\cmake -D CMAKE_BUILD_TYPE=Release -A Win32 .. || goto :ERROR + +"%CMAKEDIR_x86%\cmake.exe" --build . --target Aliaswallet --config Release || goto :ERROR + +::ren "%OUT_DIR%" Alias +::echo "The prepared package is in: %BUILD_DIR%\delivery" + +echo "Everything is OK" +GOTO END + +:ERROR +echo Failed with error #%errorlevel%. +exit /b %errorlevel% +GOTO END + +:NOVCPKG +@ECHO The VCPKGDIR environment variable was NOT detected! +GOTO END + +:NOCMAKE +@ECHO The CMAKEDIR_x86 environment variable was NOT detected! +GOTO END + +:NOVS +@ECHO The VSDIR environment variable was NOT detected! +GOTO END + +:NOQT +@ECHO The QTDIR_x86 environment variable was NOT detected! + +:END +cd %SRC_DIR% diff --git a/scripts/cmake-build-win.bat b/scripts/cmake-build-win.bat new file mode 100644 index 0000000000..0444eb320f --- /dev/null +++ b/scripts/cmake-build-win.bat @@ -0,0 +1,76 @@ +:: =========================================================================== +:: +:: SPDX-FileCopyrightText: © 2020 Alias Developers +:: SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +:: SPDX-License-Identifier: MIT +:: +:: Created: 2019-10-22 HLXEasy +:: +:: Helper script to build Alias on Windows using VS2019 and QT. +:: +:: =========================================================================== + +IF "%QTDIR%" == "" GOTO NOQT +:YESQT + +IF "%VSDIR%" == "" GOTO NOVS +:YESVS + +IF "%CMAKEDIR%" == "" GOTO NOCMAKE +:YESVS + +IF "%VCPKGDIR%" == "" GOTO NOVCPKG +:YESVS + +set SRC_DIR=%cd% +set BUILD_DIR=%cd%\build + +:: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" +IF NOT EXIST "%VSDIR%\VC\Auxiliary\Build\vcvars64.bat" ( + FOR /F "usebackq tokens=*" %%i IN (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath`) DO SET VSDIR=%%i +) +call "%VSDIR%\VC\Auxiliary\Build\vcvars64.bat" +cd +cd %SRC_DIR% +dir + +echo on + +rmdir /S /Q "%BUILD_DIR%\delivery" +mkdir "%BUILD_DIR%" +cd %BUILD_DIR% + +"%CMAKEDIR%\cmake.exe" -D CMAKE_TOOLCHAIN_FILE=%VCPKGDIR%\scripts\buildsystems\vcpkg.cmake -D CMAKE_FIND_ROOT_PATH_MODE_LIBRARY=NEVER -D CMAKE_FIND_ROOT_PATH_MODE_INCLUDE=NEVER -D ENABLE_GUI=ON -D QT_CMAKE_MODULE_PATH=%QTDIR%\lib\cmake -D CMAKE_BUILD_TYPE=Release .. || goto :ERROR + +"%CMAKEDIR%\cmake.exe" --build . --target Aliaswalletd --config Release || goto :ERROR + +"%CMAKEDIR%\cmake.exe" --build . --target Aliaswallet --config Release || goto :ERROR + +::ren "%OUT_DIR%" Alias +::echo "The prepared package is in: %BUILD_DIR%\delivery" + +echo "Everything is OK" +GOTO END + +:ERROR +echo Failed with error #%errorlevel%. +exit /b %errorlevel% +GOTO END + +:NOVCPKG +@ECHO The VCPKGDIR environment variable was NOT detected! +GOTO END + +:NOCMAKE +@ECHO The CMAKEDIR environment variable was NOT detected! +GOTO END + +:NOVS +@ECHO The VSDIR environment variable was NOT detected! +GOTO END + +:NOQT +@ECHO The QTDIR environment variable was NOT detected! + +:END +cd %SRC_DIR% diff --git a/scripts/cmake-build.sh b/scripts/cmake-build.sh new file mode 100755 index 0000000000..f4b0a7f842 --- /dev/null +++ b/scripts/cmake-build.sh @@ -0,0 +1,1098 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2019-10-10 HLXEasy +# +# This script can be used to build Alias using CMake +# +# =========================================================================== + +# =========================================================================== +# Store path from where script was called, determine own location +# and source helper content from there +callDir=$(pwd) +ownLocation="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "${ownLocation}" || die 1 "Unable to cd into own location ${ownLocation}" +. ./include/helpers_console.sh +_init +. ./include/handle_buildconfig.sh + +##### ### # Global definitions # ### ######################################## + +##### ### # Boost # ### ##################################################### +# Location of Boost will be resolved by trying to find required Boost libs +BOOST_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Boost +BOOST_REQUIRED_LIBS='chrono filesystem iostreams program_options system thread regex date_time atomic' +# regex date_time atomic + +##### ### # BerkeleyDB # ### ################################################ +# Location of archive will be resolved like this: +# ${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz +BERKELEYDB_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/BerkeleyDB + +##### ### # OpenSSL # ### ################################################### +# Location of archive will be resolved like this: +# ${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz +#OPENSSL_ARCHIVE_LOCATION=https://mirror.viaduck.org/openssl +OPENSSL_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/OpenSSL + +##### ### # EventLib # ### ################################################## +# Location of archive will be resolved like this: +# ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz +LIBEVENT_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/EventLib + +##### ### # ZLib # ### ###################################################### +# Location of archive will be resolved like this: +# ${LIBZ_ARCHIVE_LOCATION}/v${LIBZ_BUILD_VERSION}.tar.gz +LIBZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/ZLib + +##### ### # XZLib # ### ##################################################### +# Location of archive will be resolved like this: +# ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz +LIBXZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/XZLib + +##### ### # Tor # ### ####################################################### +# Location of archive will be resolved like this: +# ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz +TOR_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Tor + +BUILD_DIR=cmake-build-cmdline + +helpMe() { + echo " + + Helper script to build Alias wallet and daemon using CMake. + Required library archives will be downloaded once and will be used + on subsequent builds. + + Default download location is ~/Archives. You can change this by + modifying '${ownLocation}/scripts/.buildconfig'. + + Usage: + ${0} [options] + + Optional parameters: + -c + The amount of cores to use for build. If not using this option + the script determines the available cores on this machine. + Not used for build steps of external libraries like OpenSSL or + BerkeleyDB. + -d Do _not_ build Alias but only the dependencies. Used to prepare + build slaves a/o builder docker images. + -f Perform fullbuild by cleanup all generated data from previous + build runs. + -g Build GUI (Qt) components + -o Perfom only Alias fullbuild. Only the alias buildfolder + will be wiped out before. All other folders stay in place. + -p + Build/install the required dependencies onto the given directory. + With this option the required dependencies could be located outside + the Git clone. This is useful + a) to have them only once at the local machine, even if working + with multiple Git clones and + b) to have them separated from the project itself, which is a must + if using Qt Creator. Otherwise Qt Creator always scans and finds + all the other content again and again. + Given value must be an absolute path or relative to the root of the + Git clone. + -s Use Qt from system + -t Build with included Tor + -h Show this help + + " +} + +# ===== Determining used distribution ======================================== +defineQtVersionForCurrentDistribution() { + info "" + info "Determining distribution:" + if [[ -e /etc/os-release ]]; then + . /etc/os-release + usedDistro='' + releaseName='' + case ${ID} in + "centos") + usedDistro="CENTOS" + case ${VERSION_ID} in + "8") + releaseName='8' + ;; + *) + echo "Unsupported operating system ID=${ID}, VERSION_ID=${VERSION_ID}" + ;; + esac + ;; + "debian") + usedDistro="DEBIAN" + case ${VERSION_ID} in + "9") + releaseName='STRETCH' + ;; + "10") + releaseName='BUSTER' + ;; + *) + case ${PRETTY_NAME} in + *"bullseye"*) + echo "Detected ${PRETTY_NAME}, installing Buster binaries" + releaseName='BUSTER' + ;; + *) + echo "Unsupported operating system ID=${ID}, VERSION_ID=${VERSION_ID}" + cat /etc/os-release + exit 1 + ;; + esac + ;; + esac + ;; + "ubuntu") + usedDistro="UBUNTU" + case ${VERSION_CODENAME} in + "bionic" | "cosmic") + releaseName='1804' + ;; + "disco") + releaseName='1904' + ;; + "eoan") + releaseName='1910' + ;; + "focal") + releaseName='2004' + ;; + *) + echo "Unsupported operating system ID=${ID}, VERSION_ID=${VERSION_CODENAME}" + exit + ;; + esac + ;; + "fedora") + usedDistro="FEDORA" + ;; + "opensuse-tumbleweed") + usedDistro="OPENSUSE" + releaseName="TUMBLEWEED" + ;; + "raspbian") + usedDistro="RASPBERRY" + case ${VERSION_ID} in + "9") + releaseName='STRETCH' + ;; + "10") + releaseName='BUSTER' + ;; + *) + case ${PRETTY_NAME} in + *"bullseye"*) + echo "Detected ${PRETTY_NAME}, installing Buster binaries" + releaseName='BUSTER' + ;; + *) + echo "Unsupported operating system ID=${ID}, VERSION_ID=${VERSION_ID}" + cat /etc/os-release + exit 1 + ;; + esac + ;; + esac + ;; + *) + echo "Unsupported operating system ${ID}, VERSION_ID=${VERSION_ID}" + exit + ;; + esac + + # https://stackoverflow.com/questions/16553089/dynamic-variable-names-in-bash + defineQtVersionToUse=QT_VERSION_TO_USE + printf -v "$defineQtVersionToUse" '%s' "QT_VERSION_${usedDistro}_${releaseName}" + + # https://unix.stackexchange.com/questions/452723/is-it-possible-to-print-the-content-of-the-content-of-a-variable-with-shell-scri + QT_VERSION="${!QT_VERSION_TO_USE}" + QT_DIR=${QT_INSTALLATION_PATH}/${QT_VERSION}/gcc_64 + QT_LIBRARYDIR=${QT_DIR}/lib + + info " -> Determined ${usedDistro} ${releaseName}, using Qt ${QT_VERSION}" + else + die 100 "Unable to determine used Linux distribution" + fi +} + +# ===== Start of openssl functions =========================================== +checkOpenSSLArchive() { + if [[ -e "${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using OpenSSL archive ${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz" + else + OPENSSL_ARCHIVE_URL=https://mirror.viaduck.org/openssl/openssl-${OPENSSL_BUILD_VERSION}.tar.gz + info " -> Downloading OpenSSL archive ${OPENSSL_ARCHIVE_URL}" + if [[ ! -e ${OPENSSL_ARCHIVE_LOCATION} ]]; then + mkdir -p ${OPENSSL_ARCHIVE_LOCATION} + fi + cd ${OPENSSL_ARCHIVE_LOCATION} + wget ${OPENSSL_ARCHIVE_URL} + cd - >/dev/null + fi +} + +# For OpenSSL we're using a fork of https://github.com/viaduck/openssl-cmake +# with some slight modifications for Alias +checkOpenSSLClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d openssl-cmake ]]; then + info " -> Updating openssl-cmake clone" + cd openssl-cmake + git pull --prune + else + info " -> Cloning openssl-cmake" + git clone --branch alias https://github.com/aliascash/openssl-cmake.git openssl-cmake + fi + cd "${currentDir}" +} + +checkOpenSSLBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl" + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished openssl build and install" + else + die ${rtc} " => OpenSSL build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkOpenSSL() { + info "" + info "OpenSSL:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libssl.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libssl.a, skip build" + else + checkOpenSSLArchive + checkOpenSSLClone + checkOpenSSLBuild + fi +} +# ===== End of openssl functions ============================================= + +# ============================================================================ + +# ===== Start of berkeleydb functions ======================================== +checkBerkeleyDBArchive() { + if [[ -e "${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using BerkeleyDB archive ${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz" + else + BERKELEYDB_ARCHIVE_URL=https://download.oracle.com/berkeley-db/db-${BERKELEYDB_BUILD_VERSION}.tar.gz + info " -> Downloading BerkeleyDB archive ${BERKELEYDB_ARCHIVE_URL}" + if [[ ! -e ${BERKELEYDB_ARCHIVE_LOCATION} ]]; then + mkdir -p ${BERKELEYDB_ARCHIVE_LOCATION} + fi + cd ${BERKELEYDB_ARCHIVE_LOCATION} || die 1 "Unable to cd into ${BERKELEYDB_ARCHIVE_LOCATION}" + wget ${BERKELEYDB_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkBerkeleyDBBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb" + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished BerkeleyDB (libdb) build and install" + else + die ${rtc} " => BerkeleyDB (libdb) build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkBerkeleyDB() { + info "" + info "BerkeleyDB:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install/lib/libdb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install/lib/libdb.a, skip build" + else + checkBerkeleyDBArchive + checkBerkeleyDBBuild + fi +} +# ===== End of berkeleydb functions ========================================== + +# ============================================================================ + +# ===== Start of boost functions ============================================= +checkBoostArchive() { + local currentDir=$(pwd) + if [[ ! -e ${BOOST_ARCHIVE_LOCATION} ]]; then + mkdir -p ${BOOST_ARCHIVE_LOCATION} + fi + cd ${BOOST_ARCHIVE_LOCATION} || die 1 "Unable to cd into ${BOOST_ARCHIVE_LOCATION}" + if [[ ! -e "boost_${BOOST_VERSION//./_}.tar.gz" ]]; then + info " -> Downloading Boost archive" + wget https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION//./_}.tar.gz + else + info " -> Using existing Boost archive" + fi + + info " -> Verifying Boost archive checksum" + determinedChecksum=$(sha256sum boost_${BOOST_VERSION//./_}.tar.gz | awk '{ print $1 }') + info " Expected checksum: ${BOOST_ARCHIVE_HASH}" + info " Determined checksum: ${determinedChecksum}" + if [[ "${BOOST_ARCHIVE_HASH}" != "${determinedChecksum}" ]] ; then + die 2 " => Checksum of downloaded Boost archive not matching expected value!" + else + info " -> Checksum OK" + fi +} + +buildBoost() { + info " -> Building Boost on ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + cd "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + info " -> Cleanup before extraction" + rm -rf boost_${BOOST_VERSION//./_} + info " -> Extracting Boost archive" + tar xzf ${BOOST_ARCHIVE_LOCATION}/boost_${BOOST_VERSION//./_}.tar.gz + info " -> Building Boost" + cd boost_${BOOST_VERSION//./_} || die 1 "Unable to cd into boost_${BOOST_VERSION//./_}" + ./bootstrap.sh --with-libraries="${BOOST_REQUIRED_LIBS// /,}" + # ./bootstrap.sh + ./b2 \ + -j"${CORES_TO_USE}" \ + --layout=tagged \ + --build-type=complete + cd "${currentDir}" || die 1 "Unable to cd into ${currentDir}" +} + +checkBoost() { + info "" + info "Boost:" + info " -> Searching required static Boost libs" + BOOST_INCLUDEDIR=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/boost_${BOOST_VERSION//./_} + BOOST_LIBRARYDIR=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/boost_${BOOST_VERSION//./_}/stage/lib + boostBuildRequired=false + if [[ -d ${BOOST_LIBRARYDIR} ]]; then + for currentBoostDependency in ${BOOST_REQUIRED_LIBS}; do + if [[ -e ${BOOST_LIBRARYDIR}/libboost_${currentBoostDependency}-mt-${LIB_ARCH_SUFFIX}.a ]]; then + info " -> ${currentBoostDependency}: OK" + else + warning " => ${currentBoostDependency}: Not found!" + boostBuildRequired=true + fi + done + else + warning " => Boost library directory ${BOOST_LIBRARYDIR} not found!" + boostBuildRequired=true + fi + if ${boostBuildRequired} ; then + checkBoostArchive + buildBoost + else + info " => All Boost requirements found" + fi +} +# ===== End of boost functions =============================================== + +# ============================================================================ + +# ===== Start of Qt functions ================================================ +checkQt() { + info "" + info "Qt:" + info " -> Searching required Qt libs" + qtComponentMissing=false + if [[ -d ${QT_LIBRARYDIR} ]]; then + # libQt5Quick.so + for currentQtDependency in ${QT_REQUIRED_LIBS}; do + if [[ -n $(find ${QT_LIBRARYDIR}/ -name "libQt5${currentQtDependency}.so") ]]; then + info " -> ${currentQtDependency}: OK" + else + warning " -> ${currentQtDependency}: Not found!" + qtComponentMissing=true + fi + done + else + info " -> Qt library directory ${QT_LIBRARYDIR} not found" + qtComponentMissing=true + fi + if ${qtComponentMissing}; then + error " -> Qt ${QT_VERSION}: Not all required components found!" + error "" + die 43 "Stopping build because of missing Qt component(s)" + fi +} +# ===== End of Qt functions ================================================== + +# ============================================================================ + +# ===== Start of libevent functions ========================================== +checkEventLibArchive() { + if [[ -e "${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" ]]; then + info " -> Using EventLib archive ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" + else + LIBEVENT_ARCHIVE_URL=https://github.com/libevent/libevent/releases/download/release-${LIBEVENT_BUILD_VERSION}-stable/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz + info " -> Downloading EventLib archive ${LIBEVENT_ARCHIVE_URL}" + if [[ ! -e ${LIBEVENT_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBEVENT_ARCHIVE_LOCATION} + fi + cd ${LIBEVENT_ARCHIVE_LOCATION} + wget ${LIBEVENT_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkEventLibClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d libevent ]]; then + info " -> Updating libevent clone" + cd libevent + git pull --prune + else + info " -> Cloning libevent" + git clone https://github.com/libevent/libevent.git libevent + fi + cd "${currentDir}" +} + +checkEventLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libevent build, installing..." + make install || die $? " => Error during installation of libevent" + else + die ${rtc} " => libevent build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkEventLib() { + info "" + info "EventLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a, skip build" + else + checkEventLibClone + checkEventLibBuild + fi +} +# ===== End of libevent functions ============================================ + +# ============================================================================ + +# ===== Start of leveldb functions =========================================== +checkLevelDBClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d leveldb ]]; then + info " -> Updating LevelDB clone" + cd leveldb + git pull --prune + else + info " -> Cloning LevelDB" + git clone https://github.com/google/leveldb.git leveldb + cd leveldb + fi + info " -> Checkout release ${LEVELDB_VERSION}" + git checkout ${LEVELDB_VERSION_TAG} + cd "${currentDir}" +} + +checkLevelDBBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libevent build, installing..." + make install || die $? "Error during installation of libleveldb" + else + die ${rtc} " => libleveldb build failed with return code ${rtc}" + fi + # read a + + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a ]]; then + info " -> Using ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a" + LIB_LEVELDB_LOCATION=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/cmake/leveldb + elif [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib64/libleveldb.a ]]; then + info " -> Using ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib64/libleveldb.a" + LIB_LEVELDB_LOCATION=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib64/cmake/leveldb + else + die 23 " => libleveldb build result not found!" + fi + + cd - >/dev/null +} + +checkLevelDB() { + info "" + info "LevelDB:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a, skip build" + LIB_LEVELDB_LOCATION=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/cmake/leveldb + elif [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib64/libleveldb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib64/libleveldb.a, skip build" + LIB_LEVELDB_LOCATION=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib64/cmake/leveldb + else + checkLevelDBClone + checkLevelDBBuild + fi +} +# ===== End of leveldb functions ============================================= + +# ============================================================================ + +# ===== Start of libzstd functions =========================================== +checkZStdLibArchive() { + if [[ -e "${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using ZLib archive ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" + else + LIBZ_ARCHIVE_URL=https://github.com/facebook/zstd/releases/download/v${LIBZ_BUILD_VERSION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + info " -> Downloading ZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBZ_ARCHIVE_LOCATION} + fi + cd ${LIBZ_ARCHIVE_LOCATION} + wget ${LIBZ_ARCHIVE_URL} + cd - >/dev/null + fi + cd ${ownLocation}/../external + if [[ -d libzstd ]]; then + info " -> Directory external/libzstd already existing. Remove it to extract it again" + else + info " -> Extracting zstd-${LIBZ_BUILD_VERSION}.tar.gz..." + tar xzf ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + mv zstd-${LIBZ_BUILD_VERSION} libzstd + fi + cd - >/dev/null +} + +checkZStdLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libzstd build, installing..." + make install || die $? "Error during installation of libzstd" + else + die ${rtc} " => libzstd build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkZStdLib() { + info "" + info "ZStdLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a, skip build" + else + checkZStdLibArchive + checkZStdLibBuild + fi +} +# ===== End of libzstd functions ============================================= + +# ============================================================================ + +# ===== Start of libxz functions ============================================= +checkXZLibArchive() { + if [[ -e "${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using XZLib archive ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" + else + LIBXZ_ARCHIVE_URL=https://tukaani.org/xz/xz-${LIBXZ_BUILD_VERSION}.tar.gz + info " -> Downloading XZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBXZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBXZ_ARCHIVE_LOCATION} + fi + cd ${LIBXZ_ARCHIVE_LOCATION} + wget ${LIBXZ_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkXZLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libxz build and install" + else + die ${rtc} " => libxz build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkXZLib() { + info "" + info "XZLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a, skip build" + else + checkXZLibArchive + checkXZLibBuild + fi +} +# ===== End of libxz functions =============================================== + +# ============================================================================ + +# ===== Start of tor functions =============================================== +checkTorArchive() { + if [[ -e "${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using Tor archive ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz" + else + TOR_ARCHIVE_URL=https://github.com/torproject/tor/archive/tor-${TOR_BUILD_VERSION}.tar.gz + info " -> Downloading Tor archive ${TOR_ARCHIVE_URL}" + if [[ ! -e ${TOR_ARCHIVE_LOCATION} ]]; then + mkdir -p ${TOR_ARCHIVE_LOCATION} + fi + cd ${TOR_ARCHIVE_LOCATION} + wget ${TOR_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkTorBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished tor build and install" + else + die ${rtc} " => Tor build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkTor() { + info "" + info "Tor:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor, skip build" + else + checkTorArchive + checkTorBuild + fi +} +# ===== End of libxz functions =============================================== + +# ============================================================================ + +# Determine system +# Determine amount of cores: +if [[ "$OSTYPE" == "linux-gnu" ]]; then + CORES_TO_USE=$(grep -c ^processor /proc/cpuinfo) +elif [[ "$OSTYPE" == "darwin"* ]]; then + # Mac OSX + CORES_TO_USE=$(system_profiler SPHardwareDataType | grep "Total Number of Cores" | tr -s " " | cut -d " " -f 6) +#elif [[ "$OSTYPE" == "cygwin" ]]; then +# # POSIX compatibility layer and Linux environment emulation for Windows +#elif [[ "$OSTYPE" == "msys" ]]; then +# # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) +#elif [[ "$OSTYPE" == "win32" ]]; then +# # I'm not sure this can happen. +#elif [[ "$OSTYPE" == "freebsd"* ]]; then +# CORES_TO_USE=1 +else + CORES_TO_USE=1 +fi +# Determine arch +LIB_ARCH_SUFFIX=x64 +if [ "$(uname -m)" = "aarch64" ] ; then + LIB_ARCH_SUFFIX=a64 +fi + +FULLBUILD=false +ENABLE_GUI=false +ENABLE_GUI_PARAMETERS='OFF' +BUILD_ONLY_ALIAS=false +BUILD_ONLY_DEPENDENCIES=false +WITH_TOR=false +SYSTEM_QT=false +LIB_LEVELDB_LOCATION='' +GIVEN_DEPENDENCIES_BUILD_DIR='' + +defineQtVersionForCurrentDistribution + +while getopts c:dfgop:sth? option; do + case ${option} in + c) CORES_TO_USE="${OPTARG}" ;; + d) BUILD_ONLY_DEPENDENCIES=true ;; + f) FULLBUILD=true ;; + g) ENABLE_GUI=true ;; + o) BUILD_ONLY_ALIAS=true ;; + p) GIVEN_DEPENDENCIES_BUILD_DIR="${OPTARG}" ;; + s) SYSTEM_QT=true ;; + t) WITH_TOR=true ;; + h | ?) helpMe && exit 0 ;; + *) die 90 "invalid option \"${OPTARG}\"" ;; + esac +done + +# Go to alias-wallet repository root directory +cd .. + +# ============================================================================ +# Handle given path to dependency location +if [[ -n "${GIVEN_DEPENDENCIES_BUILD_DIR}" ]] ; then + # ${GIVEN_DEPENDENCIES_BUILD_DIR} is set, + # so store given path on build configuration + if [[ "${GIVEN_DEPENDENCIES_BUILD_DIR}" = /* ]]; then + # Absolute path given + DEPENDENCIES_BUILD_DIR=${GIVEN_DEPENDENCIES_BUILD_DIR} + else + # Relative path given + DEPENDENCIES_BUILD_DIR=${ownLocation}/../${GIVEN_DEPENDENCIES_BUILD_DIR} + fi + storeDependenciesBuildDir "${DEPENDENCIES_BUILD_DIR}" +fi + +# ============================================================================ +# If ${DEPENDENCIES_BUILD_DIR} is empty, no path to the dependencies is given +# or stored on script/.buildproperties. In this case use default location +# inside of Git clone +if [[ -z "${DEPENDENCIES_BUILD_DIR}" ]] ; then + DEPENDENCIES_BUILD_DIR=${ownLocation}/.. +fi + +info "" +info "Building/using dependencies on/from directory:" +info " -> ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + +if [[ ! -d ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR} ]]; then + info "" + info "Creating dependency build directory ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + mkdir -p "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + info " -> Done" +fi + +cd "${DEPENDENCIES_BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}" +DEPENDENCIES_BUILD_DIR=$(pwd) + +# ============================================================================ +# Handle which parts should be build +cd "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" +if ${FULLBUILD}; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +# ============================================================================ +# If GUI should be build, set proper parameters +if ${ENABLE_GUI}; then + if ${SYSTEM_QT}; then + ENABLE_GUI_PARAMETERS="ON" + else + checkQt + ENABLE_GUI_PARAMETERS="ON -DQT_CMAKE_MODULE_PATH=${QT_LIBRARYDIR}/cmake" + fi +fi + +# ============================================================================ +# Check a/o build requirements/dependencies +checkBoost +checkBerkeleyDB +checkLevelDB +checkOpenSSL +if ${WITH_TOR}; then + checkXZLib + checkZStdLib + checkEventLib + checkTor +fi + +# ============================================================================ +# Only dependencies should be build, so exit here +if ${BUILD_ONLY_DEPENDENCIES}; then + info "" + info "Checked a/o built all required dependencies." + exit +fi + +# ============================================================================ +# Dependencies are ready. Go ahead with the main project +ALIAS_BUILD_DIR=${ownLocation}/../${BUILD_DIR}/aliaswallet +if [[ ! -d ${ALIAS_BUILD_DIR} ]]; then + info "" + info "Creating Alias build directory ${ALIAS_BUILD_DIR}" + mkdir -p "${ALIAS_BUILD_DIR}" + info " -> Done" +fi +cd "${ALIAS_BUILD_DIR}" || die 1 "Unable to cd into Alias build directory '${ALIAS_BUILD_DIR}'" + +# Update $ALIAS_BUILD_DIR with full path +ALIAS_BUILD_DIR=$(pwd) + +# If requested, cleanup leftovers from previous build +if [[ ${FULLBUILD} = true ]] || [[ ${BUILD_ONLY_ALIAS} = true ]]; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +info "" +info "Generating Alias build configuration" + +# FindBerkeleyDB.cmake requires this +export BERKELEYDB_ROOT=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install + +read -r -d '' cmd < Finished" +else + error " => Finished with return code ${rtc}" +fi +cd "${callDir}" || die 1 "Unable to cd back to where we came from (${callDir})" diff --git a/scripts/cmake-build_x86.sh b/scripts/cmake-build_x86.sh new file mode 100755 index 0000000000..d9b09484eb --- /dev/null +++ b/scripts/cmake-build_x86.sh @@ -0,0 +1,1114 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2019-10-10 HLXEasy +# +# This script can be used to build Alias using CMake +# +# =========================================================================== + +# =========================================================================== +# Store path from where script was called, determine own location +# and source helper content from there +callDir=$(pwd) +ownLocation="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "${ownLocation}" || die 1 "Unable to cd into own location ${ownLocation}" +. ./include/helpers_console.sh +_init +. ./include/handle_buildconfig.sh + +##### ### # Global definitions # ### ######################################## + +##### ### # Boost # ### ##################################################### +# Location of Boost will be resolved by trying to find required Boost libs +BOOST_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Boost +BOOST_REQUIRED_LIBS='chrono filesystem iostreams program_options system thread regex date_time atomic' +# regex date_time atomic + +##### ### # BerkeleyDB # ### ################################################ +# Location of archive will be resolved like this: +# ${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz +BERKELEYDB_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/BerkeleyDB + +##### ### # OpenSSL # ### ################################################### +# Location of archive will be resolved like this: +# ${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz +#OPENSSL_ARCHIVE_LOCATION=https://mirror.viaduck.org/openssl +OPENSSL_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/OpenSSL + +##### ### # EventLib # ### ################################################## +# Location of archive will be resolved like this: +# ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz +LIBEVENT_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/EventLib + +##### ### # ZLib # ### ###################################################### +# Location of archive will be resolved like this: +# ${LIBZ_ARCHIVE_LOCATION}/v${LIBZ_BUILD_VERSION}.tar.gz +LIBZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/ZLib + +##### ### # XZLib # ### ##################################################### +# Location of archive will be resolved like this: +# ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz +LIBXZ_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/XZLib + +##### ### # Tor # ### ####################################################### +# Location of archive will be resolved like this: +# ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz +TOR_ARCHIVE_LOCATION=${ARCHIVES_ROOT_DIR}/Tor + +BUILD_DIR=cmake-build-cmdline-x86 + +helpMe() { + echo " + + Helper script to build Alias wallet and daemon using CMake. + Required library archives will be downloaded once and will be used + on subsequent builds. + + Default download location is ~/Archives. You can change this by + modifying '${ownLocation}/scripts/.buildconfig'. + + Usage: + ${0} [options] + + Optional parameters: + -c + The amount of cores to use for build. If not using this option + the script determines the available cores on this machine. + Not used for build steps of external libraries like OpenSSL or + BerkeleyDB. + -d Do _not_ build Alias but only the dependencies. Used to prepare + build slaves a/o builder docker images. + -f Perform fullbuild by cleanup all generated data from previous + build runs. + -g Build GUI (Qt) components + -o Perfom only Alias fullbuild. Only the alias buildfolder + will be wiped out before. All other folders stay in place. + -p + Build/install the required dependencies onto the given directory. + With this option the required dependencies could be located outside + the Git clone. This is useful + a) to have them only once at the local machine, even if working + with multiple Git clones and + b) to have them separated from the project itself, which is a must + if using Qt Creator. Otherwise Qt Creator always scans and finds + all the other content again and again. + Given value must be an absolute path or relative to the root of the + Git clone. + -s Use Qt from system + -t Build with included Tor + -h Show this help + + " +} + +# ===== Determining used distribution ======================================== +defineQtVersionForCurrentDistribution() { + info "" + info "Determining distribution:" + if [[ -e /etc/os-release ]]; then + . /etc/os-release + usedDistro='' + releaseName='' + case ${ID} in + "centos") + usedDistro="CENTOS" + case ${VERSION_ID} in + "8") + releaseName='8' + ;; + *) + echo "Unsupported operating system ID=${ID}, VERSION_ID=${VERSION_ID}" + ;; + esac + ;; + "debian") + usedDistro="DEBIAN" + case ${VERSION_ID} in + "9") + releaseName='STRETCH' + ;; + "10") + releaseName='BUSTER' + ;; + *) + case ${PRETTY_NAME} in + *"bullseye"*) + echo "Detected ${PRETTY_NAME}, installing Buster binaries" + releaseName='BUSTER' + ;; + *) + echo "Unsupported operating system ID=${ID}, VERSION_ID=${VERSION_ID}" + cat /etc/os-release + exit 1 + ;; + esac + ;; + esac + ;; + "ubuntu") + usedDistro="UBUNTU" + case ${VERSION_CODENAME} in + "bionic" | "cosmic") + releaseName='1804' + ;; + "disco") + releaseName='1904' + ;; + "eoan") + releaseName='1910' + ;; + "focal") + releaseName='2004' + ;; + *) + echo "Unsupported operating system ID=${ID}, VERSION_ID=${VERSION_CODENAME}" + exit + ;; + esac + ;; + "fedora") + usedDistro="FEDORA" + ;; + "opensuse-tumbleweed") + usedDistro="OPENSUSE" + releaseName="TUMBLEWEED" + ;; + "raspbian") + usedDistro="RASPBERRY" + case ${VERSION_ID} in + "9") + releaseName='STRETCH' + ;; + "10") + releaseName='BUSTER' + ;; + *) + case ${PRETTY_NAME} in + *"bullseye"*) + echo "Detected ${PRETTY_NAME}, installing Buster binaries" + releaseName='BUSTER' + ;; + *) + echo "Unsupported operating system ID=${ID}, VERSION_ID=${VERSION_ID}" + cat /etc/os-release + exit 1 + ;; + esac + ;; + esac + ;; + *) + echo "Unsupported operating system ${ID}, VERSION_ID=${VERSION_ID}" + exit + ;; + esac + + # https://stackoverflow.com/questions/16553089/dynamic-variable-names-in-bash + defineQtVersionToUse=QT_VERSION_TO_USE + printf -v "$defineQtVersionToUse" '%s' "QT_VERSION_${usedDistro}_${releaseName}" + + # https://unix.stackexchange.com/questions/452723/is-it-possible-to-print-the-content-of-the-content-of-a-variable-with-shell-scri + QT_VERSION="${!QT_VERSION_TO_USE}" + QT_DIR=${QT_INSTALLATION_PATH}/${QT_VERSION}/gcc_64 + QT_LIBRARYDIR=${QT_DIR}/lib + + info " -> Determined ${usedDistro} ${releaseName}, using Qt ${QT_VERSION}" + else + die 100 "Unable to determine used Linux distribution" + fi +} + +# ===== Start of openssl functions =========================================== +checkOpenSSLArchive() { + if [[ -e "${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using OpenSSL archive ${OPENSSL_ARCHIVE_LOCATION}/openssl-${OPENSSL_BUILD_VERSION}.tar.gz" + else + OPENSSL_ARCHIVE_URL=https://mirror.viaduck.org/openssl/openssl-${OPENSSL_BUILD_VERSION}.tar.gz + info " -> Downloading OpenSSL archive ${OPENSSL_ARCHIVE_URL}" + if [[ ! -e ${OPENSSL_ARCHIVE_LOCATION} ]]; then + mkdir -p ${OPENSSL_ARCHIVE_LOCATION} + fi + cd ${OPENSSL_ARCHIVE_LOCATION} + wget ${OPENSSL_ARCHIVE_URL} + cd - >/dev/null + fi +} + +# For OpenSSL we're using a fork of https://github.com/viaduck/openssl-cmake +# with some slight modifications for Alias +checkOpenSSLClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d openssl-cmake ]]; then + info " -> Updating openssl-cmake clone" + cd openssl-cmake + git pull --prune + else + info " -> Cloning openssl-cmake" + git clone --branch alias https://github.com/aliascash/openssl-cmake.git openssl-cmake + fi + cd "${currentDir}" +} + +checkOpenSSLBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/openssl" + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished openssl build and install" + else + die ${rtc} " => OpenSSL build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkOpenSSL() { + info "" + info "OpenSSL:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libssl.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libssl.a, skip build" + else + checkOpenSSLArchive + checkOpenSSLClone + checkOpenSSLBuild + fi +} +# ===== End of openssl functions ============================================= + +# ============================================================================ + +# ===== Start of berkeleydb functions ======================================== +checkBerkeleyDBArchive() { + if [[ -e "${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using BerkeleyDB archive ${BERKELEYDB_ARCHIVE_LOCATION}/db-${BERKELEYDB_BUILD_VERSION}.tar.gz" + else + BERKELEYDB_ARCHIVE_URL=https://download.oracle.com/berkeley-db/db-${BERKELEYDB_BUILD_VERSION}.tar.gz + info " -> Downloading BerkeleyDB archive ${BERKELEYDB_ARCHIVE_URL}" + if [[ ! -e ${BERKELEYDB_ARCHIVE_LOCATION} ]]; then + mkdir -p ${BERKELEYDB_ARCHIVE_LOCATION} + fi + cd ${BERKELEYDB_ARCHIVE_LOCATION} || die 1 "Unable to cd into ${BERKELEYDB_ARCHIVE_LOCATION}" + wget ${BERKELEYDB_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkBerkeleyDBBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb" + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished BerkeleyDB (libdb) build and install" + else + die ${rtc} " => BerkeleyDB (libdb) build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkBerkeleyDB() { + info "" + info "BerkeleyDB:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install/lib/libdb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install/lib/libdb.a, skip build" + else + checkBerkeleyDBArchive + checkBerkeleyDBBuild + fi +} +# ===== End of berkeleydb functions ========================================== + +# ============================================================================ + +# ===== Start of boost functions ============================================= +checkBoostArchive() { + local currentDir=$(pwd) + if [[ ! -e ${BOOST_ARCHIVE_LOCATION} ]]; then + mkdir -p ${BOOST_ARCHIVE_LOCATION} + fi + cd ${BOOST_ARCHIVE_LOCATION} || die 1 "Unable to cd into ${BOOST_ARCHIVE_LOCATION}" + if [[ ! -e "boost_${BOOST_VERSION//./_}.tar.gz" ]]; then + info " -> Downloading Boost archive" + wget https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION//./_}.tar.gz + else + info " -> Using existing Boost archive" + fi + + info " -> Verifying Boost archive checksum" + determinedChecksum=$(sha256sum boost_${BOOST_VERSION//./_}.tar.gz | awk '{ print $1 }') + info " Expected checksum: ${BOOST_ARCHIVE_HASH}" + info " Determined checksum: ${determinedChecksum}" + if [[ "${BOOST_ARCHIVE_HASH}" != "${determinedChecksum}" ]] ; then + die 2 " => Checksum of downloaded Boost archive not matching expected value!" + else + info " -> Checksum OK" + fi +} + +buildBoost() { + info " -> Building Boost on ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + cd "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + info " -> Cleanup before extraction" + rm -rf boost_${BOOST_VERSION//./_} + info " -> Extracting Boost archive" + tar xzf ${BOOST_ARCHIVE_LOCATION}/boost_${BOOST_VERSION//./_}.tar.gz + info " -> Building Boost" + cd boost_${BOOST_VERSION//./_} || die 1 "Unable to cd into boost_${BOOST_VERSION//./_}" + ./bootstrap.sh --with-libraries="${BOOST_REQUIRED_LIBS// /,}" + # ./bootstrap.sh + ./b2 -j"${CORES_TO_USE}" + cd "${currentDir}" || die 1 "Unable to cd into ${currentDir}" +} + +checkBoost() { + info "" + info "Boost:" + info " -> Searching required static Boost libs" + BOOST_INCLUDEDIR=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/boost_${BOOST_VERSION//./_} + BOOST_LIBRARYDIR=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/boost_${BOOST_VERSION//./_}/stage/lib + boostBuildRequired=false + if [[ -d ${BOOST_LIBRARYDIR} ]]; then + for currentBoostDependency in ${BOOST_REQUIRED_LIBS}; do + if [[ -e ${BOOST_LIBRARYDIR}/libboost_${currentBoostDependency}.a ]]; then + info " -> ${currentBoostDependency}: OK" + else + warning " => ${currentBoostDependency}: Not found!" + boostBuildRequired=true + fi + done + else + warning " => Boost library directory ${BOOST_LIBRARYDIR} not found!" + boostBuildRequired=true + fi + if ${boostBuildRequired} ; then + checkBoostArchive + buildBoost + else + info " => All Boost requirements found" + fi +} +# ===== End of boost functions =============================================== + +# ============================================================================ + +# ===== Start of Qt functions ================================================ +checkQt() { + info "" + info "Qt:" + info " -> Searching required Qt libs" + qtComponentMissing=false + if [[ -d ${QT_LIBRARYDIR} ]]; then + # libQt5Quick.so + for currentQtDependency in ${QT_REQUIRED_LIBS}; do + if [[ -n $(find ${QT_LIBRARYDIR}/ -name "libQt5${currentQtDependency}.so") ]]; then + info " -> ${currentQtDependency}: OK" + else + warning " -> ${currentQtDependency}: Not found!" + qtComponentMissing=true + fi + done + else + info " -> Qt library directory ${QT_LIBRARYDIR} not found" + qtComponentMissing=true + fi + if ${qtComponentMissing}; then + error " -> Qt ${QT_VERSION}: Not all required components found!" + error "" + die 43 "Stopping build because of missing Qt component(s)" + fi +} +# ===== End of Qt functions ================================================== + +# ============================================================================ + +# ===== Start of libevent functions ========================================== +checkEventLibArchive() { + if [[ -e "${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" ]]; then + info " -> Using EventLib archive ${LIBEVENT_ARCHIVE_LOCATION}/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz" + else + LIBEVENT_ARCHIVE_URL=https://github.com/libevent/libevent/releases/download/release-${LIBEVENT_BUILD_VERSION}-stable/libevent-${LIBEVENT_BUILD_VERSION}-stable.tar.gz + info " -> Downloading EventLib archive ${LIBEVENT_ARCHIVE_URL}" + if [[ ! -e ${LIBEVENT_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBEVENT_ARCHIVE_LOCATION} + fi + cd ${LIBEVENT_ARCHIVE_LOCATION} + wget ${LIBEVENT_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkEventLibClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d libevent ]]; then + info " -> Updating libevent clone" + cd libevent + git pull --prune + else + info " -> Cloning libevent" + git clone https://github.com/libevent/libevent.git libevent + fi + cd "${currentDir}" +} + +checkEventLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libevent + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libevent build, installing..." + make install || die $? " => Error during installation of libevent" + else + die ${rtc} " => libevent build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkEventLib() { + info "" + info "EventLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libevent.a, skip build" + else + checkEventLibClone + checkEventLibBuild + fi +} +# ===== End of libevent functions ============================================ + +# ============================================================================ + +# ===== Start of leveldb functions =========================================== +checkLevelDBClone() { + local currentDir=$(pwd) + cd ${ownLocation}/../external + if [[ -d leveldb ]]; then + info " -> Updating LevelDB clone" + cd leveldb + git pull --prune + else + info " -> Cloning LevelDB" + git clone https://github.com/google/leveldb.git leveldb + cd leveldb + fi + info " -> Checkout release ${LEVELDB_VERSION}" + git checkout ${LEVELDB_VERSION_TAG} + cd "${currentDir}" +} + +checkLevelDBBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libleveldb + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libevent build, installing..." + make install || die $? "Error during installation of libleveldb" + else + die ${rtc} " => libleveldb build failed with return code ${rtc}" + fi + # read a + cd - >/dev/null +} + +checkLevelDB() { + info "" + info "LevelDB:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libleveldb.a, skip build" + else + checkLevelDBClone + checkLevelDBBuild + fi +} +# ===== End of leveldb functions ============================================= + +# ============================================================================ + +# ===== Start of libzstd functions =========================================== +checkZStdLibArchive() { + if [[ -e "${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using ZLib archive ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz" + else + LIBZ_ARCHIVE_URL=https://github.com/facebook/zstd/releases/download/v${LIBZ_BUILD_VERSION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + info " -> Downloading ZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBZ_ARCHIVE_LOCATION} + fi + cd ${LIBZ_ARCHIVE_LOCATION} + wget ${LIBZ_ARCHIVE_URL} + cd - >/dev/null + fi + cd ${ownLocation}/../external + if [[ -d libzstd ]]; then + info " -> Directory external/libzstd already existing. Remove it to extract it again" + else + info " -> Extracting zstd-${LIBZ_BUILD_VERSION}.tar.gz..." + tar xzf ${LIBZ_ARCHIVE_LOCATION}/zstd-${LIBZ_BUILD_VERSION}.tar.gz + mv zstd-${LIBZ_BUILD_VERSION} libzstd + fi + cd - >/dev/null +} + +checkZStdLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libzstd + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libzstd build, installing..." + make install || die $? "Error during installation of libzstd" + else + die ${rtc} " => libzstd build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkZStdLib() { + info "" + info "ZStdLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/libzstd.a, skip build" + else + checkZStdLibArchive + checkZStdLibBuild + fi +} +# ===== End of libzstd functions ============================================= + +# ============================================================================ + +# ===== Start of libxz functions ============================================= +checkXZLibArchive() { + if [[ -e "${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using XZLib archive ${LIBXZ_ARCHIVE_LOCATION}/xz-${LIBXZ_BUILD_VERSION}.tar.gz" + else + LIBXZ_ARCHIVE_URL=https://tukaani.org/xz/xz-${LIBXZ_BUILD_VERSION}.tar.gz + info " -> Downloading XZLib archive ${LIBZ_ARCHIVE_URL}" + if [[ ! -e ${LIBXZ_ARCHIVE_LOCATION} ]]; then + mkdir -p ${LIBXZ_ARCHIVE_LOCATION} + fi + cd ${LIBXZ_ARCHIVE_LOCATION} + wget ${LIBXZ_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkXZLibBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libxz + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished libxz build and install" + else + die ${rtc} " => libxz build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkXZLib() { + info "" + info "XZLib:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/lib/liblzma.a, skip build" + else + checkXZLibArchive + checkXZLibBuild + fi +} +# ===== End of libxz functions =============================================== + +# ============================================================================ + +# ===== Start of tor functions =============================================== +checkTorArchive() { + if [[ -e "${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz" ]]; then + info " -> Using Tor archive ${TOR_ARCHIVE_LOCATION}/tor-${TOR_BUILD_VERSION}.tar.gz" + else + TOR_ARCHIVE_URL=https://github.com/torproject/tor/archive/tor-${TOR_BUILD_VERSION}.tar.gz + info " -> Downloading Tor archive ${TOR_ARCHIVE_URL}" + if [[ ! -e ${TOR_ARCHIVE_LOCATION} ]]; then + mkdir -p ${TOR_ARCHIVE_LOCATION} + fi + cd ${TOR_ARCHIVE_LOCATION} + wget ${TOR_ARCHIVE_URL} + cd - >/dev/null + fi +} + +checkTorBuild() { + mkdir -p ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + cd ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/tor + + info " -> Generating build configuration" + read -r -d '' cmd < Building with ${CORES_TO_USE} cores:" + CORES_TO_USE=${CORES_TO_USE} cmake \ + --build . \ + -- \ + -j "${CORES_TO_USE}" + + rtc=$? + info "" + if [[ ${rtc} = 0 ]]; then + info " -> Finished tor build and install" + else + die ${rtc} " => Tor build failed with return code ${rtc}" + fi + + cd - >/dev/null +} + +checkTor() { + info "" + info "Tor:" + if [[ -f ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor ]]; then + info " -> Found ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/usr/local/bin/tor, skip build" + else + checkTorArchive + checkTorBuild + fi +} +# ===== End of libxz functions =============================================== + +# ============================================================================ + +# Determine system +# Determine amount of cores: +if [[ "$OSTYPE" == "linux-gnu" ]]; then + CORES_TO_USE=$(grep -c ^processor /proc/cpuinfo) +elif [[ "$OSTYPE" == "darwin"* ]]; then + # Mac OSX + CORES_TO_USE=$(system_profiler SPHardwareDataType | grep "Total Number of Cores" | tr -s " " | cut -d " " -f 6) +#elif [[ "$OSTYPE" == "cygwin" ]]; then +# # POSIX compatibility layer and Linux environment emulation for Windows +#elif [[ "$OSTYPE" == "msys" ]]; then +# # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) +#elif [[ "$OSTYPE" == "win32" ]]; then +# # I'm not sure this can happen. +#elif [[ "$OSTYPE" == "freebsd"* ]]; then +# CORES_TO_USE=1 +else + CORES_TO_USE=1 +fi + +FULLBUILD=false +ENABLE_GUI=false +ENABLE_GUI_PARAMETERS='OFF' +BUILD_ONLY_ALIAS=false +BUILD_ONLY_DEPENDENCIES=false +WITH_TOR=false +SYSTEM_QT=false +GIVEN_DEPENDENCIES_BUILD_DIR='' + +defineQtVersionForCurrentDistribution + +while getopts c:dfgop:sth? option; do + case ${option} in + c) CORES_TO_USE="${OPTARG}" ;; + d) BUILD_ONLY_DEPENDENCIES=true ;; + f) FULLBUILD=true ;; + g) ENABLE_GUI=true ;; + o) BUILD_ONLY_ALIAS=true ;; + p) GIVEN_DEPENDENCIES_BUILD_DIR="${OPTARG}" ;; + s) SYSTEM_QT=true ;; + t) WITH_TOR=true ;; + h | ?) helpMe && exit 0 ;; + *) die 90 "invalid option \"${OPTARG}\"" ;; + esac +done + +# Go to alias-wallet repository root directory +cd .. + +# ============================================================================ +# Handle given path to dependency location +if [[ -n "${GIVEN_DEPENDENCIES_BUILD_DIR}" ]] ; then + # ${GIVEN_DEPENDENCIES_BUILD_DIR} is set, + # so store given path on build configuration + if [[ "${GIVEN_DEPENDENCIES_BUILD_DIR}" = /* ]]; then + # Absolute path given + DEPENDENCIES_BUILD_DIR=${GIVEN_DEPENDENCIES_BUILD_DIR} + else + # Relative path given + DEPENDENCIES_BUILD_DIR=${ownLocation}/../${GIVEN_DEPENDENCIES_BUILD_DIR} + fi + storeDependenciesBuildDir "${DEPENDENCIES_BUILD_DIR}" +fi + +# ============================================================================ +# If ${DEPENDENCIES_BUILD_DIR} is empty, no path to the dependencies is given +# or stored on script/.buildproperties. In this case use default location +# inside of Git clone +if [[ -z "${DEPENDENCIES_BUILD_DIR}" ]] ; then + DEPENDENCIES_BUILD_DIR=${ownLocation}/.. +fi + +info "" +info "Building/using dependencies on/from directory:" +info " -> ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + +if [[ ! -d ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR} ]]; then + info "" + info "Creating dependency build directory ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + mkdir -p "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" + info " -> Done" +fi + +cd "${DEPENDENCIES_BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}" +DEPENDENCIES_BUILD_DIR=$(pwd) + +# ============================================================================ +# Handle which parts should be build +cd "${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" || die 1 "Unable to cd into ${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}" +if ${FULLBUILD}; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +# ============================================================================ +# If GUI should be build, set proper parameters +if ${ENABLE_GUI}; then + if ${SYSTEM_QT}; then + ENABLE_GUI_PARAMETERS="ON" + else + checkQt + ENABLE_GUI_PARAMETERS="ON -DQT_CMAKE_MODULE_PATH=${QT_LIBRARYDIR}/cmake" + fi +fi + +# ============================================================================ +# Check a/o build requirements/dependencies +checkBoost +checkBerkeleyDB +checkLevelDB +checkOpenSSL +if ${WITH_TOR}; then + checkXZLib + checkZStdLib + checkEventLib + checkTor +fi + +# ============================================================================ +# Only dependencies should be build, so exit here +if ${BUILD_ONLY_DEPENDENCIES}; then + info "" + info "Checked a/o built all required dependencies." + exit +fi + +# ============================================================================ +# Dependencies are ready. Go ahead with the main project +ALIAS_BUILD_DIR=${ownLocation}/../${BUILD_DIR}/aliaswallet +if [[ ! -d ${ALIAS_BUILD_DIR} ]]; then + info "" + info "Creating Alias build directory ${ALIAS_BUILD_DIR}" + mkdir -p "${ALIAS_BUILD_DIR}" + info " -> Done" +fi +cd "${ALIAS_BUILD_DIR}" || die 1 "Unable to cd into Alias build directory '${ALIAS_BUILD_DIR}'" + +# Update $ALIAS_BUILD_DIR with full path +ALIAS_BUILD_DIR=$(pwd) + +# If requested, cleanup leftovers from previous build +if [[ ${FULLBUILD} = true ]] || [[ ${BUILD_ONLY_ALIAS} = true ]]; then + info "" + info "Cleanup leftovers from previous build run" + rm -rf ./* + info " -> Done" +fi + +info "" +info "Generating Alias build configuration" + +# FindBerkeleyDB.cmake requires this +export BERKELEYDB_ROOT=${DEPENDENCIES_BUILD_DIR}/${BUILD_DIR}/libdb/libdb-install + +read -r -d '' cmd < Finished" +else + error " => Finished with return code ${rtc}" +fi +cd "${callDir}" || die 1 "Unable to cd back to where we came from (${callDir})" diff --git a/scripts/createChecksumSummary.sh b/scripts/createChecksumSummary.sh new file mode 100755 index 0000000000..f32d45039e --- /dev/null +++ b/scripts/createChecksumSummary.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2019-01-22 HLXEasy +# +# Helper script to create checksums for given file (1st parameter) +# and write them into given another file (2nd parameter) +# +# =========================================================================== + +releaseDescription=$1 +workspace=$2 +jobURL=$3 +accessToken=$4 + +if test -e "${releaseDescription}" ; then + cp "${releaseDescription}" "${workspace}"/releaseNotesToDeploy.txt +else + echo "### ${releaseDescription}" > "${workspace}"/releaseNotesToDeploy.txt +fi +for currentChecksumfile in \ + Checksum-Alias-Android-APK.txt \ + Checksum-Alias-Android-AAB.txt \ + Checksum-Alias-CentOS-8.txt \ + Checksum-Alias-Debian-Buster.txt \ + Checksum-Alias-Debian-Stretch.txt \ + Checksum-Alias-Fedora.txt \ + Checksum-Alias-OpenSUSE-Tumbleweed.txt \ + Checksum-Alias-Mac.txt \ + Checksum-Alias-Mac-OBFS4.txt \ + Checksum-Alias-RaspberryPi-Buster.txt \ + Checksum-Alias-RaspberryPi-Buster-aarch64.txt \ + Checksum-Alias-RaspberryPi-Stretch.txt \ + Checksum-Alias-Ubuntu-18-04.txt \ + Checksum-Alias-Ubuntu-20-04.txt \ + Checksum-Alias-Win64.txt \ + Checksum-Alias-Win64-OBFS4.txt \ + Checksum-Alias-Win64-Qt5.12.txt \ + Checksum-Alias-Win64-Qt5.12-OBFS4.txt \ + Checksum-Alias-Win64-Qt5.9.6.txt \ + Checksum-Alias-Win64-Qt5.9.6-OBFS4.txt ; do + curl -X POST -L --user "${accessToken}" "${jobURL}"/artifact/${currentChecksumfile} --output ${currentChecksumfile} || true + if [[ -e "${currentChecksumfile}" ]] && [[ $(wc -l < "${currentChecksumfile}") -eq 1 ]] ; then + archiveFilename=$(cut -d ' ' -f1 ${currentChecksumfile}) + checksum=$(cut -d ' ' -f2 ${currentChecksumfile}) + echo "**${archiveFilename}:** \`${checksum}\`" >> "${workspace}"/releaseNotesToDeploy.txt + echo '' >> "${workspace}"/releaseNotesToDeploy.txt + fi +done diff --git a/scripts/createChecksums.sh b/scripts/createChecksums.sh new file mode 100755 index 0000000000..a9076b97c8 --- /dev/null +++ b/scripts/createChecksums.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2019-01-22 HLXEasy +# +# Helper script to create checksums for given file (1st parameter) +# and write them into given another file (2nd parameter) +# +# =========================================================================== + +givenFileWithPath=$1 +checksumfile=/tmp/checksumfile +if [[ -z "${givenFileWithPath}" ]] ; then + echo "No filename given, for which checksums should be created!" + exit 1 +fi +if [[ -n "${2}" ]] ; then + checksumfile=$2 +fi +filename=${givenFileWithPath##*/} +echo "${filename} $(sha256sum "${givenFileWithPath}" | awk '{ print $1 }')" > ${checksumfile} diff --git a/scripts/genbuild.sh b/scripts/genbuild.sh new file mode 100755 index 0000000000..9a980c257b --- /dev/null +++ b/scripts/genbuild.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# =========================================================================== + +if [ $# -gt 0 ] ; then + FILE="$1" + shift + if [ -f "$FILE" ] ; then + INFO="$(head -n 1 "$FILE")" + fi +else + echo "Usage: $0 " + exit 1 +fi + +if [ -e "$(which git)" ] ; then + # clean 'dirty' status of touched files that haven't been modified + git diff >/dev/null 2>/dev/null + + # get a string like "v0.6.0-66-g59887e8-dirty" + DESC="$(git describe --dirty 2>/dev/null)" + + # get a string like "2012-04-10 16:27:19 +0200" + TIME="$(git log -n 1 --format="%ci")" + + # get short commit hash + COMMIT_ID="$(git rev-parse --short HEAD)" +fi + +if [ -n "$DESC" ] ; then + NEWINFO="#define BUILD_DESC \"$DESC\"" +else + NEWINFO="// No build information available" +fi + +# only update build.h if necessary +if [ "$INFO" != "$NEWINFO" ] ; then + echo "$NEWINFO" >"$FILE" + echo "#define BUILD_DATE \"$TIME\"" >>"$FILE" + echo "#define GIT_HASH \"$COMMIT_ID\"" >>"$FILE" +fi diff --git a/scripts/include/handle_buildconfig.sh b/scripts/include/handle_buildconfig.sh new file mode 100644 index 0000000000..0c9e3c487b --- /dev/null +++ b/scripts/include/handle_buildconfig.sh @@ -0,0 +1,132 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2019-11-30 HLXEasy +# +# =========================================================================== + +if [[ ! -e .buildconfig ]] ; then + cat << EOF > .buildconfig +##### ### # Global definitions # ### ######################################## +# Windows with msys2 +#ARCHIVES_ROOT_DIR=C:/msys64${HOME}/Archives +# Linux +# Do not use '~' as later steps might not be able to expand this! +ARCHIVES_ROOT_DIR=${HOME}/Archives + +##### ### # Android # ### ################################################### +ANDROID_NDK_VERSION=r21d +ANDROID_SDK_ROOT=${HOME}/Archives/Android/Sdk + +##### ### # Boost # ### ##################################################### +BOOST_VERSION=1.75.0 +BOOST_ARCHIVE_HASH=aeb26f80e80945e82ee93e5939baebdca47b9dee80a07d3144be1e1a6a66dd6a + +##### ### # Qt # ### ######################################################## +# Path to the folder which contains the Qt installation +# aka version folder to use +QT_INSTALLATION_PATH=${HOME}/Qt + +QT_REQUIRED_LIBS='Core Widgets WebView WebChannel WebSockets QuickWidgets Quick Gui Qml Network' + +# Qt version to use. In fact the folder right below ${QT_INSTALLATION_PATH} +#QT_VERSION=5.11.3 +#QT_ARCHIVE_HASH=unknown +#QT_VERSION=5.12.7 +#QT_ARCHIVE_HASH=ce2c5661c028b9de6183245982d7c120 +#QT_VERSION=5.12.8 +#QT_ARCHIVE_HASH=8ec2a0458f3b8e9c995b03df05e006e4 +#QT_VERSION=5.14.2 +#QT_ARCHIVE_HASH=b3d2b6d00e6ca8a8ede6d1c9bdc74daf +QT_VERSION=5.15.0 +QT_ARCHIVE_HASH=610a228dba6ef469d14d145b71ab3b88 + +# These are the default Qt versions on the corresponding distributions +QT_VERSION_ANDROID=5.15.2 +QT_VERSION_CENTOS_8=5.12.8 +QT_VERSION_DEBIAN_BUSTER=5.11.3 +QT_VERSION_UBUNTU_1804=5.9.5 +QT_VERSION_UBUNTU_1904=5.12.4 +QT_VERSION_UBUNTU_1910=5.12.4 +QT_VERSION_UBUNTU_2004=5.12.8 +QT_VERSION_FEDORA=5.15.2 +QT_VERSION_OPENSUSE_TUMBLEWEED=5.15.1 + +##### ### # Qt (Mac) # ### ################################################## +# Installed Qt version. In fact the folder below /Applications/Qt/ +QT_VERSION_MAC=5.12.10 + +##### ### # BerkeleyDB # ### ################################################ +BERKELEYDB_BUILD_VERSION=4.8.30 +BERKELEYDB_ARCHIVE_HASH=e0491a07cdb21fb9aa82773bbbedaeb7639cbd0e7f96147ab46141e0045db72a +#BERKELEYDB_BUILD_VERSION=5.0.32 +#BERKELEYDB_ARCHIVE_HASH=... +#BERKELEYDB_BUILD_VERSION=6.2.38 +#BERKELEYDB_ARCHIVE_HASH=... + +##### ### # LevelDB # ### ################################################### +LEVELDB_VERSION=1.22 +LEVELDB_VERSION_TAG=78b39d68 + +##### ### # OpenSSL # ### ################################################### +OPENSSL_BUILD_VERSION=1.1.0l +OPENSSL_ARCHIVE_HASH=74a2f756c64fd7386a29184dc0344f4831192d61dc2481a93a4c5dd727f41148 +#OPENSSL_ARCHIVE_HASH=... + +##### ### # EventLib # ### ################################################## +LIBEVENT_BUILD_VERSION=2.1.11 +LIBEVENT_ARCHIVE_HASH=a65bac6202ea8c5609fd5c7e480e6d25de467ea1917c08290c521752f147283d + +##### ### # ZLib # ### ###################################################### +#LIBZ_BUILD_VERSION=1.2.11 +#LIBZ_ARCHIVE_HASH=629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff +LIBZ_BUILD_VERSION=1.4.4 +LIBZ_ARCHIVE_HASH=59ef70ebb757ffe74a7b3fe9c305e2ba3350021a918d168a046c6300aeea9315 + +##### ### # XZLib # ### ##################################################### +LIBXZ_BUILD_VERSION=5.2.4 +LIBXZ_ARCHIVE_HASH=b512f3b726d3b37b6dc4c8570e137b9311e7552e8ccbab4d39d47ce5f4177145 + +##### ### # Tor # ### ####################################################### +TOR_BUILD_VERSION=0.4.1.6 +TOR_ARCHIVE_HASH=ee7adbbc5e30898bc35d9658bbf6a67e4242977175f7bad11c5f1ee0c1010d43 +#TOR_BUILD_VERSION=0.4.1.7 +#TOR_ARCHIVE_HASH=f769c8052f0c0f74b9b7bcaff6255f656e313da232bfa8f89d2a165df3868850 +#TOR_BUILD_VERSION=0.4.2.5 +#TOR_ARCHIVE_HASH=94ad248f4d852a8f38bd8902a12b9f41897c76e389fcd5b8a7d272aa265fd6c9 + +TOR_BUILD_VERSION_ANDROID=0.4.1.6 +TOR_ARCHIVE_HASH_ANDROID=ee7adbbc5e30898bc35d9658bbf6a67e4242977175f7bad11c5f1ee0c1010d43 +#TOR_BUILD_VERSION_ANDROID=0.4.2.3-alpha +#TOR_ARCHIVE_HASH_ANDROID=be22b9326093dd6b012377d9e3c456028cd2104e5a454a7773aebf75d44c1ccf +#TOR_BUILD_VERSION_ANDROID=0.4.2.5 +#TOR_ARCHIVE_HASH_ANDROID=94ad248f4d852a8f38bd8902a12b9f41897c76e389fcd5b8a7d272aa265fd6c9 + +EOF +fi +info "" +info "Build configuration:" +info " -> Loading general build configuration" +. .buildconfig + +if [ -e "${HOME}/.alias_buildconfig" ] ; then + info " -> Loading personal build configuration" + # Personal build config found, so load it + . ${HOME}/.alias_buildconfig +else + # Personal build config not existing, create it with all entries commented + info "" + warning " -> Personal build configuration not found, creating it now!" + sed "s/^\([a-zA-Z]\)/#\1/g" .buildconfig > ${HOME}/.alias_buildconfig + info "" + info "If you like to modify '${HOME}/.alias_buildconfig'," + info "you should break script execution now (Ctrl-C)" + for i in $(seq 10 -1 0) ; do + info "${i}" + sleep 1 + done +fi diff --git a/scripts/include/helpers_console.sh b/scripts/include/helpers_console.sh new file mode 100644 index 0000000000..20ad33a862 --- /dev/null +++ b/scripts/include/helpers_console.sh @@ -0,0 +1,70 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2018-11-28 HLXEasy +# +# =========================================================================== + +_init() { + #if [ -n "${TERM}" -a "${TERM}" != "dumb" ]; then + GREEN='\e[0;32m' RED='\e[0;31m' BLUE='\e[0;34m' NORMAL='\e[0m' + #else + # GREEN="" RED="" BLUE="" NORMAL="" + #fi +} +die() { + local error=${1:-1} + shift + error "$*" >&2 + exit "${error}" +} +info() { + printf "${GREEN}%-7s: %s${NORMAL}\n" "Info" "$*" +} +error() { + printf "${RED}%-7s: %s${NORMAL}\n" "Error" "$*" +} +warning() { + printf "${BLUE}%-7s: %s${NORMAL}\n" "Warning" "$*" +} + +# --------------------------------------------------------------------------- +# Execute the given command and return the given error value +# in case of an error +# $1 .. Cmd to execute +# $2 .. Return value in case the given cmd did not finish successful. If a +# negative value is given, a warning is written to the log but the +# function returns instead of performing 'die ...'. +executeCommand() { + local _command="$1" + local _returnCodeForError="$2" + echo "Executing '${_command}'" + eval "${_command}" + rtc=$? + evaluateRtc ${rtc} "${_returnCodeForError}" + return ${rtc} +} + +evaluateRtc() { + local _givenRtc=$1 + local _returnCodeForError=$2 + if [ "${_givenRtc}" -ne 0 ]; then + if [ -z "$_returnCodeForError" ]; then + die 80 "Error during build steps" + elif [ "${_returnCodeForError}" -lt 0 ]; then + warning "Last command finished with non-zero return code but ignoring this for now" + else + die "${_returnCodeForError}" "Error during build steps! (${_returnCodeForError})" + fi + fi +} + +storeDependenciesBuildDir() { + local _dependenciesBuildDir=$1 + sed -i ".bak" "/DEPENDENCIES_BUILD_DIR/d" "${ownLocation}"/.buildconfig + echo "DEPENDENCIES_BUILD_DIR=${_dependenciesBuildDir}" >> "${ownLocation}"/.buildconfig +} diff --git a/scripts/install_boost_1_67.sh b/scripts/install_boost_1_67.sh new file mode 100644 index 0000000000..c6916d4282 --- /dev/null +++ b/scripts/install_boost_1_67.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT + +wget -O boost_1_67_0.tar.gz http://sourceforge.net/projects/boost/files/boost/1.67.0/boost_1_67_0.tar.gz/download --no-check-certificate +tar xzvf boost_1_67_0.tar.gz +cd boost_1_67_0/ + +sudo apt-get update +sudo apt-get install build-essential g++ python-dev autotools-dev libicu-dev libbz2-dev + +./bootstrap.sh --prefix=/usr/local +sudo ./b2 --with=all -j 2 install diff --git a/scripts/install_docker_debian.sh b/scripts/install_docker_debian.sh new file mode 100644 index 0000000000..3320c98f0a --- /dev/null +++ b/scripts/install_docker_debian.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# ============================================================================ +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Docker installation based on +# https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce-1 +# +# Creation: 2018-07-25 hlxeasy +# +# ============================================================================ + +# Remove potential old versions +sudo apt-get remove docker docker-engine docker.io containerd runc + +# Update the apt package index +sudo apt-get update + +# Install packages to allow apt to use a repository over HTTPS +sudo apt-get install \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg-agent \ + software-properties-common + +# Add Docker’s official GPG key: +curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - + +# Set up the stable repository +sudo add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/debian \ + $(lsb_release -cs) \ + stable" + +# Update the apt package index again +sudo apt-get update + +# Install the latest version of Docker CE +sudo apt-get install docker-ce docker-ce-cli containerd.io + +# Test installation by running the hello-world-container +sudo docker run --rm hello-world diff --git a/scripts/mac-build.sh b/scripts/mac-build.sh new file mode 100755 index 0000000000..69749b09be --- /dev/null +++ b/scripts/mac-build.sh @@ -0,0 +1,65 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2018-11-28 HLXEasy +# +# This script can be used to build Spectrecoin on Mac +# +# =========================================================================== + +# Store path from where script was called, determine own location +# and source helper content from there +callDir=$(pwd) +ownLocation="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +cd ${ownLocation} +. ./include/helpers_console.sh + +# Go to Aliaswallet repository root directory +cd .. + +if [[ -z "${MACOSX_DEPLOYMENT_TARGET}" ]] ; then + MACOSX_DEPLOYMENT_TARGET=10.12 + warning "MACOSX_DEPLOYMENT_TARGET not set, using '${MACOSX_DEPLOYMENT_TARGET}'" +else + info "MACOSX_DEPLOYMENT_TARGET: ${MACOSX_DEPLOYMENT_TARGET}" +fi + +if [[ -z "${QT_PATH}" ]] ; then + QT_PATH=~/Qt/5.12.9/clang_64 + warning "QT_PATH not set, using '${QT_PATH}'" +else + info "QT_PATH: ${QT_PATH}" +fi +if [[ -z "${OPENSSL_PATH}" ]] ; then + OPENSSL_PATH=/usr/local/Cellar/openssl@1.1/1.1.1d + warning "OPENSSL_PATH not set, using '${OPENSSL_PATH}'" +else + info "OPENSSL_PATH: ${OPENSSL_PATH}" +fi + +if [[ -z "${BOOST_PATH}" ]] ; then + BOOST_PATH=/usr/local/Cellar/boost/1.68.0_1 + warning "BOOST_PATH not set, using '${BOOST_PATH}'" +else + info "BOOST_PATH: ${BOOST_PATH}" +fi + +info "Calling autogen.sh" +./autogen.sh + +info "Configure and make db4.8:" +cd db4.8/build_unix/ +./configure --enable-cxx --disable-shared --disable-replication --with-pic && make + +info "Configure and make leveldb:" +cd ../../leveldb/ +./build_detect_platform build_config.mk ./ && make +cd ../ + +info "Starting qmake:" +${QT_PATH}/bin/qmake src/src.pro -spec macx-clang CONFIG+=x86_64 +make -j2 diff --git a/scripts/mac-deployqt.sh b/scripts/mac-deployqt.sh new file mode 100755 index 0000000000..beb771ce85 --- /dev/null +++ b/scripts/mac-deployqt.sh @@ -0,0 +1,89 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# This script uses macdeployqt to add the required libs to alias package. +# - Fixes non @executable openssl references. +# - Replaces openssl 1.0.0 references with 1.1 +# +# =========================================================================== + +# Store path from where script was called, determine own location +# and source helper content from there +callDir=$(pwd) +ownLocation="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +cd ${ownLocation} +. ./include/helpers_console.sh + +# Go to Alias repository root directory +cd .. + +if [[ -z "${QT_PATH}" ]] ; then + QT_PATH=~/Qt/5.12.9/clang_64 + warning "QT_PATH not set, using '${QT_PATH}'" +else + info "QT_PATH: ${QT_PATH}" +fi +if [[ -z "${OPENSSL_PATH}" ]] ; then + OPENSSL_PATH=/usr/local/Cellar/openssl@1.1/1.1.1d + warning "OPENSSL_PATH not set, using '${OPENSSL_PATH}'" +else + info "OPENSSL_PATH: ${OPENSSL_PATH}" +fi + +if [[ -z "${BOOST_PATH}" ]] ; then + BOOST_PATH=/usr/local/Cellar/boost/1.68.0_1 + warning "BOOST_PATH not set, using '${BOOST_PATH}'" +else + info "BOOST_PATH: ${BOOST_PATH}" +fi + +info "Cleanup previous build artifacts" +if [[ -e Alias.dmg ]] ; then + rm -f Alias.dmg +fi +if [[ -e src/bin/Alias.dmg ]] ; then + rm -f src/bin/Alias.dmg +fi + +info "Call macdeployqt:" +${QT_PATH}/bin/macdeployqt src/bin/Alias.app -qmldir=src/qt/res/qml -always-overwrite -verbose=2 +rtc=$? +if [[ ${rtc} != 0 ]] ; then + die ${rtc} "Error during macdeployqt!" +fi + +info "Remove openssl 1.0.0 libs:" +rm -v src/bin/alias.app/Contents/Frameworks/libssl.1.0.0.dylib +rm -v src/bin/alias.app/Contents/Frameworks/libcrypto.1.0.0.dylib + +info "Replace openssl 1.0.0 lib references with 1.1:" +for f in src/bin/alias.app/Contents/Frameworks/*.dylib ; do + install_name_tool -change @executable_path/../Frameworks/libssl.1.0.0.dylib @executable_path/../Frameworks/libssl.1.1.dylib ${f}; + install_name_tool -change @executable_path/../Frameworks/libcrypto.1.0.0.dylib @executable_path/../Frameworks/libcrypto.1.1.dylib ${f}; +done + + +info "install_name_tool -change $OPENSSL_PATH/lib/libcrypto.1.1.dylib @executable_path/../Frameworks/libcrypto.1.1.dylib src/bin/alias.app/Contents/Frameworks/libssl.1.1.dylib ..." +install_name_tool -change ${OPENSSL_PATH}/lib/libcrypto.1.1.dylib @executable_path/../Frameworks/libcrypto.1.1.dylib src/bin/alias.app/Contents/Frameworks/libssl.1.1.dylib +otool -l src/bin/alias.app/Contents/Frameworks/libssl.1.1.dylib | grep dylib + + +info "Please check for non included lib references:" +for f in src/bin/alias.app/Contents/Frameworks/*.dylib ; do + otool -l ${f} | grep dylib | grep -v @ +done + + +info "Create dmg package:" +cd src/bin +${QT_PATH}/bin/macdeployqt Alias.app -dmg -always-overwrite -verbose=2 +rtc=$? +if [[ ${rtc} != 0 ]] ; then + die ${rtc} "Error during macdeployqt!" +fi +cd ../.. +mv src/bin/Alias.dmg Alias.dmg diff --git a/scripts/mac-finalizedmg.sh b/scripts/mac-finalizedmg.sh new file mode 100755 index 0000000000..16527df479 --- /dev/null +++ b/scripts/mac-finalizedmg.sh @@ -0,0 +1,85 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# This script uses macdeployqt to add the required libs to alias package. +# - Fixes non @executable openssl references. +# - Replaces openssl 1.0.0 references with 1.1 +# +# =========================================================================== + +# Store path from where script was called, determine own location +# and source helper content from there +callDir=$(pwd) +ownLocation="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +cd ${ownLocation} +. ./include/helpers_console.sh + +# Go to Alias repository root directory +cd .. + +info "Change permision of .dmg file" +hdiutil convert "Alias.dmg" -format UDRW -o "Alias_Rw.dmg" +info " -> Done" + +info "Mount it and save the device" +DEVICE=$(hdiutil attach -readwrite -noverify "Alias_Rw.dmg" |egrep '^/dev/' |sed 1q |awk '{print $1}') +info " -> Done" + +sleep 2 + +info "Create symbolic link to application folder" +PATH_AT_VOLUME=/Volumes/Alias ## check Path inside cd /Volume/ + +pushd "$PATH_AT_VOLUME" +ln -s /Applications +popd +info " -> Done" + +#info "Copy background image in to package" +#mkdir "$PATH_AT_VOLUME"/.background +#cp backgroundImage.png "$PATH_AT_VOLUME"/.background/ +#info " -> Done" + +info "Resize window, set background, change icon size, place icons in the right position, etc." +echo ' + tell application "Finder" + tell disk "Alias" ## check Path inside cd /Volume/ + open + set current view of container window to icon view + set toolbar visible of container window to false + set statusbar visible of container window to false + set the bounds of container window to {400, 100, 1200, 650} + set viewOptions to the icon view options of container window + set arrangement of viewOptions to not arranged + set icon size of viewOptions to 200 + ## set background picture of viewOptions to file ".background:backgroundImage.png" + set position of item "Alias.app" of container window to {180, 200} + set position of item "Applications" of container window to {620, 200} + close + open + update without registering applications + delay 2 + end tell + end tell +' | osascript +info " -> Done" + +sync + +info "Unmount" +hdiutil detach "${DEVICE}" +info " -> Done" + +info "Cleanup and convert" +rm -f "Alias.dmg" +hdiutil convert "Alias_Rw.dmg" -format UDZO -o "Alias.dmg" +rm -f "Alias_Rw.dmg" +info " -> Done" + +info "Finished" + +exit diff --git a/scripts/patches/mac-boost-process.patch b/scripts/patches/mac-boost-process.patch new file mode 100644 index 0000000000..3e5f017ace --- /dev/null +++ b/scripts/patches/mac-boost-process.patch @@ -0,0 +1,43 @@ +--- a/boost/process/detail/posix/wait_group.hpp ++++ b/boost/process/detail/posix/wait_group.hpp +@@ -61,8 +61,8 @@ + ::sigset_t sigset; + ::siginfo_t siginfo; + +- ::sigemptyset(&sigset); +- ::sigaddset(&sigset, SIGCHLD); ++ sigemptyset(&sigset); ++ sigaddset(&sigset, SIGCHLD); + + auto get_timespec = + [](const Duration & dur) +@@ -87,7 +87,7 @@ + do + { + auto ts = get_timespec(time_out - Clock::now()); +- ret = ::sigtimedwait(&sigset, nullptr, &ts); ++ ret = sigtimedwait(&sigset, nullptr, &ts); + errno = 0; + if ((ret == SIGCHLD) && (old_sig.sa_handler != SIG_DFL) && (old_sig.sa_handler != SIG_IGN)) + old_sig.sa_handler(ret); +--- a/boost/process/detail/posix/wait_for_exit.hpp ++++ b/boost/process/detail/posix/wait_for_exit.hpp +@@ -57,8 +57,8 @@ + + ::sigset_t sigset; + +- ::sigemptyset(&sigset); +- ::sigaddset(&sigset, SIGCHLD); ++ sigemptyset(&sigset); ++ sigaddset(&sigset, SIGCHLD); + + auto get_timespec = + [](const Duration & dur) +@@ -84,7 +84,7 @@ + do + { + auto ts = get_timespec(time_out - Clock::now()); +- auto ret_sig = ::sigtimedwait(&sigset, nullptr, &ts); ++ auto ret_sig = sigtimedwait(&sigset, nullptr, &ts); + errno = 0; + ret = ::waitpid(p.pid, &status, WNOHANG); diff --git a/scripts/updateUIAssets.sh b/scripts/updateUIAssets.sh new file mode 100755 index 0000000000..6fe8a88a7e --- /dev/null +++ b/scripts/updateUIAssets.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# =========================================================================== +# +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# Created: 2019-04-22 HLXEasy +# +# Helper script to download UI asset archive from our CI +# and update existing assets with content of this archive +# +# =========================================================================== + +# Store path from where script was called, determine own location +# and source helper content from there +callDir=$(pwd) +ownLocation="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +cd ${ownLocation} +. ./include/helpers_console.sh + +# Go to Aliaswallet repository root directory +cd .. + +_init + +if [[ -z "$1" ]] ; then + downloadURL=https://ci.alias.cash/job/Alias/job/alias-wallet-ui/job/Aliaswallet-UI/lastSuccessfulBuild/artifact/alias-wallet-ui-assets.tgz +else + downloadURL=$1 +fi + +info "Using download URL ${downloadURL}" +cd src/qt/res +wget ${downloadURL} + +info "Updating content" +tar xzf ${downloadURL##*/} +mv spectre.qrc ../../../ + +info "Cleanup" +rm -f ${downloadURL##*/} diff --git a/scripts/win-build.bat b/scripts/win-build.bat new file mode 100644 index 0000000000..f242444024 --- /dev/null +++ b/scripts/win-build.bat @@ -0,0 +1,66 @@ +:: SPDX-FileCopyrightText: © 2020 Alias Developers +:: SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +:: +:: SPDX-License-Identifier: MIT +:: +:: Helper script to build Aliaswallet on Windows using VS2017 and QT. + +IF "%QTDIR%" == "" GOTO NOQT +:YESQT + +IF "%VSDIR%" == "" GOTO NOVS +:YESVS + +set CALL_DIR=%cd% +set SRC_DIR=%cd%\src +set DIST_DIR=%SRC_DIR%\dist +set BUILD_DIR=%SRC_DIR%\build +set OUT_DIR=%SRC_DIR%\bin + +:: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" +call "%VSDIR%\Community\VC\Auxiliary\Build\vcvars64.bat" +cd +cd %SRC_DIR% +dir + +echo on + +del "%OUT_DIR%\Alias.exe" 2>nul +rmdir /S /Q "%DIST_DIR%" +mkdir "%DIST_DIR%" +mkdir "%BUILD_DIR%" +mkdir "%OUT_DIR%" + +pushd "%BUILD_DIR%" + +%QTDIR%\bin\qmake.exe ^ + -spec win32-msvc ^ + "CONFIG += release" ^ + "%SRC_DIR%\src.pro" || goto :ERROR + +nmake || goto :ERROR + +popd + +%QTDIR%\bin\windeployqt --force --qmldir %SRC_DIR%\qt\res --qml --quick --webengine "%OUT_DIR%\Alias.exe" || goto :ERROR + +::ren "%OUT_DIR%" Alias +::echo "The prepared package is in: %SRC_DIR%\Alias" + +echo "Everything is OK" +GOTO END + +:ERROR +echo Failed with error #%errorlevel%. +exit /b %errorlevel% +GOTO END + +:NOVS +@ECHO The VSDIR environment variable was NOT detected! +GOTO END + +:NOQT +@ECHO The QTDIR environment variable was NOT detected! + +:END +cd %CALL_DIR% diff --git a/scripts/win-genbuild.bat b/scripts/win-genbuild.bat new file mode 100644 index 0000000000..e47a113e83 --- /dev/null +++ b/scripts/win-genbuild.bat @@ -0,0 +1,29 @@ +:: SPDX-FileCopyrightText: © 2020 Alias Developers +:: SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +:: +:: SPDX-License-Identifier: MIT +:: +:: Helper script to create build.h. +echo off +set SRC_DIR=%cd%\src +set CALL_DIR=%cd% + +cd +cd %SRC_DIR% + +echo on + +@echo Creating build.h + +FOR /F "delims=" %%i IN ('git describe --dirty') DO set DESC=%%i +@echo #define BUILD_DESC "%DESC%" > build.h + +FOR /F "delims=" %%j IN ('git log -n 1 --format^="%%ci"') DO set TIME=%%j +@echo #define BUILD_DATE "%TIME%" >> build.h + +FOR /F "delims=" %%k IN ('git rev-parse --short HEAD') DO set COMMIT=%%k +@echo #define GIT_HASH "%COMMIT%" >> build.h + +@echo Created build.h with the following content: +type build.h +cd %CALL_DIR% diff --git a/scripts/win-wrapper.bat b/scripts/win-wrapper.bat new file mode 100644 index 0000000000..7e98cc8b23 --- /dev/null +++ b/scripts/win-wrapper.bat @@ -0,0 +1,13 @@ +:: SPDX-FileCopyrightText: © 2020 Alias Developers +:: SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +:: +:: SPDX-License-Identifier: MIT +:: +:: Wrapper script to define all requirements + +set ALIASWALLET_VERSION=4.2.0 + +set QTDIR=C:\Qt\5.15.0\msvc2019_64 + +call scripts\win-genbuild.bat +call scripts\win-build.bat diff --git a/shadow.pro b/shadow.pro deleted file mode 100644 index d3ed74a340..0000000000 --- a/shadow.pro +++ /dev/null @@ -1,483 +0,0 @@ -TEMPLATE = app -TARGET = umbra -VERSION = 1.5.0.2 -INCLUDEPATH += src src/json src/qt -DEFINES += BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE -CONFIG += no_include_pwd -CONFIG += thread - -# Mobile devices -android:ios{ - CONFIG += mobility - MOBILITY = -} - -greaterThan(QT_MAJOR_VERSION, 4) { - DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 -} - -# for boost 1.37, add -mt to the boost libraries -# use: qmake BOOST_LIB_SUFFIX=-mt -# for boost thread win32 with _win32 sufix -# use: BOOST_THREAD_LIB_SUFFIX=_win32-... -# or when linking against a specific BerkelyDB version: BDB_LIB_SUFFIX=-4.8 - -# Dependency library locations can be customized with: -# BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH, -# BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively - -OBJECTS_DIR = build -MOC_DIR = build -UI_DIR = build -RESOURCES = shadow.qrc - -android { - INCLUDEPATH += src/qt/android - - QT += androidextras - - ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android - - OTHER_FILES += - - HEADERS += - SOURCES += - - OBJECTS_DIR = build-android - MOC_DIR = build-android - UI_DIR = build-android -} else { - - QT += widgets webkitwidgets -} - -build_macosx64 { - QMAKE_TARGET_BUNDLE_PREFIX = co.shadowcoin - BOOST_LIB_SUFFIX=-mt - BOOST_INCLUDE_PATH=/usr/local/Cellar/boost/1.61.0_1/include - BOOST_LIB_PATH=/usr/local/Cellar/boost/1.61.0_1/lib - - BDB_INCLUDE_PATH=/usr/local/opt/berkeley-db4/include - BDB_LIB_PATH=/usr/local/Cellar/berkeley-db4/4.8.30/lib - - OPENSSL_INCLUDE_PATH=/usr/local/opt/openssl/include - OPENSSL_LIB_PATH=/usr/local/opt/openssl/lib - - #MINIUPNPC_INCLUDE_PATH=/usr/local/opt/miniupnpc/include - #MINIUPNPC_LIB_PATH=/usr/local/Cellar/miniupnpc/1.8.20131007/lib - MINIUPNPC_INCLUDE_PATH=/usr/local/Cellar/miniupnpc/2.0/include - MINIUPNPC_LIB_PATH=/usr/local/Cellar/miniupnpc/2.0/lib - - QMAKE_CXXFLAGS += -arch x86_64 -stdlib=libc++ - QMAKE_CFLAGS += -arch x86_64 - QMAKE_LFLAGS += -arch x86_64 -stdlib=libc++ - USE_UPNP=1 - -} -build_win32 { - BOOST_LIB_SUFFIX=-mgw48-mt-s-1_55 - BOOST_INCLUDE_PATH=c:/deps/boost/include - BOOST_LIB_PATH=c:/deps/boost/lib - - BDB_INCLUDE_PATH=c:/deps/db-4.8.30.NC/build_unix - BDB_LIB_PATH=c:/deps/db-4.8.30.NC/build_unix - OPENSSL_INCLUDE_PATH=c:/deps/openssl_1.0.1h/include - OPENSSL_LIB_PATH=c:/deps/openssl_1.0.1h/lib/ - - MINIUPNPC_INCLUDE_PATH=c:/deps/miniupnpc - MINIUPNPC_LIB_PATH=c:/deps/miniupnpc - - #USE_BUILD_INFO = 1 - DEFINES += HAVE_BUILD_INFO - - #USE_UPNP=- -} - -# use: qmake "RELEASE=1" -contains(RELEASE, 1) { - CONFIG += static - - !windows:!macx { - # Linux: static link - LIBS += -Wl,-Bstatic - } -} - -# for extra security against potential buffer overflows: enable GCCs Stack Smashing Protection -QMAKE_CXXFLAGS *= -fstack-protector-all --param ssp-buffer-size=1 -QMAKE_LFLAGS *= -fstack-protector-all --param ssp-buffer-size=1 -# We need to exclude this for Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable! -# This can be enabled for Windows, when we switch to MinGW >= 4.4.x. -# for extra security on Windows: enable ASLR and DEP via GCC linker flags -win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat -static -win32:QMAKE_LFLAGS *= -static-libgcc -static-libstdc++ - -# use: qmake "USE_UPNP=1" ( enabled by default; default) -# or: qmake "USE_UPNP=0" (disabled by default) -# or: qmake "USE_UPNP=-" (not supported) -# miniupnpc (http://miniupnp.free.fr/files/) must be installed for support -contains(USE_UPNP, -) { - message(Building without UPNP support) -} else { - message(Building with UPNP support) - count(USE_UPNP, 0) { - USE_UPNP=1 - } - DEFINES += USE_UPNP=$$USE_UPNP MINIUPNP_STATICLIB STATICLIB - INCLUDEPATH += $$MINIUPNPC_INCLUDE_PATH - LIBS += $$join(MINIUPNPC_LIB_PATH,,-L,) -lminiupnpc - win32:LIBS += -liphlpapi -} - -# use: qmake "USE_DBUS=1" or qmake "USE_DBUS=0" -linux:count(USE_DBUS, 0) { - USE_DBUS=1 -} -contains(USE_DBUS, 1) { - message(Building with DBUS (Freedesktop notifications) support) - DEFINES += USE_DBUS - QT += dbus -} - -contains(SHADOW_NEED_QT_PLUGINS, 1) { - DEFINES += SHADOW_NEED_QT_PLUGINS - QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets -} - -INCLUDEPATH += src/leveldb/include src/leveldb/helpers -LIBS += $$PWD/src/leveldb/libleveldb.a $$PWD/src/leveldb/libmemenv.a -SOURCES += src/txdb-leveldb.cpp \ - src/qt/addresstablemodel.cpp - -win32 { - # make an educated guess about what the ranlib command is called - isEmpty(QMAKE_RANLIB) { - QMAKE_RANLIB = $$replace(QMAKE_STRIP, strip, ranlib) - } - LIBS += -lshlwapi - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a -} else:macx { - # we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX AR=$${QMAKE_HOST}-ar TARGET_OS=Darwin $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a -} else { - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a -} -genleveldb.target = $$PWD/src/leveldb/libleveldb.a -genleveldb.depends = FORCE -PRE_TARGETDEPS += $$PWD/src/leveldb/libleveldb.a -QMAKE_EXTRA_TARGETS += genleveldb -# Gross ugly hack that depends on qmake internals, unfortunately there is no other way to do it. -QMAKE_CLEAN += $$PWD/src/leveldb/libleveldb.a; cd $$PWD/src/leveldb ; $(MAKE) clean - -# regenerate src/build.h -!windows|contains(USE_BUILD_INFO, 1) { - genbuild.depends = FORCE - genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$OUT_PWD/build/build.h - genbuild.target = $$OUT_PWD/build/build.h - PRE_TARGETDEPS += $$OUT_PWD/build/build.h - QMAKE_EXTRA_TARGETS += genbuild - DEFINES += HAVE_BUILD_INFO -} - -contains(USE_O3, 1) { - message(Building O3 optimization flag) - QMAKE_CXXFLAGS_RELEASE -= -O2 - QMAKE_CFLAGS_RELEASE -= -O2 - QMAKE_CXXFLAGS += -O3 - QMAKE_CFLAGS += -O3 -} - -*-g++-32 { - message("32 platform, adding -msse2 flag") - - QMAKE_CXXFLAGS += -msse2 - QMAKE_CFLAGS += -msse2 -} - -QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector - -# Input -DEPENDPATH += src src/json src/qt -HEADERS += \ - src/alert.h \ - src/allocators.h \ - src/wallet.h \ - src/keystore.h \ - src/version.h \ - src/netbase.h \ - src/clientversion.h \ - src/threadsafety.h \ - src/protocol.h \ - src/ui_interface.h \ - src/crypter.h \ - src/addrman.h \ - src/base58.h \ - src/bignum.h \ - src/chainparams.h \ - src/checkpoints.h \ - src/compat.h \ - src/coincontrol.h \ - src/sync.h \ - src/util.h \ - src/hash.h \ - src/uint256.h \ - src/kernel.h \ - src/scrypt.h \ - src/pbkdf2.h \ - src/serialize.h \ - src/strlcpy.h \ - src/smessage.h \ - src/main.h \ - src/miner.h \ - src/net.h \ - src/key.h \ - src/extkey.h \ - src/eckey.h \ - src/db.h \ - src/txdb.h \ - src/walletdb.h \ - src/script.h \ - src/stealth.h \ - src/ringsig.h \ - src/core.h \ - src/txmempool.h \ - src/state.h \ - src/bloom.h \ - src/init.h \ - src/mruset.h \ - src/rpcprotocol.h \ - src/rpcserver.h \ - src/rpcclient.h \ - src/json/json_spirit_writer_template.h \ - src/json/json_spirit_writer.h \ - src/json/json_spirit_value.h \ - src/json/json_spirit_utils.h \ - src/json/json_spirit_stream_reader.h \ - src/json/json_spirit_reader_template.h \ - src/json/json_spirit_reader.h \ - src/json/json_spirit_error_position.h \ - src/json/json_spirit.h \ - src/qt/transactiontablemodel.h \ - src/qt/addresstablemodel.h \ - src/qt/coincontroldialog.h \ - src/qt/coincontroltreewidget.h \ - src/qt/aboutdialog.h \ - src/qt/editaddressdialog.h \ - src/qt/bitcoinaddressvalidator.h \ - src/qt/clientmodel.h \ - src/qt/guiutil.h \ - src/qt/transactionrecord.h \ - src/qt/guiconstants.h \ - src/qt/optionsmodel.h \ - src/qt/monitoreddatamapper.h \ - src/qt/transactiondesc.h \ - src/qt/bitcoinamountfield.h \ - src/qt/walletmodel.h \ - src/qt/csvmodelwriter.h \ - src/qt/qvalidatedlineedit.h \ - src/qt/bitcoinunits.h \ - src/qt/qvaluecombobox.h \ - src/qt/askpassphrasedialog.h \ - src/qt/notificator.h \ - src/qt/rpcconsole.h \ - src/qt/paymentserver.h \ - src/qt/peertablemodel.h \ - src/qt/scicon.h \ - src/qt/trafficgraphwidget.h \ - src/qt/messagemodel.h \ - src/qt/shadowgui.h \ - src/qt/shadowbridge.h \ - src/qt/bridgetranslations.h - -SOURCES += \ - src/alert.cpp \ - src/version.cpp \ - src/chainparams.cpp \ - src/sync.cpp \ - src/smessage.cpp \ - src/util.cpp \ - src/hash.cpp \ - src/netbase.cpp \ - src/key.cpp \ - src/extkey.cpp \ - src/eckey.cpp \ - src/script.cpp \ - src/main.cpp \ - src/miner.cpp \ - src/init.cpp \ - src/net.cpp \ - src/checkpoints.cpp \ - src/addrman.cpp \ - src/db.cpp \ - src/walletdb.cpp \ - src/noui.cpp \ - src/kernel.cpp \ - src/scrypt-arm.S \ - src/scrypt-x86.S \ - src/scrypt-x86_64.S \ - src/scrypt.cpp \ - src/pbkdf2.cpp \ - src/stealth.cpp \ - src/ringsig.cpp \ - src/core.cpp \ - src/txmempool.cpp \ - src/wallet.cpp \ - src/keystore.cpp \ - src/state.cpp \ - src/bloom.cpp \ - src/crypter.cpp \ - src/protocol.cpp \ - src/rpcprotocol.cpp \ - src/rpcserver.cpp \ - src/rpcclient.cpp \ - src/rpcdump.cpp \ - src/rpcnet.cpp \ - src/rpcmining.cpp \ - src/rpcwallet.cpp \ - src/rpcblockchain.cpp \ - src/rpcrawtransaction.cpp \ - src/rpcsmessage.cpp \ - src/rpcextkey.cpp \ - src/rpcmnemonic.cpp \ - src/qt/transactiontablemodel.cpp \ - src/qt/coincontroldialog.cpp \ - src/qt/coincontroltreewidget.cpp \ - src/qt/aboutdialog.cpp \ - src/qt/editaddressdialog.cpp \ - src/qt/bitcoinaddressvalidator.cpp \ - src/qt/clientmodel.cpp \ - src/qt/guiutil.cpp \ - src/qt/transactionrecord.cpp \ - src/qt/optionsmodel.cpp \ - src/qt/monitoreddatamapper.cpp \ - src/qt/transactiondesc.cpp \ - src/qt/bitcoinstrings.cpp \ - src/qt/bitcoinamountfield.cpp \ - src/qt/walletmodel.cpp \ - src/qt/csvmodelwriter.cpp \ - src/qt/qvalidatedlineedit.cpp \ - src/qt/bitcoinunits.cpp \ - src/qt/qvaluecombobox.cpp \ - src/qt/askpassphrasedialog.cpp \ - src/qt/notificator.cpp \ - src/qt/rpcconsole.cpp \ - src/qt/paymentserver.cpp \ - src/qt/peertablemodel.cpp \ - src/qt/scicon.cpp \ - src/qt/trafficgraphwidget.cpp \ - src/qt/messagemodel.cpp \ - src/qt/shadowgui.cpp \ - src/qt/shadow.cpp \ - src/qt/shadowbridge.cpp - - -FORMS += \ - src/qt/forms/coincontroldialog.ui \ - src/qt/forms/aboutdialog.ui \ - src/qt/forms/editaddressdialog.ui \ - src/qt/forms/transactiondescdialog.ui \ - src/qt/forms/askpassphrasedialog.ui \ - src/qt/forms/rpcconsole.ui - - -CODECFORTR = UTF-8 - -# for lrelease/lupdate -# also add new translations to shadow.qrc under translations/ -TRANSLATIONS = $$files(src/qt/locale/umbra*.ts) - -isEmpty(QMAKE_LRELEASE) { - win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe - else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease -} -isEmpty(QM_DIR):QM_DIR = $$PWD/src/qt/locale -# automatically build translations, so they can be included in resource file -TSQM.name = lrelease ${QMAKE_FILE_IN} -TSQM.input = TRANSLATIONS -TSQM.output = $$QM_DIR/${QMAKE_FILE_BASE}.qm -TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} -TSQM.CONFIG = no_link -QMAKE_EXTRA_COMPILERS += TSQM - -# "Other files" to show in Qt Creator -OTHER_FILES += \ - .travis.yml doc/*.rst doc/*.txt doc/README README.md res/bitcoin-qt.rc contrib/macdeploy/createdmg - -# platform specific defaults, if not overridden on command line -isEmpty(BOOST_LIB_SUFFIX) { - macx:BOOST_LIB_SUFFIX = -mt - windows:BOOST_LIB_SUFFIX = -mt -} - -isEmpty(BOOST_THREAD_LIB_SUFFIX) { - BOOST_THREAD_LIB_SUFFIX = $$BOOST_LIB_SUFFIX -} - -isEmpty(BDB_LIB_PATH) { - macx:BDB_LIB_PATH = /opt/local/lib/db48 -} - -isEmpty(BDB_LIB_SUFFIX) { - macx:BDB_LIB_SUFFIX = -4.8 -} - -isEmpty(BDB_INCLUDE_PATH) { - macx:BDB_INCLUDE_PATH = /opt/local/include/db48 -} - -isEmpty(BOOST_LIB_PATH) { - macx:BOOST_LIB_PATH = /opt/local/lib -} - -isEmpty(BOOST_INCLUDE_PATH) { - macx:BOOST_INCLUDE_PATH = /opt/local/include -} - -windows:DEFINES += WIN32 -windows:RC_FILE = src/qt/res/bitcoin-qt.rc - -windows:!contains(MINGW_THREAD_BUGFIX, 0) { - # At least qmake's win32-g++-cross profile is missing the -lmingwthrd - # thread-safety flag. GCC has -mthreads to enable this, but it doesn't - # work with static linking. -lmingwthrd must come BEFORE -lmingw, so - # it is prepended to QMAKE_LIBS_QT_ENTRY. - # It can be turned off with MINGW_THREAD_BUGFIX=0, just in case it causes - # any problems on some untested qmake profile now or in the future. - DEFINES += _MT BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN - QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY -} - -macx:HEADERS += src/qt/macdockiconhandler.h \ - src/qt/macnotificationhandler.h -macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm \ - src/qt/macnotificationhandler.mm -macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0 -macx:ICON = src/qt/res/icons/shadow.icns -macx:TARGET = "Umbra" -macx:QMAKE_CFLAGS_THREAD += -pthread -macx:QMAKE_LFLAGS_THREAD += -pthread -macx:QMAKE_CXXFLAGS_THREAD += -pthread - -# Set libraries and includes at end, to use platform-defined defaults if not overridden -INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH -LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) -LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX -# -lgdi32 has to happen after -lcrypto (see #681) -windows:LIBS += -lws2_32 -lshlwapi -lmswsock -lole32 -loleaut32 -luuid -lgdi32 -LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX -windows:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX - -contains(RELEASE, 1) { - !windows:!macx { - # Linux: turn dynamic linking back on for c/c++ runtime libraries - LIBS += -Wl,-Bdynamic - } -} - -!windows:!macx:!android:!ios { - DEFINES += LINUX - LIBS += -lrt -ldl -} - -system($$QMAKE_LRELEASE -silent $$_PRO_FILE_) diff --git a/shadow.qrc b/shadow.qrc deleted file mode 100644 index fc9a0120bc..0000000000 --- a/shadow.qrc +++ /dev/null @@ -1,2087 +0,0 @@ - - - src/qt/res/assets/css/font-awesome-buttons.min.css - src/qt/res/assets/css/font-awesome.min.css - src/qt/res/assets/css/framework-icons.min.css - src/qt/res/assets/css/framework.min.css - src/qt/res/assets/css/normalize.css - src/qt/res/assets/css/shadow.min.css - src/qt/res/assets/fonts/FontAwesome/FontAwesome.otf - src/qt/res/assets/fonts/FontAwesome/fontawesome-webfont.eot - src/qt/res/assets/fonts/FontAwesome/fontawesome-webfont.svg - src/qt/res/assets/fonts/FontAwesome/fontawesome-webfont.ttf - src/qt/res/assets/fonts/FontAwesome/fontawesome-webfont.woff - src/qt/res/assets/fonts/Footable/footable.eot - src/qt/res/assets/fonts/Footable/footable.svg - src/qt/res/assets/fonts/Footable/footable.ttf - src/qt/res/assets/fonts/Footable/footable.woff - src/qt/res/assets/fonts/Framework-icon/framework-icon.eot - src/qt/res/assets/fonts/Framework-icon/framework-icon.svg - src/qt/res/assets/fonts/Framework-icon/framework-icon.ttf - src/qt/res/assets/fonts/Framework-icon/framework-icon.woff - src/qt/res/assets/fonts/Montserrat/Montserrat-Bold.ttf - src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.svg - src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.woff - src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.woff2 - src/qt/res/assets/fonts/Montserrat/Montserrat-Regular.ttf - src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.svg - src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.woff - src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.woff2 - src/qt/res/assets/fonts/OpenSans/OpenSans-BoldItalic.ttf - src/qt/res/assets/fonts/OpenSans/OpenSans-Bold.ttf - src/qt/res/assets/fonts/OpenSans/OpenSans-Italic.ttf - src/qt/res/assets/fonts/OpenSans/OpenSans-LightItalic.ttf - src/qt/res/assets/fonts/OpenSans/OpenSans-Light.ttf - src/qt/res/assets/fonts/OpenSans/OpenSans-Regular.ttf - src/qt/res/assets/icons/chat_bubble.png - src/qt/res/assets/icons/chevron.png - src/qt/res/assets/icons/connect_0.png - src/qt/res/assets/icons/connect_1.png - src/qt/res/assets/icons/connect_2.png - src/qt/res/assets/icons/connect_3.png - src/qt/res/assets/icons/connect_4.png - src/qt/res/assets/icons/connect_5.png - src/qt/res/assets/icons/connect_6.png - src/qt/res/assets/icons/delete.png - src/qt/res/assets/icons/i2p_off.png - src/qt/res/assets/icons/i2p.png - src/qt/res/assets/icons/lock_off.png - src/qt/res/assets/icons/lock.png - src/qt/res/assets/icons/lock_stake.png - src/qt/res/assets/icons/noti-cross-2x.png - src/qt/res/assets/icons/noti-cross.png - src/qt/res/assets/icons/notsynced.png - src/qt/res/assets/icons/search_icon.png - src/qt/res/assets/icons/shadowcoin-128.png - src/qt/res/assets/icons/shadowcoin-16.png - src/qt/res/assets/icons/shadowcoin-32.png - src/qt/res/assets/icons/shadowcoin-48.png - src/qt/res/assets/icons/shadowcoin-64.png - src/qt/res/assets/icons/shadowcoin-80.png - src/qt/res/assets/icons/shadowcoin.ico - src/qt/res/assets/icons/shadowcoin_icon.png - src/qt/res/assets/icons/shadowcoin.png - src/qt/res/assets/icons/shadow.icns - src/qt/res/assets/icons/staking_off.png - src/qt/res/assets/icons/staking.png - src/qt/res/assets/icons/synced.png - src/qt/res/assets/icons/syncing.gif - src/qt/res/assets/icons/syncing_static.gif - src/qt/res/assets/icons/top_tray_2x.png - src/qt/res/assets/icons/top_tray.png - src/qt/res/assets/icons/tor_off.png - src/qt/res/assets/icons/tor.png - src/qt/res/assets/icons/transaction0.png - src/qt/res/assets/icons/tx_inout.png - src/qt/res/assets/icons/tx_input.png - src/qt/res/assets/icons/tx_mined.png - src/qt/res/assets/icons/tx_output.png - src/qt/res/assets/img/about.png - src/qt/res/assets/img/avatars/kewde.png - src/qt/res/assets/img/avatars/litebit.png - src/qt/res/assets/img/linear_gradient.png - src/qt/res/assets/img/progress/progress-bar-complete.svg - src/qt/res/assets/img/progress/progress-bar-danger.svg - src/qt/res/assets/img/progress/progress-bar-info.svg - src/qt/res/assets/img/progress/progress-bar-master.svg - src/qt/res/assets/img/progress/progress-bar-primary.svg - src/qt/res/assets/img/progress/progress-bar-success.svg - src/qt/res/assets/img/progress/progress-bar-warning.svg - src/qt/res/assets/img/progress/progress-circle-complete.svg - src/qt/res/assets/img/progress/progress-circle-danger.svg - src/qt/res/assets/img/progress/progress-circle-info.svg - src/qt/res/assets/img/progress/progress-circle-lg-master-static.svg - src/qt/res/assets/img/progress/progress-circle-lg-master.svg - src/qt/res/assets/img/progress/progress-circle-lg-white-static.svg - src/qt/res/assets/img/progress/progress-circle-lg-white.svg - src/qt/res/assets/img/progress/progress-circle-master.svg - src/qt/res/assets/img/progress/progress-circle-primary.svg - src/qt/res/assets/img/progress/progress-circle-success.svg - src/qt/res/assets/img/progress/progress-circle-warning.svg - src/qt/res/assets/img/sdc-vertical.png - src/qt/res/assets/img/shadow_logo.png - src/qt/res/assets/img/shoppingcart.png - src/qt/res/assets/img/splash.png - src/qt/res/assets/js/navigation.min.js - src/qt/res/assets/js/pages/send.min.js - src/qt/res/assets/js/qrcode.min.js - src/qt/res/assets/js/shadow.min.js - src/qt/res/assets/js/tooltip.min.js - src/qt/res/assets/plugins/boostrapv3/css/bootstrap.css.map - src/qt/res/assets/plugins/boostrapv3/css/bootstrap.min.css - src/qt/res/assets/plugins/boostrapv3/css/bootstrap-theme.css - src/qt/res/assets/plugins/boostrapv3/css/bootstrap-theme.css.map - src/qt/res/assets/plugins/boostrapv3/fonts/glyphicons-halflings-regular.eot - src/qt/res/assets/plugins/boostrapv3/fonts/glyphicons-halflings-regular.svg - src/qt/res/assets/plugins/boostrapv3/fonts/glyphicons-halflings-regular.ttf - src/qt/res/assets/plugins/boostrapv3/fonts/glyphicons-halflings-regular.woff - src/qt/res/assets/plugins/boostrapv3/fonts/glyphicons-halflings-regular.woff2 - src/qt/res/assets/plugins/boostrapv3/js/bootstrap.min.js - src/qt/res/assets/plugins/classie/classie.js - src/qt/res/assets/plugins/contextMenu/contextMenu.css - src/qt/res/assets/plugins/contextMenu/contextMenu.min.js - src/qt/res/assets/plugins/emojione/assets/css/emojione.min.css - src/qt/res/assets/plugins/emojione/assets/svg/0023-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/0023.svg - src/qt/res/assets/plugins/emojione/assets/svg/002a-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/002a.svg - src/qt/res/assets/plugins/emojione/assets/svg/0030-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/0030.svg - src/qt/res/assets/plugins/emojione/assets/svg/0031-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/0031.svg - src/qt/res/assets/plugins/emojione/assets/svg/0032-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/0032.svg - src/qt/res/assets/plugins/emojione/assets/svg/0033-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/0033.svg - src/qt/res/assets/plugins/emojione/assets/svg/0034-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/0034.svg - src/qt/res/assets/plugins/emojione/assets/svg/0035-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/0035.svg - src/qt/res/assets/plugins/emojione/assets/svg/0036-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/0036.svg - src/qt/res/assets/plugins/emojione/assets/svg/0037-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/0037.svg - src/qt/res/assets/plugins/emojione/assets/svg/0038-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/0038.svg - src/qt/res/assets/plugins/emojione/assets/svg/0039-20e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/0039.svg - src/qt/res/assets/plugins/emojione/assets/svg/00a9.svg - src/qt/res/assets/plugins/emojione/assets/svg/00ae.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f004.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f0cf.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f170.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f171.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f17e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f17f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f18e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f191.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f192.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f193.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f194.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f195.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f196.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f197.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f198.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f199.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f19a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1e7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ef.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1ef.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1ef.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1e7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ef-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ef-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ef-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ef-1f1f5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ef.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1f5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1e7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1f5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f4-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f6-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f7-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f7-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f7-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f7-1f1fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f7-1f1fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1e7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ef.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1ef.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fc-1f1eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fc-1f1f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fd-1f1f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fe-1f1ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fe-1f1f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ff-1f1e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ff-1f1f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ff-1f1fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f1ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f201.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f202.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f21a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f22f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f232.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f233.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f234.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f235.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f236.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f237.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f238.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f239.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f23a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f250.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f251.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f300.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f301.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f302.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f303.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f304.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f305.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f306.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f307.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f308.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f309.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f30a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f30b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f30c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f30d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f30e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f30f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f310.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f311.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f312.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f313.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f314.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f315.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f316.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f317.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f318.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f319.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f31a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f31b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f31c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f31d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f31e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f31f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f320.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f321.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f324.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f325.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f326.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f327.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f328.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f329.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f32a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f32b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f32c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f32d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f32e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f32f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f330.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f331.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f332.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f333.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f334.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f335.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f336.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f337.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f338.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f339.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f33a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f33b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f33c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f33d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f33e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f33f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f340.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f341.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f342.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f343.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f344.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f345.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f346.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f347.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f348.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f349.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f34a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f34b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f34c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f34d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f34e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f34f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f350.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f351.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f352.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f353.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f354.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f355.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f356.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f357.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f358.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f359.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f35a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f35b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f35c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f35d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f35e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f35f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f360.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f361.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f362.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f363.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f364.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f365.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f366.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f367.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f368.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f369.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f36a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f36b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f36c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f36d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f36e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f36f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f370.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f371.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f372.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f373.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f374.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f375.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f376.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f377.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f378.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f379.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f37a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f37b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f37c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f37d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f37e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f37f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f380.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f381.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f382.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f383.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f384.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f385-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f385-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f385-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f385-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f385-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f385.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f386.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f387.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f388.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f389.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f38a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f38b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f38c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f38d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f38e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f38f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f390.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f391.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f392.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f393.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f396.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f397.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f399.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f39a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f39b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f39e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f39f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3a0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3a1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3a2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3a3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3a4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3a5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3a6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3a7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3a8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3a9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3aa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ab.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ac.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ad.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ae.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3af.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3b0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3b1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3b2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3b3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3b4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3b5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3b6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3b7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3b8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3b9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ba.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3bb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3bc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3bd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3be.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3bf.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c3-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c3-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c3-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c3-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c3-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c4-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c4-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c4-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c4-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c4-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c7-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c7-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c7-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c7-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c7-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3c9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ca-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ca-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ca-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ca-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ca-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ca.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3cb-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3cb-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3cb-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3cb-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3cb-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3cb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3cc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3cd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ce.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3cf.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3d0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3d1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3d2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3d3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3d4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3d5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3d6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3d7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3d8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3d9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3da.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3db.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3dc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3dd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3de.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3df.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3e0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3e1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3e2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3e4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3e5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3e7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ef.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3f3-1f308.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3f5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f400.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f401.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f402.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f403.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f404.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f405.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f406.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f407.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f408.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f409.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f40a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f40b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f40c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f40d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f40e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f40f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f410.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f411.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f412.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f413.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f414.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f415.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f416.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f417.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f418.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f419.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f41a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f41b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f41c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f41d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f41e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f41f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f420.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f421.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f422.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f423.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f424.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f425.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f426.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f427.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f428.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f429.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f42a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f42b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f42c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f42d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f42e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f42f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f430.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f431.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f432.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f433.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f434.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f435.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f436.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f437.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f438.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f439.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f43a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f43b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f43c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f43d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f43e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f43f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f440.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f441-1f5e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f441.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f442-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f442-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f442-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f442-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f442-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f442.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f443-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f443-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f443-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f443-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f443-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f443.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f444.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f445.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f446-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f446-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f446-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f446-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f446-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f446.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f447-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f447-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f447-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f447-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f447-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f447.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f448-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f448-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f448-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f448-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f448-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f448.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f449-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f449-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f449-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f449-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f449-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f449.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44a-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44a-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44a-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44a-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44a-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44b-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44b-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44b-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44b-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44b-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44c-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44c-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44c-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44c-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44c-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44d-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44d-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44d-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44d-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44d-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44e-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44e-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44e-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44e-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44e-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44f-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44f-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44f-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44f-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44f-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f44f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f450-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f450-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f450-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f450-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f450-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f450.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f451.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f452.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f453.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f454.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f455.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f456.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f457.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f458.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f459.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f45a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f45b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f45c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f45d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f45e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f45f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f460.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f461.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f462.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f463.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f464.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f465.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f466-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f466-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f466-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f466-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f466-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f466.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f467-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f467-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f467-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f467-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f467-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f467.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f468-1f466-1f466.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f468-1f466.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f468-1f467-1f466.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f468-1f467-1f467.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f468-1f467.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f469-1f466-1f466.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f469-1f467-1f466.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f469-1f467-1f467.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f469-1f467.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-2764-1f468.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468-2764-1f48b-1f468.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f468.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f469-1f466-1f466.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f469-1f466.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f469-1f467-1f466.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f469-1f467-1f467.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f469-1f467.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-2764-1f469.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469-2764-1f48b-1f469.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f469.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f46a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f46b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f46c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f46d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f46e-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f46e-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f46e-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f46e-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f46e-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f46e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f46f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f470-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f470-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f470-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f470-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f470-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f470.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f471-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f471-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f471-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f471-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f471-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f471.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f472-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f472-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f472-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f472-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f472-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f472.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f473-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f473-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f473-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f473-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f473-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f473.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f474-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f474-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f474-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f474-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f474-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f474.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f475-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f475-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f475-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f475-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f475-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f475.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f476-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f476-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f476-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f476-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f476-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f476.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f477-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f477-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f477-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f477-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f477-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f477.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f478-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f478-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f478-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f478-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f478-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f478.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f479.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f47a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f47b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f47c-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f47c-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f47c-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f47c-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f47c-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f47c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f47d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f47e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f47f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f480.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f481-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f481-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f481-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f481-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f481-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f481.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f482-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f482-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f482-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f482-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f482-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f482.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f483-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f483-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f483-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f483-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f483-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f483.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f484.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f485-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f485-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f485-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f485-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f485-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f485.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f486-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f486-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f486-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f486-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f486-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f486.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f487-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f487-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f487-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f487-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f487-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f487.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f488.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f489.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f48a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f48b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f48c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f48d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f48e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f48f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f490.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f491.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f492.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f493.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f494.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f495.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f496.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f497.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f498.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f499.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f49a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f49b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f49c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f49d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f49e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f49f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4a0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4a1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4a2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4a3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4a4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4a5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4a6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4a7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4a8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4a9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4aa-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4aa-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4aa-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4aa-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4aa-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4aa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ab.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ac.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ad.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ae.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4af.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4b0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4b1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4b2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4b3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4b4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4b5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4b6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4b7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4b8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4b9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ba.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4bb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4bc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4bd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4be.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4bf.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4c0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4c1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4c2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4c3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4c4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4c5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4c6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4c7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4c8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4c9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ca.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4cb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4cc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4cd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ce.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4cf.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4d0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4d1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4d2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4d3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4d4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4d5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4d6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4d7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4d8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4d9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4da.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4db.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4dc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4dd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4de.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4df.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4e0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4e1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4e2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4e4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4e5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4e6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4e7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ef.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4f5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4f6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f4ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f500.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f501.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f502.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f503.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f504.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f505.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f506.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f507.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f508.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f509.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f50a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f50b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f50c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f50d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f50e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f50f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f510.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f511.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f512.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f513.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f514.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f515.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f516.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f517.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f518.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f519.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f51a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f51b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f51c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f51d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f51e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f51f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f520.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f521.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f522.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f523.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f524.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f525.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f526.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f527.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f528.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f529.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f52a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f52b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f52c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f52d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f52e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f52f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f530.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f531.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f532.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f533.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f534.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f535.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f536.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f537.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f538.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f539.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f53a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f53b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f53c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f53d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f549.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f54a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f54b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f54c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f54d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f54e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f550.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f551.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f552.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f553.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f554.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f555.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f556.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f557.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f558.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f559.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f55a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f55b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f55c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f55d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f55e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f55f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f560.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f561.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f562.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f563.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f564.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f565.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f566.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f567.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f56f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f570.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f573.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f574.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f575-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f575-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f575-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f575-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f575-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f575.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f576.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f577.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f578.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f579.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f57a-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f57a-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f57a-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f57a-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f57a-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f57a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f587.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f58a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f58b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f58c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f58d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f590-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f590-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f590-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f590-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f590-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f590.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f595-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f595-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f595-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f595-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f595-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f595.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f596-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f596-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f596-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f596-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f596-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f596.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5a4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5a5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5a8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5b1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5b2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5bc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5c2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5c3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5c4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5d1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5d2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5d3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5dc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5dd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5de.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5e1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5e8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5ef.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f5ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f600.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f601.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f602.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f603.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f604.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f605.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f606.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f607.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f608.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f609.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f60a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f60b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f60c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f60d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f60e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f60f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f610.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f611.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f612.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f613.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f614.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f615.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f616.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f617.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f618.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f619.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f61a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f61b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f61c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f61d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f61e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f61f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f620.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f621.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f622.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f623.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f624.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f625.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f626.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f627.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f628.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f629.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f62a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f62b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f62c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f62d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f62e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f62f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f630.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f631.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f632.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f633.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f634.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f635.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f636.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f637.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f638.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f639.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f63a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f63b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f63c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f63d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f63e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f63f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f640.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f641.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f642.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f643.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f644.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f645-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f645-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f645-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f645-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f645-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f645.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f646-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f646-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f646-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f646-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f646-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f646.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f647-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f647-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f647-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f647-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f647-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f647.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f648.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f649.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64b-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64b-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64b-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64b-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64b-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64c-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64c-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64c-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64c-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64c-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64d-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64d-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64d-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64d-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64d-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64e-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64e-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64e-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64e-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64e-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64f-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64f-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64f-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64f-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64f-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f64f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f680.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f681.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f682.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f683.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f684.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f685.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f686.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f687.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f688.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f689.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f68a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f68b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f68c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f68d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f68e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f68f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f690.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f691.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f692.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f693.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f694.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f695.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f696.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f697.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f698.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f699.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f69a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f69b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f69c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f69d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f69e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f69f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a3-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a3-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a3-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a3-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a3-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6a9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6aa.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6ab.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6ac.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6ad.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6ae.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6af.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b4-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b4-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b4-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b4-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b4-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b5-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b5-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b5-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b5-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b5-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b6-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b6-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b6-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b6-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b6-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b7.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b8.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6b9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6ba.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6bb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6bc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6bd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6be.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6bf.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6c0-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6c0-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6c0-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6c0-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6c0-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6c0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6c1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6c2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6c3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6c4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6c5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6cb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6cc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6cd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6ce.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6cf.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6d0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6d1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6d2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6e0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6e1.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6e2.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6e3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6e4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6e5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6f5.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f6f6.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f910.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f911.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f912.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f913.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f914.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f915.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f916.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f917.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f918-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f918-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f918-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f918-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f918-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f918.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f919-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f919-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f919-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f919-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f919-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f919.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91a-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91a-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91a-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91a-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91a-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91b-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91b-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91b-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91b-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91b-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91c-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91c-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91c-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91c-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91c-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91d-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91d-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91d-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91d-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91d-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91e-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91e-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91e-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91e-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91e-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f91e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f920.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f921.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f922.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f923.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f924.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f925.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f926-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f926-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f926-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f926-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f926-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f926.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f927.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f930-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f930-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f930-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f930-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f930-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f930.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f933-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f933-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f933-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f933-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f933-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f933.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f934-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f934-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f934-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f934-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f934-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f934.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f935-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f935-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f935-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f935-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f935-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f935.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f936-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f936-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f936-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f936-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f936-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f936.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f937-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f937-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f937-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f937-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f937-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f937.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f938-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f938-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f938-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f938-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f938-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f938.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f939-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f939-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f939-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f939-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f939-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f939.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93c-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93c-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93c-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93c-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93c-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93d-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93d-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93d-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93d-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93d-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93e-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93e-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93e-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93e-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93e-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f93e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f940.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f941.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f942.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f943.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f944.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f945.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f947.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f948.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f949.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f94a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f94b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f950.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f951.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f952.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f953.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f954.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f955.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f956.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f957.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f958.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f959.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f95a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f95b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f95c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f95d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f95e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f980.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f981.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f982.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f983.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f984.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f985.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f986.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f987.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f988.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f989.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f98a.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f98b.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f98c.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f98d.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f98e.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f98f.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f990.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f991.svg - src/qt/res/assets/plugins/emojione/assets/svg/1f9c0.svg - src/qt/res/assets/plugins/emojione/assets/svg/203c.svg - src/qt/res/assets/plugins/emojione/assets/svg/2049.svg - src/qt/res/assets/plugins/emojione/assets/svg/2122.svg - src/qt/res/assets/plugins/emojione/assets/svg/2139.svg - src/qt/res/assets/plugins/emojione/assets/svg/2194.svg - src/qt/res/assets/plugins/emojione/assets/svg/2195.svg - src/qt/res/assets/plugins/emojione/assets/svg/2196.svg - src/qt/res/assets/plugins/emojione/assets/svg/2197.svg - src/qt/res/assets/plugins/emojione/assets/svg/2198.svg - src/qt/res/assets/plugins/emojione/assets/svg/2199.svg - src/qt/res/assets/plugins/emojione/assets/svg/21a9.svg - src/qt/res/assets/plugins/emojione/assets/svg/21aa.svg - src/qt/res/assets/plugins/emojione/assets/svg/231a.svg - src/qt/res/assets/plugins/emojione/assets/svg/231b.svg - src/qt/res/assets/plugins/emojione/assets/svg/2328.svg - src/qt/res/assets/plugins/emojione/assets/svg/23cf.svg - src/qt/res/assets/plugins/emojione/assets/svg/23e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/23ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/23eb.svg - src/qt/res/assets/plugins/emojione/assets/svg/23ec.svg - src/qt/res/assets/plugins/emojione/assets/svg/23ed.svg - src/qt/res/assets/plugins/emojione/assets/svg/23ee.svg - src/qt/res/assets/plugins/emojione/assets/svg/23ef.svg - src/qt/res/assets/plugins/emojione/assets/svg/23f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/23f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/23f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/23f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/23f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/23f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/23fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/24c2.svg - src/qt/res/assets/plugins/emojione/assets/svg/25aa.svg - src/qt/res/assets/plugins/emojione/assets/svg/25ab.svg - src/qt/res/assets/plugins/emojione/assets/svg/25b6.svg - src/qt/res/assets/plugins/emojione/assets/svg/25c0.svg - src/qt/res/assets/plugins/emojione/assets/svg/25fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/25fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/25fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/25fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/2600.svg - src/qt/res/assets/plugins/emojione/assets/svg/2601.svg - src/qt/res/assets/plugins/emojione/assets/svg/2602.svg - src/qt/res/assets/plugins/emojione/assets/svg/2603.svg - src/qt/res/assets/plugins/emojione/assets/svg/2604.svg - src/qt/res/assets/plugins/emojione/assets/svg/260e.svg - src/qt/res/assets/plugins/emojione/assets/svg/2611.svg - src/qt/res/assets/plugins/emojione/assets/svg/2614.svg - src/qt/res/assets/plugins/emojione/assets/svg/2615.svg - src/qt/res/assets/plugins/emojione/assets/svg/2618.svg - src/qt/res/assets/plugins/emojione/assets/svg/261d-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/261d-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/261d-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/261d-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/261d-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/261d.svg - src/qt/res/assets/plugins/emojione/assets/svg/2620.svg - src/qt/res/assets/plugins/emojione/assets/svg/2622.svg - src/qt/res/assets/plugins/emojione/assets/svg/2623.svg - src/qt/res/assets/plugins/emojione/assets/svg/2626.svg - src/qt/res/assets/plugins/emojione/assets/svg/262a.svg - src/qt/res/assets/plugins/emojione/assets/svg/262e.svg - src/qt/res/assets/plugins/emojione/assets/svg/262f.svg - src/qt/res/assets/plugins/emojione/assets/svg/2638.svg - src/qt/res/assets/plugins/emojione/assets/svg/2639.svg - src/qt/res/assets/plugins/emojione/assets/svg/263a.svg - src/qt/res/assets/plugins/emojione/assets/svg/2648.svg - src/qt/res/assets/plugins/emojione/assets/svg/2649.svg - src/qt/res/assets/plugins/emojione/assets/svg/264a.svg - src/qt/res/assets/plugins/emojione/assets/svg/264b.svg - src/qt/res/assets/plugins/emojione/assets/svg/264c.svg - src/qt/res/assets/plugins/emojione/assets/svg/264d.svg - src/qt/res/assets/plugins/emojione/assets/svg/264e.svg - src/qt/res/assets/plugins/emojione/assets/svg/264f.svg - src/qt/res/assets/plugins/emojione/assets/svg/2650.svg - src/qt/res/assets/plugins/emojione/assets/svg/2651.svg - src/qt/res/assets/plugins/emojione/assets/svg/2652.svg - src/qt/res/assets/plugins/emojione/assets/svg/2653.svg - src/qt/res/assets/plugins/emojione/assets/svg/2660.svg - src/qt/res/assets/plugins/emojione/assets/svg/2663.svg - src/qt/res/assets/plugins/emojione/assets/svg/2665.svg - src/qt/res/assets/plugins/emojione/assets/svg/2666.svg - src/qt/res/assets/plugins/emojione/assets/svg/2668.svg - src/qt/res/assets/plugins/emojione/assets/svg/267b.svg - src/qt/res/assets/plugins/emojione/assets/svg/267f.svg - src/qt/res/assets/plugins/emojione/assets/svg/2692.svg - src/qt/res/assets/plugins/emojione/assets/svg/2693.svg - src/qt/res/assets/plugins/emojione/assets/svg/2694.svg - src/qt/res/assets/plugins/emojione/assets/svg/2696.svg - src/qt/res/assets/plugins/emojione/assets/svg/2697.svg - src/qt/res/assets/plugins/emojione/assets/svg/2699.svg - src/qt/res/assets/plugins/emojione/assets/svg/269b.svg - src/qt/res/assets/plugins/emojione/assets/svg/269c.svg - src/qt/res/assets/plugins/emojione/assets/svg/26a0.svg - src/qt/res/assets/plugins/emojione/assets/svg/26a1.svg - src/qt/res/assets/plugins/emojione/assets/svg/26aa.svg - src/qt/res/assets/plugins/emojione/assets/svg/26ab.svg - src/qt/res/assets/plugins/emojione/assets/svg/26b0.svg - src/qt/res/assets/plugins/emojione/assets/svg/26b1.svg - src/qt/res/assets/plugins/emojione/assets/svg/26bd.svg - src/qt/res/assets/plugins/emojione/assets/svg/26be.svg - src/qt/res/assets/plugins/emojione/assets/svg/26c4.svg - src/qt/res/assets/plugins/emojione/assets/svg/26c5.svg - src/qt/res/assets/plugins/emojione/assets/svg/26c8.svg - src/qt/res/assets/plugins/emojione/assets/svg/26ce.svg - src/qt/res/assets/plugins/emojione/assets/svg/26cf.svg - src/qt/res/assets/plugins/emojione/assets/svg/26d1.svg - src/qt/res/assets/plugins/emojione/assets/svg/26d3.svg - src/qt/res/assets/plugins/emojione/assets/svg/26d4.svg - src/qt/res/assets/plugins/emojione/assets/svg/26e9.svg - src/qt/res/assets/plugins/emojione/assets/svg/26ea.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f0.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f1.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f2.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f3.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f4.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f5.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f7.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f8.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f9-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f9-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f9-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f9-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f9-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/26f9.svg - src/qt/res/assets/plugins/emojione/assets/svg/26fa.svg - src/qt/res/assets/plugins/emojione/assets/svg/26fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/2702.svg - src/qt/res/assets/plugins/emojione/assets/svg/2705.svg - src/qt/res/assets/plugins/emojione/assets/svg/2708.svg - src/qt/res/assets/plugins/emojione/assets/svg/2709.svg - src/qt/res/assets/plugins/emojione/assets/svg/270a-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/270a-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/270a-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/270a-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/270a-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/270a.svg - src/qt/res/assets/plugins/emojione/assets/svg/270b-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/270b-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/270b-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/270b-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/270b-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/270b.svg - src/qt/res/assets/plugins/emojione/assets/svg/270c-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/270c-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/270c-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/270c-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/270c-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/270c.svg - src/qt/res/assets/plugins/emojione/assets/svg/270d-1f3fb.svg - src/qt/res/assets/plugins/emojione/assets/svg/270d-1f3fc.svg - src/qt/res/assets/plugins/emojione/assets/svg/270d-1f3fd.svg - src/qt/res/assets/plugins/emojione/assets/svg/270d-1f3fe.svg - src/qt/res/assets/plugins/emojione/assets/svg/270d-1f3ff.svg - src/qt/res/assets/plugins/emojione/assets/svg/270d.svg - src/qt/res/assets/plugins/emojione/assets/svg/270f.svg - src/qt/res/assets/plugins/emojione/assets/svg/2712.svg - src/qt/res/assets/plugins/emojione/assets/svg/2714.svg - src/qt/res/assets/plugins/emojione/assets/svg/2716.svg - src/qt/res/assets/plugins/emojione/assets/svg/271d.svg - src/qt/res/assets/plugins/emojione/assets/svg/2721.svg - src/qt/res/assets/plugins/emojione/assets/svg/2728.svg - src/qt/res/assets/plugins/emojione/assets/svg/2733.svg - src/qt/res/assets/plugins/emojione/assets/svg/2734.svg - src/qt/res/assets/plugins/emojione/assets/svg/2744.svg - src/qt/res/assets/plugins/emojione/assets/svg/2747.svg - src/qt/res/assets/plugins/emojione/assets/svg/274c.svg - src/qt/res/assets/plugins/emojione/assets/svg/274e.svg - src/qt/res/assets/plugins/emojione/assets/svg/2753.svg - src/qt/res/assets/plugins/emojione/assets/svg/2754.svg - src/qt/res/assets/plugins/emojione/assets/svg/2755.svg - src/qt/res/assets/plugins/emojione/assets/svg/2757.svg - src/qt/res/assets/plugins/emojione/assets/svg/2763.svg - src/qt/res/assets/plugins/emojione/assets/svg/2764.svg - src/qt/res/assets/plugins/emojione/assets/svg/2795.svg - src/qt/res/assets/plugins/emojione/assets/svg/2796.svg - src/qt/res/assets/plugins/emojione/assets/svg/2797.svg - src/qt/res/assets/plugins/emojione/assets/svg/27a1.svg - src/qt/res/assets/plugins/emojione/assets/svg/27b0.svg - src/qt/res/assets/plugins/emojione/assets/svg/27bf.svg - src/qt/res/assets/plugins/emojione/assets/svg/2934.svg - src/qt/res/assets/plugins/emojione/assets/svg/2935.svg - src/qt/res/assets/plugins/emojione/assets/svg/2b05.svg - src/qt/res/assets/plugins/emojione/assets/svg/2b06.svg - src/qt/res/assets/plugins/emojione/assets/svg/2b07.svg - src/qt/res/assets/plugins/emojione/assets/svg/2b1b.svg - src/qt/res/assets/plugins/emojione/assets/svg/2b1c.svg - src/qt/res/assets/plugins/emojione/assets/svg/2b50.svg - src/qt/res/assets/plugins/emojione/assets/svg/2b55.svg - src/qt/res/assets/plugins/emojione/assets/svg/3030.svg - src/qt/res/assets/plugins/emojione/assets/svg/303d.svg - src/qt/res/assets/plugins/emojione/assets/svg/3297.svg - src/qt/res/assets/plugins/emojione/assets/svg/3299.svg - src/qt/res/assets/plugins/emojione/emojione.js - src/qt/res/assets/plugins/footable/footable.filter.js - src/qt/res/assets/plugins/footable/footable.js - src/qt/res/assets/plugins/footable/footable.paginate.js - src/qt/res/assets/plugins/footable/footable.sort.js - src/qt/res/assets/plugins/framework/framework.min.js - src/qt/res/assets/plugins/identicon/identicon.js - src/qt/res/assets/plugins/iscroll/iscroll.js - src/qt/res/assets/plugins/jdenticon/jdenticon-1.3.2.js - src/qt/res/assets/plugins/jquery/jquery-1.11.1.min.js - src/qt/res/assets/plugins/jquery-scrollbar/jquery.scrollbar.css - src/qt/res/assets/plugins/jquery-scrollbar/jquery.scrollbar.min.js - src/qt/res/assets/plugins/jquery-transit/jquery.transit.min.js - src/qt/res/assets/plugins/jquery-ui/images/animated-overlay.gif - src/qt/res/assets/plugins/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png - src/qt/res/assets/plugins/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png - src/qt/res/assets/plugins/jquery-ui/images/ui-bg_flat_10_000000_40x100.png - src/qt/res/assets/plugins/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png - src/qt/res/assets/plugins/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png - src/qt/res/assets/plugins/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png - src/qt/res/assets/plugins/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png - src/qt/res/assets/plugins/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png - src/qt/res/assets/plugins/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png - src/qt/res/assets/plugins/jquery-ui/images/ui-icons_222222_256x240.png - src/qt/res/assets/plugins/jquery-ui/images/ui-icons_228ef1_256x240.png - src/qt/res/assets/plugins/jquery-ui/images/ui-icons_ef8c08_256x240.png - src/qt/res/assets/plugins/jquery-ui/images/ui-icons_ffd27a_256x240.png - src/qt/res/assets/plugins/jquery-ui/images/ui-icons_ffffff_256x240.png - src/qt/res/assets/plugins/jquery-ui/jquery-ui-1.10.1.custom.min.css - src/qt/res/assets/plugins/jquery-ui/jquery-ui2.min.js - src/qt/res/assets/plugins/jquery-ui/jquery-ui_back.min.js - src/qt/res/assets/plugins/jquery-ui/jquery-ui.min.js - src/qt/res/assets/plugins/markdown/markdown.min.js - src/qt/res/assets/plugins/md5/md5.js - src/qt/res/assets/plugins/modernizr.custom.js - src/qt/res/assets/plugins/pace/pace.min.js - src/qt/res/assets/plugins/pace/pace-theme-flash.css - src/qt/res/assets/plugins/pnglib/pnglib.js - src/qt/res/assets/plugins/qrcode/qrcode.min.js - src/qt/res/assets/plugins/shajs/shajs.js - src/qt/res/index.html - - - src/qt/res/icons/shadowcoin-80.png - src/qt/res/icons/shadowcoin-80.png - src/qt/res/icons/shadowcoin-16.png - src/qt/res/icons/shadowcoin-16.png - src/qt/res/icons/export.png - src/qt/res/icons/remove.png - src/qt/res/icons/tx_mined.png - src/qt/res/icons/tx_input.png - src/qt/res/icons/tx_output.png - src/qt/res/icons/tx_inout.png - src/qt/res/icons/key.png - src/qt/res/icons/debugwindow.png - src/qt/res/icons/qrcode.png - src/qt/res/icons/history.png - - - src/qt/res/images/about.png - src/qt/res/images/splash.png - - - src/qt/locale/umbra_af_ZA.qm - src/qt/locale/umbra_ar.qm - src/qt/locale/umbra_be_BY.qm - src/qt/locale/umbra_bg.qm - src/qt/locale/umbra_bs.qm - src/qt/locale/umbra_ca_ES.qm - src/qt/locale/umbra_ca.qm - src/qt/locale/umbra_ca@valencia.qm - src/qt/locale/umbra_cs.qm - src/qt/locale/umbra_cy.qm - src/qt/locale/umbra_da.qm - src/qt/locale/umbra_de.qm - src/qt/locale/umbra_el_GR.qm - src/qt/locale/umbra_el.qm - src/qt/locale/umbra_en.qm - src/qt/locale/umbra_eo.qm - src/qt/locale/umbra_es_CL.qm - src/qt/locale/umbra_es_DO.qm - src/qt/locale/umbra_es_MX.qm - src/qt/locale/umbra_es.qm - src/qt/locale/umbra_es_UY.qm - src/qt/locale/umbra_et.qm - src/qt/locale/umbra_eu_ES.qm - src/qt/locale/umbra_fa_IR.qm - src/qt/locale/umbra_fa.qm - src/qt/locale/umbra_fi.qm - src/qt/locale/umbra_fr_CA.qm - src/qt/locale/umbra_fr.qm - src/qt/locale/umbra_gl.qm - src/qt/locale/umbra_he.qm - src/qt/locale/umbra_hi_IN.qm - src/qt/locale/umbra_hr.qm - src/qt/locale/umbra_hu.qm - src/qt/locale/umbra_id_ID.qm - src/qt/locale/umbra_it.qm - src/qt/locale/umbra_ja.qm - src/qt/locale/umbra_ka.qm - src/qt/locale/umbra_kk_KZ.qm - src/qt/locale/umbra_ko_KR.qm - src/qt/locale/umbra_ky.qm - src/qt/locale/umbra_la.qm - src/qt/locale/umbra_lt.qm - src/qt/locale/umbra_lv_LV.qm - src/qt/locale/umbra_ms_MY.qm - src/qt/locale/umbra_nb.qm - src/qt/locale/umbra_nl.qm - src/qt/locale/umbra_pam.qm - src/qt/locale/umbra_pl.qm - src/qt/locale/umbra_pt_BR.qm - src/qt/locale/umbra_pt_PT.qm - src/qt/locale/umbra_ro_RO.qm - src/qt/locale/umbra_ru.qm - src/qt/locale/umbra_sah.qm - src/qt/locale/umbra_sk.qm - src/qt/locale/umbra_sl_SI.qm - src/qt/locale/umbra_sq.qm - src/qt/locale/umbra_sr.qm - src/qt/locale/umbra_sv.qm - src/qt/locale/umbra_th_TH.qm - src/qt/locale/umbra_tr.qm - src/qt/locale/umbra_uk.qm - src/qt/locale/umbra_ur_PK.qm - src/qt/locale/umbra_vi.qm - src/qt/locale/umbra_vi_VN.qm - src/qt/locale/umbra_zh_CN.qm - src/qt/locale/umbra_zh_HK.qm - src/qt/locale/umbra_zh_TW.qm - - diff --git a/share/genbuild.sh b/share/genbuild.sh deleted file mode 100755 index d959877dc8..0000000000 --- a/share/genbuild.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -if [ $# -gt 0 ]; then - FILE="$1" - shift - if [ -f "$FILE" ]; then - INFO="$(head -n 1 "$FILE")" - fi -else - echo "Usage: $0 " - exit 1 -fi - -if [ -e "$(which git)" ]; then - # clean 'dirty' status of touched files that haven't been modified - git diff >/dev/null 2>/dev/null - - # get a string like "v0.6.0-66-g59887e8-dirty" - DESC="$(git describe --dirty 2>/dev/null)" - - # get a string like "2012-04-10 16:27:19 +0200" - TIME="$(git log -n 1 --format="%ci")" -fi - -if [ -n "$DESC" ]; then - NEWINFO="#define BUILD_DESC \"$DESC\"" -else - NEWINFO="// No build information available" -fi - -# only update build.h if necessary -if [ "$INFO" != "$NEWINFO" ]; then - echo "$NEWINFO" >"$FILE" - echo "#define BUILD_DATE \"$TIME\"" >>"$FILE" -fi diff --git a/share/pixmaps/addressbook16.bmp b/share/pixmaps/addressbook16.bmp deleted file mode 100644 index c5576910b1..0000000000 Binary files a/share/pixmaps/addressbook16.bmp and /dev/null differ diff --git a/share/pixmaps/addressbook16mask.bmp b/share/pixmaps/addressbook16mask.bmp deleted file mode 100644 index d3a478d1ad..0000000000 Binary files a/share/pixmaps/addressbook16mask.bmp and /dev/null differ diff --git a/share/pixmaps/addressbook20.bmp b/share/pixmaps/addressbook20.bmp deleted file mode 100644 index 2b33b228aa..0000000000 Binary files a/share/pixmaps/addressbook20.bmp and /dev/null differ diff --git a/share/pixmaps/addressbook20mask.bmp b/share/pixmaps/addressbook20mask.bmp deleted file mode 100644 index 56ce6125db..0000000000 Binary files a/share/pixmaps/addressbook20mask.bmp and /dev/null differ diff --git a/share/pixmaps/bitcoin-bc.ico b/share/pixmaps/bitcoin-bc.ico deleted file mode 100644 index 88cc240e2d..0000000000 Binary files a/share/pixmaps/bitcoin-bc.ico and /dev/null differ diff --git a/share/pixmaps/bitcoin.ico b/share/pixmaps/bitcoin.ico deleted file mode 100644 index 61926807cc..0000000000 Binary files a/share/pixmaps/bitcoin.ico and /dev/null differ diff --git a/share/pixmaps/bitcoin32.xpm b/share/pixmaps/bitcoin32.xpm deleted file mode 100644 index f538a44d2d..0000000000 --- a/share/pixmaps/bitcoin32.xpm +++ /dev/null @@ -1,232 +0,0 @@ -/* XPM */ -static const char * bitcoin32_xpm[] = { -/* columns rows colors chars-per-pixel */ -"32 32 194 2", -" c #745305", -". c #785704", -"X c #7C5903", -"o c #75560B", -"O c #77590F", -"+ c #7C5C0B", -"@ c #795B12", -"# c #7F631D", -"$ c #825E07", -"% c #825F0B", -"& c #85610A", -"* c #8C660C", -"= c #8E680E", -"- c #916B0F", -"; c #856515", -": c #8B6714", -"> c #8F6A16", -", c #816218", -"< c #88691C", -"1 c #926D12", -"2 c #936F1C", -"3 c #997417", -"4 c #94721E", -"5 c #9B761C", -"6 c #9F781C", -"7 c #A17B1E", -"8 c #826622", -"9 c #916E20", -"0 c #967425", -"q c #9D7420", -"w c #9C7923", -"e c #997728", -"r c #99792C", -"t c #A37D23", -"y c #A37F2C", -"u c #A68125", -"i c #AB8225", -"p c #A5832B", -"a c #AA852C", -"s c #B28A2C", -"d c #A58233", -"f c #AC8734", -"g c #AE8C33", -"h c #AC8C3C", -"j c #B28C33", -"k c #B98E34", -"l c #B28D3D", -"z c #B59136", -"x c #BC9335", -"c c #B3913E", -"v c #BC933A", -"b c #BF9A3D", -"n c #C19235", -"m c #C2953C", -"M c #C39B3C", -"N c #CA9C3D", -"B c #B59343", -"V c #BE9642", -"C c #B69A44", -"Z c #BD9A45", -"A c #B49649", -"S c #BB9A49", -"D c #BB9F52", -"F c #BFA256", -"G c #C49C43", -"H c #CA9D41", -"J c #C59D4A", -"K c #C99E4D", -"L c #C3A144", -"P c #CDA244", -"I c #CFAA47", -"U c #C3A14D", -"Y c #CDA24A", -"T c #CCAB49", -"R c #D2A644", -"E c #D2A54B", -"W c #D6AA4C", -"Q c #DAAE4E", -"! c #DAB04F", -"~ c #C7A656", -"^ c #CDA452", -"/ c #CFAC52", -"( c #C0A65E", -") c #CEA75A", -"_ c #CCAC59", -"` c #D2AB53", -"' c #DCAF52", -"] c #D6AD5A", -"[ c #D9AE5B", -"{ c #DCB556", -"} c #DFB855", -"| c #D6B25F", -" . c #DCB35C", -".. c #DEBE5E", -"X. c #E2B656", -"o. c #E1B55A", -"O. c #E6BC5D", -"+. c #E9BD5E", -"@. c #C3AA63", -"#. c #CCAD62", -"$. c #D4AF62", -"%. c #CDB565", -"&. c #CEB46D", -"*. c #D7B164", -"=. c #DBB362", -"-. c #D6BD64", -";. c #DDBA64", -":. c #D3B66C", -">. c #DFB86B", -",. c #CEB772", -"<. c #D0B771", -"1. c #D4BA73", -"2. c #D9BE77", -"3. c #D6BE79", -"4. c #D8BF7A", -"5. c #E4BB62", -"6. c #E9BF64", -"7. c #E4BC69", -"8. c #E9BF69", -"9. c #E0BB71", -"0. c #E9C05E", -"q. c #D2C279", -"w. c #DBC27C", -"e. c #E2C667", -"r. c #EDC364", -"t. c #E3C16E", -"y. c #ECC46C", -"u. c #EDCC6C", -"i. c #F1C764", -"p. c #F5CA66", -"a. c #F9CD67", -"s. c #F5CC6A", -"d. c #F9CD6B", -"f. c #FBD36F", -"g. c #EDC572", -"h. c #E5CF77", -"j. c #ECCA74", -"k. c #E0C67E", -"l. c #EFCE78", -"z. c #F6CE72", -"x. c #FBCF71", -"c. c #F4CE79", -"v. c #F4D273", -"b. c #FCD473", -"n. c #F4DC75", -"m. c #FEDA74", -"M. c #F6D77C", -"N. c #FBD47A", -"B. c #F1DA7B", -"V. c #FDDA7C", -"C. c #FEE27D", -"Z. c #DDC683", -"A. c #DFC884", -"S. c #E4CA84", -"D. c #E3CC89", -"F. c #E7D183", -"G. c #EFD280", -"H. c #EFDC82", -"J. c #ECD48D", -"K. c #EFDA8C", -"L. c #F9D783", -"P. c #F2DF83", -"I. c #FCDB83", -"U. c #F5DC8F", -"Y. c #FADD8B", -"T. c #EBD593", -"R. c #EFDA99", -"E. c #F3DD93", -"W. c #F3DF9F", -"Q. c #FFE385", -"!. c #FEE986", -"~. c #FDE48C", -"^. c #FEEC8E", -"/. c #ECE199", -"(. c #F6E591", -"). c #FEE494", -"_. c #FEEB93", -"`. c #FEE69A", -"'. c #FFEB9B", -"]. c #FFF197", -"[. c #FFF39B", -"{. c #FEF99B", -"}. c #F6E2A2", -"|. c #F9E5A5", -" X c #F7E9A5", -".X c #FEECA4", -"XX c #FBE7A8", -"oX c #FDEAAB", -"OX c #F7F2AA", -"+X c #FEF2AC", -"@X c #FDF4B4", -"#X c #FFFABA", -"$X c #FFFEC2", -"%X c None", -/* pixels */ -"%X%X%X%X%X%X%X%X%X%X%X%Xp t 6 5 w t w %X%X%X%X%X%X%X%X%X%X%X%X%X", -"%X%X%X%X%X%X%X%X%Xu u x I X.0.s.u.0.W x 7 4 %X%X%X%X%X%X%X%X%X%X", -"%X%X%X%X%X%X%Xy i I i.a.f.m.m.b.f.s.a.s.i.W 7 > %X%X%X%X%X%X%X%X", -"%X%X%X%X%X%Xt M 0.a.m.m.m.m.f.d.p.p.p.f.d.f.i.b 1 < %X%X%X%X%X%X", -"%X%X%X%X%X7 ! d.f.f.m.f.+.W P R I Q 5.v.V.V.z.f.{ 5 + %X%X%X%X%X", -"%X%X%X%Xu X.f.m.m.f.' H s ~ V y _ Z J o.g.L.L.Q.!.e.5 X %X%X%X%X", -"%X%X%Xu X.b.C.m.+.N m n t }.3.> }.w.V 5.y.y.Y.[.^.^.-.1 + %X%X%X", -"%X%Xt P m.N.m.X.v v v k 6 }.1.: /.4.c 7.N.N.v.!.{.{.^.L & %X%X%X", -"%X%Xg Y.Y.V.+.m k a t t : }.1.% }.1.r | l.B.M.b.!.{.^.n.7 X %X%X", -"%Xp -._.'.Y.' Y n D.}.}.|.oXXX|.oX XT.w.F _ j.v.v._.^.C.T & @ %X", -"%Xa (.'.'.9.[ [ K S.}.oXoXoXoXXXoXoXoXoX XD / s.d.v.!.C.v.3 o %X", -"%XU '.'.Y.[ [ [ [ J f <.oXoX( 2 f S J.oXoXT.j r.s.i.C.C.C.z X %X", -"p e.'.'.F. .=.=.=.=.) 1.oXoX@.f . .F oXoX}.a +.i.i.b.C.m.I X O ", -"u w.'.[.j.5.8.7.7.7.] 2.oXoX@.y W c &.oXoXZ.k r.s.i.s.V.m.} = o ", -"u H.[.{.y.8.y.g.8.g.7.2.oXoXA.@.&.D.oXoXT.e G +.O.O.5.V.m.0.- o ", -"u !.].[.r.8.y.g.g.g.7.4.oXoXoXoXoXoXoXoXoX<.y W X.o.o.m.m.0.- o ", -"u B._._.5.5.8.y.g.c.g.w.oXoX,.h A F <..XoXoX1.k ' ' ' V.N.r.- ", -"u u.Q.~.r.6.z.N.V.I.v.k.oXoX@.B | _ c 1.oXoX}.a ' ' O.I.b.O.= o ", -"u ..Q.Q.v.i.s.c.N.L.l.Z.oXoX@.B t.=.S &.oXoXXXy Y R +.N.b.Q % o ", -"t T C.I.I.6.u.z.z.5.S 1.oXoX@.e B h D |.oXoXS.f Y Y 6.d.d.n X O ", -"%Xs m.V.Q.r.r.z.5.<.}.oXoXoXXXW.}.oXoXoXoXW.h G H R a.p.s.7 %X", -"%X7 O.V.V.v.+.r.` 4.oXoXoXoXoXoXoXoXXXR.<.h v N N o.a.p.Q = %X", -"%Xw x v.v.v.r.+. .Z l d e }.Z.r }.3.d l V G n n R a.s.a.s X O %X", -"%X%X6 { v.l.v.+.O.5.=.^ d }.4.9 }.1.f J G m m G d.d.x.Q = %X%X", -"%X%X%Xs u.v.v.v.r.6.o. .l }.4.9 W.4.l ^ ^ J ) c.N.N.y.7 X O %X%X", -"%X%X%X5 z v.v.M.I.g.;. .J 1.#.B 1.#.) 7.$.S..X'.W.Y.j $ %X%X%X", -"%X%X%X%X5 b N.Y.~.).Y.j.5.$.=.=.$.*.2.J.@X$X#X#XoXC $ %X%X%X%X", -"%X%X%X%X%X3 z U.@X+X`.`.`.(.E.E.E.|.@X@X#X#X#X/.j % %X%X%X%X%X", -"%X%X%X%X%X%Xw a q.OX|.).`._.'.'.XX.X.X+X+X X%.w X o %X%X%X%X%X%X", -"%X%X%X%X%X%X%X%Xw a _ j.~.~.).).`.`.`.F._ t & . # %X%X%X%X%X%X%X", -"%X%X%X%X%X%X%X%X%X%X4 3 t z L U Z z t 1 $ . 8 %X%X%X%X%X%X%X%X%X", -"%X%X%X%X%X%X%X%X%X%X%X%X%X< ; & + + , 8 %X%X%X%X%X%X%X%X%X%X%X%X" -}; diff --git a/share/pixmaps/bitcoin80.xpm b/share/pixmaps/bitcoin80.xpm deleted file mode 100644 index c3c816e92d..0000000000 --- a/share/pixmaps/bitcoin80.xpm +++ /dev/null @@ -1,292 +0,0 @@ -/* XPM */ -static const char * bitcoin80_xpm[] = { -/* columns rows colors chars-per-pixel */ -"80 80 206 2", -" c #725203", -". c #785706", -"X c #7B5907", -"o c #7C5A09", -"O c #7F5F10", -"+ c #815E0B", -"@ c #85620C", -"# c #89650F", -"$ c #856313", -"% c #896614", -"& c #8D6913", -"* c #886718", -"= c #8D6B1B", -"- c #926D14", -"; c #926E1B", -": c #967116", -"> c #997317", -", c #95711E", -"< c #9B7419", -"1 c #9F781B", -"2 c #A27B1D", -"3 c #8F6F22", -"4 c #926F21", -"5 c #947323", -"6 c #9A7623", -"7 c #9D7925", -"8 c #957628", -"9 c #9A7729", -"0 c #9D7B2B", -"q c #9D7F33", -"w c #A47D23", -"e c #A97F27", -"r c #A37E2B", -"t c #9F8030", -"y c #A78021", -"u c #AC8425", -"i c #A5802D", -"p c #AC842B", -"a c #AF8829", -"s c #B2872C", -"d c #B28B2D", -"f c #A68333", -"g c #AA8633", -"h c #AD8A36", -"j c #A4863A", -"k c #A88638", -"l c #A7893B", -"z c #AC8B3B", -"x c #B28732", -"c c #B48C32", -"v c #B98E34", -"b c #B28D3B", -"n c #B88F3C", -"m c #B69033", -"M c #BD9235", -"N c #B4913D", -"B c #BC943A", -"V c #BE993C", -"C c #C19336", -"Z c #C1953B", -"A c #C49A3C", -"S c #C99C3D", -"D c #CDA13F", -"F c #D0A33F", -"G c #A88B40", -"H c #B08F40", -"J c #AE9142", -"K c #AE944C", -"L c #B49443", -"P c #BB9542", -"I c #B49946", -"U c #BD9846", -"Y c #B3964C", -"T c #BB974A", -"R c #B6994A", -"E c #BF9C4A", -"W c #B69B53", -"Q c #B99D53", -"! c #BCA055", -"~ c #BDA25A", -"^ c #C49742", -"/ c #C49C43", -"( c #CB9E42", -") c #C49D4B", -"_ c #C99E4C", -"` c #C29F52", -"' c #C5A244", -"] c #CDA245", -"[ c #C5A34C", -"{ c #CCA34B", -"} c #CCA94D", -"| c #D2A445", -" . c #D1A54B", -".. c #D5AA4E", -"X. c #DBAF4F", -"o. c #C6A352", -"O. c #CBA554", -"+. c #C5AA57", -"@. c #CEAC54", -"#. c #C4A65A", -"$. c #CDA458", -"%. c #C2A85F", -"&. c #CEAA5B", -"*. c #D0A550", -"=. c #D4AB53", -"-. c #DBAE53", -";. c #D0A75B", -":. c #D4AC5A", -">. c #D9AE5C", -",. c #CEB25E", -"<. c #D4B156", -"1. c #DDB156", -"2. c #D4B25C", -"3. c #DCB35D", -"4. c #D7B85C", -"5. c #DCBA5E", -"6. c #E2B355", -"7. c #E2B65B", -"8. c #E4BA5D", -"9. c #EABD5E", -"0. c #C5AA62", -"q. c #CCAE63", -"w. c #C6AE69", -"e. c #D5AF62", -"r. c #CEB167", -"t. c #CCB36C", -"y. c #D5B162", -"u. c #DCB462", -"i. c #D7B964", -"p. c #DCBC64", -"a. c #D2B66B", -"s. c #DCB669", -"d. c #D7BE69", -"f. c #DFB86A", -"g. c #D0B771", -"h. c #D2BA74", -"j. c #D5BE78", -"k. c #E1B766", -"l. c #E4BB63", -"z. c #E9BE63", -"x. c #E3BB6A", -"c. c #E9BF6A", -"v. c #E1BE72", -"b. c #DDC16B", -"n. c #DAC27E", -"m. c #E4C164", -"M. c #ECC264", -"N. c #E4C36B", -"B. c #EBC36C", -"V. c #E7C96F", -"C. c #EECA6E", -"Z. c #F1C564", -"A. c #F1C76A", -"S. c #F5CB6C", -"D. c #FACE6D", -"F. c #F4D06F", -"G. c #FCD06E", -"H. c #E5C371", -"J. c #EDC573", -"K. c #E4CA73", -"L. c #ECCC74", -"P. c #E7CF7A", -"I. c #EBCD7A", -"U. c #F3CD73", -"Y. c #F8CE71", -"T. c #F3CD7A", -"R. c #EDD076", -"E. c #EDD17B", -"W. c #F4D274", -"Q. c #FBD274", -"!. c #FED977", -"~. c #F3D47B", -"^. c #FDD47A", -"/. c #F5DA7C", -"(. c #FDDA7C", -"). c #FFE07F", -"_. c #DBC481", -"`. c #DFC885", -"'. c #E1CA86", -"]. c #EACC80", -"[. c #E4CD8A", -"{. c #EED383", -"}. c #E7D18F", -"|. c #EAD38C", -" X c #F4D680", -".X c #FDD780", -"XX c #F5DA83", -"oX c #FCDC84", -"OX c #F5DB8A", -"+X c #FADE89", -"@X c #EAD492", -"#X c #EED896", -"$X c #EFDA9A", -"%X c #F1DD9D", -"&X c #FDE283", -"*X c #F6E18D", -"=X c #FEE48D", -"-X c #FFE692", -";X c #FFE894", -":X c #FBE799", -">X c #FFEA98", -",X c #F6E2A3", -".J..X.X.X.X(.W.Z.C.&X;X;X;X;X-X-X-X<.u u < 3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3Xu u c oX=X=X=X=X=X=X=Xl.Z C M M C C v v v s w = '.2X2X2X5 $ = 2X2X2X}.5 g ) u./.+X+X=X=X=X&XW.Z.F.=X;X;X;X;X-X-X*XV u y @ X 3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3Xu u u N.-X-X-X-X=X=X=XB.Z M C v v s e e e e w > % `.2X2X2X= + % 2X2X2X}.= r L 4.E.OX+X-X=X=X&X).W.M.R.;X;X;X-X-X-X;XR.u u y 3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3Xu u U -X-X-X-X-X-X=XW.^ C C C x e e r 6 5 4 ; = $ `.2X2X2X= O = 2X2X2X}.O = t Q ,.b.P./.*X=X&X&X).F.M.W.;X;X;X;X&X-X&X} u u O 3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3Xu u u R.-X-X-X-X-X-X=X=.{ ^ Z C x n 2X2X.>.>.=.=._ n b 2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X:XI N +.V./.).).F.F.9.W.;X=X;X-X-X-XR.u u > 3X3X3X3X3X3X3X3X", -"3X3X3X3X3Xu u d =X;X-X-X-X-X-Xx.>.>.>.>.>...^ P 2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X,Xl N 4.R.!.!.!.G.Z.M.&X;X=X=X-X-X-XB a u 3X3X3X3X3X3X3X", -"3X3X3X3X3Xu u @.;X;X-X;X;X;XXX>.:.>.>.>.>.>._ P ` Y Y W _.2X2X2X2X2X2X@XW W ~ 0.t.'..>.>.>.>.>.>.=._ P z r 4 8 2X2X2X2X2X2X_.. $ , 6 1 3 t ~ 1X2X2X2X2X2X2X2Xt B 5.G.!.!.G.G.M.9.&X;X=X-X-X=X/.u u > 3X3X3X3X3X3X3X", -"3X3X3X3Xu u d =X;X;X=X;X;X=X3.>.>.>.e.>.3.3.>.:.*._ P r 9 2X2X2X2X2X1Xn.@ , c B N m h 8 ~ 2X2X2X2X2X2X2XI h <.F.!.G.G.F.M.9.W.;X=X-X-X=X=Xm u y . 3X3X3X3X3X3X", -"3X3X3X3Xu u ' -X-X>X-X-X-X X>.>.>.>.>.>.>.u.u.u.u.3.$.P f 2X2X2X2X2X2X_.$ i / -.<.8.} h 8 1X2X2X2X2X2X2X! i <.S.G.G.G.G.Z.9.Z.=X-X=X-X&X-X} u u X 3X3X3X3X3X3X", -"3X3X3X3Xu u 4.-X-X-X-X-X-XJ.3.>.>.k.k.k.k.k.u.k.u.u.:.U k 2X2X2X2X2X1X_.% f } 8.Z.F.8.U 8 ,X2X2X2X2X2X2XI g } Z.D.G.D.G.D.Z.9.&X-X=X=X=X-Xm.u u @ 3X3X3X3X3X3X", -"3X3X3X3Xu u K.;X-X;X-X>X-Xk.3.k.k.k.k.k.k.k.k.k.k.u.e.U k 2X2X2X2X2X2X_.% f [ 8.F.M.<.b i 2X2X2X2X2X2X2Xt a X.Z.D.D.D.G.G.Z.9./.=X-X=X=X=XR.u u & 3X3X3X3X3X3X", -"3X3X3X3Xu u E.;X-X;X-X-X=Xl.l.x.c.k.x.k.k.x.x.v.x.x.u.) z 2X2X2X2X2X2X_.$ 7 L <.<.} N 6 h.2X2X2X2X2X2X_.: V 1.S.D.D.G.D.S.M.6.W.-X=X-X=X=X&Xu u > X 3X3X3X3X3X", -"3X3X3Xu a u =X;X;X;X;X;XoX7.z.c.c.c.c.c.c.c.c.c.x.k.u.) z 2X2X2X2X2X2Xn.o = i N h i l n.2X2X2X2X2X2X.o.L r [.2X2X2X9 = 8 2X2X2X}.4 r ^ _ *.*._ ) ) ^ ^ ^ O.oX=X-X-X-X-X-X-X<.u u : . 3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3Xy u u i.=X=X=X=X=X-X*X=XW.9.M.A.B.3.5.5.;.U f [.2X2X2Xq 4 8 2X2X2X}.r q _ _ ;.;.*._ _ ` _ e.+X-X-X-X-X-X-X-XR.a u 2 3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3Xu u u K.=X=X=X-X=X=X=X=XXXz.M.8.5.8.u.:.) h }.2X2X2Xj r f 2X2X2X@Xq T _ e.e.u.e.;.$.$.b.-X-X-X=X;X=X;X-X&Xa a u + 3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3Xu u d ~.=X=X=X=X=X-X=X-X+XC.3.5.7.7.2.@.) q.r.q.q.H H L g.r.w.q.T ` e.k.v.k.k.s.s.{.-X-X;X-X;X;X;X;X*XV u u & . 3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X2 u u c XX-X=X=X=X=X-X=X-X-X Xl.7.7.u.2.$.o.[ [ o.O.$.&.&.` ` ` q.s.k.v.k.k.x.{.%X>X>X>X;X>X;X>X>X*XV u u > 3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X2 u u m ~.=X-X-X-X=X-X-X-X-X-X Xc.7.5.u.3.e.y.u.s.f.k.s.e.e.s.s.k.k.k.v. X:X>X>X>X>X>X>X;X>X>X*XV u u < 3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X2 u u d R.-X=X-X=X-X-X-X-X-X-X-X+XI.v.u.s.l.k.k.x.x.x.s.s.s.s.j.].+X>X>X>X>X>X:X>X>X>X>X>XOXV u u 1 3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X2 u u a p.-X-X-X;X;X;X-X-X-X:X-X-X-X-XOX XL.J.J.J.L.I.].OX:X>X-X>X>X-X>X>X>X>X>X>X>X>XK.a a u < 3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X2 u u u @.=X;X;X>X;X-X-X>X-X-X-X-X;X-X-X-X-X-X>X>X-X>X-X>X>X>X>X;X>X>X>X-X>X-X-X:X<.u u u > 3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X1 u u u m n.>X;X>X>X-X-X-X-X>X-X-X-X;X;X;X-X-X-X-X-X>X-X-X>X-X>X>X-X>X>X>X>XK.B u u u & 3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3Xw u u u / {.>X>X-X-X-X-X-X-X-X-X-X-X;X-X-X;X:X-X-X>X-X:X>X;X;X>X;X;X{.[ u u u w + 3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X2 u u u u ) K.-X-X-X-X:X-X-X-X-X-X-X-X-X-X-X-X-X>X-X-X-X-X-X-XE.[ u u u u - . 3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X1 u u u u m 2.E.-X+X:X-X-X-X-X-X-X-X-X-X:X-X-X-X;X-XOXi.B u u u u 1 o 3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X> u u u u u v [ l.I.OX-X-X-X-X-X-X-X-X+XI.f.@.m u u u u u 1 + o 3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X& 2 u u u u u u u d B V V V V B d u u u u u u u y - . o 3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X+ - 1 u u u u u u u a u u u u u u u u 2 - o o 3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3Xo . X # - > 1 2 2 2 1 2 > - # o . o 3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3Xo o . o 3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", -"3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X" -}; diff --git a/share/pixmaps/check.ico b/share/pixmaps/check.ico deleted file mode 100644 index 0c4e6e8147..0000000000 Binary files a/share/pixmaps/check.ico and /dev/null differ diff --git a/share/pixmaps/favicon.ico b/share/pixmaps/favicon.ico deleted file mode 100644 index d249e41feb..0000000000 Binary files a/share/pixmaps/favicon.ico and /dev/null differ diff --git a/share/pixmaps/nsis-header.bmp b/share/pixmaps/nsis-header.bmp deleted file mode 100644 index 5eb10ae773..0000000000 Binary files a/share/pixmaps/nsis-header.bmp and /dev/null differ diff --git a/share/pixmaps/nsis-wizard.bmp b/share/pixmaps/nsis-wizard.bmp deleted file mode 100644 index 330de6bc91..0000000000 Binary files a/share/pixmaps/nsis-wizard.bmp and /dev/null differ diff --git a/share/pixmaps/send16.bmp b/share/pixmaps/send16.bmp deleted file mode 100644 index 676b5c4b49..0000000000 Binary files a/share/pixmaps/send16.bmp and /dev/null differ diff --git a/share/pixmaps/send16mask.bmp b/share/pixmaps/send16mask.bmp deleted file mode 100644 index 06c747f934..0000000000 Binary files a/share/pixmaps/send16mask.bmp and /dev/null differ diff --git a/share/pixmaps/send16masknoshadow.bmp b/share/pixmaps/send16masknoshadow.bmp deleted file mode 100644 index faf24e0d8a..0000000000 Binary files a/share/pixmaps/send16masknoshadow.bmp and /dev/null differ diff --git a/share/pixmaps/send20.bmp b/share/pixmaps/send20.bmp deleted file mode 100644 index 2b90422b38..0000000000 Binary files a/share/pixmaps/send20.bmp and /dev/null differ diff --git a/share/pixmaps/send20mask.bmp b/share/pixmaps/send20mask.bmp deleted file mode 100644 index f124d0da08..0000000000 Binary files a/share/pixmaps/send20mask.bmp and /dev/null differ diff --git a/share/qt/extract_strings_qt.py b/share/qt/extract_strings_qt.py deleted file mode 100755 index 771f28ab0a..0000000000 --- a/share/qt/extract_strings_qt.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/python -''' -Extract _("...") strings for translation and convert to Qt4 stringdefs so that -they can be picked up by Qt linguist. -''' -from subprocess import Popen, PIPE -import glob - -OUT_CPP="src/qt/bitcoinstrings.cpp" -EMPTY=['""'] - -def parse_po(text): - """ - Parse 'po' format produced by xgettext. - Return a list of (msgid,msgstr) tuples. - """ - messages = [] - msgid = [] - msgstr = [] - in_msgid = False - in_msgstr = False - - for line in text.split('\n'): - line = line.rstrip('\r') - if line.startswith('msgid '): - if in_msgstr: - messages.append((msgid, msgstr)) - in_msgstr = False - # message start - in_msgid = True - - msgid = [line[6:]] - elif line.startswith('msgstr '): - in_msgid = False - in_msgstr = True - msgstr = [line[7:]] - elif line.startswith('"'): - if in_msgid: - msgid.append(line) - if in_msgstr: - msgstr.append(line) - - if in_msgstr: - messages.append((msgid, msgstr)) - - return messages - -files = glob.glob('src/*.cpp') + glob.glob('src/*.h') - -# xgettext -n --keyword=_ $FILES -child = Popen(['xgettext','--output=-','-n','--keyword=_'] + files, stdout=PIPE) -(out, err) = child.communicate() - -messages = parse_po(out) - -f = open(OUT_CPP, 'w') -f.write("""#include -// Automatically generated by extract_strings.py -#ifdef __GNUC__ -#define UNUSED __attribute__((unused)) -#else -#define UNUSED -#endif -""") -f.write('static const char UNUSED *bitcoin_strings[] = {') -for (msgid, msgstr) in messages: - if msgid != EMPTY: - f.write('QT_TRANSLATE_NOOP("bitcoin-core", %s),\n' % ('\n'.join(msgid))) -f.write('};') -f.close() diff --git a/share/qt/img/reload.xcf b/share/qt/img/reload.xcf deleted file mode 100644 index dc8be62831..0000000000 Binary files a/share/qt/img/reload.xcf and /dev/null differ diff --git a/share/qt/make_spinner.py b/share/qt/make_spinner.py deleted file mode 100755 index 136aff3cb7..0000000000 --- a/share/qt/make_spinner.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python -# W.J. van der Laan, 2011 -# Make spinning .mng animation from a .png -# Requires imagemagick 6.7+ -from __future__ import division -from os import path -from PIL import Image -from subprocess import Popen - -SRC='img/reload_scaled.png' -DST='../../src/qt/res/movies/update_spinner.mng' -TMPDIR='/tmp' -TMPNAME='tmp-%03i.png' -NUMFRAMES=35 -FRAMERATE=10.0 -CONVERT='convert' -CLOCKWISE=True -DSIZE=(16,16) - -im_src = Image.open(SRC) - -if CLOCKWISE: - im_src = im_src.transpose(Image.FLIP_LEFT_RIGHT) - -def frame_to_filename(frame): - return path.join(TMPDIR, TMPNAME % frame) - -frame_files = [] -for frame in xrange(NUMFRAMES): - rotation = (frame + 0.5) / NUMFRAMES * 360.0 - if CLOCKWISE: - rotation = -rotation - im_new = im_src.rotate(rotation, Image.BICUBIC) - im_new.thumbnail(DSIZE, Image.ANTIALIAS) - outfile = frame_to_filename(frame) - im_new.save(outfile, 'png') - frame_files.append(outfile) - -p = Popen([CONVERT, "-delay", str(FRAMERATE), "-dispose", "2"] + frame_files + [DST]) -p.communicate() - - - diff --git a/share/qt/make_windows_icon.sh b/share/qt/make_windows_icon.sh deleted file mode 100755 index f775a30580..0000000000 --- a/share/qt/make_windows_icon.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -# create multiresolution windows icon -ICON_DST=../../src/qt/res/icons/novacoin.ico - -convert ../../src/qt/res/icons/novacoin-16.png ../../src/qt/res/icons/novacoin-32.png ../../src/qt/res/icons/novacoin-48.png ${ICON_DST} diff --git a/share/setup.nsi b/share/setup.nsi deleted file mode 100644 index accce9bc1d..0000000000 --- a/share/setup.nsi +++ /dev/null @@ -1,163 +0,0 @@ -Name NovaCoin - -RequestExecutionLevel highest -SetCompressor /SOLID lzma - -# General Symbol Definitions -!define REGKEY "SOFTWARE\$(^Name)" -!define VERSION 0.3.0 -!define COMPANY "NovaCoin project" -!define URL http://www.novacoin.ru/ - -# MUI Symbol Definitions -!define MUI_ICON "../share/pixmaps/novacoin.ico" -!define MUI_WELCOMEFINISHPAGE_BITMAP "../share/pixmaps/nsis-wizard.bmp" -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_RIGHT -!define MUI_HEADERIMAGE_BITMAP "../share/pixmaps/nsis-header.bmp" -!define MUI_FINISHPAGE_NOAUTOCLOSE -!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM -!define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY} -!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup -!define MUI_STARTMENUPAGE_DEFAULTFOLDER NovaCoin -#!define MUI_FINISHPAGE_RUN $INSTDIR\novacoin-qt.exe -!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" -!define MUI_UNWELCOMEFINISHPAGE_BITMAP "../share/pixmaps/nsis-wizard.bmp" -!define MUI_UNFINISHPAGE_NOAUTOCLOSE - -# Included files -!include Sections.nsh -!include MUI2.nsh - -# Variables -Var StartMenuGroup - -# Installer pages -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup -!insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_PAGE_FINISH -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES - -# Installer languages -!insertmacro MUI_LANGUAGE English - -# Installer attributes -OutFile novacoin-0.3.0-win32-setup.exe -InstallDir $PROGRAMFILES\NovaCoin -CRCCheck on -XPStyle on -BrandingText " " -ShowInstDetails show -VIProductVersion 0.3.0.0 -VIAddVersionKey ProductName NovaCoin -VIAddVersionKey ProductVersion "${VERSION}" -VIAddVersionKey CompanyName "${COMPANY}" -VIAddVersionKey CompanyWebsite "${URL}" -VIAddVersionKey FileVersion "${VERSION}" -VIAddVersionKey FileDescription "" -VIAddVersionKey LegalCopyright "" -InstallDirRegKey HKCU "${REGKEY}" Path -ShowUninstDetails show - -# Installer sections -Section -Main SEC0000 - SetOutPath $INSTDIR - SetOverwrite on - #File ../release/novacoin-qt.exe - File /oname=license.txt ../COPYING - File /oname=readme.txt ../doc/README_windows.txt - SetOutPath $INSTDIR\daemon - File ../src/novacoind.exe - SetOutPath $INSTDIR\src - File /r /x *.exe /x *.o ../src\*.* - SetOutPath $INSTDIR - WriteRegStr HKCU "${REGKEY}\Components" Main 1 - - # Remove old wxwidgets-based-bitcoin executable and locales: - #Delete /REBOOTOK $INSTDIR\novacoin.exe - #RMDir /r /REBOOTOK $INSTDIR\locale -SectionEnd - -Section -post SEC0001 - WriteRegStr HKCU "${REGKEY}" Path $INSTDIR - SetOutPath $INSTDIR - WriteUninstaller $INSTDIR\uninstall.exe - !insertmacro MUI_STARTMENU_WRITE_BEGIN Application - CreateDirectory $SMPROGRAMS\$StartMenuGroup - CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall NovaCoin.lnk" $INSTDIR\uninstall.exe - !insertmacro MUI_STARTMENU_WRITE_END - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}" - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}" - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe - WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 - WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 - - # bitcoin: URI handling disabled for 0.6.0 - # WriteRegStr HKCR "bitcoin" "URL Protocol" "" - # WriteRegStr HKCR "bitcoin" "" "URL:Bitcoin" - # WriteRegStr HKCR "bitcoin\DefaultIcon" "" $INSTDIR\bitcoin-qt.exe - # WriteRegStr HKCR "bitcoin\shell\open\command" "" '"$INSTDIR\bitcoin-qt.exe" "$$1"' -SectionEnd - -# Macro for selecting uninstaller sections -!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID - Push $R0 - ReadRegStr $R0 HKCU "${REGKEY}\Components" "${SECTION_NAME}" - StrCmp $R0 1 0 next${UNSECTION_ID} - !insertmacro SelectSection "${UNSECTION_ID}" - GoTo done${UNSECTION_ID} -next${UNSECTION_ID}: - !insertmacro UnselectSection "${UNSECTION_ID}" -done${UNSECTION_ID}: - Pop $R0 -!macroend - -# Uninstaller sections -Section /o -un.Main UNSEC0000 - #Delete /REBOOTOK $INSTDIR\novacoin-qt.exe - Delete /REBOOTOK $INSTDIR\license.txt - Delete /REBOOTOK $INSTDIR\readme.txt - RMDir /r /REBOOTOK $INSTDIR\daemon - RMDir /r /REBOOTOK $INSTDIR\src - DeleteRegValue HKCU "${REGKEY}\Components" Main -SectionEnd - -Section -un.post UNSEC0001 - DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" - Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall NovaCoin.lnk" - #Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Bitcoin.lnk" - #Delete /REBOOTOK "$SMSTARTUP\Bitcoin.lnk" - Delete /REBOOTOK $INSTDIR\uninstall.exe - Delete /REBOOTOK $INSTDIR\debug.log - Delete /REBOOTOK $INSTDIR\db.log - DeleteRegValue HKCU "${REGKEY}" StartMenuGroup - DeleteRegValue HKCU "${REGKEY}" Path - DeleteRegKey /IfEmpty HKCU "${REGKEY}\Components" - DeleteRegKey /IfEmpty HKCU "${REGKEY}" - DeleteRegKey HKCR "novacoin" - RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup - RmDir /REBOOTOK $INSTDIR - Push $R0 - StrCpy $R0 $StartMenuGroup 1 - StrCmp $R0 ">" no_smgroup -no_smgroup: - Pop $R0 -SectionEnd - -# Installer functions -Function .onInit - InitPluginsDir -FunctionEnd - -# Uninstaller functions -Function un.onInit - ReadRegStr $INSTDIR HKCU "${REGKEY}" Path - !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup - !insertmacro SELECT_UNSECTION Main ${UNSEC0000} -FunctionEnd diff --git a/share/ui.rc b/share/ui.rc deleted file mode 100644 index 063641cba2..0000000000 --- a/share/ui.rc +++ /dev/null @@ -1,15 +0,0 @@ -bitcoin ICON "pixmaps/bitcoin.ico" - -#include "wx/msw/wx.rc" - -check ICON "pixmaps/check.ico" -send16 BITMAP "pixmaps/send16.bmp" -send16mask BITMAP "pixmaps/send16mask.bmp" -send16masknoshadow BITMAP "pixmaps/send16masknoshadow.bmp" -send20 BITMAP "pixmaps/send20.bmp" -send20mask BITMAP "pixmaps/send20mask.bmp" -addressbook16 BITMAP "pixmaps/addressbook16.bmp" -addressbook16mask BITMAP "pixmaps/addressbook16mask.bmp" -addressbook20 BITMAP "pixmaps/addressbook20.bmp" -addressbook20mask BITMAP "pixmaps/addressbook20mask.bmp" -favicon ICON "pixmaps/favicon.ico" diff --git a/spectre.qrc b/spectre.qrc new file mode 100644 index 0000000000..e924486235 --- /dev/null +++ b/spectre.qrc @@ -0,0 +1,2026 @@ + + + + + + src/qt/res/assets/css/contextMenu.css + src/qt/res/assets/css/font-awesome-buttons.min.css + src/qt/res/assets/css/font-awesome.min.css + src/qt/res/assets/css/font-montserrat.css + src/qt/res/assets/css/footable.core.css + src/qt/res/assets/css/footable.metro.css + src/qt/res/assets/css/framework-icons.css + src/qt/res/assets/css/framework.min.css + src/qt/res/assets/css/normalize.css + src/qt/res/assets/css/spectre.min.css + src/qt/res/assets/fonts/chinese_s.otf + src/qt/res/assets/fonts/chinese_t.otf + src/qt/res/assets/fonts/FontAwesome/FontAwesome.otf + src/qt/res/assets/fonts/FontAwesome/fontawesome-webfont.eot + src/qt/res/assets/fonts/FontAwesome/fontawesome-webfont.svg + src/qt/res/assets/fonts/FontAwesome/fontawesome-webfont.ttf + src/qt/res/assets/fonts/FontAwesome/fontawesome-webfont.woff + src/qt/res/assets/fonts/Footable/footable.eot + src/qt/res/assets/fonts/Footable/footable.svg + src/qt/res/assets/fonts/Footable/footable.ttf + src/qt/res/assets/fonts/Footable/footable.woff + src/qt/res/assets/fonts/Framework-icon/framework-icon.eot + src/qt/res/assets/fonts/Framework-icon/framework-icon.svg + src/qt/res/assets/fonts/Framework-icon/framework-icon.ttf + src/qt/res/assets/fonts/Framework-icon/framework-icon.woff + src/qt/res/assets/fonts/japanese.otf + src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-300.woff + src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-300.woff2 + src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-500.woff + src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-500.woff2 + src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-700.woff + src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-700.woff2 + src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-regular.woff + src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-regular.woff2 + src/qt/res/assets/icons/chevron.png + src/qt/res/assets/icons/noti-cross-2x.png + src/qt/res/assets/icons/noti-cross.png + src/qt/res/assets/icons/qrcode.png + src/qt/res/assets/icons/top_tray_2x.png + src/qt/res/assets/icons/top_tray.png + src/qt/res/assets/img/progress/progress-bar-complete.svg + src/qt/res/assets/img/progress/progress-bar-danger.svg + src/qt/res/assets/img/progress/progress-bar-info.svg + src/qt/res/assets/img/progress/progress-bar-master.svg + src/qt/res/assets/img/progress/progress-bar-primary.svg + src/qt/res/assets/img/progress/progress-bar-success.svg + src/qt/res/assets/img/progress/progress-bar-warning.svg + src/qt/res/assets/img/progress/progress-circle-complete.svg + src/qt/res/assets/img/progress/progress-circle-danger.svg + src/qt/res/assets/img/progress/progress-circle-info.svg + src/qt/res/assets/img/progress/progress-circle-lg-master-static.svg + src/qt/res/assets/img/progress/progress-circle-lg-master.svg + src/qt/res/assets/img/progress/progress-circle-lg-white-static.svg + src/qt/res/assets/img/progress/progress-circle-lg-white.svg + src/qt/res/assets/img/progress/progress-circle-master.svg + src/qt/res/assets/img/progress/progress-circle-primary.svg + src/qt/res/assets/img/progress/progress-circle-success.svg + src/qt/res/assets/img/progress/progress-circle-warning.svg + src/qt/res/assets/js/navigation.min.js + src/qt/res/assets/js/pages/send.min.js + src/qt/res/assets/js/qrcode.min.js + src/qt/res/assets/js/spectre.min.js + src/qt/res/assets/js/tooltip.min.js + src/qt/res/assets/plugins/bootstrapv3/css/bootstrap.min.css + src/qt/res/assets/plugins/bootstrapv3/css/bootstrap-theme.css + src/qt/res/assets/plugins/bootstrapv3/css/bootstrap-theme.css.map + src/qt/res/assets/plugins/bootstrapv3/fonts/glyphicons-halflings-regular.eot + src/qt/res/assets/plugins/bootstrapv3/fonts/glyphicons-halflings-regular.svg + src/qt/res/assets/plugins/bootstrapv3/fonts/glyphicons-halflings-regular.ttf + src/qt/res/assets/plugins/bootstrapv3/fonts/glyphicons-halflings-regular.woff + src/qt/res/assets/plugins/bootstrapv3/fonts/glyphicons-halflings-regular.woff2 + src/qt/res/assets/plugins/bootstrapv3/js/bootstrap.min.js + src/qt/res/assets/plugins/classie/classie.js + src/qt/res/assets/plugins/contextMenu/contextMenu.css + src/qt/res/assets/plugins/contextMenu/contextMenu.min.js + src/qt/res/assets/plugins/emojione/assets/css/emojione.min.css + src/qt/res/assets/plugins/emojione/assets/svg/0023-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/0023.svg + src/qt/res/assets/plugins/emojione/assets/svg/002a-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/002a.svg + src/qt/res/assets/plugins/emojione/assets/svg/0030-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/0030.svg + src/qt/res/assets/plugins/emojione/assets/svg/0031-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/0031.svg + src/qt/res/assets/plugins/emojione/assets/svg/0032-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/0032.svg + src/qt/res/assets/plugins/emojione/assets/svg/0033-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/0033.svg + src/qt/res/assets/plugins/emojione/assets/svg/0034-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/0034.svg + src/qt/res/assets/plugins/emojione/assets/svg/0035-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/0035.svg + src/qt/res/assets/plugins/emojione/assets/svg/0036-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/0036.svg + src/qt/res/assets/plugins/emojione/assets/svg/0037-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/0037.svg + src/qt/res/assets/plugins/emojione/assets/svg/0038-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/0038.svg + src/qt/res/assets/plugins/emojione/assets/svg/0039-20e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/0039.svg + src/qt/res/assets/plugins/emojione/assets/svg/00a9.svg + src/qt/res/assets/plugins/emojione/assets/svg/00ae.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f004.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f0cf.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f170.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f171.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f17e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f17f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f18e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f191.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f192.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f193.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f194.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f195.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f196.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f197.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f198.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f199.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f19a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6-1f1ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1e7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ef.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7-1f1ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8-1f1ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1ef.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e9-1f1ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ea-1f1fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1ef.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1eb-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1e7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec-1f1fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ed-1f1fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ef-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ef-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ef-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ef-1f1f5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ef.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1f5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0-1f1ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1e7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1-1f1fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2-1f1ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1f5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3-1f1ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f4-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5-1f1fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f6-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f7-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f7-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f7-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f7-1f1fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f7-1f1fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1e7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ef.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8-1f1ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1ef.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9-1f1ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fa-1f1ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fb-1f1fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fc-1f1eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fc-1f1f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fd-1f1f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fe-1f1ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fe-1f1f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ff-1f1e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ff-1f1f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ff-1f1fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f1ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f201.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f202.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f21a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f22f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f232.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f233.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f234.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f235.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f236.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f237.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f238.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f239.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f23a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f250.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f251.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f300.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f301.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f302.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f303.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f304.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f305.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f306.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f307.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f308.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f309.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f30a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f30b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f30c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f30d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f30e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f30f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f310.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f311.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f312.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f313.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f314.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f315.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f316.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f317.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f318.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f319.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f31a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f31b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f31c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f31d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f31e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f31f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f320.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f321.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f324.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f325.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f326.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f327.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f328.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f329.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f32a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f32b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f32c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f32d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f32e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f32f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f330.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f331.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f332.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f333.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f334.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f335.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f336.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f337.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f338.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f339.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f33a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f33b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f33c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f33d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f33e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f33f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f340.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f341.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f342.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f343.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f344.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f345.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f346.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f347.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f348.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f349.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f34a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f34b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f34c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f34d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f34e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f34f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f350.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f351.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f352.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f353.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f354.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f355.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f356.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f357.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f358.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f359.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f35a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f35b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f35c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f35d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f35e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f35f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f360.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f361.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f362.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f363.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f364.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f365.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f366.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f367.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f368.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f369.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f36a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f36b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f36c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f36d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f36e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f36f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f370.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f371.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f372.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f373.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f374.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f375.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f376.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f377.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f378.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f379.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f37a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f37b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f37c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f37d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f37e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f37f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f380.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f381.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f382.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f383.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f384.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f385-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f385-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f385-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f385-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f385-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f385.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f386.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f387.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f388.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f389.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f38a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f38b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f38c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f38d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f38e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f38f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f390.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f391.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f392.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f393.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f396.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f397.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f399.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f39a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f39b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f39e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f39f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3a0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3a1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3a2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3a3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3a4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3a5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3a6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3a7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3a8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3a9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3aa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ab.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ac.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ad.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ae.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3af.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3b0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3b1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3b2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3b3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3b4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3b5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3b6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3b7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3b8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3b9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ba.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3bb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3bc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3bd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3be.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3bf.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c3-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c3-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c3-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c3-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c3-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c4-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c4-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c4-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c4-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c4-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c7-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c7-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c7-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c7-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c7-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3c9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ca-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ca-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ca-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ca-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ca-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ca.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3cb-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3cb-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3cb-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3cb-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3cb-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3cb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3cc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3cd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ce.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3cf.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3d0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3d1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3d2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3d3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3d4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3d5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3d6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3d7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3d8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3d9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3da.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3db.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3dc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3dd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3de.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3df.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3e0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3e1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3e2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3e4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3e5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3e7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ef.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3f3-1f308.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3f5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f400.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f401.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f402.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f403.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f404.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f405.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f406.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f407.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f408.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f409.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f40a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f40b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f40c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f40d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f40e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f40f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f410.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f411.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f412.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f413.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f414.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f415.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f416.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f417.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f418.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f419.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f41a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f41b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f41c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f41d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f41e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f41f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f420.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f421.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f422.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f423.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f424.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f425.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f426.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f427.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f428.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f429.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f42a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f42b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f42c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f42d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f42e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f42f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f430.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f431.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f432.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f433.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f434.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f435.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f436.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f437.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f438.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f439.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f43a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f43b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f43c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f43d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f43e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f43f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f440.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f441-1f5e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f441.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f442-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f442-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f442-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f442-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f442-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f442.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f443-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f443-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f443-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f443-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f443-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f443.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f444.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f445.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f446-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f446-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f446-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f446-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f446-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f446.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f447-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f447-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f447-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f447-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f447-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f447.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f448-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f448-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f448-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f448-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f448-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f448.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f449-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f449-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f449-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f449-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f449-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f449.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44a-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44a-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44a-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44a-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44a-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44b-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44b-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44b-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44b-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44b-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44c-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44c-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44c-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44c-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44c-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44d-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44d-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44d-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44d-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44d-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44e-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44e-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44e-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44e-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44e-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44f-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44f-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44f-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44f-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44f-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f44f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f450-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f450-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f450-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f450-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f450-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f450.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f451.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f452.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f453.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f454.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f455.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f456.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f457.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f458.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f459.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f45a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f45b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f45c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f45d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f45e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f45f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f460.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f461.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f462.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f463.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f464.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f465.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f466-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f466-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f466-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f466-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f466-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f466.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f467-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f467-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f467-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f467-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f467-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f467.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f468-1f466-1f466.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f468-1f466.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f468-1f467-1f466.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f468-1f467-1f467.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f468-1f467.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f469-1f466-1f466.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f469-1f467-1f466.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f469-1f467-1f467.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-1f469-1f467.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-2764-1f468.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468-2764-1f48b-1f468.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f468.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f469-1f466-1f466.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f469-1f466.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f469-1f467-1f466.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f469-1f467-1f467.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-1f469-1f467.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-2764-1f469.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469-2764-1f48b-1f469.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f469.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f46a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f46b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f46c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f46d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f46e-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f46e-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f46e-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f46e-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f46e-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f46e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f46f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f470-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f470-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f470-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f470-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f470-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f470.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f471-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f471-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f471-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f471-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f471-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f471.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f472-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f472-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f472-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f472-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f472-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f472.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f473-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f473-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f473-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f473-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f473-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f473.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f474-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f474-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f474-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f474-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f474-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f474.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f475-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f475-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f475-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f475-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f475-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f475.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f476-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f476-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f476-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f476-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f476-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f476.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f477-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f477-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f477-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f477-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f477-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f477.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f478-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f478-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f478-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f478-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f478-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f478.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f479.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f47a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f47b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f47c-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f47c-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f47c-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f47c-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f47c-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f47c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f47d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f47e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f47f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f480.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f481-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f481-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f481-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f481-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f481-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f481.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f482-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f482-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f482-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f482-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f482-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f482.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f483-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f483-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f483-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f483-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f483-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f483.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f484.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f485-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f485-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f485-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f485-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f485-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f485.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f486-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f486-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f486-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f486-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f486-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f486.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f487-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f487-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f487-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f487-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f487-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f487.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f488.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f489.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f48a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f48b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f48c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f48d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f48e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f48f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f490.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f491.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f492.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f493.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f494.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f495.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f496.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f497.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f498.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f499.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f49a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f49b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f49c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f49d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f49e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f49f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4a0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4a1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4a2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4a3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4a4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4a5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4a6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4a7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4a8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4a9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4aa-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4aa-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4aa-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4aa-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4aa-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4aa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ab.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ac.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ad.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ae.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4af.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4b0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4b1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4b2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4b3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4b4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4b5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4b6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4b7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4b8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4b9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ba.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4bb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4bc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4bd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4be.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4bf.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4c0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4c1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4c2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4c3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4c4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4c5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4c6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4c7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4c8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4c9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ca.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4cb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4cc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4cd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ce.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4cf.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4d0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4d1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4d2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4d3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4d4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4d5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4d6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4d7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4d8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4d9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4da.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4db.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4dc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4dd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4de.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4df.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4e0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4e1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4e2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4e4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4e5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4e6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4e7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ef.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4f5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4f6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f4ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f500.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f501.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f502.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f503.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f504.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f505.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f506.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f507.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f508.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f509.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f50a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f50b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f50c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f50d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f50e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f50f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f510.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f511.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f512.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f513.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f514.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f515.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f516.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f517.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f518.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f519.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f51a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f51b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f51c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f51d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f51e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f51f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f520.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f521.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f522.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f523.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f524.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f525.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f526.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f527.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f528.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f529.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f52a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f52b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f52c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f52d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f52e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f52f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f530.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f531.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f532.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f533.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f534.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f535.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f536.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f537.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f538.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f539.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f53a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f53b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f53c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f53d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f549.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f54a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f54b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f54c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f54d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f54e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f550.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f551.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f552.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f553.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f554.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f555.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f556.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f557.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f558.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f559.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f55a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f55b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f55c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f55d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f55e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f55f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f560.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f561.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f562.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f563.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f564.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f565.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f566.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f567.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f56f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f570.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f573.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f574.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f575-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f575-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f575-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f575-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f575-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f575.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f576.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f577.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f578.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f579.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f57a-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f57a-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f57a-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f57a-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f57a-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f57a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f587.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f58a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f58b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f58c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f58d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f590-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f590-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f590-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f590-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f590-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f590.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f595-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f595-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f595-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f595-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f595-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f595.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f596-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f596-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f596-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f596-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f596-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f596.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5a4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5a5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5a8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5b1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5b2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5bc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5c2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5c3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5c4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5d1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5d2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5d3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5dc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5dd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5de.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5e1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5e8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5ef.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f5ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f600.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f601.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f602.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f603.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f604.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f605.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f606.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f607.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f608.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f609.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f60a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f60b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f60c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f60d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f60e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f60f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f610.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f611.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f612.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f613.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f614.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f615.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f616.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f617.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f618.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f619.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f61a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f61b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f61c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f61d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f61e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f61f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f620.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f621.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f622.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f623.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f624.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f625.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f626.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f627.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f628.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f629.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f62a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f62b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f62c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f62d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f62e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f62f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f630.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f631.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f632.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f633.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f634.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f635.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f636.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f637.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f638.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f639.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f63a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f63b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f63c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f63d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f63e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f63f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f640.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f641.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f642.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f643.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f644.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f645-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f645-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f645-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f645-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f645-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f645.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f646-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f646-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f646-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f646-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f646-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f646.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f647-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f647-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f647-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f647-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f647-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f647.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f648.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f649.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64b-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64b-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64b-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64b-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64b-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64c-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64c-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64c-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64c-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64c-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64d-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64d-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64d-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64d-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64d-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64e-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64e-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64e-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64e-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64e-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64f-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64f-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64f-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64f-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64f-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f64f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f680.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f681.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f682.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f683.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f684.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f685.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f686.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f687.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f688.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f689.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f68a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f68b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f68c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f68d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f68e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f68f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f690.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f691.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f692.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f693.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f694.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f695.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f696.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f697.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f698.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f699.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f69a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f69b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f69c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f69d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f69e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f69f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a3-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a3-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a3-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a3-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a3-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6a9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6aa.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6ab.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6ac.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6ad.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6ae.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6af.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b4-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b4-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b4-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b4-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b4-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b5-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b5-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b5-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b5-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b5-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b6-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b6-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b6-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b6-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b6-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b7.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b8.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6b9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6ba.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6bb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6bc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6bd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6be.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6bf.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6c0-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6c0-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6c0-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6c0-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6c0-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6c0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6c1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6c2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6c3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6c4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6c5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6cb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6cc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6cd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6ce.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6cf.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6d0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6d1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6d2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6e0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6e1.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6e2.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6e3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6e4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6e5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6f5.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f6f6.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f910.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f911.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f912.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f913.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f914.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f915.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f916.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f917.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f918-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f918-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f918-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f918-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f918-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f918.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f919-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f919-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f919-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f919-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f919-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f919.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91a-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91a-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91a-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91a-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91a-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91b-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91b-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91b-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91b-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91b-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91c-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91c-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91c-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91c-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91c-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91d-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91d-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91d-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91d-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91d-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91e-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91e-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91e-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91e-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91e-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f91e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f920.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f921.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f922.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f923.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f924.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f925.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f926-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f926-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f926-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f926-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f926-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f926.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f927.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f930-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f930-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f930-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f930-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f930-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f930.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f933-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f933-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f933-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f933-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f933-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f933.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f934-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f934-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f934-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f934-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f934-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f934.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f935-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f935-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f935-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f935-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f935-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f935.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f936-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f936-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f936-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f936-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f936-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f936.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f937-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f937-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f937-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f937-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f937-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f937.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f938-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f938-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f938-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f938-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f938-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f938.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f939-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f939-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f939-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f939-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f939-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f939.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93c-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93c-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93c-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93c-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93c-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93d-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93d-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93d-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93d-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93d-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93e-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93e-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93e-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93e-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93e-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f93e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f940.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f941.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f942.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f943.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f944.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f945.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f947.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f948.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f949.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f94a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f94b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f950.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f951.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f952.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f953.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f954.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f955.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f956.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f957.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f958.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f959.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f95a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f95b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f95c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f95d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f95e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f980.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f981.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f982.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f983.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f984.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f985.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f986.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f987.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f988.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f989.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f98a.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f98b.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f98c.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f98d.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f98e.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f98f.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f990.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f991.svg + src/qt/res/assets/plugins/emojione/assets/svg/1f9c0.svg + src/qt/res/assets/plugins/emojione/assets/svg/203c.svg + src/qt/res/assets/plugins/emojione/assets/svg/2049.svg + src/qt/res/assets/plugins/emojione/assets/svg/2122.svg + src/qt/res/assets/plugins/emojione/assets/svg/2139.svg + src/qt/res/assets/plugins/emojione/assets/svg/2194.svg + src/qt/res/assets/plugins/emojione/assets/svg/2195.svg + src/qt/res/assets/plugins/emojione/assets/svg/2196.svg + src/qt/res/assets/plugins/emojione/assets/svg/2197.svg + src/qt/res/assets/plugins/emojione/assets/svg/2198.svg + src/qt/res/assets/plugins/emojione/assets/svg/2199.svg + src/qt/res/assets/plugins/emojione/assets/svg/21a9.svg + src/qt/res/assets/plugins/emojione/assets/svg/21aa.svg + src/qt/res/assets/plugins/emojione/assets/svg/231a.svg + src/qt/res/assets/plugins/emojione/assets/svg/231b.svg + src/qt/res/assets/plugins/emojione/assets/svg/2328.svg + src/qt/res/assets/plugins/emojione/assets/svg/23cf.svg + src/qt/res/assets/plugins/emojione/assets/svg/23e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/23ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/23eb.svg + src/qt/res/assets/plugins/emojione/assets/svg/23ec.svg + src/qt/res/assets/plugins/emojione/assets/svg/23ed.svg + src/qt/res/assets/plugins/emojione/assets/svg/23ee.svg + src/qt/res/assets/plugins/emojione/assets/svg/23ef.svg + src/qt/res/assets/plugins/emojione/assets/svg/23f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/23f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/23f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/23f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/23f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/23f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/23fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/24c2.svg + src/qt/res/assets/plugins/emojione/assets/svg/25aa.svg + src/qt/res/assets/plugins/emojione/assets/svg/25ab.svg + src/qt/res/assets/plugins/emojione/assets/svg/25b6.svg + src/qt/res/assets/plugins/emojione/assets/svg/25c0.svg + src/qt/res/assets/plugins/emojione/assets/svg/25fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/25fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/25fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/25fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/2600.svg + src/qt/res/assets/plugins/emojione/assets/svg/2601.svg + src/qt/res/assets/plugins/emojione/assets/svg/2602.svg + src/qt/res/assets/plugins/emojione/assets/svg/2603.svg + src/qt/res/assets/plugins/emojione/assets/svg/2604.svg + src/qt/res/assets/plugins/emojione/assets/svg/260e.svg + src/qt/res/assets/plugins/emojione/assets/svg/2611.svg + src/qt/res/assets/plugins/emojione/assets/svg/2614.svg + src/qt/res/assets/plugins/emojione/assets/svg/2615.svg + src/qt/res/assets/plugins/emojione/assets/svg/2618.svg + src/qt/res/assets/plugins/emojione/assets/svg/261d-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/261d-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/261d-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/261d-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/261d-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/261d.svg + src/qt/res/assets/plugins/emojione/assets/svg/2620.svg + src/qt/res/assets/plugins/emojione/assets/svg/2622.svg + src/qt/res/assets/plugins/emojione/assets/svg/2623.svg + src/qt/res/assets/plugins/emojione/assets/svg/2626.svg + src/qt/res/assets/plugins/emojione/assets/svg/262a.svg + src/qt/res/assets/plugins/emojione/assets/svg/262e.svg + src/qt/res/assets/plugins/emojione/assets/svg/262f.svg + src/qt/res/assets/plugins/emojione/assets/svg/2638.svg + src/qt/res/assets/plugins/emojione/assets/svg/2639.svg + src/qt/res/assets/plugins/emojione/assets/svg/263a.svg + src/qt/res/assets/plugins/emojione/assets/svg/2648.svg + src/qt/res/assets/plugins/emojione/assets/svg/2649.svg + src/qt/res/assets/plugins/emojione/assets/svg/264a.svg + src/qt/res/assets/plugins/emojione/assets/svg/264b.svg + src/qt/res/assets/plugins/emojione/assets/svg/264c.svg + src/qt/res/assets/plugins/emojione/assets/svg/264d.svg + src/qt/res/assets/plugins/emojione/assets/svg/264e.svg + src/qt/res/assets/plugins/emojione/assets/svg/264f.svg + src/qt/res/assets/plugins/emojione/assets/svg/2650.svg + src/qt/res/assets/plugins/emojione/assets/svg/2651.svg + src/qt/res/assets/plugins/emojione/assets/svg/2652.svg + src/qt/res/assets/plugins/emojione/assets/svg/2653.svg + src/qt/res/assets/plugins/emojione/assets/svg/2660.svg + src/qt/res/assets/plugins/emojione/assets/svg/2663.svg + src/qt/res/assets/plugins/emojione/assets/svg/2665.svg + src/qt/res/assets/plugins/emojione/assets/svg/2666.svg + src/qt/res/assets/plugins/emojione/assets/svg/2668.svg + src/qt/res/assets/plugins/emojione/assets/svg/267b.svg + src/qt/res/assets/plugins/emojione/assets/svg/267f.svg + src/qt/res/assets/plugins/emojione/assets/svg/2692.svg + src/qt/res/assets/plugins/emojione/assets/svg/2693.svg + src/qt/res/assets/plugins/emojione/assets/svg/2694.svg + src/qt/res/assets/plugins/emojione/assets/svg/2696.svg + src/qt/res/assets/plugins/emojione/assets/svg/2697.svg + src/qt/res/assets/plugins/emojione/assets/svg/2699.svg + src/qt/res/assets/plugins/emojione/assets/svg/269b.svg + src/qt/res/assets/plugins/emojione/assets/svg/269c.svg + src/qt/res/assets/plugins/emojione/assets/svg/26a0.svg + src/qt/res/assets/plugins/emojione/assets/svg/26a1.svg + src/qt/res/assets/plugins/emojione/assets/svg/26aa.svg + src/qt/res/assets/plugins/emojione/assets/svg/26ab.svg + src/qt/res/assets/plugins/emojione/assets/svg/26b0.svg + src/qt/res/assets/plugins/emojione/assets/svg/26b1.svg + src/qt/res/assets/plugins/emojione/assets/svg/26bd.svg + src/qt/res/assets/plugins/emojione/assets/svg/26be.svg + src/qt/res/assets/plugins/emojione/assets/svg/26c4.svg + src/qt/res/assets/plugins/emojione/assets/svg/26c5.svg + src/qt/res/assets/plugins/emojione/assets/svg/26c8.svg + src/qt/res/assets/plugins/emojione/assets/svg/26ce.svg + src/qt/res/assets/plugins/emojione/assets/svg/26cf.svg + src/qt/res/assets/plugins/emojione/assets/svg/26d1.svg + src/qt/res/assets/plugins/emojione/assets/svg/26d3.svg + src/qt/res/assets/plugins/emojione/assets/svg/26d4.svg + src/qt/res/assets/plugins/emojione/assets/svg/26e9.svg + src/qt/res/assets/plugins/emojione/assets/svg/26ea.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f0.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f1.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f2.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f3.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f4.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f5.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f7.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f8.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f9-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f9-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f9-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f9-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f9-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/26f9.svg + src/qt/res/assets/plugins/emojione/assets/svg/26fa.svg + src/qt/res/assets/plugins/emojione/assets/svg/26fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/2702.svg + src/qt/res/assets/plugins/emojione/assets/svg/2705.svg + src/qt/res/assets/plugins/emojione/assets/svg/2708.svg + src/qt/res/assets/plugins/emojione/assets/svg/2709.svg + src/qt/res/assets/plugins/emojione/assets/svg/270a-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/270a-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/270a-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/270a-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/270a-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/270a.svg + src/qt/res/assets/plugins/emojione/assets/svg/270b-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/270b-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/270b-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/270b-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/270b-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/270b.svg + src/qt/res/assets/plugins/emojione/assets/svg/270c-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/270c-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/270c-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/270c-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/270c-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/270c.svg + src/qt/res/assets/plugins/emojione/assets/svg/270d-1f3fb.svg + src/qt/res/assets/plugins/emojione/assets/svg/270d-1f3fc.svg + src/qt/res/assets/plugins/emojione/assets/svg/270d-1f3fd.svg + src/qt/res/assets/plugins/emojione/assets/svg/270d-1f3fe.svg + src/qt/res/assets/plugins/emojione/assets/svg/270d-1f3ff.svg + src/qt/res/assets/plugins/emojione/assets/svg/270d.svg + src/qt/res/assets/plugins/emojione/assets/svg/270f.svg + src/qt/res/assets/plugins/emojione/assets/svg/2712.svg + src/qt/res/assets/plugins/emojione/assets/svg/2714.svg + src/qt/res/assets/plugins/emojione/assets/svg/2716.svg + src/qt/res/assets/plugins/emojione/assets/svg/271d.svg + src/qt/res/assets/plugins/emojione/assets/svg/2721.svg + src/qt/res/assets/plugins/emojione/assets/svg/2728.svg + src/qt/res/assets/plugins/emojione/assets/svg/2733.svg + src/qt/res/assets/plugins/emojione/assets/svg/2734.svg + src/qt/res/assets/plugins/emojione/assets/svg/2744.svg + src/qt/res/assets/plugins/emojione/assets/svg/2747.svg + src/qt/res/assets/plugins/emojione/assets/svg/274c.svg + src/qt/res/assets/plugins/emojione/assets/svg/274e.svg + src/qt/res/assets/plugins/emojione/assets/svg/2753.svg + src/qt/res/assets/plugins/emojione/assets/svg/2754.svg + src/qt/res/assets/plugins/emojione/assets/svg/2755.svg + src/qt/res/assets/plugins/emojione/assets/svg/2757.svg + src/qt/res/assets/plugins/emojione/assets/svg/2763.svg + src/qt/res/assets/plugins/emojione/assets/svg/2764.svg + src/qt/res/assets/plugins/emojione/assets/svg/2795.svg + src/qt/res/assets/plugins/emojione/assets/svg/2796.svg + src/qt/res/assets/plugins/emojione/assets/svg/2797.svg + src/qt/res/assets/plugins/emojione/assets/svg/27a1.svg + src/qt/res/assets/plugins/emojione/assets/svg/27b0.svg + src/qt/res/assets/plugins/emojione/assets/svg/27bf.svg + src/qt/res/assets/plugins/emojione/assets/svg/2934.svg + src/qt/res/assets/plugins/emojione/assets/svg/2935.svg + src/qt/res/assets/plugins/emojione/assets/svg/2b05.svg + src/qt/res/assets/plugins/emojione/assets/svg/2b06.svg + src/qt/res/assets/plugins/emojione/assets/svg/2b07.svg + src/qt/res/assets/plugins/emojione/assets/svg/2b1b.svg + src/qt/res/assets/plugins/emojione/assets/svg/2b1c.svg + src/qt/res/assets/plugins/emojione/assets/svg/2b50.svg + src/qt/res/assets/plugins/emojione/assets/svg/2b55.svg + src/qt/res/assets/plugins/emojione/assets/svg/3030.svg + src/qt/res/assets/plugins/emojione/assets/svg/303d.svg + src/qt/res/assets/plugins/emojione/assets/svg/3297.svg + src/qt/res/assets/plugins/emojione/assets/svg/3299.svg + src/qt/res/assets/plugins/emojione/emojione.js + src/qt/res/assets/plugins/footable/footable.filter.js + src/qt/res/assets/plugins/footable/footable.js + src/qt/res/assets/plugins/footable/footable.paginate.js + src/qt/res/assets/plugins/footable/footable.sort.js + src/qt/res/assets/plugins/framework/framework.min.js + src/qt/res/assets/plugins/identicon/identicon.js + src/qt/res/assets/plugins/iscroll/iscroll.js + src/qt/res/assets/plugins/jdenticon/jdenticon-1.3.2.js + src/qt/res/assets/plugins/jquery/jquery-1.11.1.min.js + src/qt/res/assets/plugins/jquery-scrollbar/jquery.scrollbar.css + src/qt/res/assets/plugins/jquery-scrollbar/jquery.scrollbar.min.js + src/qt/res/assets/plugins/jquery-transit/jquery.transit.min.js + src/qt/res/assets/plugins/jquery-ui/images/animated-overlay.gif + src/qt/res/assets/plugins/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png + src/qt/res/assets/plugins/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png + src/qt/res/assets/plugins/jquery-ui/images/ui-bg_flat_10_000000_40x100.png + src/qt/res/assets/plugins/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png + src/qt/res/assets/plugins/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png + src/qt/res/assets/plugins/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png + src/qt/res/assets/plugins/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png + src/qt/res/assets/plugins/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png + src/qt/res/assets/plugins/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png + src/qt/res/assets/plugins/jquery-ui/images/ui-icons_222222_256x240.png + src/qt/res/assets/plugins/jquery-ui/images/ui-icons_228ef1_256x240.png + src/qt/res/assets/plugins/jquery-ui/images/ui-icons_ef8c08_256x240.png + src/qt/res/assets/plugins/jquery-ui/images/ui-icons_ffd27a_256x240.png + src/qt/res/assets/plugins/jquery-ui/images/ui-icons_ffffff_256x240.png + src/qt/res/assets/plugins/jquery-ui/jquery-ui-1.10.1.custom.min.css + src/qt/res/assets/plugins/jquery-ui/jquery-ui2.min.js + src/qt/res/assets/plugins/jquery-ui/jquery-ui_back.min.js + src/qt/res/assets/plugins/jquery-ui/jquery-ui.min.js + src/qt/res/assets/plugins/markdown/markdown.min.js + src/qt/res/assets/plugins/md5/md5.js + src/qt/res/assets/plugins/modernizr.custom.js + src/qt/res/assets/plugins/pace/pace.min.js + src/qt/res/assets/plugins/pace/pace-theme-flash.css + src/qt/res/assets/plugins/pnglib/pnglib.js + src/qt/res/assets/plugins/qrcode/qrcode.min.js + src/qt/res/assets/plugins/shajs/shajs.js + src/qt/res/assets/svg/alias-app.svg + src/qt/res/assets/svg/Alias-Horizontal-Reverse.svg + src/qt/res/assets/svg/Alias-Stacked-Reverse.svg + src/qt/res/assets/svg/Alias-Vertical-Reverse.svg + src/qt/res/assets/svg/connection-0.svg + src/qt/res/assets/svg/connection-10.svg + src/qt/res/assets/svg/connection-11.svg + src/qt/res/assets/svg/connection-12.svg + src/qt/res/assets/svg/connection-1.svg + src/qt/res/assets/svg/connection-2.svg + src/qt/res/assets/svg/connection-3.svg + src/qt/res/assets/svg/connection-4.svg + src/qt/res/assets/svg/connection-5.svg + src/qt/res/assets/svg/connection-6.svg + src/qt/res/assets/svg/connection-7.svg + src/qt/res/assets/svg/connection-8.svg + src/qt/res/assets/svg/connection-9.svg + src/qt/res/assets/svg/lock_off.svg + src/qt/res/assets/svg/lock_stake.svg + src/qt/res/assets/svg/lock.svg + src/qt/res/assets/svg/spinner.svg + src/qt/res/assets/svg/staking_off.svg + src/qt/res/assets/svg/staking.svg + src/qt/res/assets/svg/synced.svg + src/qt/res/assets/svg/syncing-0.svg + src/qt/res/assets/svg/syncing-100-bg.svg + src/qt/res/assets/svg/syncing-100.svg + src/qt/res/assets/svg/syncing-10.svg + src/qt/res/assets/svg/syncing-15.svg + src/qt/res/assets/svg/syncing-20.svg + src/qt/res/assets/svg/syncing-25.svg + src/qt/res/assets/svg/syncing-30.svg + src/qt/res/assets/svg/syncing-35.svg + src/qt/res/assets/svg/syncing-40.svg + src/qt/res/assets/svg/syncing-45.svg + src/qt/res/assets/svg/syncing-50.svg + src/qt/res/assets/svg/syncing-55.svg + src/qt/res/assets/svg/syncing-5.svg + src/qt/res/assets/svg/syncing-60.svg + src/qt/res/assets/svg/syncing-65.svg + src/qt/res/assets/svg/syncing-70.svg + src/qt/res/assets/svg/syncing-75.svg + src/qt/res/assets/svg/syncing-80.svg + src/qt/res/assets/svg/syncing-85.svg + src/qt/res/assets/svg/syncing-90.svg + src/qt/res/assets/svg/syncing-95.svg + src/qt/res/assets/svg/tor_off.svg + src/qt/res/assets/svg/tor.svg + src/qt/res/assets/svg/tx_contributed.svg + src/qt/res/assets/svg/tx_donated.svg + src/qt/res/assets/svg/tx_inout.svg + src/qt/res/assets/svg/tx_input.svg + src/qt/res/assets/svg/tx_output.svg + src/qt/res/assets/svg/tx_staked.svg + src/qt/res/index.html + + + src/qt/res/icons/export.png + src/qt/res/icons/remove.png + src/qt/res/icons/key.png + src/qt/res/icons/debugwindow.png + src/qt/res/icons/qrcode.png + src/qt/res/icons/alias-app.ico + src/qt/res/icons/alias-app.ico + src/qt/res/icons/cmd_request.png + src/qt/res/icons/cmd_reply.png + src/qt/res/icons/cmd_reply.png + src/qt/res/icons/cmd_misc.png + + + src/qt/res/qml/main.qml + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000000..ebddc62542 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,695 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT + +############################################################################## +##### Some helper stuff ###################################################### + +# Configure a header file to pass some of the CMake settings +# to the source code like version and Git hash +configure_file( + "${CMAKE_CURRENT_LIST_DIR}/clientversion.h.in" + "${CMAKE_CURRENT_LIST_DIR}/clientversion.h" +) + + +############################################################################## +##### Setup a library with all the common content ############################ + +# Create dummy file since we want an empty shared library before linking +set(DUMMY_SOURCE ${CMAKE_BINARY_DIR}/dummy.c) +file(WRITE ${DUMMY_SOURCE} "") + +add_library(aliaswallet_lib + OBJECT + ${DUMMY_SOURCE}) + +target_link_libraries(aliaswallet_lib + Oracle::BerkeleyDB + leveldb::leveldb + OpenSSL::SSL + OpenSSL::Crypto + Boost::atomic + Boost::boost + Boost::chrono + Boost::date_time + Boost::filesystem + Boost::iostreams + Boost::program_options + Boost::regex + Boost::system + Boost::thread + ) + +target_include_directories(aliaswallet_lib + SYSTEM BEFORE PUBLIC + ${PROJECT_BINARY_DIR}/usr/local/include + ${PROJECT_BINARY_DIR}/libdb/libdb-install/include + ${OPENSSL_INCLUDE_DIR} + ${BERKELEYDB_INCLUDE_DIR} + ${LEVELDB_INCLUDE_DIR} + ) + +# Common sources +target_sources(aliaswallet_lib + PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/net/addrman.h + ${CMAKE_CURRENT_LIST_DIR}/alert.h + ${CMAKE_CURRENT_LIST_DIR}/support/allocators.h + ${CMAKE_CURRENT_LIST_DIR}/anon/anonymize.h + ${CMAKE_CURRENT_LIST_DIR}/base58.h + ${CMAKE_CURRENT_LIST_DIR}/bignum.h + ${CMAKE_CURRENT_LIST_DIR}/net/bloom.h + ${CMAKE_CURRENT_LIST_DIR}/kernel/chainparams.h + ${CMAKE_CURRENT_LIST_DIR}/kernel/chainparamsseeds.h + ${CMAKE_CURRENT_LIST_DIR}/checkpoints.h + ${CMAKE_CURRENT_LIST_DIR}/clientversion.h + ${CMAKE_CURRENT_LIST_DIR}/wallet/coincontrol.h + ${CMAKE_CURRENT_LIST_DIR}/compat/compat.h + ${CMAKE_CURRENT_LIST_DIR}/primitives/core.h + ${CMAKE_CURRENT_LIST_DIR}/wallet/crypter.h + ${CMAKE_CURRENT_LIST_DIR}/wallet/db.h + ${CMAKE_CURRENT_LIST_DIR}/key/eckey.h + ${CMAKE_CURRENT_LIST_DIR}/key/extkey.h + ${CMAKE_CURRENT_LIST_DIR}/crypto/hash.h + ${CMAKE_CURRENT_LIST_DIR}/init/init.h + ${CMAKE_CURRENT_LIST_DIR}/pos/kernel.h + ${CMAKE_CURRENT_LIST_DIR}/key/key.h + ${CMAKE_CURRENT_LIST_DIR}/key/keystore.h + ${CMAKE_CURRENT_LIST_DIR}/main.h + ${CMAKE_CURRENT_LIST_DIR}/pos/miner.h + ${CMAKE_CURRENT_LIST_DIR}/support/mruset.h + ${CMAKE_CURRENT_LIST_DIR}/net/netbase.h + ${CMAKE_CURRENT_LIST_DIR}/net/net.h + ${CMAKE_CURRENT_LIST_DIR}/crypto/pbkdf2.h + ${CMAKE_CURRENT_LIST_DIR}/net/protocol.h + ${CMAKE_CURRENT_LIST_DIR}/resource.h + ${CMAKE_CURRENT_LIST_DIR}/anon/ringsig.h + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcclient.h + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcprotocol.h + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcserver.h + ${CMAKE_CURRENT_LIST_DIR}/script/script.h + ${CMAKE_CURRENT_LIST_DIR}/crypto/scrypt.h + ${CMAKE_CURRENT_LIST_DIR}/serialize.h + ${CMAKE_CURRENT_LIST_DIR}/smsg/smessage.h + ${CMAKE_CURRENT_LIST_DIR}/state.h + ${CMAKE_CURRENT_LIST_DIR}/anon/stealth.h + ${CMAKE_CURRENT_LIST_DIR}/compat/strlcpy.h + ${CMAKE_CURRENT_LIST_DIR}/util/sync.h + ${CMAKE_CURRENT_LIST_DIR}/util/threadsafety.h + ${CMAKE_CURRENT_LIST_DIR}/util/tinyformat.h + ${CMAKE_CURRENT_LIST_DIR}/wallet/txdb.h + ${CMAKE_CURRENT_LIST_DIR}/wallet/txdb-leveldb.h + ${CMAKE_CURRENT_LIST_DIR}/wallet/txmempool.h + ${CMAKE_CURRENT_LIST_DIR}/types.h + ${CMAKE_CURRENT_LIST_DIR}/interface.h + ${CMAKE_CURRENT_LIST_DIR}/uint256.h + ${CMAKE_CURRENT_LIST_DIR}/util/util.h + ${CMAKE_CURRENT_LIST_DIR}/util/version.h + ${CMAKE_CURRENT_LIST_DIR}/wallet/walletdb.h + ${CMAKE_CURRENT_LIST_DIR}/wallet/wallet.h + ${CMAKE_CURRENT_LIST_DIR}/shutdown.h + + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/net/addrman.cpp + ${CMAKE_CURRENT_LIST_DIR}/alert.cpp + ${CMAKE_CURRENT_LIST_DIR}/anon/anonymize.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/bloom.cpp + ${CMAKE_CURRENT_LIST_DIR}/kernel/chainparams.cpp + ${CMAKE_CURRENT_LIST_DIR}/checkpoints.cpp + ${CMAKE_CURRENT_LIST_DIR}/primitives/core.cpp + ${CMAKE_CURRENT_LIST_DIR}/wallet/crypter.cpp + ${CMAKE_CURRENT_LIST_DIR}/wallet/db.cpp + ${CMAKE_CURRENT_LIST_DIR}/key/eckey.cpp + ${CMAKE_CURRENT_LIST_DIR}/key/extkey.cpp + ${CMAKE_CURRENT_LIST_DIR}/crypto/hash.cpp + ${CMAKE_CURRENT_LIST_DIR}/init/init.cpp + ${CMAKE_CURRENT_LIST_DIR}/pos/kernel.cpp + ${CMAKE_CURRENT_LIST_DIR}/key/key.cpp + ${CMAKE_CURRENT_LIST_DIR}/key/keystore.cpp + ${CMAKE_CURRENT_LIST_DIR}/main.cpp + ${CMAKE_CURRENT_LIST_DIR}/pos/miner.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/netbase.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/net.cpp + ${CMAKE_CURRENT_LIST_DIR}/noui.cpp + ${CMAKE_CURRENT_LIST_DIR}/crypto/pbkdf2.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/protocol.cpp + ${CMAKE_CURRENT_LIST_DIR}/anon/ringsig.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcblockchain.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcclient.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcdump.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcextkey.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcmining.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcmnemonic.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcnet.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcprotocol.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcrawtransaction.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcserver.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcwallet.cpp + ${CMAKE_CURRENT_LIST_DIR}/script/script.cpp + ${CMAKE_CURRENT_LIST_DIR}/crypto/scrypt.cpp + ${CMAKE_CURRENT_LIST_DIR}/smsg/smessage.cpp + ${CMAKE_CURRENT_LIST_DIR}/state.cpp + ${CMAKE_CURRENT_LIST_DIR}/anon/stealth.cpp + ${CMAKE_CURRENT_LIST_DIR}/util/sync.cpp + ${CMAKE_CURRENT_LIST_DIR}/wallet/txdb-leveldb.cpp + ${CMAKE_CURRENT_LIST_DIR}/wallet/txmempool.cpp + ${CMAKE_CURRENT_LIST_DIR}/util/util.cpp + ${CMAKE_CURRENT_LIST_DIR}/util/version.cpp + ${CMAKE_CURRENT_LIST_DIR}/wallet/wallet.cpp + ${CMAKE_CURRENT_LIST_DIR}/wallet/walletdb.cpp + ${CMAKE_CURRENT_LIST_DIR}/shutdown.cpp + ) + +add_subdirectory(json) +add_subdirectory(lz4) +add_subdirectory(wordlists) +add_subdirectory(xxhash) +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + add_subdirectory(win) +endif () + + + +############################################################################## +##### Setup and link the executables ######################################### + + +if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + message(STATUS "No daemon build on Mac") +elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") + # Headless daemon (aliaswalletd.exe) — required by the Electron desktop app. + # aliaswallet_lib already compiles on Windows (the GUI links it) and + # spectrecoind.cpp guards its POSIX bits behind WIN32 / win/unistd.h. + # No -static on MSVC; pull the Windows socket libs the core uses directly. + add_executable(Aliaswalletd ${CMAKE_CURRENT_LIST_DIR}/spectrecoind.cpp) + target_link_libraries(Aliaswalletd + OpenSSL::SSL + OpenSSL::Crypto + Oracle::BerkeleyDB + leveldb::leveldb + aliaswallet_lib + Shlwapi + ws2_32 + mswsock + ) + set_target_properties(Aliaswalletd PROPERTIES + OUTPUT_NAME aliaswalletd + ) +else() + # The daemon + add_executable(Aliaswalletd ${CMAKE_CURRENT_LIST_DIR}/spectrecoind.cpp) + + # Link the daemon as static binary + target_link_libraries(Aliaswalletd + OpenSSL::SSL + OpenSSL::Crypto + Oracle::BerkeleyDB + leveldb::leveldb + aliaswallet_lib + -static + ) + set_target_properties(Aliaswalletd PROPERTIES + OUTPUT_NAME aliaswalletd + ) +endif() + +if (ENABLE_GUI) + # The qm files are generated in the build tree, but the qrc file is inside the + # source directory and the path to resources are relative to the location of + # the qrc file itself. We use configure_file() to copy the qrc file in the build + # directory such that it can find the qm translations files. The qrc file is + # copied if it doesn't exist in the destination or if it is modified. + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/qt/alias_locale.qrc ${CMAKE_BINARY_DIR} COPYONLY) + + # Create only alias_en.ts new, to figure out if there are new strings to translate. + # If src/qt/locale/alias_en.ts is modified afterwards, there are new strings to + # translate. Any further steps on transifex.com. + # Don't forget to add new source files here too, if they contain strings to translate! + qt5_create_translation(QM_FILES + ${CMAKE_CURRENT_LIST_DIR}/qt/forms/aboutdialog.ui + ${CMAKE_CURRENT_LIST_DIR}/qt/forms/askpassphrasedialog.ui + ${CMAKE_CURRENT_LIST_DIR}/qt/forms/coincontroldialog.ui + ${CMAKE_CURRENT_LIST_DIR}/qt/forms/editaddressdialog.ui + ${CMAKE_CURRENT_LIST_DIR}/qt/forms/rpcconsole.ui + ${CMAKE_CURRENT_LIST_DIR}/qt/forms/transactiondescdialog.ui + + ${CMAKE_CURRENT_LIST_DIR}/qt/aboutdialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/addresstablemodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/aliasbridgestrings.h + ${CMAKE_CURRENT_LIST_DIR}/qt/aliascorestrings.h + ${CMAKE_CURRENT_LIST_DIR}/qt/askpassphrasedialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinaddressvalidator.h + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinamountfield.h + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinunits.h + ${CMAKE_CURRENT_LIST_DIR}/qt/clientmodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroldialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroltreewidget.h + ${CMAKE_CURRENT_LIST_DIR}/qt/csvmodelwriter.h + ${CMAKE_CURRENT_LIST_DIR}/qt/editaddressdialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/guiconstants.h + ${CMAKE_CURRENT_LIST_DIR}/qt/guiutil.h + ${CMAKE_CURRENT_LIST_DIR}/qt/monitoreddatamapper.h + ${CMAKE_CURRENT_LIST_DIR}/qt/notificator.h + ${CMAKE_CURRENT_LIST_DIR}/qt/optionsmodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/paymentserver.h + ${CMAKE_CURRENT_LIST_DIR}/qt/peertablemodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/qvalidatedlineedit.h + ${CMAKE_CURRENT_LIST_DIR}/qt/qvaluecombobox.h + ${CMAKE_CURRENT_LIST_DIR}/qt/rpcconsole.h + ${CMAKE_CURRENT_LIST_DIR}/qt/scicon.h + ${CMAKE_CURRENT_LIST_DIR}/qt/setupwalletwizard.h + ${CMAKE_CURRENT_LIST_DIR}/qt/spectrebridge.h + ${CMAKE_CURRENT_LIST_DIR}/qt/spectregui.h + ${CMAKE_CURRENT_LIST_DIR}/qt/trafficgraphwidget.h + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiondesc.h + ${CMAKE_CURRENT_LIST_DIR}/qt/transactionrecord.h + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiontablemodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/walletmodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/websocketclientwrapper.h + ${CMAKE_CURRENT_LIST_DIR}/qt/websockettransport.h + + ${CMAKE_CURRENT_LIST_DIR}/qt/aboutdialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/addresstablemodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/askpassphrasedialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinaddressvalidator.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinamountfield.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinunits.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/clientmodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroldialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroltreewidget.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/csvmodelwriter.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/editaddressdialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/guiutil.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/monitoreddatamapper.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/notificator.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/optionsmodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/paymentserver.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/peertablemodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/qvalidatedlineedit.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/qvaluecombobox.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/rpcconsole.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/scicon.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/setupwalletwizard.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/spectrebridge.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/spectregui.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/trafficgraphwidget.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiondesc.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/transactionrecord.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiontablemodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/walletmodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/websocketclientwrapper.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/websockettransport.cpp + ${CMAKE_CURRENT_LIST_DIR}/init/init.cpp + ${CMAKE_CURRENT_LIST_DIR}/util/util.cpp + ${CMAKE_CURRENT_LIST_DIR}/main.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/net.cpp + ${CMAKE_CURRENT_LIST_DIR}/rpc/rpcserver.cpp + ${CMAKE_CURRENT_LIST_DIR}/wallet/wallet.cpp + + ${CMAKE_CURRENT_LIST_DIR}/qt/locale/alias_en.ts + ) + + # Call lrelease on each translation file to create qm files. + qt5_add_translation(QM_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_af_ZA.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_ar.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_be.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_bg.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_bs.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_ca.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_ca_ES.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_cs.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_cy.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_da.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_de.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_el.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_el_GR.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_eo.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_es.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_es_MX.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_et.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_eu_ES.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_fa.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_fa_IR.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_fi.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_fr.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_fr_CA.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_gl.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_he.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_hi_IN.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_hr.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_hu.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_id_ID.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_it.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_ja.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_ka.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_kk.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_ko_KR.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_ky.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_la.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_lt.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_lv_LV.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_ms_MY.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_nb.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_nl.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_pl.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_pt_BR.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_pt_PT.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_ro_RO.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_ru.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_sk.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_sl_SI.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_sq.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_sr.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_sv.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_th.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_tr.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_uk.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_ur_PK.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_vi.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_vi_VN.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_zh_CN.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_zh_HK.ts + ${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/alias_zh_TW.ts + ) + + if (ANDROID) + # Create a shared library 'libAliaswallet_.so' + add_library(Aliaswallet + SHARED + ../spectre.qrc + ${CMAKE_CURRENT_LIST_DIR}/qt/spectre.cpp + ${CMAKE_BINARY_DIR}/alias_locale.qrc + ${QM_FILES} + ) +# set_target_properties(Aliaswallet +# PROPERTIES +# OUTPUT_NAME "Aliaswallet_${CMAKE_ANDROID_ARCH}" +# ) + install(TARGETS Aliaswallet + LIBRARY DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/android-build/libs/${DCMAKE_ANDROID_ARCH_ABI}/" + ARCHIVE DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/android-build/libs/${DCMAKE_ANDROID_ARCH_ABI}/" + ) + + # Link the UI wallet + # QtWebEngine not static available, so no static binary here :-( + target_link_libraries(Aliaswallet + OpenSSL::SSL + OpenSSL::Crypto + Oracle::BerkeleyDB + leveldb::leveldb + aliaswallet_lib + Qt5::Core + Qt5::Widgets + Qt5::WebView + Qt5::WebChannel + Qt5::WebSockets + Qt5::Quick + Qt5::QuickWidgets + Qt5::Svg + Qt5::Concurrent + ) + + target_sources(Aliaswallet + PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/qt/aboutdialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/addresstablemodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/aliasbridgestrings.h + ${CMAKE_CURRENT_LIST_DIR}/qt/aliascorestrings.h + ${CMAKE_CURRENT_LIST_DIR}/qt/askpassphrasedialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinaddressvalidator.h + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinamountfield.h + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinunits.h + ${CMAKE_CURRENT_LIST_DIR}/qt/clientmodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroldialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroltreewidget.h + ${CMAKE_CURRENT_LIST_DIR}/qt/csvmodelwriter.h + ${CMAKE_CURRENT_LIST_DIR}/qt/editaddressdialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/guiconstants.h + ${CMAKE_CURRENT_LIST_DIR}/qt/guiutil.h + ${CMAKE_CURRENT_LIST_DIR}/qt/monitoreddatamapper.h + ${CMAKE_CURRENT_LIST_DIR}/qt/notificator.h + ${CMAKE_CURRENT_LIST_DIR}/qt/optionsmodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/paymentserver.h + ${CMAKE_CURRENT_LIST_DIR}/qt/peertablemodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/qvalidatedlineedit.h + ${CMAKE_CURRENT_LIST_DIR}/qt/qvaluecombobox.h + ${CMAKE_CURRENT_LIST_DIR}/qt/rpcconsole.h + ${CMAKE_CURRENT_LIST_DIR}/qt/scicon.h + ${CMAKE_CURRENT_LIST_DIR}/qt/setupwalletwizard.h + ${CMAKE_CURRENT_LIST_DIR}/qt/spectrebridge.h + ${CMAKE_CURRENT_LIST_DIR}/qt/spectregui.h + ${CMAKE_CURRENT_LIST_DIR}/qt/trafficgraphwidget.h + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiondesc.h + ${CMAKE_CURRENT_LIST_DIR}/qt/transactionrecord.h + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiontablemodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/walletmodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/websocketclientwrapper.h + ${CMAKE_CURRENT_LIST_DIR}/qt/websockettransport.h + + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/qt/aboutdialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/addresstablemodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/askpassphrasedialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinaddressvalidator.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinamountfield.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinunits.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/clientmodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroldialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroltreewidget.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/csvmodelwriter.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/editaddressdialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/guiutil.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/monitoreddatamapper.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/notificator.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/optionsmodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/paymentserver.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/peertablemodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/qvalidatedlineedit.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/qvaluecombobox.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/rpcconsole.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/scicon.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/setupwalletwizard.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/spectrebridge.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/spectregui.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/trafficgraphwidget.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiondesc.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/transactionrecord.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiontablemodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/walletmodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/websocketclientwrapper.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/websockettransport.cpp + ) + else() + # The UI wallet + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # We have to reference the alias_locale.qrc copy in the build directory, not the + # original file in the source directory. We also add qm files to the target to + # create a dependency that will force rebuild in case the translation are + # updated. + add_executable(Aliaswallet + MACOSX_BUNDLE + ../spectre.qrc + ${CMAKE_CURRENT_LIST_DIR}/qt/spectre.cpp + ${CMAKE_BINARY_DIR}/alias_locale.qrc + ${QM_FILES} + ) + elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows") + # We have to reference the alias_locale.qrc copy in the build directory, not the + # original file in the source directory. We also add qm files to the target to + # create a dependency that will force rebuild in case the translation are + # updated. + add_executable(Aliaswallet + ../spectre.qrc + ${CMAKE_CURRENT_LIST_DIR}/qt/spectre.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/res/alias-qt.rc + ${CMAKE_BINARY_DIR}/alias_locale.qrc + ${QM_FILES} + ) + else() + # We have to reference the alias_locale.qrc copy in the build directory, not the + # original file in the source directory. We also add qm files to the target to + # create a dependency that will force rebuild in case the translation are + # updated. + add_executable(Aliaswallet + ../spectre.qrc + ${CMAKE_CURRENT_LIST_DIR}/qt/spectre.cpp + ${CMAKE_BINARY_DIR}/alias_locale.qrc + ${QM_FILES} + ) + endif() + + # Link the UI wallet + # QtWebEngine not static available, so no static binary here :-( + target_link_libraries(Aliaswallet + OpenSSL::SSL + OpenSSL::Crypto + Oracle::BerkeleyDB + leveldb::leveldb + aliaswallet_lib + Qt5::Core + Qt5::Widgets + Qt5::WebView + Qt5::WebChannel + Qt5::WebSockets + Qt5::Quick + Qt5::QuickWidgets + Qt5::Svg + Qt5::Concurrent + ) + + target_sources(Aliaswallet + PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/qt/aboutdialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/addresstablemodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/aliasbridgestrings.h + ${CMAKE_CURRENT_LIST_DIR}/qt/aliascorestrings.h + ${CMAKE_CURRENT_LIST_DIR}/qt/askpassphrasedialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinaddressvalidator.h + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinamountfield.h + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinunits.h + ${CMAKE_CURRENT_LIST_DIR}/qt/clientmodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroldialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroltreewidget.h + ${CMAKE_CURRENT_LIST_DIR}/qt/csvmodelwriter.h + ${CMAKE_CURRENT_LIST_DIR}/qt/editaddressdialog.h + ${CMAKE_CURRENT_LIST_DIR}/qt/guiconstants.h + ${CMAKE_CURRENT_LIST_DIR}/qt/guiutil.h + ${CMAKE_CURRENT_LIST_DIR}/qt/monitoreddatamapper.h + ${CMAKE_CURRENT_LIST_DIR}/qt/notificator.h + ${CMAKE_CURRENT_LIST_DIR}/qt/optionsmodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/paymentserver.h + ${CMAKE_CURRENT_LIST_DIR}/qt/peertablemodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/qvalidatedlineedit.h + ${CMAKE_CURRENT_LIST_DIR}/qt/qvaluecombobox.h + ${CMAKE_CURRENT_LIST_DIR}/qt/rpcconsole.h + ${CMAKE_CURRENT_LIST_DIR}/qt/scicon.h + ${CMAKE_CURRENT_LIST_DIR}/qt/setupwalletwizard.h + ${CMAKE_CURRENT_LIST_DIR}/qt/spectrebridge.h + ${CMAKE_CURRENT_LIST_DIR}/qt/spectregui.h + ${CMAKE_CURRENT_LIST_DIR}/qt/trafficgraphwidget.h + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiondesc.h + ${CMAKE_CURRENT_LIST_DIR}/qt/transactionrecord.h + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiontablemodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/walletmodel.h + ${CMAKE_CURRENT_LIST_DIR}/qt/websocketclientwrapper.h + ${CMAKE_CURRENT_LIST_DIR}/qt/websockettransport.h + + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/qt/aboutdialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/addresstablemodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/askpassphrasedialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinaddressvalidator.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinamountfield.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/bitcoinunits.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/clientmodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroldialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/coincontroltreewidget.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/csvmodelwriter.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/editaddressdialog.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/guiutil.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/monitoreddatamapper.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/notificator.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/optionsmodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/paymentserver.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/peertablemodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/qvalidatedlineedit.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/qvaluecombobox.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/rpcconsole.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/scicon.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/setupwalletwizard.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/spectrebridge.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/spectregui.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/trafficgraphwidget.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiondesc.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/transactionrecord.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/transactiontablemodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/walletmodel.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/websocketclientwrapper.cpp + ${CMAKE_CURRENT_LIST_DIR}/qt/websockettransport.cpp + ) + + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + target_sources(Aliaswallet + PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/qt/macdockiconhandler.h + ${CMAKE_CURRENT_LIST_DIR}/qt/macnotificationhandler.h + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/qt/macdockiconhandler.mm + ${CMAKE_CURRENT_LIST_DIR}/qt/macnotificationhandler.mm + ) + set_target_properties(Aliaswallet PROPERTIES + MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME}${DBG_EXTENSION} Version ${VERSION_STRING}, © 2020 The Alias developers." + MACOSX_BUNDLE_GUI_IDENTIFIER "${PROJECT_NAME}${DBG_EXTENSION}" + MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_NAME}${DBG_EXTENSION} Version ${VERSION_STRING}" + MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME}${DBG_EXTENSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${VERSION_STRING} + MACOSX_BUNDLE_BUNDLE_VERSION ${VERSION_STRING} + MACOSX_BUNDLE_COPYRIGHT " © 2020 The Alias developers" + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_LIST_DIR}/osx/MacOSXBundleInfo.plist.in + OUTPUT_NAME Alias + ) + target_link_libraries(Aliaswallet "-framework AppKit") + add_custom_command(TARGET Aliaswallet POST_BUILD +# COMMAND cd ${CMAKE_BINARY_DIR} && "${MACDEPLOYQT_EXECUTABLE}" +# Alias.app +# -qmldir=${CMAKE_SOURCE_DIR}/src/qt/res +# -always-overwrite +# -verbose=1 +# ${DEPLOY_QT_BINARY_TYPE_OPTION} + COMMAND rm -rf ${CMAKE_BINARY_DIR}/Alias.app/Contents/MacOS/Tor + COMMAND unzip ${TOR_ARCHIVE} -d ${CMAKE_BINARY_DIR}/Alias.app/ + COMMAND chmod +x ${CMAKE_BINARY_DIR}/Alias.app/Contents/MacOS/Tor/tor.real + COMMAND chmod +x ${CMAKE_BINARY_DIR}/Alias.app/Contents/MacOS/Tor/libevent* + COMMAND chmod +x ${CMAKE_BINARY_DIR}/Alias.app/Contents/MacOS/Tor/PluggableTransports/* + COMMAND mkdir -p ${CMAKE_BINARY_DIR}/Alias.app/Contents/Resources + COMMAND cp ${CMAKE_SOURCE_DIR}/src/qt/res/icons/alias-app.icns ${CMAKE_BINARY_DIR}/Alias.app/Contents/Resources/ +# COMMAND cd ${CMAKE_BINARY_DIR} && "${MACDEPLOYQT_EXECUTABLE}" +# Alias.app +# -dmg +# -always-overwrite +# -verbose=1 + COMMENT "Put additional content onto app directory" + ) + elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") + target_sources(Aliaswallet + PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/qt/winshutdownmonitor.h + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/qt/winshutdownmonitor.cpp + ) + set_target_properties(Aliaswallet PROPERTIES + OUTPUT_NAME Alias + ) + target_link_libraries(Aliaswallet "Shlwapi") + add_custom_command(TARGET Aliaswallet POST_BUILD + COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/delivery/Alias + COMMAND "${CMAKE_COMMAND}" -E + env PATH="${_qt_bin_dir}" "${WINDEPLOYQT_EXECUTABLE}" + --force + --libdir ${CMAKE_BINARY_DIR}/delivery/${WINDEPLOYQT_TARGET_FOLDER} + --plugindir ${CMAKE_BINARY_DIR}/delivery/${WINDEPLOYQT_TARGET_FOLDER} + ${DEPLOY_QT_BINARY_TYPE_OPTION} + --qmldir ${CMAKE_SOURCE_DIR}/src/qt/res/qml + --qml + --quick + --webengine + "$" + COMMAND unzip -o ${VCRUNTIME_ARCHIVE} -d ${CMAKE_BINARY_DIR}/delivery/${WINDEPLOYQT_TARGET_FOLDER}/ + COMMAND unzip -o ${TOR_ARCHIVE} -d ${CMAKE_BINARY_DIR}/delivery/${WINDEPLOYQT_TARGET_FOLDER}/ + COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_BINARY_DIR}/delivery/${WINDEPLOYQT_TARGET_FOLDER} ${CMAKE_BINARY_DIR}/delivery/Alias + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/delivery/${WINDEPLOYQT_TARGET_FOLDER} + COMMENT "Running windeployqt..." + ) + else() + set_target_properties(Aliaswallet PROPERTIES + OUTPUT_NAME aliaswallet + ) + endif() + endif() +endif () + +#message(STATUS "BERKELEYDB_INCLUDE_PATH: ${BERKELEYDB_INCLUDE_PATH}") +#message(STATUS "OPENSSL_INCLUDE_PATH: ${OPENSSL_INCLUDE_PATH}") +#message(STATUS "OPENSSL_API_COMPAT: ${OPENSSL_API_COMPAT}") diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000000..64c17121d8 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,308 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +AM_LDFLAGS = -fstack-protector + +if OS_LINUX +AM_LDFLAGS += -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -Wl,-z,noexecheap -Wl,-z,nodlopen -Wl,-z,nodump +else +if OS_WINDOWS_CROSSCOMPILE +# Default to console subsystem so the daemon's stdout/stderr work in +# cmd.exe. The Qt GUI binary overrides to --subsystem,windows below. +AM_LDFLAGS += -Wl,--dynamicbase -Wl,--nxcompat -Wl,--subsystem,console +else +if OS_MACOS +AM_LDFLAGS += $(MACOS_RPATH) +endif +endif +endif + +AM_CPPFLAGS = -pthread -fPIC -fstack-protector -O2 \ + -D_FORTIFY_SOURCE=1 \ + -Wall -Wextra -Wno-ignored-qualifiers -Woverloaded-virtual \ + -Wformat -Wformat-security -Wno-unused-parameter + +if OS_MACOS +AM_CPPFLAGS += -std=c++17 -mmacosx-version-min=10.10 +endif + +common_SOURCES = anon/anonymize.cpp \ + json/json_spirit_reader.cpp \ + json/json_spirit_writer.cpp \ + alert.cpp \ + util/version.cpp \ + checkpoints.cpp \ + net/netbase.cpp \ + net/addrman.cpp \ + wallet/crypter.cpp \ + key/key.cpp \ + key/eckey.cpp \ + key/extkey.cpp \ + wallet/db.cpp \ + init/init.cpp \ + key/keystore.cpp \ + pos/miner.cpp \ + main.cpp \ + net/net.cpp \ + net/protocol.cpp \ + rpc/rpcprotocol.cpp \ + rpc/rpcserver.cpp \ + rpc/rpcclient.cpp \ + rpc/rpcdump.cpp \ + rpc/rpcnet.cpp \ + rpc/rpcmining.cpp \ + rpc/rpcwallet.cpp \ + rpc/rpcblockchain.cpp \ + rpc/rpcrawtransaction.cpp \ + rpc/rpcextkey.cpp \ + rpc/rpcmnemonic.cpp \ + script/script.cpp \ + util/sync.cpp \ + util/util.cpp \ + crypto/hash.cpp \ + wallet/wallet.cpp \ + wallet/walletdb.cpp \ + pos/kernel.cpp \ + crypto/pbkdf2.cpp \ + crypto/scrypt.cpp \ + crypto/scrypt-arm.S \ + crypto/scrypt-x86.S \ + crypto/scrypt-x86_64.S \ + smsg/smessage.cpp \ + anon/stealth.cpp \ + anon/ringsig.cpp \ + primitives/core.cpp \ + wallet/txdb-leveldb.cpp \ + wallet/txmempool.cpp \ + kernel/chainparams.cpp \ + state.cpp \ + net/bloom.cpp \ + shutdown.cpp + +bin_PROGRAMS = aliaswalletd +aliaswalletd_SOURCES = $(common_SOURCES) \ + spectrecoind.cpp \ + noui.cpp + +aliaswalletd_LDADD = ../leveldb/out-static/libmemenv.a \ + ../leveldb/out-static/libleveldb.a \ + ../db4.8/build_unix/libdb_cxx.a \ + $(OPENSSL_LIBS) \ + $(LIBEVENT_LIBS) \ + $(LIBSECCOMP_LIBS) \ + $(LIBCAP_LIBS) \ + $(ZLIB_LIBS) \ + $(ZSTD_LIBS) \ + $(LZMA_LIBS) \ + $(BOOST_SYSTEM_LIBS) \ + $(BOOST_CHRONO_LIBS) \ + $(BOOST_FILESYSTEM_LIBS) \ + $(BOOST_PROGRAM_OPTIONS_LIBS) \ + $(BOOST_THREAD_LIBS) + +aliaswalletd_CPPFLAGS = $(AM_CPPFLAGS) $(OPENSSL_CFLAGS) $(LIBEVENT_CFLAGS) \ + $(LIBSECCOMP_CFLAGS) $(LIBCAP_CFLAGS) $(ZLIB_CFLAGS) $(ZSTD_CPPFLAGS) $(LZMA_CPPFLAGS) \ + $(BOOST_CPPFLAGS) \ + -I../leveldb/include -I../leveldb/helpers -I../db4.8/build_unix \ + -D_FORTIFY_SOURCE=1 -DBOOST_THREAD_USE_LIB -DBOOST_SPIRIT_THREADSAFE \ + -DBOOST_ASIO_ENABLE_OLD_SERVICES +aliaswalletd_CFLAGS = $(aliaswalletd_CPPFLAGS) -std=c11 +aliaswalletd_LDFLAGS = $(AM_LDFLAGS) $(OPENSSL_LDFLAGS) $(LIBEVENT_LDFLAGS) \ + $(LIBSECCOMP_LDFLAGS) $(LIBCAP_LDFLAGS) $(ZLIB_LDFLAGS) $(ZSTD_LDFLAGS) $(LZMA_LDFLAGS) \ + $(BOOST_SYSTEM_LDFLAGS) $(BOOST_CHRONO_LDFLAGS) $(BOOST_FILESYSTEM_LDFLAGS) \ + $(BOOST_PROGRAM_OPTIONS_LDFLAGS) $(BOOST_THREAD_LDFLAGS) +aliaswalletd_LIBTOOLFLAGS = --tag CXX + +if OS_WINDOWS_CROSSCOMPILE +aliaswalletd_LDADD += -lmswsock -lshlwapi -luuid -lole32 -lgdi32 +aliaswalletd_CPPFLAGS += -DWIN32 -D_WIN32 +# Force a fully-static .exe (no libwinpthread-1.dll runtime dep). +# -all-static is a libtool flag; only libtool sees it here. +aliaswalletd_LDFLAGS += -all-static +else +if OS_MACOS +aliaswalletd_CPPFLAGS += -DMAC_OSX +else +aliaswalletd_LDFLAGS += -pie +aliaswalletd_LDADD += -lcap -lseccomp +endif +endif + +if ENABLE_GUI +qt/locale/%.qm: qt/locale/%.ts + @LRELEASE@ $< -qm $@ + +qt/qrc_%.cpp: ../%.qrc + @RCC@ $< -o $@ + +if OS_MACOS + MOC_CPPFLAGS = -DQ_OS_MACOS +endif + +qt/moc_%.cpp: qt/%.h + @MOC@ -o $@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(MOC_CPPFLAGS) $< + +qt/ui_%.h: qt/forms/%.ui + @UIC@ -o $@ $< + +BUILT_SOURCES = qt/ui_aboutdialog.h \ + qt/ui_askpassphrasedialog.h \ + qt/ui_coincontroldialog.h \ + qt/ui_editaddressdialog.h \ + qt/ui_rpcconsole.h \ + qt/ui_transactiondescdialog.h \ + qt/locale/alias_af_ZA.qm \ + qt/locale/alias_ar.qm \ + qt/locale/alias_be.qm \ + qt/locale/alias_bg.qm \ + qt/locale/alias_bs.qm \ + qt/locale/alias_ca_ES.qm \ + qt/locale/alias_ca.qm \ + qt/locale/alias_cs.qm \ + qt/locale/alias_cy.qm \ + qt/locale/alias_da.qm \ + qt/locale/alias_de.qm \ + qt/locale/alias_el_GR.qm \ + qt/locale/alias_el.qm \ + qt/locale/alias_en.qm \ + qt/locale/alias_eo.qm \ + qt/locale/alias_es_MX.qm \ + qt/locale/alias_es.qm \ + qt/locale/alias_et.qm \ + qt/locale/alias_eu_ES.qm \ + qt/locale/alias_fa_IR.qm \ + qt/locale/alias_fa.qm \ + qt/locale/alias_fi.qm \ + qt/locale/alias_fr_CA.qm \ + qt/locale/alias_fr.qm \ + qt/locale/alias_gl.qm \ + qt/locale/alias_he.qm \ + qt/locale/alias_hi_IN.qm \ + qt/locale/alias_hr.qm \ + qt/locale/alias_hu.qm \ + qt/locale/alias_id_ID.qm \ + qt/locale/alias_it.qm \ + qt/locale/alias_ja.qm \ + qt/locale/alias_ka.qm \ + qt/locale/alias_kk.qm \ + qt/locale/alias_ko_KR.qm \ + qt/locale/alias_ky.qm \ + qt/locale/alias_la.qm \ + qt/locale/alias_lt.qm \ + qt/locale/alias_lv_LV.qm \ + qt/locale/alias_ms_MY.qm \ + qt/locale/alias_nb.qm \ + qt/locale/alias_nl.qm \ + qt/locale/alias_pl.qm \ + qt/locale/alias_pt_BR.qm \ + qt/locale/alias_pt_PT.qm \ + qt/locale/alias_ro_RO.qm \ + qt/locale/alias_ru.qm \ + qt/locale/alias_sk.qm \ + qt/locale/alias_sl_SI.qm \ + qt/locale/alias_sq.qm \ + qt/locale/alias_sr.qm \ + qt/locale/alias_sv.qm \ + qt/locale/alias_th.qm \ + qt/locale/alias_tr.qm \ + qt/locale/alias_uk.qm \ + qt/locale/alias_ur_PK.qm \ + qt/locale/alias_vi.qm \ + qt/locale/alias_vi_VN.qm \ + qt/locale/alias_zh_CN.qm \ + qt/locale/alias_zh_HK.qm \ + qt/locale/alias_zh_TW.qm + +bin_PROGRAMS += aliaswallet + +aliaswallet_SOURCES = $(common_SOURCES) \ + qt/qrc_spectre.cpp \ + qt/moc_spectregui.cpp \ + qt/moc_spectrebridge.cpp \ + qt/moc_rpcconsole.cpp \ + qt/moc_peertablemodel.cpp \ + qt/moc_notificator.cpp \ + qt/moc_editaddressdialog.cpp \ + qt/moc_askpassphrasedialog.cpp \ + qt/moc_coincontroldialog.cpp \ + qt/moc_coincontroltreewidget.cpp \ + qt/moc_addresstablemodel.cpp \ + qt/moc_transactiontablemodel.cpp \ + qt/moc_transactiondesc.cpp \ + qt/moc_trafficgraphwidget.cpp \ + qt/moc_paymentserver.cpp \ + qt/moc_clientmodel.cpp \ + qt/moc_walletmodel.cpp \ + qt/moc_optionsmodel.cpp \ + qt/moc_guiutil.cpp \ + qt/moc_aboutdialog.cpp \ + qt/moc_csvmodelwriter.cpp \ + qt/moc_qvaluecombobox.cpp \ + qt/moc_qvalidatedlineedit.cpp \ + qt/moc_bitcoinaddressvalidator.cpp \ + qt/moc_monitoreddatamapper.cpp \ + qt/moc_bitcoinamountfield.cpp \ + qt/moc_setupwalletwizard.cpp \ + qt/moc_websocketclientwrapper.cpp \ + qt/moc_websockettransport.cpp \ + qt/transactiontablemodel.cpp \ + qt/coincontroldialog.cpp \ + qt/coincontroltreewidget.cpp \ + qt/aboutdialog.cpp \ + qt/addresstablemodel.cpp \ + qt/editaddressdialog.cpp \ + qt/bitcoinaddressvalidator.cpp \ + qt/clientmodel.cpp \ + qt/guiutil.cpp \ + qt/transactionrecord.cpp \ + qt/optionsmodel.cpp \ + qt/monitoreddatamapper.cpp \ + qt/transactiondesc.cpp \ + qt/bitcoinamountfield.cpp \ + qt/walletmodel.cpp \ + qt/csvmodelwriter.cpp \ + qt/qvalidatedlineedit.cpp \ + qt/bitcoinunits.cpp \ + qt/qvaluecombobox.cpp \ + qt/askpassphrasedialog.cpp \ + qt/notificator.cpp \ + qt/rpcconsole.cpp \ + qt/paymentserver.cpp \ + qt/peertablemodel.cpp \ + qt/scicon.cpp \ + qt/trafficgraphwidget.cpp \ + qt/spectregui.cpp \ + qt/spectre.cpp \ + qt/spectrebridge.cpp \ + qt/winshutdownmonitor.cpp \ + qt/setupwalletwizard.cpp \ + qt/websocketclientwrapper.cpp \ + qt/websockettransport.cpp + +aliaswallet_LDADD = $(aliaswalletd_LDADD) $(QT5_LIBS) $(QT5WEBKIT_LIBS) +aliaswallet_CPPFLAGS = $(aliaswalletd_CPPFLAGS) $(QT5_CFLAGS) $(QT5WEBKIT_CFLAGS) -DQT_DISABLE_DEPRECATED_BEFORE=0 +aliaswallet_LDFLAGS = $(aliaswalletd_LDFLAGS) $(QT5_LDFLAGS) $(QT5WEBKIT_LDFLAGS) +aliaswallet_LIBTOOLFLAGS = $(aliaswalletd_LIBTOOLFLAGS) + +if OS_WINDOWS_CROSSCOMPILE +# The GUI binary needs windows (GUI) subsystem so no console window pops +# up when the user double-clicks it. Daemon uses console subsystem from +# AM_LDFLAGS above; we override here for the GUI. +aliaswallet_LDFLAGS += -Wl,--subsystem,windows -all-static +endif + +if OS_MACOS + aliaswallet_SOURCES += qt/moc_macnotificationhandler.cpp \ + qt/macnotificationhandler.mm \ + qt/moc_macdockiconhandler.cpp \ + qt/macdockiconhandler.mm + aliaswallet_LDFLAGS += -framework Foundation -framework AppKit -framework CoreServices +endif +endif + +clean-local: + rm -f qt/moc_*.cpp + rm -f qt/ui_*.cpp + rm -f qt/qrc_*.cpp diff --git a/src/addrman.h b/src/addrman.h deleted file mode 100644 index b839d65fa6..0000000000 --- a/src/addrman.h +++ /dev/null @@ -1,503 +0,0 @@ -// Copyright (c) 2012 Pieter Wuille -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef _BITCOIN_ADDRMAN -#define _BITCOIN_ADDRMAN 1 - -#include "netbase.h" -#include "protocol.h" -#include "util.h" -#include "sync.h" - - -#include -#include - -#include - - -/** Extended statistics about a CAddress */ -class CAddrInfo : public CAddress -{ -private: - // where knowledge about this address first came from - CNetAddr source; - - // last successful connection by us - int64_t nLastSuccess; - - // last try whatsoever by us: - // int64_t CAddress::nLastTry - - // connection attempts since last successful attempt - int nAttempts; - - // reference count in new sets (memory only) - int nRefCount; - - // in tried set? (memory only) - bool fInTried; - - // position in vRandom - int nRandomPos; - - friend class CAddrMan; - -public: - - IMPLEMENT_SERIALIZE( - CAddress* pthis = (CAddress*)(this); - READWRITE(*pthis); - READWRITE(source); - READWRITE(nLastSuccess); - READWRITE(nAttempts); - ) - - void Init() - { - nLastSuccess = 0; - nLastTry = 0; - nAttempts = 0; - nRefCount = 0; - fInTried = false; - nRandomPos = -1; - } - - CAddrInfo(const CAddress &addrIn, const CNetAddr &addrSource) : CAddress(addrIn), source(addrSource) - { - Init(); - } - - CAddrInfo() : CAddress(), source() - { - Init(); - } - - // Calculate in which "tried" bucket this entry belongs - int GetTriedBucket(const std::vector &nKey) const; - - // Calculate in which "new" bucket this entry belongs, given a certain source - int GetNewBucket(const std::vector &nKey, const CNetAddr& src) const; - - // Calculate in which "new" bucket this entry belongs, using its default source - int GetNewBucket(const std::vector &nKey) const - { - return GetNewBucket(nKey, source); - } - - // Determine whether the statistics about this entry are bad enough so that it can just be deleted - bool IsTerrible(int64_t nNow = GetAdjustedTime()) const; - - // Calculate the relative chance this entry should be given when selecting nodes to connect to - double GetChance(int64_t nNow = GetAdjustedTime()) const; - -}; - -// Stochastic address manager -// -// Design goals: -// * Only keep a limited number of addresses around, so that addr.dat and memory requirements do not grow without bound. -// * Keep the address tables in-memory, and asynchronously dump the entire to able in addr.dat. -// * Make sure no (localized) attacker can fill the entire table with his nodes/addresses. -// -// To that end: -// * Addresses are organized into buckets. -// * Address that have not yet been tried go into 256 "new" buckets. -// * Based on the address range (/16 for IPv4) of source of the information, 32 buckets are selected at random -// * The actual bucket is chosen from one of these, based on the range the address itself is located. -// * One single address can occur in up to 4 different buckets, to increase selection chances for addresses that -// are seen frequently. The chance for increasing this multiplicity decreases exponentially. -// * When adding a new address to a full bucket, a randomly chosen entry (with a bias favoring less recently seen -// ones) is removed from it first. -// * Addresses of nodes that are known to be accessible go into 64 "tried" buckets. -// * Each address range selects at random 4 of these buckets. -// * The actual bucket is chosen from one of these, based on the full address. -// * When adding a new good address to a full bucket, a randomly chosen entry (with a bias favoring less recently -// tried ones) is evicted from it, back to the "new" buckets. -// * Bucket selection is based on cryptographic hashing, using a randomly-generated 256-bit key, which should not -// be observable by adversaries. -// * Several indexes are kept for high performance. Defining DEBUG_ADDRMAN will introduce frequent (and expensive) -// consistency checks for the entire data structure. - -// total number of buckets for tried addresses -#define ADDRMAN_TRIED_BUCKET_COUNT 64 - -// maximum allowed number of entries in buckets for tried addresses -#define ADDRMAN_TRIED_BUCKET_SIZE 64 - -// total number of buckets for new addresses -#define ADDRMAN_NEW_BUCKET_COUNT 256 - -// maximum allowed number of entries in buckets for new addresses -#define ADDRMAN_NEW_BUCKET_SIZE 64 - -// over how many buckets entries with tried addresses from a single group (/16 for IPv4) are spread -#define ADDRMAN_TRIED_BUCKETS_PER_GROUP 4 - -// over how many buckets entries with new addresses originating from a single group are spread -#define ADDRMAN_NEW_BUCKETS_PER_SOURCE_GROUP 32 - -// in how many buckets for entries with new addresses a single address may occur -#define ADDRMAN_NEW_BUCKETS_PER_ADDRESS 4 - -// how many entries in a bucket with tried addresses are inspected, when selecting one to replace -#define ADDRMAN_TRIED_ENTRIES_INSPECT_ON_EVICT 4 - -// how old addresses can maximally be -#define ADDRMAN_HORIZON_DAYS 30 - -// after how many failed attempts we give up on a new node -#define ADDRMAN_RETRIES 3 - -// how many successive failures are allowed ... -#define ADDRMAN_MAX_FAILURES 10 - -// ... in at least this many days -#define ADDRMAN_MIN_FAIL_DAYS 7 - -// the maximum percentage of nodes to return in a getaddr call -#define ADDRMAN_GETADDR_MAX_PCT 23 - -// the maximum number of nodes to return in a getaddr call -#define ADDRMAN_GETADDR_MAX 2500 - -/** Stochastical (IP) address manager */ -class CAddrMan -{ -private: - // critical section to protect the inner data structures - mutable CCriticalSection cs; - - // secret key to randomize bucket select with - std::vector nKey; - - // last used nId - int nIdCount; - - // table with information about all nIds - std::map mapInfo; - - // find an nId based on its network address - std::map mapAddr; - - // randomly-ordered vector of all nIds - std::vector vRandom; - - // number of "tried" entries - int nTried; - - // list of "tried" buckets - std::vector > vvTried; - - // number of (unique) "new" entries - int nNew; - - // list of "new" buckets - std::vector > vvNew; - -protected: - - // Find an entry. - CAddrInfo* Find(const CNetAddr& addr, int *pnId = NULL); - - // find an entry, creating it if necessary. - // nTime and nServices of found node is updated, if necessary. - CAddrInfo* Create(const CAddress &addr, const CNetAddr &addrSource, int *pnId = NULL); - - // Swap two elements in vRandom. - void SwapRandom(unsigned int nRandomPos1, unsigned int nRandomPos2); - - // Return position in given bucket to replace. - int SelectTried(int nKBucket); - - // Remove an element from a "new" bucket. - // This is the only place where actual deletes occur. - // They are never deleted while in the "tried" table, only possibly evicted back to the "new" table. - int ShrinkNew(int nUBucket); - - // Move an entry from the "new" table(s) to the "tried" table - // @pre vvUnkown[nOrigin].count(nId) != 0 - void MakeTried(CAddrInfo& info, int nId, int nOrigin); - - // Mark an entry "good", possibly moving it from "new" to "tried". - void Good_(const CService &addr, int64_t nTime); - - // Add an entry to the "new" table. - bool Add_(const CAddress &addr, const CNetAddr& source, int64_t nTimePenalty); - - // Mark an entry as attempted to connect. - void Attempt_(const CService &addr, int64_t nTime); - - // Select an address to connect to. - // nUnkBias determines how much to favor new addresses over tried ones (min=0, max=100) - CAddress Select_(int nUnkBias); - -#ifdef DEBUG_ADDRMAN - // Perform consistency check. Returns an error code or zero. - int Check_(); -#endif - - // Select several addresses at once. - void GetAddr_(std::vector &vAddr); - - // Mark an entry as currently-connected-to. - void Connected_(const CService &addr, int64_t nTime); - -public: - - IMPLEMENT_SERIALIZE - (({ - // serialized format: - // * version byte (currently 0) - // * nKey - // * nNew - // * nTried - // * number of "new" buckets - // * all nNew addrinfos in vvNew - // * all nTried addrinfos in vvTried - // * for each bucket: - // * number of elements - // * for each element: index - // - // Notice that vvTried, mapAddr and vVector are never encoded explicitly; - // they are instead reconstructed from the other information. - // - // vvNew is serialized, but only used if ADDRMAN_UNKOWN_BUCKET_COUNT didn't change, - // otherwise it is reconstructed as well. - // - // This format is more complex, but significantly smaller (at most 1.5 MiB), and supports - // changes to the ADDRMAN_ parameters without breaking the on-disk structure. - { - LOCK(cs); - unsigned char nVersion = 0; - READWRITE(nVersion); - READWRITE(nKey); - READWRITE(nNew); - READWRITE(nTried); - - CAddrMan *am = const_cast(this); - if (fWrite) - { - int nUBuckets = ADDRMAN_NEW_BUCKET_COUNT; - READWRITE(nUBuckets); - std::map mapUnkIds; - int nIds = 0; - for (std::map::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) - { - if (nIds == nNew) break; // this means nNew was wrong, oh ow - mapUnkIds[(*it).first] = nIds; - CAddrInfo &info = (*it).second; - if (info.nRefCount) - { - READWRITE(info); - nIds++; - } - } - nIds = 0; - for (std::map::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) - { - if (nIds == nTried) break; // this means nTried was wrong, oh ow - CAddrInfo &info = (*it).second; - if (info.fInTried) - { - READWRITE(info); - nIds++; - } - } - for (std::vector >::iterator it = am->vvNew.begin(); it != am->vvNew.end(); it++) - { - const std::set &vNew = (*it); - int nSize = vNew.size(); - READWRITE(nSize); - for (std::set::iterator it2 = vNew.begin(); it2 != vNew.end(); it2++) - { - int nIndex = mapUnkIds[*it2]; - READWRITE(nIndex); - } - } - } else { - int nUBuckets = 0; - READWRITE(nUBuckets); - am->nIdCount = 0; - am->mapInfo.clear(); - am->mapAddr.clear(); - am->vRandom.clear(); - am->vvTried = std::vector >(ADDRMAN_TRIED_BUCKET_COUNT, std::vector(0)); - am->vvNew = std::vector >(ADDRMAN_NEW_BUCKET_COUNT, std::set()); - for (int n = 0; n < am->nNew; n++) - { - CAddrInfo &info = am->mapInfo[n]; - READWRITE(info); - am->mapAddr[info] = n; - info.nRandomPos = vRandom.size(); - am->vRandom.push_back(n); - if (nUBuckets != ADDRMAN_NEW_BUCKET_COUNT) - { - am->vvNew[info.GetNewBucket(am->nKey)].insert(n); - info.nRefCount++; - } - } - am->nIdCount = am->nNew; - int nLost = 0; - for (int n = 0; n < am->nTried; n++) - { - CAddrInfo info; - READWRITE(info); - std::vector &vTried = am->vvTried[info.GetTriedBucket(am->nKey)]; - if (vTried.size() < ADDRMAN_TRIED_BUCKET_SIZE) - { - info.nRandomPos = vRandom.size(); - info.fInTried = true; - am->vRandom.push_back(am->nIdCount); - am->mapInfo[am->nIdCount] = info; - am->mapAddr[info] = am->nIdCount; - vTried.push_back(am->nIdCount); - am->nIdCount++; - } else { - nLost++; - } - } - am->nTried -= nLost; - for (int b = 0; b < nUBuckets; b++) - { - std::set &vNew = am->vvNew[b]; - int nSize = 0; - READWRITE(nSize); - for (int n = 0; n < nSize; n++) - { - int nIndex = 0; - READWRITE(nIndex); - CAddrInfo &info = am->mapInfo[nIndex]; - if (nUBuckets == ADDRMAN_NEW_BUCKET_COUNT && info.nRefCount < ADDRMAN_NEW_BUCKETS_PER_ADDRESS) - { - info.nRefCount++; - vNew.insert(nIndex); - } - } - } - } - } - });) - - CAddrMan() : vRandom(0), vvTried(ADDRMAN_TRIED_BUCKET_COUNT, std::vector(0)), vvNew(ADDRMAN_NEW_BUCKET_COUNT, std::set()) - { - nKey.resize(32); - RAND_bytes(&nKey[0], 32); - - nIdCount = 0; - nTried = 0; - nNew = 0; - } - - // Return the number of (unique) addresses in all tables. - int size() - { - return vRandom.size(); - } - - // Consistency check - void Check() - { -#ifdef DEBUG_ADDRMAN - { - LOCK(cs); - int err; - if ((err=Check_())) - LogPrintf("ADDRMAN CONSISTENCY CHECK FAILED!!! err=%i\n", err); - } -#endif - } - - // Add a single address. - bool Add(const CAddress &addr, const CNetAddr& source, int64_t nTimePenalty = 0) - { - bool fRet = false; - { - LOCK(cs); - Check(); - fRet |= Add_(addr, source, nTimePenalty); - Check(); - } - if (fRet) - LogPrintf("Added %s from %s: %i tried, %i new\n", addr.ToStringIPPort().c_str(), source.ToString().c_str(), nTried, nNew); - return fRet; - } - - // Add multiple addresses. - bool Add(const std::vector &vAddr, const CNetAddr& source, int64_t nTimePenalty = 0) - { - int nAdd = 0; - { - LOCK(cs); - Check(); - for (std::vector::const_iterator it = vAddr.begin(); it != vAddr.end(); it++) - nAdd += Add_(*it, source, nTimePenalty) ? 1 : 0; - Check(); - } - if (nAdd) - LogPrintf("Added %i addresses from %s: %i tried, %i new\n", nAdd, source.ToString().c_str(), nTried, nNew); - return nAdd > 0; - } - - // Mark an entry as accessible. - void Good(const CService &addr, int64_t nTime = GetAdjustedTime()) - { - { - LOCK(cs); - Check(); - Good_(addr, nTime); - Check(); - } - } - - // Mark an entry as connection attempted to. - void Attempt(const CService &addr, int64_t nTime = GetAdjustedTime()) - { - { - LOCK(cs); - Check(); - Attempt_(addr, nTime); - Check(); - } - } - - // Choose an address to connect to. - // nUnkBias determines how much "new" entries are favored over "tried" ones (0-100). - CAddress Select(int nUnkBias = 50) - { - CAddress addrRet; - { - LOCK(cs); - Check(); - addrRet = Select_(nUnkBias); - Check(); - } - return addrRet; - } - - // Return a bunch of addresses, selected at random. - std::vector GetAddr() - { - Check(); - std::vector vAddr; - { - LOCK(cs); - GetAddr_(vAddr); - } - Check(); - return vAddr; - } - - // Mark an entry as currently-connected-to. - void Connected(const CService &addr, int64_t nTime = GetAdjustedTime()) - { - { - LOCK(cs); - Check(); - Connected_(addr, nTime); - Check(); - } - } -}; - -#endif diff --git a/src/alert.cpp b/src/alert.cpp index e0c5ef41cc..5bc9aa4b58 100644 --- a/src/alert.cpp +++ b/src/alert.cpp @@ -1,6 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2010 Satoshi Nakamoto +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers // -// Alert system -// +// SPDX-License-Identifier: MIT #include #include @@ -9,11 +13,11 @@ #include #include "alert.h" -#include "chainparams.h" -#include "key.h" -#include "net.h" -#include "sync.h" -#include "ui_interface.h" +#include "kernel/chainparams.h" +#include "key/key.h" +#include "net/net.h" +#include "util/sync.h" +#include "interface.h" std::map mapAlerts; @@ -187,13 +191,41 @@ bool CAlert::ProcessAlert(bool fThread) nMaxVer == maxInt && setSubVer.empty() && nPriority == maxInt && - strStatusBar == "URGENT: Alert key compromised, upgrade required" + strStatusBar == "URGENT: Alert key compromised, upgrade required" && + strComment == "" && + strReserved == "" && + nVersion == 1 )) return false; } { LOCK(cs_mapAlerts); + + // Check if this alert has been cancelled + BOOST_FOREACH(PAIRTYPE(const uint256, CAlert)& item, mapAlerts) + { + const CAlert& alert = item.second; + if (alert.Cancels(*this)) + { + LogPrint("alert", "alert already cancelled by %d\n", alert.nID); + return false; + } + if ( + alert.nExpiration == maxInt && + alert.nCancel == (maxInt-1) && + alert.nMinVer == 0 && + alert.nMaxVer == maxInt && + alert.setSubVer.empty() && + alert.nPriority == maxInt && + alert.strStatusBar == "URGENT: Alert key compromised, upgrade required" && + alert.strComment == "" && + alert.strReserved == "" && + alert.nVersion == 1 + ) { // If we have a final alert, do not continue + return false; + } + } // Cancel previous alerts for (std::map::iterator mi = mapAlerts.begin(); mi != mapAlerts.end();) { @@ -215,16 +247,10 @@ bool CAlert::ProcessAlert(bool fThread) } } - // Check if this alert has been cancelled - BOOST_FOREACH(PAIRTYPE(const uint256, CAlert)& item, mapAlerts) - { - const CAlert& alert = item.second; - if (alert.Cancels(*this)) - { - LogPrintf("alert already cancelled by %d\n", alert.nID); - return false; - } - } + // Do not allow more than 5 concurrent alerts + if (mapAlerts.size() >= 5) { + return false; + } // Add to mapAlerts mapAlerts.insert(std::make_pair(GetHash(), *this)); diff --git a/src/alert.h b/src/alert.h index 4eaa78f729..d888b25bcb 100644 --- a/src/alert.h +++ b/src/alert.h @@ -1,7 +1,10 @@ -// Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2010 Satoshi Nakamoto +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT #ifndef _BITCOINALERT_H_ #define _BITCOINALERT_H_ @@ -10,7 +13,7 @@ #include #include "uint256.h" -#include "util.h" +#include "util/util.h" class CNode; diff --git a/src/android/AndroidManifest.xml b/src/android/AndroidManifest.xml new file mode 100644 index 0000000000..e0904bb077 --- /dev/null +++ b/src/android/AndroidManifest.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/android/build.gradle b/src/android/build.gradle new file mode 100644 index 0000000000..634451d675 --- /dev/null +++ b/src/android/build.gradle @@ -0,0 +1,71 @@ +/** + * SPDX-FileCopyrightText: © 2020 Alias Developers + * + * SPDX-License-Identifier: MIT + */ +buildscript { + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.5.0' + } +} + +repositories { + google() + jcenter() +} + +apply plugin: 'com.android.application' + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) +} + +android { + /******************************************************* + * The following variables: + * - androidBuildToolsVersion, + * - androidCompileSdkVersion + * - qt5AndroidDir - holds the path to qt android files + * needed to build any Qt application + * on Android. + * + * are defined in gradle.properties file. This file is + * updated by QtCreator and androiddeployqt tools. + * Changing them manually might break the compilation! + *******************************************************/ + + compileSdkVersion androidCompileSdkVersion.toInteger() + + buildToolsVersion '28.0.3' + + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java'] + aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl'] + res.srcDirs = [qt5AndroidDir + '/res', 'res'] + resources.srcDirs = ['resources'] + renderscript.srcDirs = ['src'] + assets.srcDirs = ['assets'] + jniLibs.srcDirs = ['libs'] + } + } + + lintOptions { + abortOnError false + } + + // Do not compress Qt binary resources file + aaptOptions { + noCompress 'rcc' + } + + defaultConfig { + resConfigs "en" + } +} diff --git a/src/android/res/values/libs.xml b/src/android/res/values/libs.xml new file mode 100644 index 0000000000..11ebf0ffd6 --- /dev/null +++ b/src/android/res/values/libs.xml @@ -0,0 +1,24 @@ + + + + + + https://download.qt.io/ministro/android/qt5/qt-5.14 + + + + + + + + + + + + + + + + + diff --git a/src/anon/anonymize.cpp b/src/anon/anonymize.cpp new file mode 100644 index 0000000000..a3ac5dbd53 --- /dev/null +++ b/src/anon/anonymize.cpp @@ -0,0 +1,41 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2013 StealthCoin/StealthSend Developers +// SPDX-FileCopyrightText: © 2013 BritCoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + +#include "anon/anonymize.h" +#include "util/util.h" + +#include +#include +#include + +extern const char tor_git_revision[]; +const char tor_git_revision[] = ""; + +char const* anonymize_tor_data_directory( +) { + static std::string const retrieved = ( + GetDefaultDataDir( + ) / "tor" + ).string( + ); + return retrieved.c_str( + ); +} + +char const* anonymize_service_directory( +) { + static std::string const retrieved = ( + GetDefaultDataDir( + ) / "onion" + ).string( + ); + return retrieved.c_str( + ); +} diff --git a/src/anon/anonymize.h b/src/anon/anonymize.h new file mode 100644 index 0000000000..c87827fef3 --- /dev/null +++ b/src/anon/anonymize.h @@ -0,0 +1,28 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2013 BritCoin Developers +// +// SPDX-License-Identifier: MIT + +/** + * \file anonymize.h + * \brief Headers for anonymize.cpp + **/ + +#ifndef TOR_ANONYMIZE_H +#define TOR_ANONYMIZE_H + +#ifdef __cplusplus +extern "C" { +#endif + + char const* anonymize_tor_data_directory(void); + char const* anonymize_service_directory(void); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/ringsig.cpp b/src/anon/ringsig.cpp similarity index 94% rename from src/ringsig.cpp rename to src/anon/ringsig.cpp index 5d1be3f753..44f15427db 100644 --- a/src/ringsig.cpp +++ b/src/anon/ringsig.cpp @@ -1,12 +1,15 @@ -// Copyright (c) 2014 The ShadowCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. - -#include "ringsig.h" +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +// +// SPDX-License-Identifier: MIT + +#include "anon/ringsig.h" #include "base58.h" -#include "key.h" +#include "key/key.h" #include "main.h" -#include "chainparams.h" +#include "kernel/chainparams.h" #include #include @@ -63,12 +66,17 @@ int finaliseRingSigs() } -int splitAmount(int64_t nValue, std::vector& vOut) +int splitAmount(int64_t nValue, std::vector& vOut, int64_t maxAnonOutput) { - // - split amounts into 1, 3, 4, 5 + // First make sure no output bigger than maxAnonOutput is created + for (int numOfMaxAnonOutputs = nValue / maxAnonOutput; numOfMaxAnonOutputs > 0; numOfMaxAnonOutputs--) { + vOut.push_back(1 * maxAnonOutput); + } + nValue = nValue % maxAnonOutput; - int64_t nTest = 1; - int i; + // - split amounts into 1, 3, 4, 5 + int64_t nTest = 1; + int i; while (nValue >= nTest) { @@ -107,7 +115,7 @@ int splitAmount(int64_t nValue, std::vector& vOut) } -int getOldKeyImage(CPubKey &publicKey, ec_point &keyImage) +int getOldKeyImage(const CPubKey &publicKey, ec_point &keyImage) { // - PublicKey * Hash(PublicKey) if (publicKey.size() != EC_COMPRESSED_SIZE) @@ -188,7 +196,7 @@ static int hashToEC(const uint8_t *p, uint32_t len, BIGNUM *bnTmp, EC_POINT *ptR } -int generateKeyImage(ec_point &publicKey, ec_secret secret, ec_point &keyImage) +int generateKeyImage(const ec_point &publicKey, ec_secret secret, ec_point &keyImage) { // - keyImage = secret * hash(publicKey) * G @@ -240,7 +248,7 @@ int generateKeyImage(ec_point &publicKey, ec_secret secret, ec_point &keyImage) } -int generateRingSignature(data_chunk &keyImage, uint256 &txnHash, int nRingSize, int nSecretOffset, ec_secret secret, const uint8_t *pPubkeys, uint8_t *pSigc, uint8_t *pSigr) +int generateRingSignature(const data_chunk &keyImage, const uint256 &txnHash, int nRingSize, int nSecretOffset, ec_secret secret, const uint8_t *pPubkeys, uint8_t *pSigc, uint8_t *pSigr) { if (fDebugRingSig) LogPrintf("%s: Ring size %d.\n", __func__, nRingSize); @@ -289,11 +297,7 @@ int generateRingSignature(data_chunk &keyImage, uint256 &txnHash, int nRingSize, } // zero sum - if (!bnSum || !(BN_zero(bnSum))) - { - LogPrintf("%s: BN_zero failed.\n", __func__); - rv = 1; goto End; - } + BN_zero(bnSum); if ( !(ptT1 = EC_POINT_new(ecGrp)) || !(ptT2 = EC_POINT_new(ecGrp)) @@ -506,7 +510,7 @@ int generateRingSignature(data_chunk &keyImage, uint256 &txnHash, int nRingSize, return rv; } -int verifyRingSignature(data_chunk &keyImage, uint256 &txnHash, int nRingSize, const uint8_t *pPubkeys, const uint8_t *pSigc, const uint8_t *pSigr) +int verifyRingSignature(const data_chunk &keyImage, const uint256 &txnHash, int nRingSize, const uint8_t *pPubkeys, const uint8_t *pSigc, const uint8_t *pSigr) { int rv = 0; @@ -532,11 +536,7 @@ int verifyRingSignature(data_chunk &keyImage, uint256 &txnHash, int nRingSize, c ssCommitHash << txnHash; // zero sum - if (!bnSum || !(BN_zero(bnSum))) - { - LogPrintf("%s: BN_zero failed.\n", __func__); - rv = 1; goto End; - } + BN_zero(bnSum); if ( !(ptT1 = EC_POINT_new(ecGrp)) || !(ptT2 = EC_POINT_new(ecGrp)) @@ -686,7 +686,7 @@ int verifyRingSignature(data_chunk &keyImage, uint256 &txnHash, int nRingSize, c } -int generateRingSignatureAB(data_chunk &keyImage, uint256 &txnHash, int nRingSize, int nSecretOffset, ec_secret secret, const uint8_t *pPubkeys, data_chunk &sigC, uint8_t *pSigS) +int generateRingSignatureAB(const data_chunk &keyImage, int nRingSize, int nSecretOffset, ec_secret secret, const uint8_t *pPubkeys, data_chunk &sigC, uint8_t *pSigS) { // https://bitcointalk.org/index.php?topic=972541.msg10619684 @@ -961,7 +961,7 @@ int generateRingSignatureAB(data_chunk &keyImage, uint256 &txnHash, int nRingSiz } -int verifyRingSignatureAB(data_chunk &keyImage, uint256 &txnHash, int nRingSize, const uint8_t *pPubkeys, const data_chunk &sigC, const uint8_t *pSigS) +int verifyRingSignatureAB(const data_chunk &keyImage, int nRingSize, const uint8_t *pPubkeys, const data_chunk &sigC, const uint8_t *pSigS) { // https://bitcointalk.org/index.php?topic=972541.msg10619684 @@ -999,12 +999,14 @@ int verifyRingSignatureAB(data_chunk &keyImage, uint256 &txnHash, int nRingSize, EC_POINT *ptT1 = NULL; EC_POINT *ptT2 = NULL; EC_POINT *ptT3 = NULL; + EC_POINT *ptT4 = NULL; EC_POINT *ptPk = NULL; if (!(ptKi = EC_POINT_new(ecGrp)) ||!(ptT1 = EC_POINT_new(ecGrp)) ||!(ptT2 = EC_POINT_new(ecGrp)) ||!(ptT3 = EC_POINT_new(ecGrp)) + ||!(ptT4 = EC_POINT_new(ecGrp)) ||!(ptPk = EC_POINT_new(ecGrp))) { LogPrintf("%s: EC_POINT_new failed.\n", __func__); @@ -1016,6 +1018,14 @@ int verifyRingSignatureAB(data_chunk &keyImage, uint256 &txnHash, int nRingSize, &&(rv = errorN(1, "%s: extract ptKi failed.", __func__))) goto End; + // test ECC validity with: keyimage * order == infinity/identity + if (!EC_POINT_mul(ecGrp, ptT4, NULL, ptKi, bnOrder, bnCtx) + &&(rv = errorN(1, "%s: EC_POINT_mul failed.\n", __func__))) + goto End; + if (!EC_POINT_is_at_infinity(ecGrp, ptT4) + &&(rv = errorN(1, "%s: keyImage not valid (ptKi * bnOrder != infinity).\n", __func__))) + goto End; + if (!bnC1 || !BN_bin2bn(&sigC[0], EC_SECRET_SIZE, bnC1)) { LogPrintf("%s: BN_bin2bn failed.\n", __func__); @@ -1127,6 +1137,7 @@ int verifyRingSignatureAB(data_chunk &keyImage, uint256 &txnHash, int nRingSize, EC_POINT_free(ptT1); EC_POINT_free(ptT2); EC_POINT_free(ptT3); + EC_POINT_free(ptT4); EC_POINT_free(ptPk); return rv; diff --git a/src/anon/ringsig.h b/src/anon/ringsig.h new file mode 100644 index 0000000000..abfc412cee --- /dev/null +++ b/src/anon/ringsig.h @@ -0,0 +1,51 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +// +// SPDX-License-Identifier: MIT + +#ifndef SPEC_RINGSIG_H +#define SPEC_RINGSIG_H + +#include "anon/stealth.h" +#include "state.h" +#include "types.h" + +class CPubKey; + +enum ringsigType +{ + RING_SIG_1 = 1, + RING_SIG_2, +}; + +const uint32_t MIN_ANON_OUT_SIZE = 1 + 1 + 1 + 33 + 1 + 33; // OP_RETURN ANON_TOKEN lenPk pkTo lenR R [lenEnarr enarr] +const uint32_t MIN_ANON_IN_SIZE = 2 + (33 + 32 + 32); // 2byte marker (cpubkey + sigc + sigr) +const uint32_t MAX_ANON_NARRATION_SIZE = 48; +const uint32_t MIN_RING_SIZE = 10; +const uint32_t MAX_RING_SIZE = 32; // already overkill + +const int MIN_ANON_SPEND_DEPTH = 10; +const int ANON_TXN_VERSION = 1000; + +// MAX_MONEY = 200000000000000000; most complex possible value can be represented by 36 outputs + +int initialiseRingSigs(); +int finaliseRingSigs(); + +int splitAmount(int64_t nValue, std::vector &vOut, int64_t maxAnonOutput = nMaxAnonOutput); + +int getOldKeyImage(const CPubKey &pubkey, ec_point &keyImage); + +int generateKeyImage(const ec_point &publicKey, ec_secret secret, ec_point &keyImage); + +int generateRingSignature(const data_chunk &keyImage, const uint256 &txnHash, int nRingSize, int nSecretOffset, ec_secret secret, const uint8_t *pPubkeys, uint8_t *pSigc, uint8_t *pSigr); +int verifyRingSignature(const data_chunk &keyImage, const uint256 &txnHash, int nRingSize, const uint8_t *pPubkeys, const uint8_t *pSigc, const uint8_t *pSigr); + +int generateRingSignatureAB(const data_chunk &keyImage, int nRingSize, int nSecretOffset, ec_secret secret, const uint8_t *pPubkeys, data_chunk &sigC, uint8_t *pSigS); +int verifyRingSignatureAB(const data_chunk &keyImage, int nRingSize, const uint8_t *pPubkeys, const data_chunk &sigC, const uint8_t *pSigS); + + +#endif // SPEC_RINGSIG_H + diff --git a/src/stealth.cpp b/src/anon/stealth.cpp similarity index 95% rename from src/stealth.cpp rename to src/anon/stealth.cpp index eddb5d2c76..bc7b35ea65 100644 --- a/src/stealth.cpp +++ b/src/anon/stealth.cpp @@ -1,8 +1,11 @@ -// Copyright (c) 2014 The ShadowCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +// +// SPDX-License-Identifier: MIT -#include "stealth.h" +#include "anon/stealth.h" #include "base58.h" #include "state.h" @@ -15,50 +18,56 @@ bool CStealthAddress::SetEncoded(const std::string& encodedAddress) { + if (encodedAddress.length() < 76) + { + //LogPrintf("SetEncoded address to short, quick fail.\n"); + return false; + }; + data_chunk raw; - + if (!DecodeBase58(encodedAddress, raw)) { if (fDebug) LogPrintf("CStealthAddress::SetEncoded DecodeBase58 falied.\n"); return false; }; - + if (!VerifyChecksum(raw)) { if (fDebug) LogPrintf("CStealthAddress::SetEncoded verify_checksum falied.\n"); return false; }; - + if (raw.size() < 1 + 1 + 33 + 1 + 33 + 1 + 1 + 4) { if (fDebug) LogPrintf("CStealthAddress::SetEncoded() too few bytes provided.\n"); return false; }; - - + + uint8_t* p = &raw[0]; uint8_t version = *p++; - + if (version != Params().Base58Prefix(CChainParams::STEALTH_ADDRESS)[0]) { LogPrintf("CStealthAddress::SetEncoded version mismatch 0x%x != 0x%x.\n", version, Params().Base58Prefix(CChainParams::STEALTH_ADDRESS)[0]); return false; }; - + options = *p++; - + scan_pubkey.resize(33); memcpy(&scan_pubkey[0], p, 33); p += 33; //uint8_t spend_pubkeys = *p++; p++; - + spend_pubkey.resize(33); memcpy(&spend_pubkey[0], p, 33); - + return true; }; @@ -66,20 +75,20 @@ std::string CStealthAddress::Encoded() const { // https://wiki.unsystem.net/index.php/DarkWallet/Stealth#Address_format // [version] [options] [scan_key] [N] ... [Nsigs] [prefix_length] ... - + data_chunk raw; raw = Params().Base58Prefix(CChainParams::STEALTH_ADDRESS); - + raw.push_back(options); - + raw.insert(raw.end(), scan_pubkey.begin(), scan_pubkey.end()); raw.push_back(1); // number of spend pubkeys raw.insert(raw.end(), spend_pubkey.begin(), spend_pubkey.end()); raw.push_back(0); // number of signatures raw.push_back(0); // ? - + AppendChecksum(raw); - + return EncodeBase58(raw); }; @@ -94,9 +103,9 @@ int CStealthAddress::SetScanPubKey(CPubKey pk) int GenerateRandomSecret(ec_secret& out) { RandAddSeedPerfmon(); - + uint256 test; - + int i; // -- check max, try max 32 times for (i = 0; i < 32; ++i) @@ -109,10 +118,10 @@ int GenerateRandomSecret(ec_secret& out) break; }; }; - + if (i > 31) return errorN(1, "%s: Failed to generate a valid key.", __func__); - + return 0; }; @@ -120,9 +129,9 @@ int SecretToPublicKey(const ec_secret& secret, ec_point& out) { // -- public key = private * G int rv = 0; - + EC_GROUP* ecgrp = EC_GROUP_new_by_curve_name(NID_secp256k1); - + if (!ecgrp) return errorN(1, "%s: EC_GROUP_new_by_curve_name failed.", __func__); @@ -132,12 +141,12 @@ int SecretToPublicKey(const ec_secret& secret, ec_point& out) EC_GROUP_free(ecgrp); return errorN(1, "%s: BN_bin2bn failed.", __func__); }; - + EC_POINT* pub = EC_POINT_new(ecgrp); - - + + EC_POINT_mul(ecgrp, pub, bnIn, NULL, NULL, NULL); - + BIGNUM* bnOut = EC_POINT_point2bn(ecgrp, pub, POINT_CONVERSION_COMPRESSED, BN_new(), NULL); if (!bnOut) { @@ -152,14 +161,14 @@ int SecretToPublicKey(const ec_secret& secret, ec_point& out) LogPrintf("%s: bnOut incorrect length.\n", __func__); rv = 1; }; - + BN_free(bnOut); }; - + EC_POINT_free(pub); BN_free(bnIn); EC_GROUP_free(ecgrp); - + return rv; }; @@ -167,14 +176,14 @@ int SecretToPublicKey(const ec_secret& secret, ec_point& out) int StealthSecret(ec_secret& secret, ec_point& pubkey, const ec_point& pkSpend, ec_secret& sharedSOut, ec_point& pkOut) { /* - + send: secret = ephem_secret, pubkey = scan_pubkey - + receive: secret = scan_secret, pubkey = ephem_pubkey c = H(dP) - + Q = public scan key (EC point, 33 bytes) d = private scan key (integer, 32 bytes) R = public spend key @@ -182,23 +191,23 @@ int StealthSecret(ec_secret& secret, ec_point& pubkey, const ec_point& pkSpend, Q = dG R = fG - + Sender (has Q and R, not d or f): - + P = eG c = H(eQ) = H(dP) R' = R + cG - - + + Recipient gets R' and P - + test 0 and infinity? */ - + int rv = 0; std::vector vchOutQ; - + BN_CTX* bnCtx = NULL; BIGNUM* bnEphem = NULL; BIGNUM* bnQ = NULL; @@ -210,58 +219,58 @@ int StealthSecret(ec_secret& secret, ec_point& pubkey, const ec_point& pkSpend, EC_POINT* R = NULL; EC_POINT* Rout = NULL; BIGNUM* bnOutR = NULL; - + EC_GROUP* ecgrp = EC_GROUP_new_by_curve_name(NID_secp256k1); - + if (!ecgrp) return errorN(1, "%s: EC_GROUP_new_by_curve_name failed.", __func__); - + if (!(bnCtx = BN_CTX_new())) { LogPrintf("%s: BN_CTX_new failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnEphem = BN_bin2bn(&secret.e[0], EC_SECRET_SIZE, BN_new()))) { LogPrintf("%s: bnEphem BN_bin2bn failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnQ = BN_bin2bn(&pubkey[0], pubkey.size(), BN_new()))) { LogPrintf("%s: bnEphem bnQ failed.\n", __func__); rv = 1; goto End; }; - + if (!(Q = EC_POINT_bn2point(ecgrp, bnQ, NULL, bnCtx))) { LogPrintf("%s: Q EC_POINT_bn2point failed.\n", __func__); rv = 1; goto End; }; - + // -- eQ // EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); - // EC_POINT_mul calculates the value generator * n + q * m and stores the result in r. The value n may be NULL in which case the result is just q * m. + // EC_POINT_mul calculates the value generator * n + q * m and stores the result in r. The value n may be NULL in which case the result is just q * m. if (!EC_POINT_mul(ecgrp, Q, NULL, Q, bnEphem, bnCtx)) { LogPrintf("%s: eQ EC_POINT_mul failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnOutQ = EC_POINT_point2bn(ecgrp, Q, POINT_CONVERSION_COMPRESSED, BN_new(), bnCtx))) { LogPrintf("%s: Q EC_POINT_bn2point failed.\n", __func__); rv = 1; goto End; }; - - + + vchOutQ.resize(EC_COMPRESSED_SIZE); if (BN_num_bytes(bnOutQ) != (int) EC_COMPRESSED_SIZE || BN_bn2bin(bnOutQ, &vchOutQ[0]) != (int) EC_COMPRESSED_SIZE) @@ -270,16 +279,16 @@ int StealthSecret(ec_secret& secret, ec_point& pubkey, const ec_point& pkSpend, rv = 1; goto End; }; - + SHA256(&vchOutQ[0], vchOutQ.size(), &sharedSOut.e[0]); - + if (!(bnc = BN_bin2bn(&sharedSOut.e[0], EC_SECRET_SIZE, BN_new()))) { LogPrintf("%s: BN_bin2bn failed.\n", __func__); rv = 1; goto End; }; - + // -- cG if (!(C = EC_POINT_new(ecgrp))) { @@ -287,58 +296,58 @@ int StealthSecret(ec_secret& secret, ec_point& pubkey, const ec_point& pkSpend, rv = 1; goto End; }; - + if (!EC_POINT_mul(ecgrp, C, bnc, NULL, NULL, bnCtx)) { LogPrintf("%s: C EC_POINT_mul failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnR = BN_bin2bn(&pkSpend[0], pkSpend.size(), BN_new()))) { LogPrintf("%s: bnR BN_bin2bn failed.\n", __func__); rv = 1; goto End; }; - - + + if (!(R = EC_POINT_bn2point(ecgrp, bnR, NULL, bnCtx))) { LogPrintf("%s: R EC_POINT_bn2point failed.\n", __func__); rv = 1; goto End; }; - + if (!EC_POINT_mul(ecgrp, C, bnc, NULL, NULL, bnCtx)) { LogPrintf("%s: C EC_POINT_mul failed.\n", __func__); rv = 1; goto End; }; - + if (!(Rout = EC_POINT_new(ecgrp))) { LogPrintf("%s: Rout EC_POINT_new failed.\n", __func__); rv = 1; goto End; }; - + if (!EC_POINT_add(ecgrp, Rout, R, C, bnCtx)) { LogPrintf("%s: Rout EC_POINT_add failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnOutR = EC_POINT_point2bn(ecgrp, Rout, POINT_CONVERSION_COMPRESSED, BN_new(), bnCtx))) { LogPrintf("%s: Rout EC_POINT_bn2point failed.\n", __func__); rv = 1; goto End; }; - - + + pkOut.resize(EC_COMPRESSED_SIZE); if (BN_num_bytes(bnOutR) != (int) EC_COMPRESSED_SIZE || BN_bn2bin(bnOutR, &pkOut[0]) != (int) EC_COMPRESSED_SIZE) @@ -347,7 +356,7 @@ int StealthSecret(ec_secret& secret, ec_point& pubkey, const ec_point& pkSpend, rv = 1; goto End; }; - + End: if (bnOutR) BN_free(bnOutR); if (Rout) EC_POINT_free(Rout); @@ -361,7 +370,7 @@ int StealthSecret(ec_secret& secret, ec_point& pubkey, const ec_point& pkSpend, if (bnEphem) BN_free(bnEphem); if (bnCtx) BN_CTX_free(bnCtx); EC_GROUP_free(ecgrp); - + return rv; }; @@ -369,16 +378,16 @@ int StealthSecret(ec_secret& secret, ec_point& pubkey, const ec_point& pkSpend, int StealthSecretSpend(ec_secret& scanSecret, ec_point& ephemPubkey, ec_secret& spendSecret, ec_secret& secretOut) { /* - + c = H(dP) R' = R + cG [without decrypting wallet] = (f + c)G [after decryption of wallet] Remember: mod curve.order, pad with 0x00s where necessary? */ - + int rv = 0; std::vector vchOutP; - + BN_CTX* bnCtx = NULL; BIGNUM* bnScanSecret = NULL; BIGNUM* bnP = NULL; @@ -387,40 +396,40 @@ int StealthSecretSpend(ec_secret& scanSecret, ec_point& ephemPubkey, ec_secret& BIGNUM* bnc = NULL; BIGNUM* bnOrder = NULL; BIGNUM* bnSpend = NULL; - + EC_GROUP* ecgrp = EC_GROUP_new_by_curve_name(NID_secp256k1); - + if (!ecgrp) return errorN(1, "%s: EC_GROUP_new_by_curve_name failed.", __func__); - + if (!(bnCtx = BN_CTX_new())) { LogPrintf("%s: BN_CTX_new failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnScanSecret = BN_bin2bn(&scanSecret.e[0], EC_SECRET_SIZE, BN_new()))) { LogPrintf("%s: bnScanSecret BN_bin2bn failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnP = BN_bin2bn(&ephemPubkey[0], ephemPubkey.size(), BN_new()))) { LogPrintf("%s: bnP BN_bin2bn failed.\n", __func__); rv = 1; goto End; }; - + if (!(P = EC_POINT_bn2point(ecgrp, bnP, NULL, bnCtx))) { LogPrintf("%s: P EC_POINT_bn2point failed.\n", __func__); rv = 1; goto End; }; - + // -- dP if (!EC_POINT_mul(ecgrp, P, NULL, P, bnScanSecret, bnCtx)) { @@ -428,15 +437,15 @@ int StealthSecretSpend(ec_secret& scanSecret, ec_point& ephemPubkey, ec_secret& rv = 1; goto End; }; - + if (!(bnOutP = EC_POINT_point2bn(ecgrp, P, POINT_CONVERSION_COMPRESSED, BN_new(), bnCtx))) { LogPrintf("%s: P EC_POINT_bn2point failed.\n", __func__); rv = 1; goto End; }; - - + + vchOutP.resize(EC_COMPRESSED_SIZE); if (BN_num_bytes(bnOutP) != (int) EC_COMPRESSED_SIZE || BN_bn2bin(bnOutP, &vchOutP[0]) != (int) EC_COMPRESSED_SIZE) @@ -445,18 +454,18 @@ int StealthSecretSpend(ec_secret& scanSecret, ec_point& ephemPubkey, ec_secret& rv = 1; goto End; }; - + uint8_t hash1[32]; SHA256(&vchOutP[0], vchOutP.size(), (uint8_t*)hash1); - - + + if (!(bnc = BN_bin2bn(&hash1[0], 32, BN_new()))) { LogPrintf("%s: BN_bin2bn failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnOrder = BN_new()) || !EC_GROUP_get_order(ecgrp, bnOrder, bnCtx)) { @@ -464,14 +473,14 @@ int StealthSecretSpend(ec_secret& scanSecret, ec_point& ephemPubkey, ec_secret& rv = 1; goto End; }; - + if (!(bnSpend = BN_bin2bn(&spendSecret.e[0], EC_SECRET_SIZE, BN_new()))) { LogPrintf("%s: bnSpend BN_bin2bn failed.\n", __func__); rv = 1; goto End; }; - + //if (!BN_add(r, a, b)) return 0; //return BN_nnmod(r, r, m, ctx); if (!BN_mod_add(bnSpend, bnSpend, bnc, bnOrder, bnCtx)) @@ -480,14 +489,14 @@ int StealthSecretSpend(ec_secret& scanSecret, ec_point& ephemPubkey, ec_secret& rv = 1; goto End; }; - + if (BN_is_zero(bnSpend)) // possible? { LogPrintf("%s: bnSpend is zero.\n", __func__); rv = 1; goto End; }; - + int nBytes; memset(&secretOut.e[0], 0, EC_SECRET_SIZE); if ((nBytes = BN_num_bytes(bnSpend)) > (int)EC_SECRET_SIZE @@ -497,7 +506,7 @@ int StealthSecretSpend(ec_secret& scanSecret, ec_point& ephemPubkey, ec_secret& rv = 1; goto End; }; - + End: if (bnSpend) BN_free(bnSpend); if (bnOrder) BN_free(bnOrder); @@ -508,7 +517,7 @@ int StealthSecretSpend(ec_secret& scanSecret, ec_point& ephemPubkey, ec_secret& if (bnScanSecret) BN_free(bnScanSecret); if (bnCtx) BN_CTX_free(bnCtx); EC_GROUP_free(ecgrp); - + return rv; }; @@ -517,31 +526,31 @@ int StealthSharedToSecretSpend(const ec_secret& sharedS, const ec_secret& spendS { int rv = 0; std::vector vchOutP; - + BN_CTX* bnCtx = NULL; BIGNUM* bnc = NULL; BIGNUM* bnOrder = NULL; BIGNUM* bnSpend = NULL; - + EC_GROUP* ecgrp = EC_GROUP_new_by_curve_name(NID_secp256k1); - + if (!ecgrp) return errorN(1, "%s: EC_GROUP_new_by_curve_name failed.", __func__); - + if (!(bnCtx = BN_CTX_new())) { LogPrintf("%s: BN_CTX_new failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnc = BN_bin2bn(&sharedS.e[0], EC_SECRET_SIZE, BN_new()))) { LogPrintf("%s: BN_bin2bn failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnOrder = BN_new()) || !EC_GROUP_get_order(ecgrp, bnOrder, bnCtx)) { @@ -549,14 +558,14 @@ int StealthSharedToSecretSpend(const ec_secret& sharedS, const ec_secret& spendS rv = 1; goto End; }; - + if (!(bnSpend = BN_bin2bn(&spendSecret.e[0], EC_SECRET_SIZE, BN_new()))) { LogPrintf("%s: bnSpend BN_bin2bn failed.\n", __func__); rv = 1; goto End; }; - + //if (!BN_add(r, a, b)) return 0; //return BN_nnmod(r, r, m, ctx); if (!BN_mod_add(bnSpend, bnSpend, bnc, bnOrder, bnCtx)) @@ -565,14 +574,14 @@ int StealthSharedToSecretSpend(const ec_secret& sharedS, const ec_secret& spendS rv = 1; goto End; }; - + if (BN_is_zero(bnSpend)) // possible? { LogPrintf("%s: bnSpend is zero.\n", __func__); rv = 1; goto End; }; - + int nBytes; memset(&secretOut.e[0], 0, EC_SECRET_SIZE); if ((nBytes = BN_num_bytes(bnSpend)) > (int)EC_SECRET_SIZE @@ -582,14 +591,14 @@ int StealthSharedToSecretSpend(const ec_secret& sharedS, const ec_secret& spendS rv = 1; goto End; }; - + End: if (bnSpend) BN_free(bnSpend); if (bnOrder) BN_free(bnOrder); if (bnc) BN_free(bnc); if (bnCtx) BN_CTX_free(bnCtx); EC_GROUP_free(ecgrp); - + return rv; }; @@ -597,7 +606,7 @@ int StealthSharedToPublicKey(const ec_point& pkSpend, const ec_secret &sharedS, { int rv = 0; std::vector vchOutQ; - + BN_CTX *bnCtx = NULL; BIGNUM *bnc = NULL; EC_POINT *C = NULL; @@ -605,26 +614,26 @@ int StealthSharedToPublicKey(const ec_point& pkSpend, const ec_secret &sharedS, EC_POINT *R = NULL; EC_POINT *Rout = NULL; BIGNUM *bnOutR = NULL; - + EC_GROUP *ecgrp = EC_GROUP_new_by_curve_name(NID_secp256k1); - + if (!ecgrp) return errorN(1, "%s: EC_GROUP_new_by_curve_name failed.", __func__); - + if (!(bnCtx = BN_CTX_new())) { LogPrintf("%s: BN_CTX_new failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnc = BN_bin2bn(&sharedS.e[0], EC_SECRET_SIZE, BN_new()))) { LogPrintf("%s: BN_bin2bn failed.\n", __func__); rv = 1; goto End; }; - + // -- cG if (!(C = EC_POINT_new(ecgrp))) { @@ -632,58 +641,58 @@ int StealthSharedToPublicKey(const ec_point& pkSpend, const ec_secret &sharedS, rv = 1; goto End; }; - + if (!EC_POINT_mul(ecgrp, C, bnc, NULL, NULL, bnCtx)) { LogPrintf("%s: C EC_POINT_mul failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnR = BN_bin2bn(&pkSpend[0], pkSpend.size(), BN_new()))) { LogPrintf("%s: bnR BN_bin2bn failed.\n", __func__); rv = 1; goto End; }; - - + + if (!(R = EC_POINT_bn2point(ecgrp, bnR, NULL, bnCtx))) { LogPrintf("%s: R EC_POINT_bn2point failed.\n", __func__); rv = 1; goto End; }; - + if (!EC_POINT_mul(ecgrp, C, bnc, NULL, NULL, bnCtx)) { LogPrintf("%s: C EC_POINT_mul failed.\n", __func__); rv = 1; goto End; }; - + if (!(Rout = EC_POINT_new(ecgrp))) { LogPrintf("%s: Rout EC_POINT_new failed.\n", __func__); rv = 1; goto End; }; - + if (!EC_POINT_add(ecgrp, Rout, R, C, bnCtx)) { LogPrintf("%s: Rout EC_POINT_add failed.\n", __func__); rv = 1; goto End; }; - + if (!(bnOutR = EC_POINT_point2bn(ecgrp, Rout, POINT_CONVERSION_COMPRESSED, BN_new(), bnCtx))) { LogPrintf("%s: Rout EC_POINT_bn2point failed.\n", __func__); rv = 1; goto End; }; - - + + pkOut.resize(EC_COMPRESSED_SIZE); if (BN_num_bytes(bnOutR) != (int) EC_COMPRESSED_SIZE || BN_bn2bin(bnOutR, &pkOut[0]) != (int) EC_COMPRESSED_SIZE) @@ -692,7 +701,7 @@ int StealthSharedToPublicKey(const ec_point& pkSpend, const ec_secret &sharedS, rv = 1; goto End; }; - + End: if (bnOutR) BN_free(bnOutR); if (Rout) EC_POINT_free(Rout); @@ -702,41 +711,47 @@ int StealthSharedToPublicKey(const ec_point& pkSpend, const ec_secret &sharedS, if (bnc) BN_free(bnc); if (bnCtx) BN_CTX_free(bnCtx); EC_GROUP_free(ecgrp); - + return rv; }; bool IsStealthAddress(const std::string& encodedAddress) { + if (encodedAddress.length() < 76) + { + //LogPrintf("IsStealthAddress address to short, quick fail.\n"); + return false; + }; + data_chunk raw; - + if (!DecodeBase58(encodedAddress, raw)) { //LogPrintf("IsStealthAddress DecodeBase58 falied.\n"); return false; }; - + if (!VerifyChecksum(raw)) { //LogPrintf("IsStealthAddress verify_checksum falied.\n"); return false; }; - + if (raw.size() < 1 + 1 + 33 + 1 + 33 + 1 + 1 + 4) { //LogPrintf("IsStealthAddress too few bytes provided.\n"); return false; }; - - + + uint8_t* p = &raw[0]; uint8_t version = *p++; - + if (version != Params().Base58Prefix(CChainParams::STEALTH_ADDRESS)[0]) { //LogPrintf("IsStealthAddress version mismatch 0x%x != 0x%x.\n", version, stealth_version_byte); return false; }; - + return true; }; diff --git a/src/stealth.h b/src/anon/stealth.h similarity index 82% rename from src/stealth.h rename to src/anon/stealth.h index 33bc9d3669..b35f56c78c 100644 --- a/src/stealth.h +++ b/src/anon/stealth.h @@ -1,19 +1,22 @@ -// Copyright (c) 2014 The ShadowCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. - -#ifndef SHADOW_STEALTH_H -#define SHADOW_STEALTH_H - -#include -#include +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +// +// SPDX-License-Identifier: MIT + +#ifndef SPECTRE_STEALTH_H +#define SPECTRE_STEALTH_H + +#include +#include #include #include -#include "util.h" +#include "util/util.h" #include "serialize.h" -#include "key.h" -#include "hash.h" +#include "key/key.h" +#include "crypto/hash.h" #include "types.h" const uint32_t MAX_STEALTH_NARRATION_SIZE = 48; @@ -36,45 +39,45 @@ class CStealthAddress { options = 0; }; - + uint8_t options; ec_point scan_pubkey; ec_point spend_pubkey; //std::vector spend_pubkeys; size_t number_signatures; stealth_prefix prefix; - + mutable std::string label; data_chunk scan_secret; data_chunk spend_secret; - + bool SetEncoded(const std::string& encodedAddress); std::string Encoded() const; - + int SetScanPubKey(CPubKey pk); - - + + bool operator <(const CStealthAddress& y) const { return memcmp(&scan_pubkey[0], &y.scan_pubkey[0], EC_COMPRESSED_SIZE) < 0; }; - + bool operator ==(const CStealthAddress& y) const { return memcmp(&scan_pubkey[0], &y.scan_pubkey[0], EC_COMPRESSED_SIZE) == 0; }; - + IMPLEMENT_SERIALIZE ( READWRITE(this->options); READWRITE(this->scan_pubkey); READWRITE(this->spend_pubkey); READWRITE(this->label); - + READWRITE(this->scan_secret); READWRITE(this->spend_secret); ); - + }; int GenerateRandomSecret(ec_secret& out); @@ -90,5 +93,5 @@ int StealthSharedToPublicKey(const ec_point& pkSpend, const ec_secret &sharedS, bool IsStealthAddress(const std::string& encodedAddress); -#endif // SHADOW_STEALTH_H +#endif // SPECTRE_STEALTH_H diff --git a/src/base58.h b/src/base58.h index 52a30f40b8..69ad35fcb6 100644 --- a/src/base58.h +++ b/src/base58.h @@ -1,9 +1,10 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin Developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - - +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT // // Why base-58 instead of standard base-64 encoding? // - Don't want 0OIl characters that look the same in some fonts and @@ -18,13 +19,13 @@ #include #include -#include "chainparams.h" +#include "kernel/chainparams.h" #include "bignum.h" -#include "key.h" -#include "extkey.h" -#include "script.h" -#include "allocators.h" -#include "util.h" +#include "key/key.h" +#include "key/extkey.h" +#include "script/script.h" +#include "support/allocators.h" +#include "util/util.h" static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; @@ -53,7 +54,7 @@ inline std::string EncodeBase58(const unsigned char* pbegin, const unsigned char CBigNum rem; while (bn > bn0) { - if (!BN_div(&dv, &rem, &bn, &bn58, pctx)) + if (!BN_div(dv.pbn, rem.pbn, bn.pbn, bn58.pbn, pctx)) throw bignum_error("EncodeBase58 : BN_div failed"); bn = dv; unsigned int c = rem.getulong(); @@ -100,7 +101,7 @@ inline bool DecodeBase58(const char* psz, std::vector& vchRet) break; } bnChar.setulong(p1 - pszBase58); - if (!BN_mul(&bn, &bn, &bn58, pctx)) + if (!BN_mul(bn.pbn, bn.pbn, bn58.pbn, pctx)) throw bignum_error("DecodeBase58 : BN_mul failed"); bn += bnChar; } @@ -210,7 +211,7 @@ class CBase58Data { std::vector vchTemp; DecodeBase58Check(psz, vchTemp); - + if (vchTemp.size() == BIP32_KEY_N_BYTES + 4) // no point checking smaller keys { if (0 == memcmp(&vchTemp[0], &Params().Base58Prefix(CChainParams::EXT_PUBLIC_KEY)[0], 4)) @@ -219,7 +220,7 @@ class CBase58Data if (0 == memcmp(&vchTemp[0], &Params().Base58Prefix(CChainParams::EXT_SECRET_KEY)[0], 4)) { // - never display secret in a CBitcoinAddress - + // - length already checked vchVersion = Params().Base58Prefix(CChainParams::EXT_PUBLIC_KEY); CExtKeyPair ekp; @@ -230,14 +231,14 @@ class CBase58Data return true; }; }; - + if (vchTemp.size() < nVersionBytes) { vchData.clear(); vchVersion.clear(); return false; }; - + vchVersion.assign(vchTemp.begin(), vchTemp.begin() + nVersionBytes); vchData.resize(vchTemp.size() - nVersionBytes); if (!vchData.empty()) @@ -308,20 +309,20 @@ class CBitcoinAddress : public CBase58Data SetData(Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS), &id, 20); return true; } - + bool Set(const CKeyID &id, CChainParams::Base58Type prefix) { SetData(Params().Base58Prefix(prefix), &id, 20); return true; } - + bool Set(const CExtKeyPair &ek) { std::vector vchVersion; uint8_t data[74]; - + // - use public key only, should never be a need to reveal the secret in an address - + /* if (ek.IsValidV()) { @@ -329,10 +330,10 @@ class CBitcoinAddress : public CBase58Data ek.EncodeV(data); } else */ - + vchVersion = Params().Base58Prefix(CChainParams::EXT_PUBLIC_KEY); ek.EncodeP(data); - + SetData(vchVersion, data, 74); return true; }; @@ -344,28 +345,28 @@ class CBitcoinAddress : public CBase58Data bool IsValid() const { - if (vchVersion.size() == 4 + if (vchVersion.size() == 4 && (vchVersion == Params().Base58Prefix(CChainParams::EXT_PUBLIC_KEY) || vchVersion == Params().Base58Prefix(CChainParams::EXT_SECRET_KEY))) return vchData.size() == BIP32_KEY_N_BYTES; - + bool fCorrectSize = vchData.size() == 20; bool fKnownVersion = vchVersion == Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS) || vchVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS); return fCorrectSize && fKnownVersion; } - + bool IsValid(CChainParams::Base58Type prefix) const { bool fKnownVersion = vchVersion == Params().Base58Prefix(prefix); if (prefix == CChainParams::EXT_PUBLIC_KEY || prefix == CChainParams::EXT_SECRET_KEY) return fKnownVersion && vchData.size() == BIP32_KEY_N_BYTES; - + bool fCorrectSize = vchData.size() == 20; return fCorrectSize && fKnownVersion; } - + bool IsBIP32() const { return vchVersion == Params().Base58Prefix(CChainParams::EXT_SECRET_KEY) @@ -395,13 +396,13 @@ class CBitcoinAddress : public CBase58Data CTxDestination Get() const { if (!IsValid()) return CNoDestination(); - + uint160 id; if (vchVersion == Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS)) { memcpy(&id, &vchData[0], 20); return CKeyID(id); - } else + } else if (vchVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS)) { memcpy(&id, &vchData[0], 20); @@ -432,7 +433,7 @@ class CBitcoinAddress : public CBase58Data keyID = CKeyID(id); return true; } - + bool GetKeyID(CKeyID &keyID, CChainParams::Base58Type prefix) const { if (!IsValid(prefix)) return false; @@ -508,7 +509,7 @@ template class CBitcoinExtK key.Encode(vch); SetData(Params().Base58Prefix(Type), vch, vch+Size); } - + void SetVch(const uint8_t *vch) { SetData(Params().Base58Prefix(Type), vch, vch+Size); } @@ -523,22 +524,22 @@ template class CBitcoinExtK CBitcoinExtKeyBase(const K &key) { SetKey(key); } - + int Set58(const char *base58) { std::vector vchBytes; if (!DecodeBase58(base58, vchBytes)) return 1; - + if (vchBytes.size() != BIP32_KEY_LEN) return 2; - + if (!VerifyChecksum(vchBytes)) return 3; - + if (0 != memcmp(&vchBytes[0], &Params().Base58Prefix(Type)[0], 4)) return 4; - + SetData(Params().Base58Prefix(Type), &vchBytes[4], &vchBytes[4]+Size); return 0; } @@ -554,26 +555,26 @@ class CExtKey58 : public CBase58Data { public: CExtKey58() {}; - + CExtKey58(const CExtKeyPair &key, CChainParams::Base58Type type) { SetKey(key, type); }; - + void SetKeyV(const CExtKeyPair &key) { SetKey(key, CChainParams::EXT_SECRET_KEY); }; - + void SetKeyP(const CExtKeyPair &key) { SetKey(key, CChainParams::EXT_PUBLIC_KEY); }; - + void SetKey(const CExtKeyPair &key, CChainParams::Base58Type type) { uint8_t vch[74]; - + switch (type) { case CChainParams::EXT_SECRET_KEY: @@ -586,10 +587,10 @@ class CExtKey58 : public CBase58Data key.EncodeP(vch); break; }; - + SetData(Params().Base58Prefix(type), vch, vch+74); }; - + CExtKeyPair GetKey() { CExtKeyPair ret; @@ -602,19 +603,19 @@ class CExtKey58 : public CBase58Data ret.DecodeP(&vchData[0]); return ret; }; - + int Set58(const char *base58) { std::vector vchBytes; if (!DecodeBase58(base58, vchBytes)) return 1; - + if (vchBytes.size() != BIP32_KEY_LEN) return 2; - + if (!VerifyChecksum(vchBytes)) return 3; - + CChainParams::Base58Type type; if (0 == memcmp(&vchBytes[0], &Params().Base58Prefix(CChainParams::EXT_SECRET_KEY)[0], 4)) type = CChainParams::EXT_SECRET_KEY; @@ -629,11 +630,11 @@ class CExtKey58 : public CBase58Data type = CChainParams::EXT_PUBLIC_KEY_BTC; else return 4; - + SetData(Params().Base58Prefix(type), &vchBytes[4], &vchBytes[4]+74); return 0; }; - + bool IsValid(CChainParams::Base58Type prefix) const { return vchVersion == Params().Base58Prefix(prefix) diff --git a/src/bignum.h b/src/bignum.h index 94bbe74074..acea47249e 100644 --- a/src/bignum.h +++ b/src/bignum.h @@ -1,14 +1,17 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT #ifndef BITCOIN_BIGNUM_H #define BITCOIN_BIGNUM_H #include "serialize.h" #include "uint256.h" -#include "version.h" +#include "util/version.h" #include @@ -54,52 +57,54 @@ class CAutoBN_CTX /** C++ wrapper for BIGNUM (OpenSSL bignum) */ -class CBigNum : public BIGNUM +class CBigNum { public: + BIGNUM* pbn; + CBigNum() { - BN_init(this); + this->pbn = BN_new(); } CBigNum(const CBigNum& b) { - BN_init(this); - if (!BN_copy(this, &b)) + this->pbn = BN_new(); + if (!BN_copy(this->pbn, b.pbn)) { - BN_clear_free(this); + BN_clear_free(this->pbn); throw bignum_error("CBigNum::CBigNum(const CBigNum&) : BN_copy failed"); } } CBigNum& operator=(const CBigNum& b) { - if (!BN_copy(this, &b)) + if (!BN_copy(this->pbn, b.pbn)) throw bignum_error("CBigNum::operator= : BN_copy failed"); return (*this); } ~CBigNum() { - BN_clear_free(this); + BN_clear_free(this->pbn); } //CBigNum(char n) is not portable. Use 'signed char' or 'unsigned char'. - CBigNum(signed char n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } - CBigNum(short n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } - CBigNum(int n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } - CBigNum(long n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } - CBigNum(long long n) { BN_init(this); setint64(n); } - CBigNum(unsigned char n) { BN_init(this); setulong(n); } - CBigNum(unsigned short n) { BN_init(this); setulong(n); } - CBigNum(unsigned int n) { BN_init(this); setulong(n); } - CBigNum(unsigned long n) { BN_init(this); setulong(n); } - CBigNum(unsigned long long n) { BN_init(this); setuint64(n); } - explicit CBigNum(uint256 n) { BN_init(this); setuint256(n); } + CBigNum(signed char n) { this->pbn = BN_new(); if (n >= 0) setulong(n); else setint64(n); } + CBigNum(short n) { this->pbn = BN_new(); if (n >= 0) setulong(n); else setint64(n); } + CBigNum(int n) { this->pbn = BN_new(); if (n >= 0) setulong(n); else setint64(n); } + CBigNum(long n) { this->pbn = BN_new(); if (n >= 0) setulong(n); else setint64(n); } + CBigNum(long long n) { this->pbn = BN_new(); setint64(n); } + CBigNum(unsigned char n) { this->pbn = BN_new(); setulong(n); } + CBigNum(unsigned short n) { this->pbn = BN_new(); setulong(n); } + CBigNum(unsigned int n) { this->pbn = BN_new(); setulong(n); } + CBigNum(unsigned long n) { this->pbn = BN_new(); setulong(n); } + CBigNum(unsigned long long n) { this->pbn = BN_new(); setuint64(n); } + explicit CBigNum(uint256 n) { this->pbn = BN_new(); setuint256(n); } explicit CBigNum(const std::vector& vch) { - BN_init(this); + this->pbn = BN_new(); setvch(vch); } @@ -108,10 +113,10 @@ class CBigNum : public BIGNUM * @param range The upper bound on the number. * @return */ - static CBigNum randBignum(const CBigNum& range) + static CBigNum randBignum(const CBigNum& range) { CBigNum ret; - if(!BN_rand_range(&ret, &range)){ + if(!BN_rand_range(ret.pbn, range.pbn)){ throw bignum_error("CBigNum:rand element : BN_rand_range failed"); } return ret; @@ -124,7 +129,7 @@ class CBigNum : public BIGNUM static CBigNum RandKBitBigum(const uint32_t k) { CBigNum ret; - if(!BN_rand(&ret, k, -1, 0)) + if(!BN_rand(ret.pbn, k, -1, 0)) { throw bignum_error("CBigNum:rand element : BN_rand failed"); } @@ -136,30 +141,30 @@ class CBigNum : public BIGNUM * @return the size */ int bitSize() const{ - return BN_num_bits(this); + return BN_num_bits(this->pbn); } void setulong(unsigned long n) { - if (!BN_set_word(this, n)) + if (!BN_set_word(this->pbn, n)) throw bignum_error("CBigNum conversion from unsigned long : BN_set_word failed"); } unsigned long getulong() const { - return BN_get_word(this); + return BN_get_word(this->pbn); } unsigned int getuint() const { - return BN_get_word(this); + return BN_get_word(this->pbn); } int getint() const { - unsigned long n = BN_get_word(this); - if (!BN_is_negative(this)) + unsigned long n = BN_get_word(this->pbn); + if (!BN_is_negative(this->pbn)) return (n > (unsigned long)std::numeric_limits::max() ? std::numeric_limits::max() : n); else return (n > (unsigned long)std::numeric_limits::max() ? std::numeric_limits::min() : -(int)n); @@ -174,7 +179,10 @@ class CBigNum : public BIGNUM if (sn < (int64_t)0) { - // Since the minimum signed integer cannot be represented as positive so long as its type is signed, and it's not well-defined what happens if you make it unsigned before negating it, we instead increment the negative integer by 1, convert it, then increment the (now positive) unsigned integer by 1 to compensate + // Since the minimum signed integer cannot be represented as positive so long as its + // type is signed, and it's not well-defined what happens if you make it unsigned + // before negating it, we instead increment the negative integer by 1, convert it, + // then increment the (now positive) unsigned integer by 1 to compensate n = -(sn + 1); ++n; fNegative = true; @@ -206,16 +214,16 @@ class CBigNum : public BIGNUM pch[1] = (nSize >> 16) & 0xff; pch[2] = (nSize >> 8) & 0xff; pch[3] = (nSize) & 0xff; - BN_mpi2bn(pch, p - pch, this); + BN_mpi2bn(pch, p - pch, this->pbn); } uint64_t getuint64() { - unsigned int nSize = BN_bn2mpi(this, NULL); + unsigned int nSize = BN_bn2mpi(this->pbn, NULL); if (nSize < 4) return 0; std::vector vch(nSize); - BN_bn2mpi(this, &vch[0]); + BN_bn2mpi(this->pbn, &vch[0]); if (vch.size() > 4) vch[4] &= 0x7f; uint64_t n = 0; @@ -248,7 +256,7 @@ class CBigNum : public BIGNUM pch[1] = (nSize >> 16) & 0xff; pch[2] = (nSize >> 8) & 0xff; pch[3] = (nSize) & 0xff; - BN_mpi2bn(pch, p - pch, this); + BN_mpi2bn(pch, p - pch, this->pbn); } void setuint256(uint256 n) @@ -276,16 +284,16 @@ class CBigNum : public BIGNUM pch[1] = (nSize >> 16) & 0xff; pch[2] = (nSize >> 8) & 0xff; pch[3] = (nSize >> 0) & 0xff; - BN_mpi2bn(pch, p - pch, this); + BN_mpi2bn(pch, p - pch, this->pbn); } uint256 getuint256() const { - unsigned int nSize = BN_bn2mpi(this, NULL); + unsigned int nSize = BN_bn2mpi(this->pbn, NULL); if (nSize < 4) return 0; std::vector vch(nSize); - BN_bn2mpi(this, &vch[0]); + BN_bn2mpi(this->pbn, &vch[0]); if (vch.size() > 4) vch[4] &= 0x7f; uint256 n = 0; @@ -294,7 +302,6 @@ class CBigNum : public BIGNUM return n; } - void setvch(const std::vector& vch) { std::vector vch2(vch.size() + 4); @@ -307,16 +314,16 @@ class CBigNum : public BIGNUM vch2[3] = (nSize >> 0) & 0xff; // swap data to big endian reverse_copy(vch.begin(), vch.end(), vch2.begin() + 4); - BN_mpi2bn(&vch2[0], vch2.size(), this); + BN_mpi2bn(&vch2[0], vch2.size(), this->pbn); } std::vector getvch() const { - unsigned int nSize = BN_bn2mpi(this, NULL); + unsigned int nSize = BN_bn2mpi(this->pbn, NULL); if (nSize <= 4) return std::vector(); std::vector vch(nSize); - BN_bn2mpi(this, &vch[0]); + BN_bn2mpi(this->pbn, &vch[0]); vch.erase(vch.begin(), vch.begin() + 4); reverse(vch.begin(), vch.end()); return vch; @@ -330,16 +337,16 @@ class CBigNum : public BIGNUM if (nSize >= 1) vch[4] = (nCompact >> 16) & 0xff; if (nSize >= 2) vch[5] = (nCompact >> 8) & 0xff; if (nSize >= 3) vch[6] = (nCompact >> 0) & 0xff; - BN_mpi2bn(&vch[0], vch.size(), this); + BN_mpi2bn(&vch[0], vch.size(), this->pbn); return *this; } unsigned int GetCompact() const { - unsigned int nSize = BN_bn2mpi(this, NULL); + unsigned int nSize = BN_bn2mpi(this->pbn, NULL); std::vector vch(nSize); nSize -= 4; - BN_bn2mpi(this, &vch[0]); + BN_bn2mpi(this->pbn, &vch[0]); unsigned int nCompact = nSize << 24; if (nSize >= 1) nCompact |= (vch[4] << 16); if (nSize >= 2) nCompact |= (vch[5] << 8); @@ -384,21 +391,21 @@ class CBigNum : public BIGNUM CBigNum bn0 = 0; std::string str; CBigNum bn = *this; - BN_set_negative(&bn, false); + BN_set_negative(bn.pbn, false); CBigNum dv; CBigNum rem; - if (BN_cmp(&bn, &bn0) == 0) + if (BN_cmp(bn.pbn, bn0.pbn) == 0) return "0"; - while (BN_cmp(&bn, &bn0) > 0) + while (BN_cmp(bn.pbn, bn0.pbn) > 0) { - if (!BN_div(&dv, &rem, &bn, &bnBase, pctx)) + if (!BN_div(dv.pbn, rem.pbn, bn.pbn, bnBase.pbn, pctx)) throw bignum_error("CBigNum::ToString() : BN_div failed"); bn = dv; unsigned int c = rem.getulong(); str += "0123456789abcdef"[c]; } - - if (BN_is_negative(this)) + + if (BN_is_negative(this->pbn)) str += "-"; reverse(str.begin(), str.end()); return str; @@ -445,7 +452,7 @@ class CBigNum : public BIGNUM CBigNum pow(const CBigNum& e) const { CAutoBN_CTX pctx; CBigNum ret; - if (!BN_exp(&ret, this, &e, pctx)) + if (!BN_exp(ret.pbn, this->pbn, e.pbn, pctx)) throw bignum_error("CBigNum::pow : BN_exp failed"); return ret; } @@ -458,9 +465,9 @@ class CBigNum : public BIGNUM CBigNum mul_mod(const CBigNum& b, const CBigNum& m) const { CAutoBN_CTX pctx; CBigNum ret; - if (!BN_mod_mul(&ret, this, &b, &m, pctx)) + if (!BN_mod_mul(ret.pbn, this->pbn, b.pbn, m.pbn, pctx)) throw bignum_error("CBigNum::mul_mod : BN_mod_mul failed"); - + return ret; } @@ -472,14 +479,14 @@ class CBigNum : public BIGNUM CBigNum pow_mod(const CBigNum& e, const CBigNum& m) const { CAutoBN_CTX pctx; CBigNum ret; - if( e < 0){ + if (e < 0) { // g^-x = (g^-1)^x CBigNum inv = this->inverse(m); CBigNum posE = e * -1; - if (!BN_mod_exp(&ret, &inv, &posE, &m, pctx)) + if (!BN_mod_exp(ret.pbn, inv.pbn, posE.pbn, m.pbn, pctx)) throw bignum_error("CBigNum::pow_mod: BN_mod_exp failed on negative exponent"); - }else - if (!BN_mod_exp(&ret, this, &e, &m, pctx)) + } else + if (!BN_mod_exp(ret.pbn, this->pbn, e.pbn, m.pbn, pctx)) throw bignum_error("CBigNum::pow_mod : BN_mod_exp failed"); return ret; @@ -494,7 +501,7 @@ class CBigNum : public BIGNUM CBigNum inverse(const CBigNum& m) const { CAutoBN_CTX pctx; CBigNum ret; - if (!BN_mod_inverse(&ret, this, &m, pctx)) + if (!BN_mod_inverse(ret.pbn, this->pbn, m.pbn, pctx)) throw bignum_error("CBigNum::inverse*= :BN_mod_inverse"); return ret; } @@ -508,7 +515,7 @@ class CBigNum : public BIGNUM static CBigNum generatePrime(const unsigned int numBits, bool safe = false) { CBigNum ret; - if(!BN_generate_prime_ex(&ret, numBits, (safe == true), NULL, NULL, NULL)) + if(!BN_generate_prime_ex(ret.pbn, numBits, (safe == true), NULL, NULL, NULL)) throw bignum_error("CBigNum::generatePrime*= :BN_generate_prime_ex"); return ret; } @@ -521,7 +528,7 @@ class CBigNum : public BIGNUM CBigNum gcd( const CBigNum& b) const{ CAutoBN_CTX pctx; CBigNum ret; - if (!BN_gcd(&ret, this, &b, pctx)) + if (!BN_gcd(ret.pbn, this->pbn, b.pbn, pctx)) throw bignum_error("CBigNum::gcd*= :BN_gcd"); return ret; } @@ -534,26 +541,26 @@ class CBigNum : public BIGNUM */ bool isPrime(const int checks=BN_prime_checks) const { CAutoBN_CTX pctx; - int ret = BN_is_prime(this, checks, NULL, pctx, NULL); - if(ret < 0){ + int ret = BN_is_prime_ex(this->pbn, checks, pctx, NULL); + if (ret < 0) { throw bignum_error("CBigNum::isPrime :BN_is_prime"); } return ret; } bool isOne() const { - return BN_is_one(this); + return BN_is_one(this->pbn); } bool operator!() const { - return BN_is_zero(this); + return BN_is_zero(this->pbn); } CBigNum& operator+=(const CBigNum& b) { - if (!BN_add(this, this, &b)) + if (!BN_add(this->pbn, this->pbn, b.pbn)) throw bignum_error("CBigNum::operator+= : BN_add failed"); return *this; } @@ -567,7 +574,7 @@ class CBigNum : public BIGNUM CBigNum& operator*=(const CBigNum& b) { CAutoBN_CTX pctx; - if (!BN_mul(this, this, &b, pctx)) + if (!BN_mul(this->pbn, this->pbn, b.pbn, pctx)) throw bignum_error("CBigNum::operator*= : BN_mul failed"); return *this; } @@ -586,7 +593,7 @@ class CBigNum : public BIGNUM CBigNum& operator<<=(unsigned int shift) { - if (!BN_lshift(this, this, shift)) + if (!BN_lshift(this->pbn, this->pbn, shift)) throw bignum_error("CBigNum:operator<<= : BN_lshift failed"); return *this; } @@ -597,13 +604,13 @@ class CBigNum : public BIGNUM // if built on ubuntu 9.04 or 9.10, probably depends on version of OpenSSL CBigNum a = 1; a <<= shift; - if (BN_cmp(&a, this) > 0) + if (BN_cmp(a.pbn, this->pbn) > 0) { *this = 0; return *this; } - if (!BN_rshift(this, this, shift)) + if (!BN_rshift(this->pbn, this->pbn, shift)) throw bignum_error("CBigNum:operator>>= : BN_rshift failed"); return *this; } @@ -612,7 +619,7 @@ class CBigNum : public BIGNUM CBigNum& operator++() { // prefix operator - if (!BN_add(this, this, BN_value_one())) + if (!BN_add(this->pbn, this->pbn, BN_value_one())) throw bignum_error("CBigNum::operator++ : BN_add failed"); return *this; } @@ -629,7 +636,7 @@ class CBigNum : public BIGNUM { // prefix operator CBigNum r; - if (!BN_sub(&r, this, BN_value_one())) + if (!BN_sub(r.pbn, this->pbn, BN_value_one())) throw bignum_error("CBigNum::operator-- : BN_sub failed"); *this = r; return *this; @@ -656,7 +663,7 @@ class CBigNum : public BIGNUM inline const CBigNum operator+(const CBigNum& a, const CBigNum& b) { CBigNum r; - if (!BN_add(&r, &a, &b)) + if (!BN_add(r.pbn, a.pbn, b.pbn)) throw bignum_error("CBigNum::operator+ : BN_add failed"); return r; } @@ -664,7 +671,7 @@ inline const CBigNum operator+(const CBigNum& a, const CBigNum& b) inline const CBigNum operator-(const CBigNum& a, const CBigNum& b) { CBigNum r; - if (!BN_sub(&r, &a, &b)) + if (!BN_sub(r.pbn, a.pbn, b.pbn)) throw bignum_error("CBigNum::operator- : BN_sub failed"); return r; } @@ -672,7 +679,7 @@ inline const CBigNum operator-(const CBigNum& a, const CBigNum& b) inline const CBigNum operator-(const CBigNum& a) { CBigNum r(a); - BN_set_negative(&r, !BN_is_negative(&r)); + BN_set_negative(r.pbn, !BN_is_negative(r.pbn)); return r; } @@ -680,7 +687,7 @@ inline const CBigNum operator*(const CBigNum& a, const CBigNum& b) { CAutoBN_CTX pctx; CBigNum r; - if (!BN_mul(&r, &a, &b, pctx)) + if (!BN_mul(r.pbn, a.pbn, b.pbn, pctx)) throw bignum_error("CBigNum::operator* : BN_mul failed"); return r; } @@ -689,7 +696,7 @@ inline const CBigNum operator/(const CBigNum& a, const CBigNum& b) { CAutoBN_CTX pctx; CBigNum r; - if (!BN_div(&r, NULL, &a, &b, pctx)) + if (!BN_div(r.pbn, NULL, a.pbn, b.pbn, pctx)) throw bignum_error("CBigNum::operator/ : BN_div failed"); return r; } @@ -698,7 +705,7 @@ inline const CBigNum operator%(const CBigNum& a, const CBigNum& b) { CAutoBN_CTX pctx; CBigNum r; - if (!BN_nnmod(&r, &a, &b, pctx)) + if (!BN_nnmod(r.pbn, a.pbn, b.pbn, pctx)) throw bignum_error("CBigNum::operator% : BN_div failed"); return r; } @@ -706,7 +713,7 @@ inline const CBigNum operator%(const CBigNum& a, const CBigNum& b) inline const CBigNum operator<<(const CBigNum& a, unsigned int shift) { CBigNum r; - if (!BN_lshift(&r, &a, shift)) + if (!BN_lshift(r.pbn, a.pbn, shift)) throw bignum_error("CBigNum:operator<< : BN_lshift failed"); return r; } @@ -718,12 +725,12 @@ inline const CBigNum operator>>(const CBigNum& a, unsigned int shift) return r; } -inline bool operator==(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) == 0); } -inline bool operator!=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) != 0); } -inline bool operator<=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) <= 0); } -inline bool operator>=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) >= 0); } -inline bool operator<(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) < 0); } -inline bool operator>(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) > 0); } +inline bool operator==(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.pbn, b.pbn) == 0); } +inline bool operator!=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.pbn, b.pbn) != 0); } +inline bool operator<=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.pbn, b.pbn) <= 0); } +inline bool operator>=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.pbn, b.pbn) >= 0); } +inline bool operator<(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.pbn, b.pbn) < 0); } +inline bool operator>(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.pbn, b.pbn) > 0); } inline std::ostream& operator<<(std::ostream &strm, const CBigNum &b) { return strm << b.ToString(10); } diff --git a/src/build.h.in b/src/build.h.in new file mode 100644 index 0000000000..19d877b260 --- /dev/null +++ b/src/build.h.in @@ -0,0 +1,8 @@ +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// +// SPDX-License-Identifier: MIT + +#define BUILD_DESC "" +#define BUILD_DATE "22:10:13.08" +#define GIT_HASH "@CLIENT_VERSION_GIT_SHA1@" \ No newline at end of file diff --git a/src/chainparams.cpp b/src/chainparams.cpp deleted file mode 100644 index 6c2912d502..0000000000 --- a/src/chainparams.cpp +++ /dev/null @@ -1,342 +0,0 @@ -// Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "assert.h" - -#include "chainparams.h" -#include "main.h" - -#include - -using namespace boost::assign; - -struct SeedSpec6 { - uint8_t addr[16]; - uint16_t port; -}; - -#include "chainparamsseeds.h" - -int64_t CChainParams::GetProofOfWorkReward(int nHeight, int64_t nFees) const -{ - // miner's coin base reward - int64_t nSubsidy = 0; - - if (nHeight <= 0) - nSubsidy = 0; - else - if (nHeight <= nLastFairLaunchBlock) - nSubsidy = 1 * COIN; - else - if (nHeight <= nLastPOWBlock) - nSubsidy = (NetworkID() == CChainParams::TESTNET ? 10000 : 400) * COIN; - - if (fDebug && GetBoolArg("-printcreation")) - LogPrintf("GetProofOfWorkReward() : create=%s nSubsidy=%d\n", FormatMoney(nSubsidy).c_str(), nSubsidy); - - return nSubsidy + nFees; -}; - - -int64_t CChainParams::GetProofOfStakeReward(const CBlockIndex* pindexPrev, int64_t nCoinAge, int64_t nFees) const -{ - // miner's coin stake reward based on coin age spent (coin-days) - int64_t nSubsidy; - - if (IsProtocolV3(pindexPrev->nHeight)) - nSubsidy = (pindexPrev->nMoneySupply / COIN) * COIN_YEAR_REWARD / (365 * 24 * (60 * 60 / 64)); - else - nSubsidy = nCoinAge * COIN_YEAR_REWARD * 33 / (365 * 33 + 8); - - if (fDebug && GetBoolArg("-printcreation")) - LogPrintf("GetProofOfStakeReward(): create=%s nCoinAge=%d\n", FormatMoney(nSubsidy).c_str(), nCoinAge); - - return nSubsidy + nFees; -} - -// -// Main network -// - -// Convert the pnSeeds6 array into usable address objects. -static void convertSeed6(std::vector &vSeedsOut, const SeedSpec6 *data, unsigned int count) -{ - // It'll only connect to one or two seed nodes because once it connects, - // it'll get a pile of addresses with newer timestamps. - // Seed nodes are given a random 'last seen time' of between one and two - // weeks ago. - const int64_t nOneWeek = 7*24*60*60; - for (unsigned int i = 0; i < count; i++) - { - struct in6_addr ip; - memcpy(&ip, data[i].addr, sizeof(ip)); - CAddress addr(CService(ip, data[i].port)); - addr.nTime = GetTime() - GetRand(nOneWeek) - nOneWeek; - vSeedsOut.push_back(addr); - } -} - -// Convert the pnSeeds array into usable address objects. -static void convertSeeds(std::vector &vSeedsOut, const unsigned int *data, unsigned int count, int port) -{ - // It'll only connect to one or two seed nodes because once it connects, - // it'll get a pile of addresses with newer timestamps. - // Seed nodes are given a random 'last seen time' of between one and two - // weeks ago. - const int64_t nOneWeek = 7*24*60*60; - for (unsigned int k = 0; k < count; ++k) - { - struct in_addr ip; - unsigned int i = data[k], t; - - // -- convert to big endian - t = (i & 0x000000ff) << 24u - | (i & 0x0000ff00) << 8u - | (i & 0x00ff0000) >> 8u - | (i & 0xff000000) >> 24u; - - memcpy(&ip, &t, sizeof(ip)); - - CAddress addr(CService(ip, port)); - addr.nTime = GetTime()-GetRand(nOneWeek)-nOneWeek; - vSeedsOut.push_back(addr); - } -} - -class CBaseChainParams : public CChainParams { -public: - CBaseChainParams() { - const char* pszTimestamp = "www.cryptocoinsnews.com/news/bitlicense-regulations-forked-github-bitcoin-community/2014/07/19"; - CTransaction txNew; - txNew.nTime = GENESIS_BLOCK_TIME; - txNew.vin.resize(1); - txNew.vout.resize(1); - txNew.vin[0].scriptSig = CScript() << 0 << CBigNum(42) << std::vector((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); - txNew.vout[0].SetEmpty(); - genesis.vtx.push_back(txNew); - genesis.hashPrevBlock = 0; - genesis.hashMerkleRoot = genesis.BuildMerkleTree(); - genesis.nVersion = 1; - genesis.nTime = GENESIS_BLOCK_TIME; - - vSeeds.push_back(CDNSSeedData("main.shadow.cash", "seed.shadow.cash")); - vSeeds.push_back(CDNSSeedData("seed2.shadow.cash", "seed2.shadow.cash")); - vSeeds.push_back(CDNSSeedData("seed3.shadow.cash", "seed3.shadow.cash")); - vSeeds.push_back(CDNSSeedData("seed4.shadow.cash", "seed4.shadow.cash")); - vSeeds.push_back(CDNSSeedData("shadowproject.io", "seed.shadowproject.io")); - vSeeds.push_back(CDNSSeedData("shadowchain.info", "seed.shadowchain.info")); - } - virtual const CBlock& GenesisBlock() const { return genesis; } - virtual const std::vector& FixedSeeds() const { - return vFixedSeeds; - } -protected: - CBlock genesis; - std::vector vFixedSeeds; -}; - -class CMainParams : public CBaseChainParams { -public: - CMainParams() { - strNetworkID = "main"; - - // The message start string is designed to be unlikely to occur in normal data. - // The characters are rarely used upper ASCII, not valid as UTF-8, and produce - // a large 4-byte int at any alignment. - pchMessageStart[0] = 0xfa; - pchMessageStart[1] = 0xf2; - pchMessageStart[2] = 0xef; - pchMessageStart[3] = 0xb4; - - vAlertPubKey = ParseHex("031d5def92b2d59943e57aaa8b1adbb110ff215fc4ebdc6fb5c9a797e2b1dea527"); - - nDefaultPort = 51737; - nRPCPort = 51736; - nBIP44ID = 0x80000023; - - nLastPOWBlock = 31000; - nLastFairLaunchBlock = 120; - - nFirstPosv2Block = 453000; - nFirstPosv3Block = 783000; - - bnProofOfWorkLimit = CBigNum(~uint256(0) >> 20); // "standard" scrypt target limit for proof of work, results with 0,000244140625 proof-of-work difficulty - bnProofOfStakeLimit = CBigNum(~uint256(0) >> 20); - bnProofOfStakeLimitV2 = CBigNum(~uint256(0) >> 48); - - genesis.nBits = bnProofOfWorkLimit.GetCompact(); - genesis.nNonce = 261836; - hashGenesisBlock = genesis.GetHash(); - - assert(hashGenesisBlock == uint256("0x00000eca234f07edc98aaf3f2a7b7478dc58992a9cd439323d099c6a590ca2bb")); - assert(genesis.hashMerkleRoot == uint256("0x26a3ff5d3dc46b091e7b58b6022982e6d27dff1bab3bd1da6beb4790983c87c4")); - - base58Prefixes[PUBKEY_ADDRESS] = list_of(63).convert_to_container >(); - base58Prefixes[SCRIPT_ADDRESS] = list_of(125).convert_to_container >(); - base58Prefixes[SECRET_KEY] = list_of(191).convert_to_container >(); - base58Prefixes[STEALTH_ADDRESS] = list_of(40).convert_to_container >(); - base58Prefixes[EXT_PUBLIC_KEY] = list_of(0xEE)(0x80)(0x28)(0x6A).convert_to_container >(); - base58Prefixes[EXT_SECRET_KEY] = list_of(0xEE)(0x80)(0x31)(0xE8).convert_to_container >(); - base58Prefixes[EXT_KEY_HASH] = list_of(137).convert_to_container >(); // x - base58Prefixes[EXT_ACC_HASH] = list_of(83).convert_to_container >(); // a - base58Prefixes[EXT_PUBLIC_KEY_BTC] = list_of(0x04)(0x88)(0xB2)(0x1E).convert_to_container >(); // xprv - base58Prefixes[EXT_SECRET_KEY_BTC] = list_of(0x04)(0x88)(0xAD)(0xE4).convert_to_container >(); // xpub - - //convertSeed6(vFixedSeeds, pnSeed6_main, ARRAYLEN(pnSeed6_main)); - convertSeeds(vFixedSeeds, pnSeed, ARRAYLEN(pnSeed), nDefaultPort); - } - - virtual Network NetworkID() const { return CChainParams::MAIN; } -}; -static CMainParams mainParams; - -// -// Testnet -// - -class CTestNetParams : public CBaseChainParams { -public: - CTestNetParams() { - strNetworkID = "test"; - strDataDir = "testnet"; - - // The message start string is designed to be unlikely to occur in normal data. - // The characters are rarely used upper ASCII, not valid as UTF-8, and produce - // a large 4-byte int at any alignment. - pchMessageStart[0] = 0x07; - pchMessageStart[1] = 0x11; - pchMessageStart[2] = 0x05; - pchMessageStart[3] = 0x0b; - - vAlertPubKey = ParseHex("0373d8dce43eb98374bcfff2352cd559e6774fd6a87eef73b2fbdb39b2b0bc0082"); - - nDefaultPort = 51997; - nRPCPort = 51996; - nBIP44ID = 0x80000001; - - nLastPOWBlock = 110; - nLastFairLaunchBlock = 10; - - nFirstPosv2Block = 110; - nFirstPosv3Block = 500; - - bnProofOfWorkLimit = CBigNum(~uint256(0) >> 16); - bnProofOfStakeLimit = CBigNum(~uint256(0) >> 20); - bnProofOfStakeLimitV2 = CBigNum(~uint256(0) >> 16); - - genesis.nBits = bnProofOfWorkLimit.GetCompact(); - genesis.nNonce = 55887; - hashGenesisBlock = genesis.GetHash(); - assert(hashGenesisBlock == uint256("0x0000910a87c1385247edc82808ec498a2d738fea5f0d3f8801512d6b84ad6f72")); - - base58Prefixes[PUBKEY_ADDRESS] = list_of(127).convert_to_container >(); - base58Prefixes[SCRIPT_ADDRESS] = list_of(196).convert_to_container >(); - base58Prefixes[SECRET_KEY] = list_of(255).convert_to_container >(); - base58Prefixes[STEALTH_ADDRESS] = list_of(40).convert_to_container >(); - base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x76)(0xC0)(0xFD)(0xFB).convert_to_container >(); - base58Prefixes[EXT_SECRET_KEY] = list_of(0x76)(0xC1)(0x07)(0x7A).convert_to_container >(); - base58Prefixes[EXT_KEY_HASH] = list_of(75).convert_to_container >(); // X - base58Prefixes[EXT_ACC_HASH] = list_of(23).convert_to_container >(); // A - base58Prefixes[EXT_PUBLIC_KEY_BTC] = list_of(0x04)(0x35)(0x87)(0xCF).convert_to_container >(); // tprv - base58Prefixes[EXT_SECRET_KEY_BTC] = list_of(0x04)(0x35)(0x83)(0x94).convert_to_container >(); // tpub - - //convertSeed6(vFixedSeeds, pnSeed6_test, ARRAYLEN(pnSeed6_test)); - convertSeeds(vFixedSeeds, pnTestnetSeed, ARRAYLEN(pnTestnetSeed), nDefaultPort); - } - virtual Network NetworkID() const { return CChainParams::TESTNET; } -}; -static CTestNetParams testNetParams; - - -// -// Regression test -// -class CRegTestParams : public CTestNetParams { -public: - CRegTestParams() { - strNetworkID = "regtest"; - strDataDir = "regtest"; - - nFirstPosv2Block = -1; - nFirstPosv3Block = -1; - - pchMessageStart[0] = 0xfa; - pchMessageStart[1] = 0xbf; - pchMessageStart[2] = 0xb5; - pchMessageStart[3] = 0xda; - bnProofOfWorkLimit = CBigNum(~uint256(0) >> 1); - genesis.nTime = 1411111111; - genesis.nBits = bnProofOfWorkLimit.GetCompact(); - genesis.nNonce = 2; - hashGenesisBlock = genesis.GetHash(); - nDefaultPort = 18444; - - assert(hashGenesisBlock == uint256("0xb86b5854a5a77e1eb0a6023b7d6013ebc9840bd87aad7d9e56da458f87015d3f")); - - vSeeds.clear(); // Regtest mode doesn't have any DNS seeds. - } - - virtual bool RequireRPCPassword() const { return false; } - virtual Network NetworkID() const { return CChainParams::REGTEST; } -}; -static CRegTestParams regTestParams; - -static CChainParams *pCurrentParams = &mainParams; - -const CChainParams &Params() { - return *pCurrentParams; -} - -const CChainParams &TestNetParams() { - return testNetParams; -} - -const CChainParams &MainNetParams() { - return mainParams; -} - -void SelectParams(CChainParams::Network network) -{ - switch (network) - { - case CChainParams::MAIN: - pCurrentParams = &mainParams; - break; - case CChainParams::TESTNET: - pCurrentParams = &testNetParams; - break; - case CChainParams::REGTEST: - pCurrentParams = ®TestParams; - break; - default: - assert(false && "Unimplemented network"); - return; - }; -}; - -bool SelectParamsFromCommandLine() -{ - bool fRegTest = GetBoolArg("-regtest", false); - bool fTestNet = GetBoolArg("-testnet", false); - - if (fTestNet && fRegTest) - { - return false; - }; - - if (fRegTest) - { - SelectParams(CChainParams::REGTEST); - } else - if (fTestNet) - { - SelectParams(CChainParams::TESTNET); - } else - { - SelectParams(CChainParams::MAIN); - }; - - return true; -} diff --git a/src/chainparams.h b/src/chainparams.h deleted file mode 100644 index e05ad945bf..0000000000 --- a/src/chainparams.h +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2013 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#ifndef BITCOIN_CHAIN_PARAMS_H -#define BITCOIN_CHAIN_PARAMS_H - -#include "bignum.h" -#include "uint256.h" -#include "util.h" - -#include - -#define MESSAGE_START_SIZE 4 -typedef unsigned char MessageStartChars[MESSAGE_START_SIZE]; - -class CAddress; -class CBlock; -class CBlockIndex; - -struct CDNSSeedData { - std::string name, host; - CDNSSeedData(const std::string &strName, const std::string &strHost) : name(strName), host(strHost) {} -}; - - - -/** - * CChainParams defines various tweakable parameters of a given instance of the - * Bitcoin system. There are three: the main network on which people trade goods - * and services, the public test network which gets reset from time to time and - * a regression test mode which is intended for private networks only. It has - * minimal difficulty to ensure that blocks can be found instantly. - */ -class CChainParams -{ -public: - enum Network { - MAIN, - TESTNET, - REGTEST, - - MAX_NETWORK_TYPES - }; - - enum Base58Type { - PUBKEY_ADDRESS, - SCRIPT_ADDRESS, - SECRET_KEY, - STEALTH_ADDRESS, - EXT_PUBLIC_KEY, - EXT_SECRET_KEY, - EXT_KEY_HASH, - EXT_ACC_HASH, - EXT_PUBLIC_KEY_BTC, - EXT_SECRET_KEY_BTC, - - MAX_BASE58_TYPES - }; - - const uint256& HashGenesisBlock() const { return hashGenesisBlock; } - const MessageStartChars& MessageStart() const { return pchMessageStart; } - const std::vector& AlertKey() const { return vAlertPubKey; } - int GetDefaultPort() const { return nDefaultPort; } - - const bool IsProtocolV2(int nHeight) const { return nHeight > nFirstPosv2Block; } - const bool IsProtocolV3(int nHeight) const { return nHeight > nFirstPosv3Block; } - - const CBigNum& ProofOfWorkLimit() const { return bnProofOfWorkLimit; } - const CBigNum& ProofOfStakeLimit(int nHeight) const { return IsProtocolV2(nHeight) ? bnProofOfStakeLimitV2 : bnProofOfStakeLimit; } - - - virtual const CBlock& GenesisBlock() const = 0; - virtual bool RequireRPCPassword() const { return true; } - const std::string& DataDir() const { return strDataDir; } - virtual Network NetworkID() const = 0; - const std::vector& DNSSeeds() const { return vSeeds; } - const std::vector &Base58Prefix(Base58Type type) const { return base58Prefixes[type]; } - virtual const std::vector& FixedSeeds() const = 0; - - std::string NetworkIDString() const { return strNetworkID; } - - int RPCPort() const { return nRPCPort; } - - int BIP44ID() const { return nBIP44ID; } - - - int LastPOWBlock() const { return nLastPOWBlock; } - int LastFairLaunchBlock() const { return nLastFairLaunchBlock; } - - int64_t GetProofOfWorkReward(int nHeight, int64_t nFees) const; - int64_t GetProofOfStakeReward(const CBlockIndex* pindexPrev, int64_t nCoinAge, int64_t nFees) const; - -protected: - CChainParams() {}; - - uint256 hashGenesisBlock; - MessageStartChars pchMessageStart; - // Raw pub key bytes for the broadcast alert signing key. - std::vector vAlertPubKey; - std::string strNetworkID; - int nDefaultPort; - int nRPCPort; - int nBIP44ID; - - int nFirstPosv2Block; - int nFirstPosv3Block; - CBigNum bnProofOfWorkLimit; - CBigNum bnProofOfStakeLimit; - CBigNum bnProofOfStakeLimitV2; - - std::string strDataDir; - std::vector vSeeds; - std::vector base58Prefixes[MAX_BASE58_TYPES]; - int nLastPOWBlock; - int nLastFairLaunchBlock; -}; - -/** - * Return the currently selected parameters. This won't change after app startup - * outside of the unit tests. - */ -const CChainParams &Params(); - -/** - * Return the testnet parameters. - */ -const CChainParams &TestNetParams(); - -/** - * Return the mainnet parameters. - */ -const CChainParams &MainNetParams(); - -/** Sets the params returned by Params() to those for the given network. */ -void SelectParams(CChainParams::Network network); - -/** - * Looks for -regtest or -testnet and then calls SelectParams as appropriate. - * Returns false if an invalid combination is given. - */ -bool SelectParamsFromCommandLine(); - -inline bool TestNet() { - // Note: it's deliberate that this returns "false" for regression test mode. - return Params().NetworkID() == CChainParams::TESTNET; -} - -#endif diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h deleted file mode 100644 index 15151e0db2..0000000000 --- a/src/chainparamsseeds.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef CHAINPARAMSSEEDS_H -#define CHAINPARAMSSEEDS_H - -static const unsigned int pnSeed[] = -{ - 0x05fab2da, - 0x05fab2db, - 0x68a766cc, - 0x68a766ce, -}; - -static const unsigned int pnTestnetSeed[] = -{ - 0x05fab2da, - 0x05fab2db, - 0x68a766cc, - 0x68a766ce, -}; - -#endif diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp index 49871c9bea..1d7c8b41bc 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -1,13 +1,16 @@ -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT #include // for 'map_list_of()' #include #include "checkpoints.h" -#include "txdb.h" +#include "wallet/txdb.h" #include "main.h" #include "uint256.h" @@ -26,39 +29,26 @@ namespace Checkpoints // MapCheckpoints mapCheckpoints = boost::assign::map_list_of - ( 0, uint256("0x00000eca234f07edc98aaf3f2a7b7478dc58992a9cd439323d099c6a590ca2bb") ) // Params().HashGenesisBlock()) - ( 5000, uint256("0xe90df0416d506c6d41ea693c88604e6efde1467408adeccf7166cdec9192c03b") ) - ( 10000, uint256("0x1f0aa0f5e122d0dbba13adf896eb2a6645c150f4710d0a595d2eec886a9d17e4") ) - ( 15000, uint256("0x00000000024472d3430e135eccc90852469b0803a05eb54dd9d7d249b8903e11") ) - ( 20000, uint256("0x0000000000534b3b94bd3cce077ff71f376b5620c6352c37ba6c78731372e9f4") ) - ( 25000, uint256("0x0000000000e0eea4f099e4123b846e21572ba00fbf687ad6d8c9fe99a4631ff5") ) - ( 30000, uint256("0xb798139d55efee3285f5287f751751132a07979ac3b4584351293fd93e0355f6") ) - ( 40000, uint256("0x28f84253a82ec149dafc1de9cb6116118b13438f4f0c1b0536643bf4911f181f") ) - ( 50000, uint256("0x77b8eca44ac760d9990ba8d68beabf73bf156093e076f50b4eb00bff2d0ded52") ) - ( 60000, uint256("0xef24a387dd6ba7fb9aa9c7edfc3fbfc3ccdd2406a1be8e24426eca41d19996d5") ) - ( 70000, uint256("0xe6369ee665c6a4a00bac6fa707123887144a5855eb45cd7a1d164d27707a0e93") ) - ( 80000, uint256("0x09b00f6efb3a94de1c58ad578d19c1d7d74b0a6e101f750478ae987a713c6143") ) - ( 90000, uint256("0xbf7040b9157c4611265371b9b2d6250aa956c6c237c4222a70a93dad800ff7d9") ) - ( 100000, uint256("0x6768cdd2f7630b68d61bf82cdd133bed2e7c858aba7e58190ed541c707a82daf") ) - ( 110000, uint256("0xb582e172d169bc67adc79969c35851c9156b5a4ad57c3fb3647a3aed20c8ba51") ) - ( 120000, uint256("0xa4d5f4a951f2cb5f6beafcbf8490a4645ac7585f0389d730613d4e22a96590eb") ) - ( 130000, uint256("0xa51baaa8f0b5f35217479b4defd61f3ae18b5792033a723dd9bd802a78b48803") ) - ( 140000, uint256("0x179d20535a7cd197c9e79258aac98c193cffa0265ce2ec0ea8c71b2e7f1fc021") ) - ( 150000, uint256("0x5d78df4991a4f10879452680f4643c27ef603f3928ff0d6ac05b5f14e5182029") ) - ( 160000, uint256("0x2fecb1a06ec490922e500b653948923952a6241c478df754f894c3b66d95f234") ) - ( 170000, uint256("0x04aa633b0850a8ca967ab40436c3068c385000d2ad08def923c8cb1328affa49") ) - ( 180000, uint256("0x79f341c763f658833280f62e70d04ecdb4c8e22181dca4e423692dd6d2dc7c92") ) - ( 190000, uint256("0x19ff2576455a3256772efebc1d88c356ebe18c74005454880cf46fab50c627c7") ) - ( 200000, uint256("0xd9af28b1b16e20aff1bdafdbdeaa793af8475681e3c2b5b6ad13d28ae6da6b1e") ) - ( 245000, uint256("0xe075bf70c40a7c18cc7bf305b2922ca690a13473b6edf05b4a452a85539fe50c") ) - ( 250000, uint256("0x19a6a7fe4d2b6db91160a2b0e46bf5045e8b9f3c3e15016c48e77657cadaa5b8") ) - ( 300000, uint256("0xb7f4f3b08a10eb7045cdfc7070856530dfae6fa4630b983b2922be80dfd91f3e") ) - ( 350000, uint256("0x27e5167742fa86a107a7823eac252985199fcf4e0aa8fa438af3d9b0e609824f") ) - ( 400000, uint256("0x25d4b6ab78cf3648b5b86bbcfe5f975a02ae1006231f84a19f9af598a0ae7557") ) - ( 500000, uint256("0xa85a7561b73c2549bf909fb3b51b384d915b8f83c321fc4977b201d4be2a8a0b") ) - ( 590000, uint256("0x680d2a36efdf4989c82cf144c36ba7ca398d0ba557f00ae51de07cba649823b4") ) - ( 765000, uint256("0x40fd13a50feaca5a54dd7834b97b2ddce2fee85b42a95ea2079edd3a81f22857") ) - ; + ( 0, uint256("0x000001fd6111f0d71d90b7d8c827c6028dbc867f6c527d90794a0d22f68fecd4") ) // Params().HashGenesisBlock()) + ( 10000, uint256("0x89fa592395c4fff97e04ade632dfc33bee19fc46d489abf51331ee68a20ad19d") ) + ( 15000, uint256("0xb54f2cc3bc31a0f7110ef5f95a1c00744793f5419b1d43044fe393a777edca39") ) + ( 20000, uint256("0x87294db40d1af9101876293140cb2d82aef893881fbdb2a48ef0b0e062b6966a") ) + ( 25000, uint256("0x70aaaf2d6dd706fa4689a5e6e17994342e661ea37f72333e63534cf0cc3d7dc1") ) + ( 100000, uint256("0x4f61bb5f1b22065242784fdb0232ed6ef66ec3e5049d412038f4753dca931cd1") ) + ( 200000, uint256("0x62f50e7c60480ded7aceed530a6d2f2b204647443425316e5f5714da489d55e3") ) + ( 300000, uint256("0xe355a6acab9a5a8ae5f5ba0336e3efd40145726106dd1a33a314a86a1dfb8fca") ) + ( 400000, uint256("0xe09449a9923e5f99d224fbc088ae5c79c6fa2caf511c2a702c27d2afa570b9b7") ) + ( 500000, uint256("0x3797b3133f61859680141058755cc8224db7b17f6c06f9228b7e2fd7b7e48cf5") ) + ( 600000, uint256("0x6b8e1852d66a954e94ee85b239ca1a04ee18f676e8ed6b9980f2eb0ccfa0ca9e") ) + ( 700000, uint256("0x501b1398372508e8806f49de18a579d482895331b958dda932f0ec451a590497") ) + ( 800000, uint256("0xa502c68dc02f39237b2d961ade76d403869939004965eff53d529d436b117c3a") ) + ( 900000, uint256("0x79ae3d0df2e1fc905781ce893d3ead49799f8100c606ae613389dd3f7c1161f2") ) + ( 1000000, uint256("0x9e2738c1c40209ee73a9ca0ea1edaa3610d768007b614fb334bdbcb46d2d1991") ) + ( 1100000, uint256("0x33dfe0abae17bc1cff0a8f3d3f9c4471666d9092182963baa61a2cb3d0ad9283") ) + ( 1200000, uint256("0x135c94cb8cdf81173ceb6d01f98df1b74ab0bf95aa3553a2158fef3bc733794d") ) + ( 1232433, uint256("0x5a17e0f06d3863b5678b5f24b4b1e203dc0d94ec55b4f41f5d9d2a961686b0c2") ) + ( 1245000, uint256("0xa0cd983150296cb14d2e4006464a1b0814bd53bf76f35f00cf8d0530dd0f511e") ) + ; // TestNet has no checkpoints MapCheckpoints mapCheckpointsTestnet; @@ -111,7 +101,7 @@ namespace Checkpoints } - // Automatically select a suitable sync-checkpoint + // Automatically select a suitable sync-checkpoint const CBlockIndex* AutoSelectSyncCheckpoint() { const CBlockIndex *pindex = pindexBest; diff --git a/src/checkpoints.h b/src/checkpoints.h index 212598225c..6a30eff1ff 100644 --- a/src/checkpoints.h +++ b/src/checkpoints.h @@ -1,12 +1,16 @@ -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef BITCOIN_CHECKPOINT_H #define BITCOIN_CHECKPOINT_H #include -#include "net.h" -#include "util.h" +#include "net/net.h" +#include "util/util.h" class uint256; class CBlockIndex; diff --git a/src/clientversion.h b/src/clientversion.h index 1be6ecc5f1..7f85cc5fdf 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -1,15 +1,24 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef CLIENTVERSION_H #define CLIENTVERSION_H // -// client versioning +// Client versioning. Hand-maintained for the autotools build path; the +// upstream `clientversion.h.in` template was orphaned when ALIAS switched +// to CMake. When configure.ac is rewired to consume the .in template, +// delete this file. // -// These need to be macros, as version.cpp's and bitcoin-qt.rc's voodoo requires it -#define CLIENT_VERSION_MAJOR 1 -#define CLIENT_VERSION_MINOR 5 +#define CLIENT_VERSION_MAJOR 5 +#define CLIENT_VERSION_MINOR 1 #define CLIENT_VERSION_REVISION 0 -#define CLIENT_VERSION_BUILD 2 +#define CLIENT_VERSION_BUILD 0 +#define GIT_HASH "modernized-main" // Converts the parameter X to a string after macro replacement on X has been performed. // Don't merge these into one macro! diff --git a/src/clientversion.h.in b/src/clientversion.h.in new file mode 100644 index 0000000000..0100f7de2a --- /dev/null +++ b/src/clientversion.h.in @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// +// SPDX-License-Identifier: MIT + +#ifndef CLIENTVERSION_H +#define CLIENTVERSION_H + +// +// client versioning +// + +// These need to be macros, as version.cpp's and alias-qt.rc's voodoo requires it +#define CLIENT_VERSION_MAJOR @CLIENT_VERSION_MAJOR@ +#define CLIENT_VERSION_MINOR @CLIENT_VERSION_MINOR@ +#define CLIENT_VERSION_REVISION @CLIENT_VERSION_REVISION@ +#define CLIENT_VERSION_BUILD @CLIENT_VERSION_BUILD@ +#define GIT_HASH "@CLIENT_VERSION_GIT_SHA1@" + +// Converts the parameter X to a string after macro replacement on X has been performed. +// Don't merge these into one macro! +#define STRINGIZE(X) DO_STRINGIZE(X) +#define DO_STRINGIZE(X) #X + +#endif // CLIENTVERSION_H diff --git a/src/clientversion.h.obsolete b/src/clientversion.h.obsolete new file mode 100644 index 0000000000..705f05fcbf --- /dev/null +++ b/src/clientversion.h.obsolete @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// +// SPDX-License-Identifier: MIT + +#ifndef CLIENTVERSION_H +#define CLIENTVERSION_H + +// +// client versioning +// + +// These need to be macros, as version.cpp's and bitcoin-qt.rc's voodoo requires it +#define CLIENT_VERSION_MAJOR 4 +#define CLIENT_VERSION_MINOR 3 +#define CLIENT_VERSION_REVISION 0 +#define CLIENT_VERSION_BUILD 0 + +// Converts the parameter X to a string after macro replacement on X has been performed. +// Don't merge these into one macro! +#define STRINGIZE(X) DO_STRINGIZE(X) +#define DO_STRINGIZE(X) #X + +#endif // CLIENTVERSION_H diff --git a/src/compat.h b/src/compat/compat.h similarity index 81% rename from src/compat.h rename to src/compat/compat.h index 6b7639652c..bd7718051e 100644 --- a/src/compat.h +++ b/src/compat/compat.h @@ -1,7 +1,11 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + #ifndef _BITCOIN_COMPAT_H #define _BITCOIN_COMPAT_H 1 @@ -31,7 +35,6 @@ typedef u_int SOCKET; #endif - #ifdef WIN32 #define MSG_NOSIGNAL 0 #define MSG_DONTWAIT 0 diff --git a/src/strlcpy.h b/src/compat/strlcpy.h similarity index 95% rename from src/strlcpy.h rename to src/compat/strlcpy.h index 2cc786e953..fbd0a530a1 100644 --- a/src/strlcpy.h +++ b/src/compat/strlcpy.h @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: © 1998 Todd C. Miller +// +// SPDX-License-Identifier: ISC + /* * Copyright (c) 1998 Todd C. Miller * diff --git a/src/core.cpp b/src/core.cpp deleted file mode 100644 index ea07be730b..0000000000 --- a/src/core.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2014 The ShadowCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. - -#include "core.h" - - - diff --git a/src/core.h b/src/core.h deleted file mode 100644 index 536f4dd2f3..0000000000 --- a/src/core.h +++ /dev/null @@ -1,433 +0,0 @@ -// Copyright (c) 2014 The ShadowCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. - -#ifndef SDC_CORE_H -#define SDC_CORE_H - -#include -#include -#include -#include - -#include "util.h" -#include "serialize.h" -#include "script.h" -#include "ringsig.h" - -enum GetMinFee_mode -{ - GMF_BLOCK, - GMF_RELAY, - GMF_SEND, - GMF_ANON, -}; - -class CTransaction; - -/** An outpoint - a combination of a transaction hash and an index n into its vout */ -class COutPoint -{ -public: - uint256 hash; - unsigned int n; - - COutPoint() { SetNull(); } - COutPoint(uint256 hashIn, unsigned int nIn) { hash = hashIn; n = nIn; } - IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); ) - void SetNull() { hash = 0; n = (unsigned int) -1; } - bool IsNull() const { return (hash == 0 && n == (unsigned int) -1); } - - friend bool operator<(const COutPoint& a, const COutPoint& b) - { - return (a.hash < b.hash || (a.hash == b.hash && a.n < b.n)); - } - - friend bool operator==(const COutPoint& a, const COutPoint& b) - { - return (a.hash == b.hash && a.n == b.n); - } - - friend bool operator!=(const COutPoint& a, const COutPoint& b) - { - return !(a == b); - } - - std::string ToString() const - { - return strprintf("COutPoint(%s, %u)", hash.ToString().substr(0,10).c_str(), n); - } - - void print() const - { - LogPrintf("%s\n", ToString().c_str()); - } -}; - -/** An inpoint - a combination of a transaction and an index n into its vin */ -class CInPoint -{ -public: - CTransaction* ptx; - unsigned int n; - - CInPoint() { SetNull(); } - CInPoint(CTransaction* ptxIn, unsigned int nIn) { ptx = ptxIn; n = nIn; } - void SetNull() { ptx = NULL; n = (unsigned int) -1; } - bool IsNull() const { return (ptx == NULL && n == (unsigned int) -1); } -}; - - - -/** An input of a transaction. It contains the location of the previous - * transaction's output that it claims and a signature that matches the - * output's public key. - */ -class CTxIn -{ -public: - COutPoint prevout; - CScript scriptSig; - unsigned int nSequence; - - CTxIn() - { - nSequence = std::numeric_limits::max(); - } - - explicit CTxIn(COutPoint prevoutIn, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=std::numeric_limits::max()) - { - prevout = prevoutIn; - scriptSig = scriptSigIn; - nSequence = nSequenceIn; - } - - CTxIn(uint256 hashPrevTx, unsigned int nOut, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=std::numeric_limits::max()) - { - prevout = COutPoint(hashPrevTx, nOut); - scriptSig = scriptSigIn; - nSequence = nSequenceIn; - } - - IMPLEMENT_SERIALIZE - ( - READWRITE(prevout); - READWRITE(scriptSig); - READWRITE(nSequence); - ) - - bool IsFinal() const - { - return (nSequence == std::numeric_limits::max()); - } - - bool IsAnonInput() const - { - return (scriptSig.size() >= MIN_ANON_IN_SIZE - && scriptSig[0] == OP_RETURN - && scriptSig[1] == OP_ANON_MARKER); - } - - friend bool operator==(const CTxIn& a, const CTxIn& b) - { - return (a.prevout == b.prevout && - a.scriptSig == b.scriptSig && - a.nSequence == b.nSequence); - } - - friend bool operator!=(const CTxIn& a, const CTxIn& b) - { - return !(a == b); - } - - - std::string ToString() const - { - std::string str; - str += "CTxIn("; - str += prevout.ToString(); - if (prevout.IsNull()) - str += strprintf(", coinbase %s", HexStr(scriptSig).c_str()); - else - str += strprintf(", scriptSig=%s", scriptSig.ToString().substr(0,24).c_str()); - if (nSequence != std::numeric_limits::max()) - str += strprintf(", nSequence=%u", nSequence); - str += ")"; - return str; - } - - void print() const - { - LogPrintf("%s\n", ToString().c_str()); - } - - void ExtractKeyImage(ec_point& kiOut) const - { - kiOut.resize(EC_COMPRESSED_SIZE); - memcpy(&kiOut[0], prevout.hash.begin(), 32); - kiOut[32] = prevout.n & 0xFF; - }; - - int ExtractRingSize() const - { - return (prevout.n >> 16) & 0xFFFF; - }; - -}; - - - - -/** An output of a transaction. It contains the public key that the next input - * must be able to sign with to claim it. - */ -class CTxOut -{ -public: - int64_t nValue; - CScript scriptPubKey; - - CTxOut() - { - SetNull(); - } - - CTxOut(int64_t nValueIn, CScript scriptPubKeyIn) - { - nValue = nValueIn; - scriptPubKey = scriptPubKeyIn; - } - - IMPLEMENT_SERIALIZE - ( - READWRITE(nValue); - READWRITE(scriptPubKey); - ) - - void SetNull() - { - nValue = -1; - scriptPubKey.clear(); - } - - bool IsNull() - { - return (nValue == -1); - } - - void SetEmpty() - { - nValue = 0; - scriptPubKey.clear(); - } - - bool IsEmpty() const - { - return (nValue == 0 && scriptPubKey.empty()); - } - - bool IsAnonOutput() const - { - return (scriptPubKey.size() >= MIN_ANON_OUT_SIZE - && scriptPubKey[0] == OP_RETURN - && scriptPubKey[1] == OP_ANON_MARKER); - } - - - uint256 GetHash() const - { - return SerializeHash(*this); - } - - friend bool operator==(const CTxOut& a, const CTxOut& b) - { - return (a.nValue == b.nValue && - a.scriptPubKey == b.scriptPubKey); - } - - friend bool operator!=(const CTxOut& a, const CTxOut& b) - { - return !(a == b); - } - - friend bool operator<(const CTxOut& a, const CTxOut& b) - { - return (a.nValue < b.nValue); - } - - std::string ToString() const - { - if (IsEmpty()) return "CTxOut(empty)"; - return strprintf("CTxOut(nValue=%s, scriptPubKey=%s)", FormatMoney(nValue).c_str(), scriptPubKey.ToString().c_str()); - } - - void print() const - { - LogPrintf("%s\n", ToString().c_str()); - } - - CPubKey ExtractAnonPk() const - { - // always use IsAnonOutput to check length - return CPubKey(&scriptPubKey[2+1], EC_COMPRESSED_SIZE); - }; -}; - - - - -class CKeyImageSpent -{ -// stored in txdb, key is keyimage -public: - CKeyImageSpent() {}; - - CKeyImageSpent(uint256& txnHash_, uint32_t inputNo_, int64_t nValue_) - { - txnHash = txnHash_; - inputNo = inputNo_; - nValue = nValue_; - }; - - uint256 txnHash; // hash of spending transaction - uint32_t inputNo; // keyimage is for inputNo of txnHash - int64_t nValue; // reporting only - - IMPLEMENT_SERIALIZE - ( - READWRITE(txnHash); - READWRITE(inputNo); - READWRITE(nValue); - ) -}; - -class CAnonOutput -{ -// stored in txdb, key is pubkey -public: - - CAnonOutput() {}; - - CAnonOutput(COutPoint& outpoint_, int64_t nValue_, int nBlockHeight_, uint8_t nCompromised_) - { - outpoint = outpoint_; - nValue = nValue_; - nBlockHeight = nBlockHeight_; - nCompromised = nCompromised_; - }; - - COutPoint outpoint; - int64_t nValue; // rather store 2 bytes, digit + power 10 ? - int nBlockHeight; - uint8_t nCompromised; // TODO: mark if output can be identified (spent with ringsig 1) - IMPLEMENT_SERIALIZE - ( - READWRITE(outpoint); - READWRITE(nValue); - READWRITE(nBlockHeight); - READWRITE(nCompromised); - ) -}; - -class CAnonOutputCount -{ // CountAllAnonOutputs -public: - - CAnonOutputCount() - { - nValue = 0; - nExists = 0; - nSpends = 0; - nOwned = 0; - nLeastDepth = 0; - nCompromised = 0; - } - - CAnonOutputCount(int64_t nValue_, int nExists_, int nSpends_, int nOwned_, int nLeastDepth_, int nCompromised_) - { - nValue = nValue_; - nExists = nExists_; - nSpends = nSpends_; - nOwned = nOwned_; - nLeastDepth = nLeastDepth_; - nCompromised = nCompromised_; - } - - void set(int64_t nValue_, int nExists_, int nSpends_, int nOwned_, int nLeastDepth_, int nCompromised_) - { - nValue = nValue_; - nExists = nExists_; - nSpends = nSpends_; - nOwned = nOwned_; - nLeastDepth = nLeastDepth_; - nCompromised = nCompromised_; - } - - void addCoin(int nCoinDepth, int64_t nCoinValue) - { - nExists++; - nValue = nCoinValue; - if (nCoinDepth < nLeastDepth) - nLeastDepth = nCoinDepth; - } - - void updateDepth(int nCoinDepth, int64_t nCoinValue) - { - nValue = nCoinValue; - if (nLeastDepth == 0 - || nCoinDepth < nLeastDepth) - nLeastDepth = nCoinDepth; - } - - void incSpends(int64_t nCoinValue) - { - nSpends++; - nValue = nCoinValue; - } - - void decSpends(int64_t nCoinValue) - { - nSpends--; - nValue = nCoinValue; - } - - void incExists(int64_t nCoinValue) - { - nExists++; - nValue = nCoinValue; - } - - void decExists(int64_t nCoinValue) - { - nExists--; - nValue = nCoinValue; - } - - - int64_t nValue; - int nExists; - int nSpends; - int nOwned; // todo - int nLeastDepth; - int nCompromised; - -}; - - -class CStakeModifier -{ -// for CheckKernel -public: - CStakeModifier() {}; - CStakeModifier(uint64_t modifier, uint256 modifierv2, int height, int64_t time) - : nModifier(modifier), bnModifierV2(modifierv2), nHeight(height), nTime(time) - {}; - - uint64_t nModifier; - uint256 bnModifierV2; - int nHeight; - int64_t nTime; -}; - -#endif // SDC_CORE_H - diff --git a/src/hash.cpp b/src/crypto/hash.cpp similarity index 82% rename from src/hash.cpp rename to src/crypto/hash.cpp index c92d3e8405..7d3ecfc63c 100644 --- a/src/hash.cpp +++ b/src/crypto/hash.cpp @@ -1,4 +1,12 @@ -#include "hash.h" +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + +#include "crypto/hash.h" unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector& vDataToHash) { @@ -22,7 +30,7 @@ unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector& data) { uint32_t checksum = BitcoinChecksum(&data[0], data.size()); - + std::vector tmp(4); memcpy(&tmp[0], &checksum, 4); - + data.insert(data.end(), tmp.begin(), tmp.end()); }; @@ -125,9 +141,9 @@ bool VerifyChecksum(const std::vector& data) { if (data.size() < 4) return false; - + uint32_t checksum; memcpy(&checksum, &(*(data.end() - 4)), 4); - + return BitcoinChecksum((uint8_t*)&data[0], data.size()-4) == checksum; }; diff --git a/src/crypto/hash.h b/src/crypto/hash.h new file mode 100644 index 0000000000..0fef2bc411 --- /dev/null +++ b/src/crypto/hash.h @@ -0,0 +1,155 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + +#ifndef BITCOIN_HASH_H +#define BITCOIN_HASH_H + +#include "uint256.h" +#include "serialize.h" + +#include +#include + +template +inline uint256 Hash(const T1 pbegin, const T1 pend) +{ + static unsigned char pblank[1]; + uint256 hash1; + SHA256((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1); + uint256 hash2; + SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); + return hash2; +} + +class CHashWriter +{ +private: + SHA256_CTX ctx; + +public: + int nType; + int nVersion; + + void Init() + { + SHA256_Init(&ctx); + } + + CHashWriter(int nTypeIn, int nVersionIn) : nType(nTypeIn), nVersion(nVersionIn) + { + Init(); + } + + CHashWriter& write(const char *pch, size_t size) + { + SHA256_Update(&ctx, pch, size); + return (*this); + } + + // invalidates the object + uint256 GetHash() + { + uint256 hash1; + SHA256_Final((unsigned char*)&hash1, &ctx); + uint256 hash2; + SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); + return hash2; + } + + template + CHashWriter& operator<<(const T& obj) { + // Serialize to this stream + ::Serialize(*this, obj, nType, nVersion); + return (*this); + } +}; + + +template +inline uint256 Hash(const T1 p1begin, const T1 p1end, + const T2 p2begin, const T2 p2end) +{ + static unsigned char pblank[1]; + uint256 hash1; + SHA256_CTX ctx; + SHA256_Init(&ctx); + SHA256_Update(&ctx, (p1begin == p1end ? pblank : (unsigned char*)&p1begin[0]), (p1end - p1begin) * sizeof(p1begin[0])); + SHA256_Update(&ctx, (p2begin == p2end ? pblank : (unsigned char*)&p2begin[0]), (p2end - p2begin) * sizeof(p2begin[0])); + SHA256_Final((unsigned char*)&hash1, &ctx); + uint256 hash2; + SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); + return hash2; +} + +template +inline uint256 Hash(const T1 p1begin, const T1 p1end, + const T2 p2begin, const T2 p2end, + const T3 p3begin, const T3 p3end) +{ + static unsigned char pblank[1]; + uint256 hash1; + SHA256_CTX ctx; + SHA256_Init(&ctx); + SHA256_Update(&ctx, (p1begin == p1end ? pblank : (unsigned char*)&p1begin[0]), (p1end - p1begin) * sizeof(p1begin[0])); + SHA256_Update(&ctx, (p2begin == p2end ? pblank : (unsigned char*)&p2begin[0]), (p2end - p2begin) * sizeof(p2begin[0])); + SHA256_Update(&ctx, (p3begin == p3end ? pblank : (unsigned char*)&p3begin[0]), (p3end - p3begin) * sizeof(p3begin[0])); + SHA256_Final((unsigned char*)&hash1, &ctx); + uint256 hash2; + SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); + return hash2; +} + +template +uint256 SerializeHash(const T& obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION) +{ + CHashWriter ss(nType, nVersion); + ss << obj; + return ss.GetHash(); +} + +template +inline uint160 Hash160(const T1 pbegin, const T1 pend) +{ + static unsigned char pblank[1]; + uint256 hash1; + SHA256((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1); + uint160 hash2; + RIPEMD160((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); + return hash2; +} + +inline uint160 Hash160(const std::vector& vch) +{ + return Hash160(vch.begin(), vch.end()); +} + +inline uint32_t ROTL32 ( uint32_t x, int8_t r ) +{ + return (x << r) | (x >> (32 - r)); +} + +unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector& vDataToHash); + + +typedef struct +{ + SHA512_CTX ctxInner; + SHA512_CTX ctxOuter; +} HMAC_SHA512_CTX; + +int HMAC_SHA512_Init(HMAC_SHA512_CTX *pctx, const void *pkey, size_t len); +int HMAC_SHA512_Update(HMAC_SHA512_CTX *pctx, const void *pdata, size_t len); +int HMAC_SHA512_Final(unsigned char *pmd, HMAC_SHA512_CTX *pctx); + +uint32_t BitcoinChecksum(uint8_t* p, uint32_t nBytes); + +void AppendChecksum(std::vector& data); + +bool VerifyChecksum(const std::vector& data); + +#endif diff --git a/src/pbkdf2.cpp b/src/crypto/pbkdf2.cpp similarity index 92% rename from src/pbkdf2.cpp rename to src/crypto/pbkdf2.cpp index 6d3f3dcc5a..a14d444372 100644 --- a/src/pbkdf2.cpp +++ b/src/crypto/pbkdf2.cpp @@ -1,16 +1,12 @@ -// Copyright (c) 2013 NovaCoin Developers +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2013 NovaCoin Developers +// +// SPDX-License-Identifier: MIT #include -#include "pbkdf2.h" - -static inline uint32_t -be32dec(const void *pp) -{ - const uint8_t *p = (uint8_t const *)pp; - - return ((uint32_t)(p[3]) + ((uint32_t)(p[2]) << 8) + - ((uint32_t)(p[1]) << 16) + ((uint32_t)(p[0]) << 24)); -} +#include "crypto/pbkdf2.h" static inline void be32enc(void *pp, uint32_t x) @@ -23,8 +19,6 @@ be32enc(void *pp, uint32_t x) p[0] = (x >> 24) & 0xff; } - - /* Initialize an HMAC-SHA256 operation with the given key. */ void HMAC_SHA256_Init(HMAC_SHA256_CTX * ctx, const void * _K, size_t Klen) diff --git a/src/crypto/pbkdf2.h b/src/crypto/pbkdf2.h new file mode 100644 index 0000000000..8fcee1879b --- /dev/null +++ b/src/crypto/pbkdf2.h @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2013 NovaCoin Developers +// +// SPDX-License-Identifier: MIT + +#ifndef PBKDF2_H +#define PBKDF2_H + +#include +#include + +typedef struct HMAC_SHA256Context { + SHA256_CTX ictx; + SHA256_CTX octx; +} HMAC_SHA256_CTX; + +void +HMAC_SHA256_Init(HMAC_SHA256_CTX * ctx, const void * _K, size_t Klen); + +void +HMAC_SHA256_Update(HMAC_SHA256_CTX * ctx, const void *in, size_t len); + +void +HMAC_SHA256_Final(unsigned char digest[32], HMAC_SHA256_CTX * ctx); + +void +PBKDF2_SHA256(const uint8_t * passwd, size_t passwdlen, const uint8_t * salt, + size_t saltlen, uint64_t c, uint8_t * buf, size_t dkLen); + +#endif // PBKDF2_H diff --git a/src/scrypt-arm.S b/src/crypto/scrypt-arm.S similarity index 99% rename from src/scrypt-arm.S rename to src/crypto/scrypt-arm.S index 143eb3a4b1..232efd5038 100644 --- a/src/scrypt-arm.S +++ b/src/crypto/scrypt-arm.S @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: © 2012 pooler +// +// SPDX-License-Identifier: GPL-2.0-or-later + /* * Copyright 2012 pooler@litecoinpool.org * diff --git a/src/scrypt-x86.S b/src/crypto/scrypt-x86.S similarity index 99% rename from src/scrypt-x86.S rename to src/crypto/scrypt-x86.S index c1d2cef3f1..0822bd279a 100644 --- a/src/scrypt-x86.S +++ b/src/crypto/scrypt-x86.S @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: © 2011 pooler +# +# SPDX-License-Identifier: BSD-2-Clause + # Copyright 2011 pooler@litecoinpool.org # All rights reserved. # diff --git a/src/scrypt-x86_64.S b/src/crypto/scrypt-x86_64.S similarity index 99% rename from src/scrypt-x86_64.S rename to src/crypto/scrypt-x86_64.S index 3036d03e74..4c7073f9a0 100644 --- a/src/scrypt-x86_64.S +++ b/src/crypto/scrypt-x86_64.S @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: © 2011 pooler +# +# SPDX-License-Identifier: BSD-2-Clause + # Copyright 2011-2012 pooler@litecoinpool.org # All rights reserved. # diff --git a/src/scrypt.cpp b/src/crypto/scrypt.cpp similarity index 95% rename from src/scrypt.cpp rename to src/crypto/scrypt.cpp index 06ef53cd2b..def1cecaa1 100644 --- a/src/scrypt.cpp +++ b/src/crypto/scrypt.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2013 Balthazar +// SPDX-FileCopyrightText: © 2011 pooler +// SPDX-FileCopyrightText: © 2011 ArtForz +// SPDX-FileCopyrightText: © 2009 Colin Percival +// +// SPDX-License-Identifier: BSD-2-Clause + /*- * Copyright 2009 Colin Percival, 2011 ArtForz, 2011 pooler, 2013 Balthazar * All rights reserved. @@ -30,11 +37,11 @@ #include #include -#include "scrypt.h" -#include "pbkdf2.h" +#include "crypto/scrypt.h" +#include "crypto/pbkdf2.h" -#include "util.h" -#include "net.h" +#include "util/util.h" +#include "net/net.h" #define SCRYPT_BUFFER_SIZE (131072 + 63) diff --git a/src/crypto/scrypt.h b/src/crypto/scrypt.h new file mode 100644 index 0000000000..d8f8998d69 --- /dev/null +++ b/src/crypto/scrypt.h @@ -0,0 +1,22 @@ +// SPDX-FileCopyrightText: © 2013 Balthazar +// SPDX-FileCopyrightText: © 2011 pooler +// SPDX-FileCopyrightText: © 2011 ArtForz +// SPDX-FileCopyrightText: © 2009 Colin Percival +// +// SPDX-License-Identifier: BSD-2-Clause + +#ifndef SCRYPT_MINE_H +#define SCRYPT_MINE_H + +#include +#include + +#include "util/util.h" +#include "net/net.h" + +uint256 scrypt_salted_multiround_hash(const void* input, size_t inputlen, const void* salt, size_t saltlen, const unsigned int nRounds); +uint256 scrypt_salted_hash(const void* input, size_t inputlen, const void* salt, size_t saltlen); +uint256 scrypt_hash(const void* input, size_t inputlen); +uint256 scrypt_blockhash(const void* input); + +#endif // SCRYPT_MINE_H diff --git a/src/db.h b/src/db.h deleted file mode 100644 index 08888fdf9c..0000000000 --- a/src/db.h +++ /dev/null @@ -1,333 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef BITCOIN_DB_H -#define BITCOIN_DB_H - -#include "main.h" - -#include -#include -#include - -#include - -class CAddress; -class CAddrMan; -class CBlockLocator; -class CDiskBlockIndex; -class CDiskTxPos; -class CMasterKey; -class COutPoint; -class CTxIndex; -class CWallet; -class CWalletTx; - -extern unsigned int nWalletDBUpdated; - -void ThreadFlushWalletDB(const std::string& strFile); -bool BackupWallet(const CWallet& wallet, const std::string& strDest); - - -class CDBEnv -{ -private: - bool fDetachDB; - bool fDbEnvInit; - bool fMockDb; - boost::filesystem::path pathEnv; - std::string strPath; - - void EnvShutdown(); - -public: - mutable CCriticalSection cs_db; - DbEnv dbenv; - std::map mapFileUseCount; - std::map mapDb; - - CDBEnv(); - ~CDBEnv(); - void MakeMock(); - bool IsMock() { return fMockDb; }; - - /* - * Verify that database file strFile is OK. If it is not, - * call the callback to try to recover. - * This must be called BEFORE strFile is opened. - * Returns true if strFile is OK. - */ - enum VerifyResult { VERIFY_OK, RECOVER_OK, RECOVER_FAIL }; - VerifyResult Verify(std::string strFile, bool (*recoverFunc)(CDBEnv& dbenv, std::string strFile)); - /* - * Salvage data from a file that Verify says is bad. - * fAggressive sets the DB_AGGRESSIVE flag (see berkeley DB->verify() method documentation). - * Appends binary key/value pairs to vResult, returns true if successful. - * NOTE: reads the entire database into memory, so cannot be used - * for huge databases. - */ - typedef std::pair, std::vector > KeyValPair; - bool Salvage(std::string strFile, bool fAggressive, std::vector& vResult); - - bool Open(boost::filesystem::path pathEnv_); - void Close(); - void Flush(bool fShutdown); - - void CheckpointLSN(const std::string& strFile); - void SetDetach(bool fDetachDB_) { fDetachDB = fDetachDB_; } - bool GetDetach() { return fDetachDB; } - - void CloseDb(const std::string& strFile); - bool RemoveDb(const std::string& strFile); - - DbTxn *TxnBegin(int flags=DB_TXN_WRITE_NOSYNC) - { - DbTxn* ptxn = NULL; - int ret = dbenv.txn_begin(NULL, &ptxn, flags); - if (!ptxn || ret != 0) - return NULL; - return ptxn; - } -}; - -extern CDBEnv bitdb; - - -/** RAII class that provides access to a Berkeley database */ -class CDB -{ -protected: - Db* pdb; - std::string strFile; - DbTxn *activeTxn; - bool fReadOnly; - - explicit CDB(const std::string& strFilename, const char* pszMode="r+"); - ~CDB() { Close(); } - -public: - void Close(); - -private: - CDB(const CDB&); - void operator=(const CDB&); - -protected: - template - bool Read(const K& key, T& value, uint32_t nFlags=0) - { - if (!pdb) - return false; - - // Key - CDataStream ssKey(SER_DISK, CLIENT_VERSION); - ssKey.reserve(1000); - ssKey << key; - Dbt datKey(&ssKey[0], ssKey.size()); - - // Read - Dbt datValue; - datValue.set_flags(DB_DBT_MALLOC); - int ret = pdb->get(activeTxn, &datKey, &datValue, nFlags); - memset(datKey.get_data(), 0, datKey.get_size()); - if (datValue.get_data() == NULL) - return false; - - // Unserialize value - try { - CDataStream ssValue((char*)datValue.get_data(), (char*)datValue.get_data() + datValue.get_size(), SER_DISK, CLIENT_VERSION); - ssValue >> value; - } - catch (std::exception &e) { - return false; - } - - // Clear and free memory - memset(datValue.get_data(), 0, datValue.get_size()); - free(datValue.get_data()); - return (ret == 0); - } - - template - bool Write(const K& key, const T& value, bool fOverwrite=true) - { - if (!pdb) - return false; - - if (fReadOnly) - assert(!"Write called on database in read-only mode"); - - // Key - CDataStream ssKey(SER_DISK, CLIENT_VERSION); - ssKey.reserve(1000); - ssKey << key; - Dbt datKey(&ssKey[0], ssKey.size()); - - // Value - CDataStream ssValue(SER_DISK, CLIENT_VERSION); - ssValue.reserve(10000); - ssValue << value; - Dbt datValue(&ssValue[0], ssValue.size()); - - // Write - int ret = pdb->put(activeTxn, &datKey, &datValue, (fOverwrite ? 0 : DB_NOOVERWRITE)); - - // Clear memory in case it was a private key - memset(datKey.get_data(), 0, datKey.get_size()); - memset(datValue.get_data(), 0, datValue.get_size()); - - return (ret == 0); - } - - template - bool Erase(const K& key) - { - if (!pdb) - return false; - if (fReadOnly) - assert(!"Erase called on database in read-only mode"); - - // Key - CDataStream ssKey(SER_DISK, CLIENT_VERSION); - ssKey.reserve(1000); - ssKey << key; - Dbt datKey(&ssKey[0], ssKey.size()); - - // Erase - int ret = pdb->del(activeTxn, &datKey, 0); - - // Clear memory - memset(datKey.get_data(), 0, datKey.get_size()); - return (ret == 0 || ret == DB_NOTFOUND); - } - - template - bool Exists(const K& key) - { - if (!pdb) - return false; - - // Key - CDataStream ssKey(SER_DISK, CLIENT_VERSION); - ssKey.reserve(1000); - ssKey << key; - Dbt datKey(&ssKey[0], ssKey.size()); - - // Exists - int ret = pdb->exists(activeTxn, &datKey, 0); - - // Clear memory - memset(datKey.get_data(), 0, datKey.get_size()); - return (ret == 0); - } - - Dbc* GetCursor() - { - if (!pdb) - return NULL; - Dbc* pcursor = NULL; - int ret = pdb->cursor(NULL, &pcursor, 0); - if (ret != 0) - return NULL; - return pcursor; - } - - -public: - - int ReadAtCursor(Dbc* pcursor, CDataStream& ssKey, CDataStream& ssValue, unsigned int fFlags=DB_NEXT) - { - // Read at cursor - Dbt datKey; - if (fFlags == DB_SET || fFlags == DB_SET_RANGE || fFlags == DB_GET_BOTH || fFlags == DB_GET_BOTH_RANGE) - { - datKey.set_data(&ssKey[0]); - datKey.set_size(ssKey.size()); - } - Dbt datValue; - if (fFlags == DB_GET_BOTH || fFlags == DB_GET_BOTH_RANGE) - { - datValue.set_data(&ssValue[0]); - datValue.set_size(ssValue.size()); - } - datKey.set_flags(DB_DBT_MALLOC); - datValue.set_flags(DB_DBT_MALLOC); - int ret = pcursor->get(&datKey, &datValue, fFlags); - if (ret != 0) - return ret; - else if (datKey.get_data() == NULL || datValue.get_data() == NULL) - return 99999; - - // Convert to streams - ssKey.SetType(SER_DISK); - ssKey.clear(); - ssKey.write((char*)datKey.get_data(), datKey.get_size()); - ssValue.SetType(SER_DISK); - ssValue.clear(); - ssValue.write((char*)datValue.get_data(), datValue.get_size()); - - // Clear and free memory - memset(datKey.get_data(), 0, datKey.get_size()); - memset(datValue.get_data(), 0, datValue.get_size()); - free(datKey.get_data()); - free(datValue.get_data()); - return 0; - } - - bool TxnBegin() - { - if (!pdb || activeTxn) - return false; - DbTxn* ptxn = bitdb.TxnBegin(); - if (!ptxn) - return false; - activeTxn = ptxn; - return true; - } - - bool TxnCommit() - { - if (!pdb || !activeTxn) - return false; - int ret = activeTxn->commit(0); - activeTxn = NULL; - return (ret == 0); - } - - bool TxnAbort() - { - if (!pdb || !activeTxn) - return false; - int ret = activeTxn->abort(); - activeTxn = NULL; - return (ret == 0); - } - - bool ReadVersion(int& nVersion) - { - nVersion = 0; - return Read(std::string("version"), nVersion); - } - - bool WriteVersion(int nVersion) - { - return Write(std::string("version"), nVersion); - } - - bool static Rewrite(const std::string& strFile, const char* pszSkip = NULL); -}; - - -/** Access to the (IP) address database (peers.dat) */ -class CAddrDB -{ -private: - boost::filesystem::path pathAddr; -public: - CAddrDB(); - bool Write(const CAddrMan& addr); - bool Read(CAddrMan& addr); -}; - -#endif // BITCOIN_DB_H diff --git a/src/eckey.h b/src/eckey.h deleted file mode 100644 index 555aacaa70..0000000000 --- a/src/eckey.h +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2013 The Bitcoin developers -// Copyright (c) 2014-2015 The ShadowCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. - -#ifndef CEC_KEY_H -#define CEC_KEY_H - -#include -#include -#include -#include - -#include "key.h" - -// RAII Wrapper around OpenSSL's EC_KEY -class CECKey { -private: - EC_KEY *pkey; - -public: - CECKey() { - pkey = EC_KEY_new_by_curve_name(NID_secp256k1); - assert(pkey != NULL); - } - - ~CECKey() { - EC_KEY_free(pkey); - } - - EC_KEY* GetECKey() {return pkey;}; - - void GetSecretBytes(unsigned char vch[32]) const; - - void SetSecretBytes(const unsigned char vch[32]); - - void GetPrivKey(CPrivKey &privkey, bool fCompressed); - - bool SetPrivKey(const CPrivKey &privkey, bool fSkipCheck=false); - - void GetPubKey(CPubKey &pubkey, bool fCompressed); - - bool SetPubKey(const CPubKey &pubkey); - - bool Sign(const uint256 &hash, std::vector& vchSig); - - bool Verify(const uint256 &hash, const std::vector& vchSig); - - bool SignCompact(const uint256 &hash, unsigned char *p64, int &rec); - - // reconstruct public key from a compact signature - // This is only slightly more CPU intensive than just verifying it. - // If this function succeeds, the recovered public key is guaranteed to be valid - // (the signature is a valid signature of the given data for that key) - bool Recover(const uint256 &hash, const unsigned char *p64, int rec); - - bool TweakPublic(const unsigned char vchTweak[32]); -}; - -bool TweakSecret(unsigned char vchSecretOut[32], const unsigned char vchSecretIn[32], const unsigned char vchTweak[32]); - - - -#endif - - diff --git a/src/hash.h b/src/hash.h deleted file mode 100644 index eeb7581ff9..0000000000 --- a/src/hash.h +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef BITCOIN_HASH_H -#define BITCOIN_HASH_H - -#include "uint256.h" -#include "serialize.h" - -#include -#include - -template -inline uint256 Hash(const T1 pbegin, const T1 pend) -{ - static unsigned char pblank[1]; - uint256 hash1; - SHA256((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1); - uint256 hash2; - SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); - return hash2; -} - -class CHashWriter -{ -private: - SHA256_CTX ctx; - -public: - int nType; - int nVersion; - - void Init() - { - SHA256_Init(&ctx); - } - - CHashWriter(int nTypeIn, int nVersionIn) : nType(nTypeIn), nVersion(nVersionIn) - { - Init(); - } - - CHashWriter& write(const char *pch, size_t size) - { - SHA256_Update(&ctx, pch, size); - return (*this); - } - - // invalidates the object - uint256 GetHash() - { - uint256 hash1; - SHA256_Final((unsigned char*)&hash1, &ctx); - uint256 hash2; - SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); - return hash2; - } - - template - CHashWriter& operator<<(const T& obj) { - // Serialize to this stream - ::Serialize(*this, obj, nType, nVersion); - return (*this); - } -}; - - -template -inline uint256 Hash(const T1 p1begin, const T1 p1end, - const T2 p2begin, const T2 p2end) -{ - static unsigned char pblank[1]; - uint256 hash1; - SHA256_CTX ctx; - SHA256_Init(&ctx); - SHA256_Update(&ctx, (p1begin == p1end ? pblank : (unsigned char*)&p1begin[0]), (p1end - p1begin) * sizeof(p1begin[0])); - SHA256_Update(&ctx, (p2begin == p2end ? pblank : (unsigned char*)&p2begin[0]), (p2end - p2begin) * sizeof(p2begin[0])); - SHA256_Final((unsigned char*)&hash1, &ctx); - uint256 hash2; - SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); - return hash2; -} - -template -inline uint256 Hash(const T1 p1begin, const T1 p1end, - const T2 p2begin, const T2 p2end, - const T3 p3begin, const T3 p3end) -{ - static unsigned char pblank[1]; - uint256 hash1; - SHA256_CTX ctx; - SHA256_Init(&ctx); - SHA256_Update(&ctx, (p1begin == p1end ? pblank : (unsigned char*)&p1begin[0]), (p1end - p1begin) * sizeof(p1begin[0])); - SHA256_Update(&ctx, (p2begin == p2end ? pblank : (unsigned char*)&p2begin[0]), (p2end - p2begin) * sizeof(p2begin[0])); - SHA256_Update(&ctx, (p3begin == p3end ? pblank : (unsigned char*)&p3begin[0]), (p3end - p3begin) * sizeof(p3begin[0])); - SHA256_Final((unsigned char*)&hash1, &ctx); - uint256 hash2; - SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); - return hash2; -} - -template -uint256 SerializeHash(const T& obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION) -{ - CHashWriter ss(nType, nVersion); - ss << obj; - return ss.GetHash(); -} - -template -inline uint160 Hash160(const T1 pbegin, const T1 pend) -{ - static unsigned char pblank[1]; - uint256 hash1; - SHA256((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1); - uint160 hash2; - RIPEMD160((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); - return hash2; -} - -inline uint160 Hash160(const std::vector& vch) -{ - return Hash160(vch.begin(), vch.end()); -} - -inline uint32_t ROTL32 ( uint32_t x, int8_t r ) -{ - return (x << r) | (x >> (32 - r)); -} - -unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector& vDataToHash); - - -typedef struct -{ - SHA512_CTX ctxInner; - SHA512_CTX ctxOuter; -} HMAC_SHA512_CTX; - -int HMAC_SHA512_Init(HMAC_SHA512_CTX *pctx, const void *pkey, size_t len); -int HMAC_SHA512_Update(HMAC_SHA512_CTX *pctx, const void *pdata, size_t len); -int HMAC_SHA512_Final(unsigned char *pmd, HMAC_SHA512_CTX *pctx); - -uint32_t BitcoinChecksum(uint8_t* p, uint32_t nBytes); - -void AppendChecksum(std::vector& data); - -bool VerifyChecksum(const std::vector& data); - -#endif diff --git a/src/init.h b/src/init.h deleted file mode 100644 index 780a5bb775..0000000000 --- a/src/init.h +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef BITCOIN_INIT_H -#define BITCOIN_INIT_H - -#include "wallet.h" - -extern CWallet* pwalletMain; -void StartShutdown(); -bool ShutdownRequested(); -void Shutdown(); -bool AppInit2(boost::thread_group& threadGroup); -std::string HelpMessage(); - -#endif diff --git a/src/init.cpp b/src/init/init.cpp similarity index 75% rename from src/init.cpp rename to src/init/init.cpp index bf21a60c64..2ce0858c61 100644 --- a/src/init.cpp +++ b/src/init/init.cpp @@ -1,25 +1,25 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "txdb.h" -#include "walletdb.h" -#include "rpcserver.h" -#include "net.h" -#include "init.h" -#include "state.h" -#include "sync.h" -#include "util.h" -#include "ui_interface.h" +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT -#include "smessage.h" -#include "ringsig.h" -#include "miner.h" +#include "wallet/txdb.h" +#include "wallet/walletdb.h" +#include "rpc/rpcserver.h" +#include "net/net.h" +#include "init/init.h" +#include "state.h" +#include "util/sync.h" +#include "util/util.h" +#include "interface.h" +#include "anon/ringsig.h" +#include "pos/miner.h" #include #include -#include #include #include #include @@ -28,13 +28,14 @@ #include #endif +using namespace std; +using namespace boost; + namespace fs = boost::filesystem; CWallet* pwalletMain; CClientUIInterface uiInterface; -static const bool DEFAULT_STOPAFTERBLOCKIMPORT = false; - ////////////////////////////////////////////////////////////////////////////// // // Shutdown @@ -65,17 +66,7 @@ static const bool DEFAULT_STOPAFTERBLOCKIMPORT = false; // shutdown thing. // -volatile bool fRequestShutdown = false; -//boost::atomic fRequestShutdown(false); - -void StartShutdown() -{ - fRequestShutdown = true; -} -bool ShutdownRequested() -{ - return fRequestShutdown; -} +// see shutdown.h/cpp ////////////////////////////////////////////////////////////////////////////// @@ -86,17 +77,19 @@ bool ShutdownRequested() bool Finalise() { LogPrintf("Finalise()\n"); - + + // Set fRequestShutdown to true, to make sure no matter how we landed here, ShutdownRequested() will reliable return true. + StartShutdown(); + StopRPCThreads(); ShutdownRPCMining(); - SecureMsgShutdown(); - + mempool.AddTransactionsUpdated(1); if (pwalletMain) bitdb.Flush(false); - + StopNode(); - + if (pwalletMain) { { @@ -108,9 +101,9 @@ bool Finalise() delete pwalletMain; pwalletMain = NULL; }; - + finaliseRingSigs(); - + if (nNodeMode == NT_FULL) { std::map::iterator it; @@ -134,9 +127,9 @@ bool Finalise() if (fDebug) LogPrintf("mapBlockThinIndex cleared.\n"); }; - + CTxDB().Close(); - + fs::remove(GetPidFile()); return true; } @@ -146,32 +139,74 @@ void Shutdown() static CCriticalSection cs_Shutdown; TRY_LOCK(cs_Shutdown, lockShutdown); if (!lockShutdown) return; - + Finalise(); - + LogPrintf("Shutdown complete.\n\n"); } -void HandleSIGTERM(int) +#ifndef WIN32 +// Note: this also handles SIGINT +void HandleSIGTERM() { - fRequestShutdown = true; + StartShutdown(); } -void HandleSIGHUP(int) +void HandleSIGHUP() { fReopenDebugLog = true; } +static sigset_t blockedSignals; + +int BlockSignals() +{ + sigemptyset(&blockedSignals); + sigaddset(&blockedSignals, SIGINT); + sigaddset(&blockedSignals, SIGTERM); + sigaddset(&blockedSignals, SIGHUP); + return pthread_sigmask(SIG_BLOCK, &blockedSignals, NULL); +} + +void ThreadSignalHandler(void *nothing) +{ + RenameThread("signals"); + +// fprintf(stderr, "Waiting for signals\n"); + while (1) { + int sig, rc; + rc = sigwait(&blockedSignals, &sig); + if (rc != 0) { + fprintf(stderr, "Failed to wait for signals: %d\n", rc); + return; + } + switch (sig) { + case SIGINT: + case SIGTERM: + fprintf(stderr, "Shutting down on signal %d\n", sig); + HandleSIGTERM(); + return; + case SIGHUP: + fprintf(stderr, "Received SIGHUP, re-opening debug log\n"); + HandleSIGHUP(); + break; + default: + fprintf(stderr, "Unexpected signal %d\n", sig); + break; + } + } +} +#endif bool static InitError(const std::string &str) { - uiInterface.ThreadSafeMessageBox(str, _("ShadowCoin"), CClientUIInterface::BTN_OK | CClientUIInterface::MODAL); + uiInterface.ThreadSafeMessageBox(str, _("ALIAS"), CClientUIInterface::BTN_OK | CClientUIInterface::MODAL); return false; } bool static InitWarning(const std::string &str) { - uiInterface.ThreadSafeMessageBox(str, _("ShadowCoin"), CClientUIInterface::BTN_OK | CClientUIInterface::ICON_WARNING | CClientUIInterface::MODAL); + uiInterface.ThreadSafeMessageBox(str, _("ALIAS"), CClientUIInterface::BTN_OK | CClientUIInterface::ICON_WARNING | CClientUIInterface::MODAL); return true; } @@ -196,19 +231,21 @@ bool static Bind(const CService &addr, bool fError = true) std::string HelpMessage() { std::string strUsage = _("Options:") + "\n"; - strUsage += " -? " + _("This help message") + "\n"; - strUsage += " -conf= " + _("Specify configuration file (default: shadowcoin.conf)") + "\n"; - strUsage += " -pid= " + _("Specify pid file (default: shadowcoind.pid)") + "\n"; + strUsage += " -?|-h|-help " + _("This help message") + "\n"; + strUsage += " -conf= " + _("Specify configuration file (default: alias.conf)") + "\n"; + strUsage += " -pid= " + _("Specify pid file (default: alias.pid)") + "\n"; strUsage += " -datadir= " + _("Specify data directory") + "\n"; strUsage += " -wallet= " + _("Specify wallet file (within data directory)") + "\n"; + strUsage += " -disablewallet " + _("Skip wallet registration to make IBD faster (wallet still loads, but per-block scan is a no-op; next normal startup rescans forward)") + "\n"; strUsage += " -dbcache= " + _("Set database cache size in megabytes (default: 25)") + "\n"; strUsage += " -dblogsize= " + _("Set database disk log size in megabytes (default: 100)") + "\n"; strUsage += " -timeout= " + _("Specify connection timeout in milliseconds (default: 5000)") + "\n"; strUsage += " -proxy= " + _("Connect through socks proxy") + "\n"; strUsage += " -socks= " + _("Select the version of socks proxy to use (4-5, default: 5)") + "\n"; strUsage += " -tor= " + _("Use proxy to reach tor hidden services (default: same as -proxy)") + "\n"; + strUsage += " -onionv2 " + _("Use tor hidden services version 2 instead of version 3") + "\n"; strUsage += " -dns " + _("Allow DNS lookups for -addnode, -seednode and -connect") + "\n"; - strUsage += " -port= " + _("Listen for connections on (default: 51737 or testnet: 51997)") + "\n"; + strUsage += " -port= " + _("Listen for connections on (default: 37347 or testnet: 37111)") + "\n"; strUsage += " -maxconnections= " + _("Maintain at most connections to peers (default: 125)") + "\n"; strUsage += " -addnode= " + _("Add a node to connect to and attempt to keep the connection open") + "\n"; strUsage += " -connect= " + _("Connect only to the specified node(s)") + "\n"; @@ -219,8 +256,10 @@ std::string HelpMessage() strUsage += " -listen " + _("Accept connections from outside (default: 1 if no -proxy or -connect)") + "\n"; strUsage += " -bind= " + _("Bind to given address. Use [host]:port notation for IPv6") + "\n"; strUsage += " -dnsseed " + _("Find peers using DNS lookup (default: 1)") + "\n"; + strUsage += " -onionseed " + _("Find peers using .onion seeds (default: 1 unless -connect)") + "\n"; strUsage += " -staking " + _("Stake your coins to support network and gain reward (default: 1)") + "\n"; strUsage += " -minstakeinterval= " + _("Minimum time in seconds between successful stakes (default: 30)") + "\n"; + strUsage += " -stakingdonation= " + _("Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5)") + "\n"; strUsage += " -minersleep= " + _("Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500)") + "\n"; strUsage += " -synctime " + _("Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1)") + "\n"; strUsage += " -banscore= " + _("Threshold for disconnecting misbehaving peers (default: 100)") + "\n"; @@ -259,15 +298,15 @@ std::string HelpMessage() strUsage += " -printtodebuglog " + _("Send trace/debug info to debug.log file") + "\n"; strUsage += " -rpcuser= " + _("Username for JSON-RPC connections") + "\n"; strUsage += " -rpcpassword= " + _("Password for JSON-RPC connections") + "\n"; - strUsage += " -rpcport= " + _("Listen for JSON-RPC connections on (default: 51736 or testnet: 51996)") + "\n"; + strUsage += " -rpcport= " + _("Listen for JSON-RPC connections on (default: 36657 or testnet: 36757)") + "\n"; strUsage += " -rpcallowip= " + _("Allow JSON-RPC connections from specified IP address") + "\n"; - + if (!fHaveGUI) { strUsage += " -rpcconnect= " + _("Send commands to node running on (default: 127.0.0.1)") + "\n"; strUsage += " -rpcwait " + _("Wait for RPC server to start") + "\n"; }; - + strUsage += " -blocknotify= " + _("Execute command when the best block changes (%s in cmd is replaced by block hash)") + "\n"; strUsage += " -walletnotify= " + _("Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)") + "\n"; strUsage += " -confchange " + _("Require a confirmations for change (default: 0)") + "\n"; @@ -280,8 +319,9 @@ std::string HelpMessage() strUsage += " -checkblocks= " + _("How many blocks to check at startup (default: 2500, 0 = all)") + "\n"; strUsage += " -checklevel= " + _("How thorough the block verification is (0-6, default: 1)") + "\n"; strUsage += " -loadblock= " + _("Imports blocks from external blk000?.dat file") + "\n"; - strUsage += " -maxorphanblocksmib= " + strprintf(_("Keep at most MiB of unconnectable blocks in memory (default: %u)"), DEFAULT_MAX_ORPHAN_BLOCKS) + "\n"; + strUsage += " -maxorphanblocksmib= " + strprintf(_("Keep at most MiB of unconnectable blocks in memory (default: %u)"), DEFAULT_MAX_ORPHAN_BLOCKS) + "\n"; strUsage += " -reindex " + _("Rebuild block chain index from current blk000?.dat files on startup") + "\n"; + strUsage += " -version " + _("Show version and exit") + "\n"; strUsage += "\n" + _("Thin options:") + "\n"; strUsage += " -thinmode " + _("Operate in less secure, less resource hungry 'thin' mode") + "\n"; @@ -303,11 +343,6 @@ std::string HelpMessage() strUsage += " -rpcsslprivatekeyfile= " + _("Server private key (default: server.pem)") + "\n"; strUsage += " -rpcsslciphers= " + _("Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH)") + "\n"; - strUsage += "\n" + _("Secure messaging options:") + "\n"; - strUsage += " -nosmsg " + _("Disable secure messaging.") + "\n"; - strUsage += " -debugsmsg " + _("Log extra debug messages.") + "\n"; - strUsage += " -smsgscanchain " + _("Scan the block chain for public key addresses on startup.") + "\n"; - return strUsage; } @@ -360,22 +395,15 @@ bool AppInit2(boost::thread_group& threadGroup) #ifndef WIN32 umask(077); - // Clean shutdown on SIGTERM - struct sigaction sa; - sa.sa_handler = HandleSIGTERM; - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - sigaction(SIGTERM, &sa, NULL); - sigaction(SIGINT, &sa, NULL); - - // Reopen debug.log on SIGHUP - struct sigaction sa_hup; - sa_hup.sa_handler = HandleSIGHUP; - sigemptyset(&sa_hup.sa_mask); - sa_hup.sa_flags = 0; - sigaction(SIGHUP, &sa_hup, NULL); + // Start a thread to wait for SIGINT, SIGTERM and SIGHUP and handle them appropriately + NewThread(&ThreadSignalHandler, NULL); #endif + if (GetBoolArg("-version")) { + fprintf(stdout, "%s", FormatFullVersion().c_str()); + return false; + } + if (!CheckDiskSpace()) return false; @@ -384,13 +412,14 @@ bool AppInit2(boost::thread_group& threadGroup) nNodeLifespan = GetArg("-addrlifespan", 7); nMinStakeInterval = GetArg("-minstakeinterval", 0); + nStakingDonation = GetArg("-stakingdonation", 0); nMinerSleep = GetArg("-minersleep", 500); fUseFastIndex = GetBoolArg("-fastindex", true); // Largest block you're willing to create. // Limit to betweeen 1K and MAX_BLOCK_SIZE-1K for sanity: - nBlockMaxSize = GetArg("-blockmaxsize", MAX_BLOCK_SIZE_GEN/2); + nBlockMaxSize = GetArg("-blockmaxsize", MAX_BLOCK_SIZE-1000); nBlockMaxSize = std::max((unsigned int)1000, std::min((unsigned int)(MAX_BLOCK_SIZE-1000), nBlockMaxSize)); // How much of the block should be dedicated to high-priority transactions, @@ -414,58 +443,25 @@ bool AppInit2(boost::thread_group& threadGroup) if (fDebug) LogPrintf("nMinerSleep %u\n", nMinerSleep); - nDerivationMethodIndex = 0; fTestNet = GetBoolArg("-testnet", false); if (!SelectParamsFromCommandLine()) return InitError("Invalid combination of -testnet and -regtest."); - + if (!fHaveGUI && GetBoolArg("-cli", false)) printf("Network: %s\n", Params().NetworkIDString().c_str()); - + if (GetBoolArg("-thinmode")) nNodeMode = NT_THIN; - - if (fTestNet) - { - SoftSetBoolArg("-irc", true); - }; - - if (mapArgs.count("-bind")) - { - // when specifying an explicit binding address, you want to listen on it - // even when -connect or -proxy is specified - SoftSetBoolArg("-listen", true); - }; if (mapArgs.count("-connect") && mapMultiArgs["-connect"].size() > 0) { - // when only connecting to trusted nodes, do not seed via DNS, or listen by default - SoftSetBoolArg("-dnsseed", false); - SoftSetBoolArg("-listen", false); + // when only connecting to trusted nodes, do not seed via .onion, or listen by default + SoftSetBoolArg("-onionseed", false); } - if (mapArgs.count("-proxy")) - { - // to protect privacy, do not listen by default if a proxy server is specified - SoftSetBoolArg("-listen", false); - }; - - if (!GetBoolArg("-listen", true)) - { - // do not map ports or try to retrieve public IP when not listening (pointless) - SoftSetBoolArg("-upnp", false); - SoftSetBoolArg("-discover", false); - }; - - if (mapArgs.count("-externalip")) - { - // if an explicit public IP is specified, do not try to find others - SoftSetBoolArg("-discover", false); - }; - if (GetBoolArg("-salvagewallet")) { // Rewrite just private keys: rescan to find transactions @@ -474,36 +470,40 @@ bool AppInit2(boost::thread_group& threadGroup) if (fTestNet) { - nStakeMinAge = 1 * 60 * 60; // test net min age is 1 hour + int nTestnetScaleMod = 10; + nMinTxFee /= nTestnetScaleMod; + nMinRelayTxFee /= nTestnetScaleMod; + nStakeReward /= nTestnetScaleMod; + nAnonStakeReward /= nTestnetScaleMod; + nStakeMinAge = 15 * 60; // test net min age is 15 minutes nCoinbaseMaturity = 10; // test maturity is 10 blocks - nStakeMinConfirmations = 10; // test maturity is 10 blocks + nStakeCombineThreshold /= nTestnetScaleMod; + nStakeSplitThreshold /= nTestnetScaleMod; + nMaxAnonOutput /= nTestnetScaleMod; + nMaxAnonStakeOutput /= nTestnetScaleMod; }; // ********************************************************* Step 3: parameter-to-internal-flags - + fDebug = !mapMultiArgs["-debug"].empty(); // Special-case: if -debug=0/-nodebug is set, turn off debugging messages const std::vector& categories = mapMultiArgs["-debug"]; if (GetBoolArg("-nodebug", false) || std::find(categories.begin(), categories.end(), std::string("0")) != categories.end()) fDebug = false; - + // -debug implies fDebug*, unless otherwise specified if (fDebug) { SoftSetBoolArg("-debugnet", true); - SoftSetBoolArg("-debugsmsg", true); SoftSetBoolArg("-debugchain", true); SoftSetBoolArg("-debugringsig", true); }; fDebugNet = GetBoolArg("-debugnet"); - fDebugSmsg = GetBoolArg("-debugsmsg"); fDebugChain = GetBoolArg("-debugchain"); fDebugRingSig = GetBoolArg("-debugringsig"); fDebugPoS = GetBoolArg("-debugpos"); - fNoSmsg = GetBoolArg("-nosmsg"); - // Check for -socks - as this is a privacy risk to continue, exit here if (mapArgs.count("-socks")) return InitError(_("Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported.")); @@ -550,16 +550,18 @@ bool AppInit2(boost::thread_group& threadGroup) // ********************************************************* Step 4: application initialization: dir lock, daemonize, pidfile, debug log // Sanity check if (!InitSanityCheck()) - return InitError(_("Initialization sanity check failed. ShadowCoin is shutting down.")); + return InitError(_("Initialization sanity check failed. ALIAS is shutting down.")); - std::string strDataDir = GetDataDir().string(); std::string strWalletFileName = GetArg("-wallet", "wallet.dat"); // strWalletFileName must be a plain filename without a directory - if (strWalletFileName != fs::basename(strWalletFileName) + fs::extension(strWalletFileName)) + if (strWalletFileName != fs::path(strWalletFileName).filename().string()) return InitError(strprintf(_("Wallet %s resides outside data directory %s."), strWalletFileName.c_str(), strDataDir.c_str())); + if (mapArgs.count("-bip44key") && fs::exists(GetDataDir() / strWalletFileName)) + return InitError(_("-bip44key is not allowed if wallet.dat already exists")); + // Make sure only a single Bitcoin process is using the data directory. fs::path pathLockFile = GetDataDir() / ".lock"; FILE* file = fopen(pathLockFile.string().c_str(), "a"); // empty lock file; created if it doesn't exist. @@ -568,15 +570,19 @@ bool AppInit2(boost::thread_group& threadGroup) static boost::interprocess::file_lock lock(pathLockFile.string().c_str()); if (!lock.try_lock()) - return InitError(strprintf(_("Cannot obtain a lock on data directory %s. ShadowCoin is probably already running."), strDataDir.c_str())); - + return InitError(strprintf(_("Cannot obtain a lock on data directory %s. ALIAS is probably already running."), strDataDir.c_str())); + if (GetBoolArg("-shrinkdebugfile", !fDebug)) ShrinkDebugFile(); LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); - LogPrintf("ShadowCoin version %s (%s)\n", FormatFullVersion().c_str(), CLIENT_DATE.c_str()); + LogPrintf("ALIAS version %s (%s)\n", FormatFullVersion().c_str(), CLIENT_DATE.c_str()); LogPrintf("Operating in %s mode.\n", GetNodeModeName(nNodeMode)); +#if (OPENSSL_VERSION_NUMBER < 0x10100000L) LogPrintf("Using OpenSSL version %s\n", SSLeay_version(SSLEAY_VERSION)); +#else + LogPrintf("Using OpenSSL version %s\n", OpenSSL_version(OPENSSL_VERSION)); +#endif if (!fLogTimestamps) LogPrintf("Startup time: %s\n", DateTimeStrFormat("%x %H:%M:%S", GetTime()).c_str()); @@ -588,13 +594,11 @@ bool AppInit2(boost::thread_group& threadGroup) if (fDaemon) { - fprintf(stdout, "ShadowCoin server starting\n"); + fprintf(stdout, "ALIAS server starting\n"); fflush(stdout); }; - - int64_t nStart; - + int64_t nStart; /* ********************************************************* Step 4.5: adjust parameters for nNodeMode @@ -657,9 +661,6 @@ bool AppInit2(boost::thread_group& threadGroup) }; // -- thin and full - if (fNoSmsg) - nLocalServices &= ~(SMSG_RELAY); - if (initialiseRingSigs() != 0) return InitError("initialiseRingSigs() failed."); @@ -669,6 +670,7 @@ bool AppInit2(boost::thread_group& threadGroup) if (!bitdb.Open(GetDataDir())) { + LogPrintf("Failed to open data directory %s\n", strDataDir); std::string msg = strprintf(_("Error initializing database environment %s!" " To recover, BACKUP THAT DIRECTORY, then remove" " everything from it except for wallet.dat."), strDataDir.c_str()); @@ -691,7 +693,7 @@ bool AppInit2(boost::thread_group& threadGroup) " Original wallet.dat saved as wallet.{timestamp}.bak in %s; if" " your balance or transactions are incorrect you should" " restore from a backup."), strDataDir.c_str()); - uiInterface.ThreadSafeMessageBox(msg, _("ShadowCoin"), CClientUIInterface::BTN_OK | CClientUIInterface::ICON_WARNING | CClientUIInterface::MODAL); + uiInterface.ThreadSafeMessageBox(msg, _("ALIAS"), CClientUIInterface::BTN_OK | CClientUIInterface::ICON_WARNING | CClientUIInterface::MODAL); }; if (r == CDBEnv::RECOVER_FAIL) @@ -704,85 +706,64 @@ bool AppInit2(boost::thread_group& threadGroup) nBloomFilterElements = GetArg("-bloomfilterelements", 1536); - if (mapArgs.count("-onlynet")) - { + // Tor implementation + + do { std::set nets; - BOOST_FOREACH(std::string snet, mapMultiArgs["-onlynet"]) - { - enum Network net = ParseNetwork(snet); - if (net == NET_UNROUTABLE) - return InitError(strprintf(_("Unknown network specified in -onlynet: '%s'"), snet.c_str())); - nets.insert(net); - }; - for (int n = 0; n < NET_MAX; n++) - { + nets.insert(NET_TOR); + + for (int n = 0; n < NET_MAX; n++) { enum Network net = (enum Network)n; if (!nets.count(net)) SetLimited(net); - }; - }; + } + } while (false); - CService addrProxy; - bool fProxy = false; - if (mapArgs.count("-proxy")) { - addrProxy = CService(mapArgs["-proxy"], 9050); - if (!addrProxy.IsValid()) - return InitError(strprintf(_("Invalid -proxy address: '%s'"), mapArgs["-proxy"])); - - SetProxy(NET_IPV4, addrProxy); - SetProxy(NET_IPV6, addrProxy); - SetNameProxy(addrProxy); - fProxy = true; - } + // Tor implementation + + unsigned short onion_port; + CService addrOnion; + if (fTestNet) + onion_port = 9090; + else + onion_port = 9089; + + if (mapArgs.count("-tor") && mapArgs["-tor"] != "0") { + addrOnion = CService(mapArgs["-tor"], onion_port); - // -tor can override normal proxy, -notor disables tor entirely - if (!(mapArgs.count("-tor") && mapArgs["-tor"] == "0") - && (fProxy || mapArgs.count("-tor"))) - { - CService addrOnion; - if (!mapArgs.count("-tor")) - addrOnion = addrProxy; - else - addrOnion = CService(mapArgs["-tor"], 9050); if (!addrOnion.IsValid()) - return InitError(strprintf(_("Invalid -tor address: '%s'"), mapArgs["-tor"])); - SetProxy(NET_TOR, addrOnion); - SetReachable(NET_TOR); - } + return InitError(strprintf(_("Invalid -tor address: '%s'"), mapArgs["-tor"].c_str())); + } else { + addrOnion = CService("127.0.0.1", onion_port); +} + + SetProxy(NET_TOR, addrOnion); + SetReachable(NET_TOR); // see Step 2: parameter interactions for more information about these - fNoListen = !GetBoolArg("-listen", true); - fDiscover = GetBoolArg("-discover", true); fNameLookup = GetBoolArg("-dns", true); -#ifdef USE_UPNP - fUseUPnP = GetBoolArg("-upnp", USE_UPNP); -#endif bool fBound = false; - if (!fNoListen) + + // Tor implementation + std::string strError; + + do { - std::string strError; - if (mapArgs.count("-bind")) - { - BOOST_FOREACH(std::string strBind, mapMultiArgs["-bind"]) - { - CService addrBind; - if (!Lookup(strBind.c_str(), addrBind, GetListenPort(), false)) - return InitError(strprintf(_("Cannot resolve -bind address: '%s'"), strBind.c_str())); - fBound |= Bind(addrBind); - }; - } else - { - struct in_addr inaddr_any; - inaddr_any.s_addr = INADDR_ANY; - if (!IsLimited(NET_IPV6)) - fBound |= Bind(CService(in6addr_any, GetListenPort()), false); - if (!IsLimited(NET_IPV4)) - fBound |= Bind(CService(inaddr_any, GetListenPort()), !fBound); - }; - if (!fBound) - return InitError(_("Failed to listen on any port. Use -listen=0 if you want this.")); - }; + CService addrBind; + if (!Lookup("127.0.0.1", addrBind, GetListenPort(), false)) + return InitError(strprintf(_("Cannot resolve binding address: '%s'"), "127.0.0.1")); + + fBound |= Bind(addrBind); + } while (false); + + if (!fBound) + return InitError(_("Failed to listen on any port.")); + + if (!(mapArgs.count("-tor") && mapArgs["-tor"] != "0")) { + if (!NewThread(&StartTor, NULL)) + return InitError(_("Error: could not start tor node")); + } if (mapArgs.count("-externalip")) { @@ -792,8 +773,29 @@ bool AppInit2(boost::thread_group& threadGroup) if (!addrLocal.IsValid()) return InitError(strprintf(_("Cannot resolve -externalip address: '%s'"), strAddr.c_str())); AddLocal(CService(strAddr, GetListenPort(), fNameLookup), LOCAL_MANUAL); - }; - }; + } + } else + { + string automatic_onion; + boost::filesystem::path hostname_path = GetDataDir() / "tor" / "onion" / "hostname"; + if (fs::exists(hostname_path) && ((GetBoolArg("-onionv2") && fs::file_size(hostname_path) != 23) || (!GetBoolArg("-onionv2") && fs::file_size(hostname_path) != 63))) + remove(hostname_path.string().c_str()); + + int attempts = 0; + while (1) { + if (boost::filesystem::exists(hostname_path)) + break; + ++attempts; + boost::this_thread::sleep(boost::posix_time::seconds(2)); + if (attempts > 8) + return InitError(_("Timed out waiting for onion hostname.")); + LogPrintf("No onion hostname yet, will retry in 2 seconds... (%d/8)\n", attempts); + } + + ifstream file(hostname_path.string().c_str()); + file >> automatic_onion; + AddLocal(CService(automatic_onion, GetListenPort(), fNameLookup), LOCAL_MANUAL); + } if (mapArgs.count("-reservebalance")) // ppcoin: reserve balance amount { @@ -803,7 +805,7 @@ bool AppInit2(boost::thread_group& threadGroup) return false; }; }; - + BOOST_FOREACH(std::string strDest, mapMultiArgs["-seednode"]) AddOneShot(strDest); @@ -828,7 +830,7 @@ bool AppInit2(boost::thread_group& threadGroup) uiInterface.InitMessage(_("Loading block index...")); LogPrintf("Loading block index...\n"); nStart = GetTimeMillis(); - + // -- wipe the txdb if a reindex is queued if (mapArgs.count("-reindex")) { @@ -836,11 +838,18 @@ bool AppInit2(boost::thread_group& threadGroup) CTxDB txdb("cr+"); txdb.RecreateDB(); }; - - switch (LoadBlockIndex()) + + switch (LoadBlockIndex(true, [] (const unsigned mode, const uint32_t& nBlock) -> void { + if (mode == 0) + uiInterface.InitMessage(strprintf(_("Loading block index... (%d)"), nBlock)); + else if (mode == 1) + uiInterface.InitMessage(strprintf(_("Calculating chain trust... (%d)"), nBlock)); + else + uiInterface.InitMessage(strprintf(_("Validating last %d block..."), nBlock)); + })) { case 1: - return InitError(_("Error loading blkindex.dat")); + return InitError(_("Error loading blk0001.dat")); case 2: if (nNodeMode == NT_FULL) { @@ -848,12 +857,14 @@ bool AppInit2(boost::thread_group& threadGroup) mapArgs["-reindex"] = 1; }; break; + case 3: + return InitError(_("Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files.")); }; - + // as LoadBlockIndex can take several minutes, it's possible the user // requested to kill bitcoin-qt during the last operation. If so, exit. // As the program has not fully started yet, Shutdown() is possibly overkill. - if (fRequestShutdown) + if (ShutdownRequested()) { LogPrintf("Shutdown requested. Exiting.\n"); return false; @@ -895,9 +906,12 @@ bool AppInit2(boost::thread_group& threadGroup) uiInterface.InitMessage(_("Loading wallet...")); LogPrintf("Loading wallet...\n"); nStart = GetTimeMillis(); - + pwalletMain = new CWallet(strWalletFileName); - DBErrors nLoadWalletRet = pwalletMain->LoadWallet(); + int oltWalletVersion = 0; + DBErrors nLoadWalletRet = pwalletMain->LoadWallet(oltWalletVersion, [] (const uint32_t& nBlock) -> void { + uiInterface.InitMessage(strprintf(_("Loading wallet items... (%d)"), nBlock)); + }); if (nLoadWalletRet != DB_LOAD_OK) { @@ -909,15 +923,15 @@ bool AppInit2(boost::thread_group& threadGroup) { std::string msg(_("Warning: error reading wallet.dat! All keys read correctly, but transaction data" " or address book entries might be missing or incorrect.")); - uiInterface.ThreadSafeMessageBox(msg, _("ShadowCoin"), CClientUIInterface::BTN_OK | CClientUIInterface::ICON_WARNING | CClientUIInterface::MODAL); + uiInterface.ThreadSafeMessageBox(msg, _("ALIAS"), CClientUIInterface::BTN_OK | CClientUIInterface::ICON_WARNING | CClientUIInterface::MODAL); } else if (nLoadWalletRet == DB_TOO_NEW) { - strErrors << _("Error loading wallet.dat: Wallet requires newer version of ShadowCoin") << "\n"; + strErrors << _("Error loading wallet.dat: Wallet requires newer version of ALIAS") << "\n"; } else if (nLoadWalletRet == DB_NEED_REWRITE) { - strErrors << _("Wallet needed to be rewritten: restart ShadowCoin to complete") << "\n"; + strErrors << _("Wallet needed to be rewritten: restart ALIAS to complete") << "\n"; LogPrintf("%s", strErrors.str().c_str()); return InitError(strErrors.str()); } else @@ -925,41 +939,58 @@ bool AppInit2(boost::thread_group& threadGroup) strErrors << _("Error loading wallet.dat") << "\n"; }; }; - + // --- Prepare extended keys pwalletMain->ExtKeyLoadMaster(); pwalletMain->ExtKeyLoadAccounts(); pwalletMain->ExtKeyLoadAccountPacks(); - - - + LogPrintf("%s", strErrors.str().c_str()); LogPrintf(" wallet %15dms\n", GetTimeMillis() - nStart); - - RegisterWallet(pwalletMain); - - CBlockIndex *pindexRescan = pindexBest; - if (GetBoolArg("-rescan")) + // -disablewallet: leave pwalletMain loaded (RPC keeps working) but skip + // RegisterWallet + rescan. With no wallet in setpwalletRegistered, + // SyncWithWallets/SyncWithWalletsThin become no-ops, so per-block wallet + // scanning cost during IBD drops to zero. Wallet's best-block pointer will + // not advance while this is set; the next normal startup will rescan + // forward from where we left off. + bool fDisableWallet = GetBoolArg("-disablewallet", false); + if (fDisableWallet) { - pindexRescan = pindexGenesisBlock; - } else - { - CWalletDB walletdb(strWalletFileName); - CBlockLocator locator; - if (walletdb.ReadBestBlock(locator)) - pindexRescan = locator.GetBlockIndex(); - }; + LogPrintf("-disablewallet set: skipping RegisterWallet and rescan (faster IBD).\n"); + } else { + RegisterWallet(pwalletMain); - if (pindexBest != pindexRescan && pindexBest && pindexRescan && pindexBest->nHeight > pindexRescan->nHeight) - { - uiInterface.InitMessage(_("Rescanning...")); - LogPrintf("Rescanning last %i blocks (from block %i)...\n", pindexBest->nHeight - pindexRescan->nHeight, pindexRescan->nHeight); - nStart = GetTimeMillis(); - pwalletMain->ScanForWalletTransactions(pindexRescan, true); - LogPrintf(" rescan %15dms\n", GetTimeMillis() - nStart); - }; + CBlockIndex *pindexRescan = pindexBest; + if (GetBoolArg("-rescan") || (oltWalletVersion > 0 && oltWalletVersion < 2020009)) // Wallets prior to V2.2 must be rescanned + { + pindexRescan = pindexGenesisBlock; + } else + { + CWalletDB walletdb(strWalletFileName); + CBlockLocator locator; + if (walletdb.ReadBestBlock(locator)) + pindexRescan = locator.GetBlockIndex(); + }; + if (pindexBest != pindexRescan && pindexBest && pindexRescan && pindexBest->nHeight > pindexRescan->nHeight) + { + LogPrintf("Rescanning last %i blocks (from block %i)...\n", pindexBest->nHeight - pindexRescan->nHeight, pindexRescan->nHeight); + nStart = GetTimeMillis(); + + { + LOCK2(cs_main, pwalletMain->cs_wallet); + pwalletMain->MarkDirty(); + pwalletMain->ScanForWalletTransactions(pindexRescan, true, [] (const int& nCurrentHeight, const int& nBestHeight, const int& foundOwned) -> bool { + uiInterface.InitMessage(strprintf("Rescanning... %d / %d (%d txns)", nCurrentHeight, nBestHeight, foundOwned)); + return true; + },100); + pwalletMain->ReacceptWalletTransactions(); + } + + LogPrintf(" rescan %15dms\n", GetTimeMillis() - nStart); + }; + } // ********************************************************* Step 9: import blocks @@ -969,29 +1000,32 @@ bool AppInit2(boost::thread_group& threadGroup) BOOST_FOREACH(std::string strFile, mapMultiArgs["-loadblock"]) vImportFiles.push_back(strFile); }; - threadGroup.create_thread(boost::bind(&ThreadImport, vImportFiles)); - + threadGroup.create_thread(boost::bind(&ThreadImport, vImportFiles)); + if (mapArgs.count("-reindex")) { uiInterface.InitMessage(_("Reindexing from blk000?.dat files.")); - + fReindexing = true; int nFile = 1; - while (true) + while (true) { FILE* file = OpenBlockFile(false, nFile, 0, "rb"); if (!file) break; LogPrintf("Reindexing block file blk%04u.dat...\n", (unsigned int)nFile); - LoadExternalBlockFile(nFile, file); + LoadExternalBlockFile(nFile, file, [] (const uint32_t& nBlock) -> void { + if (nBlock % 10 == 0) + uiInterface.InitMessage(strprintf(_("Reindexing block... (%d)"), nBlock)); + }); nFile++; }; - + LogPrintf("Terminating: reindex completed.\n"); Finalise(); exit(0); }; - + // ********************************************************* Step 10: load peers uiInterface.InitMessage(_("Loading addresses...")); @@ -1001,17 +1035,16 @@ bool AppInit2(boost::thread_group& threadGroup) { CAddrDB adb; if (!adb.Read(addrman)) + { LogPrintf("Invalid or missing peers.dat; recreating\n"); + addrman.Clear(); + } } LogPrintf("Loaded %i addresses from peers.dat %dms\n", addrman.size(), GetTimeMillis() - nStart); - // ********************************************************* Step 10.1: startup secure messaging - - SecureMsgStart(fNoSmsg, GetBoolArg("-smsgscanchain")); - // ********************************************************* Step 11: start node if (!CheckDiskSpace()) @@ -1028,36 +1061,37 @@ bool AppInit2(boost::thread_group& threadGroup) LogPrintf("mapAddressBook.size() = %u\n", pwalletMain->mapAddressBook.size()); StartNode(threadGroup); - + if (fServer) StartRPCThreads(); // ********************************************************* Step 12: finished - + // Add wallet transactions that aren't already in a block to mapTransactions pwalletMain->ReacceptWalletTransactions(); - + // Run a thread to flush wallet periodically threadGroup.create_thread(boost::bind(&TraceThread, "wflush", &ThreadFlushWalletDB, boost::ref(pwalletMain->strWalletFile))); - + InitRPCMining(); - + // Mine proof-of-stake blocks in the background - if (!GetBoolArg("-staking", true)) + fIsStakingEnabled = GetBoolArg("-staking", true); + if (!fIsStakingEnabled && !fHaveGUI) LogPrintf("Staking disabled\n"); else threadGroup.create_thread(boost::bind(&TraceThread, "miner", &ThreadStakeMiner, pwalletMain)); - + if (nNodeMode != NT_FULL) pwalletMain->InitBloomFilter(); - uiInterface.InitMessage(_("Done loading")); + uiInterface.InitMessage(_("Core started!")); LogPrintf("Done loading.\n"); if (!strErrors.str().empty()) return InitError(strErrors.str()); - + LogPrintf("Network: %s, port: %d\n", Params().NetworkIDString(), Params().GetDefaultPort()); - - return !fRequestShutdown; + + return !ShutdownRequested(); } diff --git a/src/init/init.h b/src/init/init.h new file mode 100644 index 0000000000..a8fe2088e4 --- /dev/null +++ b/src/init/init.h @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + +#ifndef BITCOIN_INIT_H +#define BITCOIN_INIT_H + +#include "wallet/wallet.h" +#include "shutdown.h" + +extern CWallet* pwalletMain; +void Shutdown(); +int BlockSignals(); +bool AppInit2(boost::thread_group& threadGroup); +std::string HelpMessage(); + +#endif diff --git a/src/interface.h b/src/interface.h new file mode 100644 index 0000000000..7594d93d92 --- /dev/null +++ b/src/interface.h @@ -0,0 +1,128 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +// SPDX-FileCopyrightText: © 2014 BlackCoin Developers +// SPDX-FileCopyrightText: © 2013 NovaCoin Developers +// SPDX-FileCopyrightText: © 2011 PPCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + +#ifndef BITCOIN_UI_INTERFACE_H +#define BITCOIN_UI_INTERFACE_H + +#ifndef Q_MOC_RUN +#include +#include +#endif + +#include + +#include + +class CBasicKeyStore; +class CWallet; +class uint256; + +/** General change type (added, updated, removed). */ +enum ChangeType +{ + CT_NEW, + CT_UPDATED, + CT_DELETED +}; + +struct BlockChangedEvent { + int numBlocks; + int numBlocksOfPeers; + bool isInitialBlockDownload; + int64_t lastBlockTime; +}; + +/** Signals for UI communication. */ +class CClientUIInterface +{ +public: + /** Flags for CClientUIInterface::ThreadSafeMessageBox */ + enum MessageBoxFlags + { + ICON_INFORMATION = 0, + ICON_WARNING = (1U << 0), + ICON_ERROR = (1U << 1), + /** + * Mask of all available icons in CClientUIInterface::MessageBoxFlags + * This needs to be updated, when icons are changed there! + */ + ICON_MASK = (ICON_INFORMATION | ICON_WARNING | ICON_ERROR), + + /** These values are taken from qmessagebox.h "enum StandardButton" to be directly usable */ + BTN_OK = 0x00000400U, // QMessageBox::Ok + BTN_YES = 0x00004000U, // QMessageBox::Yes + BTN_NO = 0x00010000U, // QMessageBox::No + BTN_ABORT = 0x00040000U, // QMessageBox::Abort + BTN_RETRY = 0x00080000U, // QMessageBox::Retry + BTN_IGNORE = 0x00100000U, // QMessageBox::Ignore + BTN_CLOSE = 0x00200000U, // QMessageBox::Close + BTN_CANCEL = 0x00400000U, // QMessageBox::Cancel + BTN_DISCARD = 0x00800000U, // QMessageBox::Discard + BTN_HELP = 0x01000000U, // QMessageBox::Help + BTN_APPLY = 0x02000000U, // QMessageBox::Apply + BTN_RESET = 0x04000000U, // QMessageBox::Reset + /** + * Mask of all available buttons in CClientUIInterface::MessageBoxFlags + * This needs to be updated, when buttons are changed there! + */ + BTN_MASK = (BTN_OK | BTN_YES | BTN_NO | BTN_ABORT | BTN_RETRY | BTN_IGNORE | + BTN_CLOSE | BTN_CANCEL | BTN_DISCARD | BTN_HELP | BTN_APPLY | BTN_RESET), + + /** Force blocking, modal message box dialog (not just OS notification) */ + MODAL = 0x10000000U, + + /** Predefined combinations for certain default usage cases */ + MSG_INFORMATION = (ICON_INFORMATION | BTN_OK), + MSG_WARNING = (ICON_WARNING | BTN_OK | MODAL), + MSG_ERROR = (ICON_ERROR | BTN_OK | MODAL) + }; + + /** Show message box. */ + boost::signals2::signal ThreadSafeMessageBox; + + /** Ask the user whether they want to pay a fee or not. */ + boost::signals2::signal > ThreadSafeAskFee; + + /** Handle a URL passed at the command line. */ + boost::signals2::signal ThreadSafeHandleURI; + + /** Progress message during initialization. */ + boost::signals2::signal InitMessage; + + /** Translate a message to the native language of the user. */ + boost::signals2::signal Translate; + + /** Block chain changed. */ + boost::signals2::signalNotifyBlocksChanged; + + /** Number of network connections changed. */ + boost::signals2::signal NotifyNumConnectionsChanged; + + /** + * New, updated or cancelled alert. + * @note called with lock cs_mapAlerts held. + */ + boost::signals2::signal NotifyAlertChanged; +}; + +extern CClientUIInterface uiInterface; + +/** + * Translation function: Call Translate signal on UI interface, which returns a boost::optional result. + * If no translation slot is registered, nothing is returned, and simply return the input. + */ +inline std::string _(const char* psz) +{ + boost::optional rv = uiInterface.Translate(psz); + return rv ? (*rv) : psz; +} + +#endif diff --git a/src/json/CMakeLists.txt b/src/json/CMakeLists.txt new file mode 100644 index 0000000000..639b4b3d20 --- /dev/null +++ b/src/json/CMakeLists.txt @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT + +target_sources(aliaswallet_lib + PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/json_spirit_error_position.h + ${CMAKE_CURRENT_LIST_DIR}/json_spirit.h + ${CMAKE_CURRENT_LIST_DIR}/json_spirit_reader.h + ${CMAKE_CURRENT_LIST_DIR}/json_spirit_reader_template.h + ${CMAKE_CURRENT_LIST_DIR}/json_spirit_stream_reader.h + ${CMAKE_CURRENT_LIST_DIR}/json_spirit_utils.h + ${CMAKE_CURRENT_LIST_DIR}/json_spirit_value.h + ${CMAKE_CURRENT_LIST_DIR}/json_spirit_writer.h + ${CMAKE_CURRENT_LIST_DIR}/json_spirit_writer_template.h + + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/json_spirit_reader.cpp + ${CMAKE_CURRENT_LIST_DIR}/json_spirit_value.cpp + ${CMAKE_CURRENT_LIST_DIR}/json_spirit_writer.cpp + ) diff --git a/src/json/json_spirit.h b/src/json/json_spirit.h index ac1879d5b3..3c80b90a33 100644 --- a/src/json/json_spirit.h +++ b/src/json/json_spirit.h @@ -1,11 +1,12 @@ -#ifndef JSON_SPIRIT -#define JSON_SPIRIT - -// Copyright John W. Wilkinson 2007 - 2009. -// Distributed under the MIT License, see accompanying file LICENSE.txt +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT // json spirit version 4.03 +#ifndef JSON_SPIRIT +#define JSON_SPIRIT + #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif diff --git a/src/json/json_spirit_error_position.h b/src/json/json_spirit_error_position.h index 17208507df..66ec0c2ad1 100644 --- a/src/json/json_spirit_error_position.h +++ b/src/json/json_spirit_error_position.h @@ -1,11 +1,12 @@ -#ifndef JSON_SPIRIT_ERROR_POSITION -#define JSON_SPIRIT_ERROR_POSITION - -// Copyright John W. Wilkinson 2007 - 2009. -// Distributed under the MIT License, see accompanying file LICENSE.txt +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT // json spirit version 4.03 +#ifndef JSON_SPIRIT_ERROR_POSITION +#define JSON_SPIRIT_ERROR_POSITION + #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif @@ -15,7 +16,7 @@ namespace json_spirit { // An Error_position exception is thrown by the "read_or_throw" functions below on finding an error. - // Note the "read_or_throw" functions are around 3 times slower than the standard functions "read" + // Note the "read_or_throw" functions are around 3 times slower than the standard functions "read" // functions that return a bool. // struct Error_position @@ -47,7 +48,7 @@ namespace json_spirit return ( reason_ == lhs.reason_ ) && ( line_ == lhs.line_ ) && - ( column_ == lhs.column_ ); + ( column_ == lhs.column_ ); } } diff --git a/src/json/json_spirit_reader.cpp b/src/json/json_spirit_reader.cpp index aa4f637226..5a3dcd3790 100644 --- a/src/json/json_spirit_reader.cpp +++ b/src/json/json_spirit_reader.cpp @@ -1,5 +1,6 @@ -// Copyright John W. Wilkinson 2007 - 2009. -// Distributed under the MIT License, see accompanying file LICENSE.txt +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT // json spirit version 4.03 diff --git a/src/json/json_spirit_reader.h b/src/json/json_spirit_reader.h index 96494a9789..67744f3650 100644 --- a/src/json/json_spirit_reader.h +++ b/src/json/json_spirit_reader.h @@ -1,11 +1,12 @@ -#ifndef JSON_SPIRIT_READER -#define JSON_SPIRIT_READER - -// Copyright John W. Wilkinson 2007 - 2009. -// Distributed under the MIT License, see accompanying file LICENSE.txt +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT // json spirit version 4.03 +#ifndef JSON_SPIRIT_READER +#define JSON_SPIRIT_READER + #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif @@ -22,7 +23,7 @@ namespace json_spirit bool read( std::istream& is, Value& value ); bool read( std::string::const_iterator& begin, std::string::const_iterator end, Value& value ); - void read_or_throw( const std::string& s, Value& value ); + void read_or_throw( const std::string& s, Value& value ); void read_or_throw( std::istream& is, Value& value ); void read_or_throw( std::string::const_iterator& begin, std::string::const_iterator end, Value& value ); @@ -30,7 +31,7 @@ namespace json_spirit bool read( const std::wstring& s, wValue& value ); bool read( std::wistream& is, wValue& value ); - bool read( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wValue& value ); + bool read( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wValue& value ); void read_or_throw( const std::wstring& s, wValue& value ); void read_or_throw( std::wistream& is, wValue& value ); @@ -42,7 +43,7 @@ namespace json_spirit bool read( std::istream& is, mValue& value ); bool read( std::string::const_iterator& begin, std::string::const_iterator end, mValue& value ); - void read_or_throw( const std::string& s, mValue& value ); + void read_or_throw( const std::string& s, mValue& value ); void read_or_throw( std::istream& is, mValue& value ); void read_or_throw( std::string::const_iterator& begin, std::string::const_iterator end, mValue& value ); @@ -50,7 +51,7 @@ namespace json_spirit bool read( const std::wstring& s, wmValue& value ); bool read( std::wistream& is, wmValue& value ); - bool read( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wmValue& value ); + bool read( std::wstring::const_iterator& begin, std::wstring::const_iterator end, wmValue& value ); void read_or_throw( const std::wstring& s, wmValue& value ); void read_or_throw( std::wistream& is, wmValue& value ); diff --git a/src/json/json_spirit_reader_template.h b/src/json/json_spirit_reader_template.h index 46f5892f62..add7ad2c45 100644 --- a/src/json/json_spirit_reader_template.h +++ b/src/json/json_spirit_reader_template.h @@ -1,17 +1,23 @@ +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT + +// json spirit version 4.03 + #ifndef JSON_SPIRIT_READER_TEMPLATE #define JSON_SPIRIT_READER_TEMPLATE -// Copyright John W. Wilkinson 2007 - 2009. -// Distributed under the MIT License, see accompanying file LICENSE.txt - -// json spirit version 4.03 +#ifdef __APPLE__ +#define BOOST_HAS_THREADS +#endif #include "json_spirit_value.h" #include "json_spirit_error_position.h" //#define BOOST_SPIRIT_THREADSAFE // uncomment for multithreaded use, requires linking to boost.thread -#include +#ifndef Q_MOC_RUN +#include #include #include @@ -30,6 +36,7 @@ #include #define spirit_namespace boost::spirit #endif +#endif namespace json_spirit { @@ -65,7 +72,7 @@ namespace json_spirit const Char_type c2( *( ++begin ) ); return ( hex_to_num( c1 ) << 4 ) + hex_to_num( c2 ); - } + } template< class Char_type, class Iter_type > Char_type unicode_str_to_char( Iter_type& begin ) @@ -75,19 +82,19 @@ namespace json_spirit const Char_type c3( *( ++begin ) ); const Char_type c4( *( ++begin ) ); - return ( hex_to_num( c1 ) << 12 ) + - ( hex_to_num( c2 ) << 8 ) + - ( hex_to_num( c3 ) << 4 ) + + return ( hex_to_num( c1 ) << 12 ) + + ( hex_to_num( c2 ) << 8 ) + + ( hex_to_num( c3 ) << 4 ) + hex_to_num( c4 ); } template< class String_type > - void append_esc_char_and_incr_iter( String_type& s, - typename String_type::const_iterator& begin, + void append_esc_char_and_incr_iter( String_type& s, + typename String_type::const_iterator& begin, typename String_type::const_iterator end ) { typedef typename String_type::value_type Char_type; - + const Char_type c2( *begin ); switch( c2 ) @@ -100,19 +107,19 @@ namespace json_spirit case '\\': s += '\\'; break; case '/': s += '/'; break; case '"': s += '"'; break; - case 'x': + case 'x': { if( end - begin >= 3 ) // expecting "xHH..." { - s += hex_str_to_char< Char_type >( begin ); + s += hex_str_to_char< Char_type >( begin ); } break; } - case 'u': + case 'u': { if( end - begin >= 5 ) // expecting "uHHHH..." { - s += unicode_str_to_char< Char_type >( begin ); + s += unicode_str_to_char< Char_type >( begin ); } break; } @@ -120,7 +127,7 @@ namespace json_spirit } template< class String_type > - String_type substitute_esc_chars( typename String_type::const_iterator begin, + String_type substitute_esc_chars( typename String_type::const_iterator begin, typename String_type::const_iterator end ) { typedef typename String_type::const_iterator Iter_type; @@ -128,7 +135,7 @@ namespace json_spirit if( end - begin < 2 ) return String_type( begin, end ); String_type result; - + result.reserve( end - begin ); const Iter_type end_minus_1( end - 1 ); @@ -143,7 +150,7 @@ namespace json_spirit result.append( substr_start, i ); ++i; // skip the '\' - + append_esc_char_and_incr_iter( result, i, end ); substr_start = i + 1; @@ -156,7 +163,7 @@ namespace json_spirit } template< class String_type > - String_type get_str_( typename String_type::const_iterator begin, + String_type get_str_( typename String_type::const_iterator begin, typename String_type::const_iterator end ) { assert( end - begin >= 2 ); @@ -178,7 +185,7 @@ namespace json_spirit { return get_str_< std::wstring >( begin, end ); } - + template< class String_type, class Iter_type > String_type get_str( Iter_type begin, Iter_type end ) { @@ -193,7 +200,7 @@ namespace json_spirit // NB Iter_type could be a std::string iterator, wstring iterator, a position iterator or a multipass iterator // template< class Value_type, class Iter_type > - class Semantic_actions + class Semantic_actions { public: @@ -226,7 +233,7 @@ namespace json_spirit void begin_array( Char_type c ) { assert( c == '[' ); - + begin_compound< Array_type >(); } @@ -287,7 +294,7 @@ namespace json_spirit private: - Semantic_actions& operator=( const Semantic_actions& ); + Semantic_actions& operator=( const Semantic_actions& ); // to prevent "assignment operator could not be generated" warning Value_type* add_first( const Value_type& value ) @@ -321,9 +328,9 @@ namespace json_spirit if( current_p_ != &value_ ) { current_p_ = stack_.back(); - + stack_.pop_back(); - } + } } Value_type* add_to_current( const Value_type& value ) @@ -336,9 +343,9 @@ namespace json_spirit { current_p_->get_array().push_back( value ); - return ¤t_p_->get_array().back(); + return ¤t_p_->get_array().back(); } - + assert( current_p_->type() == obj_type ); return &Config_type::add( current_p_->get_obj(), name_, value ); @@ -364,7 +371,7 @@ namespace json_spirit throw reason; } - // the spirit grammer + // the spirit grammer // template< class Value_type, class Iter_type > class Json_grammer : public spirit_namespace::grammar< Json_grammer< Value_type, Iter_type > > @@ -419,7 +426,7 @@ namespace json_spirit typedef typename Value_type::String_type::value_type Char_type; - // first we convert the semantic action class methods to functors with the + // first we convert the semantic action class methods to functors with the // parameter signature expected by spirit typedef boost::function< void( Char_type ) > Char_action; @@ -428,18 +435,18 @@ namespace json_spirit typedef boost::function< void( int64_t ) > Int_action; typedef boost::function< void( uint64_t ) > Uint64_action; - Char_action begin_obj ( boost::bind( &Semantic_actions_t::begin_obj, &self.actions_, _1 ) ); - Char_action end_obj ( boost::bind( &Semantic_actions_t::end_obj, &self.actions_, _1 ) ); - Char_action begin_array( boost::bind( &Semantic_actions_t::begin_array, &self.actions_, _1 ) ); - Char_action end_array ( boost::bind( &Semantic_actions_t::end_array, &self.actions_, _1 ) ); - Str_action new_name ( boost::bind( &Semantic_actions_t::new_name, &self.actions_, _1, _2 ) ); - Str_action new_str ( boost::bind( &Semantic_actions_t::new_str, &self.actions_, _1, _2 ) ); - Str_action new_true ( boost::bind( &Semantic_actions_t::new_true, &self.actions_, _1, _2 ) ); - Str_action new_false ( boost::bind( &Semantic_actions_t::new_false, &self.actions_, _1, _2 ) ); - Str_action new_null ( boost::bind( &Semantic_actions_t::new_null, &self.actions_, _1, _2 ) ); - Real_action new_real ( boost::bind( &Semantic_actions_t::new_real, &self.actions_, _1 ) ); - Int_action new_int ( boost::bind( &Semantic_actions_t::new_int, &self.actions_, _1 ) ); - Uint64_action new_uint64 ( boost::bind( &Semantic_actions_t::new_uint64, &self.actions_, _1 ) ); + Char_action begin_obj ( boost::bind( &Semantic_actions_t::begin_obj, &self.actions_, boost::placeholders::_1 ) ); + Char_action end_obj ( boost::bind( &Semantic_actions_t::end_obj, &self.actions_, boost::placeholders::_1 ) ); + Char_action begin_array( boost::bind( &Semantic_actions_t::begin_array, &self.actions_, boost::placeholders::_1 ) ); + Char_action end_array ( boost::bind( &Semantic_actions_t::end_array, &self.actions_, boost::placeholders::_1 ) ); + Str_action new_name ( boost::bind( &Semantic_actions_t::new_name, &self.actions_, boost::placeholders::_1, boost::placeholders::_2 ) ); + Str_action new_str ( boost::bind( &Semantic_actions_t::new_str, &self.actions_, boost::placeholders::_1, boost::placeholders::_2 ) ); + Str_action new_true ( boost::bind( &Semantic_actions_t::new_true, &self.actions_, boost::placeholders::_1, boost::placeholders::_2 ) ); + Str_action new_false ( boost::bind( &Semantic_actions_t::new_false, &self.actions_, boost::placeholders::_1, boost::placeholders::_2 ) ); + Str_action new_null ( boost::bind( &Semantic_actions_t::new_null, &self.actions_, boost::placeholders::_1, boost::placeholders::_2 ) ); + Real_action new_real ( boost::bind( &Semantic_actions_t::new_real, &self.actions_, boost::placeholders::_1 ) ); + Int_action new_int ( boost::bind( &Semantic_actions_t::new_int, &self.actions_, boost::placeholders::_1 ) ); + Uint64_action new_uint64 ( boost::bind( &Semantic_actions_t::new_uint64, &self.actions_, boost::placeholders::_1 ) ); // actual grammer @@ -448,16 +455,16 @@ namespace json_spirit ; value_ - = string_[ new_str ] - | number_ - | object_ - | array_ - | str_p( "true" ) [ new_true ] - | str_p( "false" )[ new_false ] + = string_[ new_str ] + | number_ + | object_ + | array_ + | str_p( "true" ) [ new_true ] + | str_p( "false" )[ new_false ] | str_p( "null" ) [ new_null ] ; - object_ + object_ = ch_p('{')[ begin_obj ] >> !members_ >> ( ch_p('}')[ end_obj ] | eps_p[ &throw_not_object ] ) @@ -483,20 +490,20 @@ namespace json_spirit = value_ >> *( ',' >> value_ ) ; - string_ + string_ = lexeme_d // this causes white space inside a string to be retained [ confix_p - ( - '"', + ( + '"', *lex_escape_ch_p, '"' - ) + ) ] ; number_ - = strict_real_p[ new_real ] + = strict_real_p[ new_real ] | int64_p [ new_int ] | uint64_p [ new_uint64 ] ; @@ -518,10 +525,10 @@ namespace json_spirit Iter_type read_range_or_throw( Iter_type begin, Iter_type end, Value_type& value ) { Semantic_actions< Value_type, Iter_type > semantic_actions( value ); - - const spirit_namespace::parse_info< Iter_type > info = - spirit_namespace::parse( begin, end, - Json_grammer< Value_type, Iter_type >( semantic_actions ), + + const spirit_namespace::parse_info< Iter_type > info = + spirit_namespace::parse( begin, end, + Json_grammer< Value_type, Iter_type >( semantic_actions ), spirit_namespace::space_p ); if( !info.hit ) @@ -540,7 +547,7 @@ namespace json_spirit const Posn_iter_t posn_begin( begin, end ); const Posn_iter_t posn_end( end, end ); - + read_range_or_throw( posn_begin, posn_end, value ); } diff --git a/src/json/json_spirit_stream_reader.h b/src/json/json_spirit_stream_reader.h index 7e59c9adc2..5e380e677f 100644 --- a/src/json/json_spirit_stream_reader.h +++ b/src/json/json_spirit_stream_reader.h @@ -1,11 +1,12 @@ -#ifndef JSON_SPIRIT_READ_STREAM -#define JSON_SPIRIT_READ_STREAM - -// Copyright John W. Wilkinson 2007 - 2009. -// Distributed under the MIT License, see accompanying file LICENSE.txt +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT // json spirit version 4.03 +#ifndef JSON_SPIRIT_READ_STREAM +#define JSON_SPIRIT_READ_STREAM + #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif @@ -15,7 +16,7 @@ namespace json_spirit { // these classes allows you to read multiple top level contiguous values from a stream, - // the normal stream read functions have a bug that prevent multiple top level values + // the normal stream read functions have a bug that prevent multiple top level values // from being read unless they are separated by spaces template< class Istream_type, class Value_type > diff --git a/src/json/json_spirit_utils.h b/src/json/json_spirit_utils.h index 553e3b96a4..5cab512b15 100644 --- a/src/json/json_spirit_utils.h +++ b/src/json/json_spirit_utils.h @@ -1,11 +1,12 @@ -#ifndef JSON_SPIRIT_UTILS -#define JSON_SPIRIT_UTILS - -// Copyright John W. Wilkinson 2007 - 2009. -// Distributed under the MIT License, see accompanying file LICENSE.txt +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT // json spirit version 4.03 +#ifndef JSON_SPIRIT_UTILS +#define JSON_SPIRIT_UTILS + #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif @@ -14,7 +15,7 @@ #include namespace json_spirit -{ +{ template< class Obj_t, class Map_t > void obj_to_map( const Obj_t& obj, Map_t& mp_obj ) { diff --git a/src/json/json_spirit_value.cpp b/src/json/json_spirit_value.cpp index 44d2f06a01..5ee716d20e 100644 --- a/src/json/json_spirit_value.cpp +++ b/src/json/json_spirit_value.cpp @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT + /* Copyright (c) 2007 John W Wilkinson This source code can be used for any purpose as long as diff --git a/src/json/json_spirit_value.h b/src/json/json_spirit_value.h index 13cc89210c..f71fa5839b 100644 --- a/src/json/json_spirit_value.h +++ b/src/json/json_spirit_value.h @@ -1,11 +1,12 @@ -#ifndef JSON_SPIRIT_VALUE -#define JSON_SPIRIT_VALUE - -// Copyright John W. Wilkinson 2007 - 2009. -// Distributed under the MIT License, see accompanying file LICENSE.txt +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT // json spirit version 4.03 +#ifndef JSON_SPIRIT_VALUE +#define JSON_SPIRIT_VALUE + #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif @@ -13,13 +14,17 @@ #include #include #include +#undef NDEBUG #include #include #include #include -#include -#include -#include + +#ifndef Q_MOC_RUN +#include +#include +#include +#endif namespace json_spirit { @@ -39,7 +44,7 @@ namespace json_spirit typedef typename String_type::const_pointer Const_str_ptr; // eg const char* Value_impl(); // creates null value - Value_impl( Const_str_ptr value ); + Value_impl( Const_str_ptr value ); Value_impl( const String_type& value ); Value_impl( const Object& value ); Value_impl( const Array& value ); @@ -81,8 +86,8 @@ namespace json_spirit void check_type( const Value_type vtype ) const; - typedef boost::variant< String_type, - boost::recursive_wrapper< Object >, boost::recursive_wrapper< Array >, + typedef boost::variant< String_type, + boost::recursive_wrapper< Object >, boost::recursive_wrapper< Array >, bool, int64_t, double > Variant; Value_type type_; @@ -121,12 +126,12 @@ namespace json_spirit return obj.back().value_; } - + static String_type get_name( const Pair_type& pair ) { return pair.name_; } - + static Value_type get_value( const Pair_type& pair ) { return pair.value_; @@ -169,12 +174,12 @@ namespace json_spirit { return obj[ name ] = value; } - + static String_type get_name( const Pair_type& pair ) { return pair.first; } - + static Value_type get_value( const Pair_type& pair ) { return pair.second; @@ -314,7 +319,7 @@ namespace json_spirit if( type() != lhs.type() ) return false; - return v_ == lhs.v_; + return v_ == lhs.v_; } template< class Config > @@ -338,7 +343,7 @@ namespace json_spirit template< class Config > void Value_impl< Config >::check_type( const Value_type vtype ) const { - if( type() != vtype ) + if( type() != vtype ) { std::ostringstream os; @@ -364,7 +369,7 @@ namespace json_spirit return *boost::get< Object >( &v_ ); } - + template< class Config > const typename Value_impl< Config >::Array& Value_impl< Config >::get_array() const { @@ -372,7 +377,7 @@ namespace json_spirit return *boost::get< Array >( &v_ ); } - + template< class Config > bool Value_impl< Config >::get_bool() const { @@ -380,7 +385,7 @@ namespace json_spirit return boost::get< bool >( v_ ); } - + template< class Config > int Value_impl< Config >::get_int() const { @@ -388,7 +393,7 @@ namespace json_spirit return static_cast< int >( get_int64() ); } - + template< class Config > int64_t Value_impl< Config >::get_int64() const { @@ -396,7 +401,7 @@ namespace json_spirit return boost::get< int64_t >( v_ ); } - + template< class Config > uint64_t Value_impl< Config >::get_uint64() const { @@ -474,49 +479,49 @@ namespace json_spirit { }; - template< class Value > + template< class Value > int get_value( const Value& value, Type_to_type< int > ) { return value.get_int(); } - - template< class Value > + + template< class Value > int64_t get_value( const Value& value, Type_to_type< int64_t > ) { return value.get_int64(); } - - template< class Value > + + template< class Value > uint64_t get_value( const Value& value, Type_to_type< uint64_t > ) { return value.get_uint64(); } - - template< class Value > + + template< class Value > double get_value( const Value& value, Type_to_type< double > ) { return value.get_real(); } - - template< class Value > + + template< class Value > typename Value::String_type get_value( const Value& value, Type_to_type< typename Value::String_type > ) { return value.get_str(); } - - template< class Value > + + template< class Value > typename Value::Array get_value( const Value& value, Type_to_type< typename Value::Array > ) { return value.get_array(); } - - template< class Value > + + template< class Value > typename Value::Object get_value( const Value& value, Type_to_type< typename Value::Object > ) { return value.get_obj(); } - - template< class Value > + + template< class Value > bool get_value( const Value& value, Type_to_type< bool > ) { return value.get_bool(); @@ -524,7 +529,7 @@ namespace json_spirit } template< class Config > - template< typename T > + template< typename T > T Value_impl< Config >::get_value() const { return internal_::get_value( *this, internal_::Type_to_type< T >() ); diff --git a/src/json/json_spirit_writer.cpp b/src/json/json_spirit_writer.cpp index d24a632cf3..0f10cd8c0f 100644 --- a/src/json/json_spirit_writer.cpp +++ b/src/json/json_spirit_writer.cpp @@ -1,5 +1,6 @@ -// Copyright John W. Wilkinson 2007 - 2009. -// Distributed under the MIT License, see accompanying file LICENSE.txt +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT // json spirit version 4.03 diff --git a/src/json/json_spirit_writer.h b/src/json/json_spirit_writer.h index 52e14068e7..8b1825bf40 100644 --- a/src/json/json_spirit_writer.h +++ b/src/json/json_spirit_writer.h @@ -1,11 +1,12 @@ -#ifndef JSON_SPIRIT_WRITER -#define JSON_SPIRIT_WRITER - -// Copyright John W. Wilkinson 2007 - 2009. -// Distributed under the MIT License, see accompanying file LICENSE.txt +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT // json spirit version 4.03 +#ifndef JSON_SPIRIT_WRITER +#define JSON_SPIRIT_WRITER + #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif @@ -15,7 +16,7 @@ namespace json_spirit { - // functions to convert JSON Values to text, + // functions to convert JSON Values to text, // the "formatted" versions add whitespace to format the output nicely void write ( const Value& value, std::ostream& os ); diff --git a/src/json/json_spirit_writer_template.h b/src/json/json_spirit_writer_template.h index 28c49ddc64..d7273ec886 100644 --- a/src/json/json_spirit_writer_template.h +++ b/src/json/json_spirit_writer_template.h @@ -1,13 +1,15 @@ -#ifndef JSON_SPIRIT_WRITER_TEMPLATE -#define JSON_SPIRIT_WRITER_TEMPLATE - -// Copyright John W. Wilkinson 2007 - 2009. -// Distributed under the MIT License, see accompanying file LICENSE.txt +// SPDX-FileCopyrightText: © 2007 John W. Wilkinson +// +// SPDX-License-Identifier: MIT // json spirit version 4.03 +#ifndef JSON_SPIRIT_WRITER_TEMPLATE +#define JSON_SPIRIT_WRITER_TEMPLATE + #include "json_spirit_value.h" +#undef NDEBUG #include #include #include @@ -28,8 +30,6 @@ namespace json_spirit template< class String_type > String_type non_printable_to_string( unsigned int c ) { - typedef typename String_type::value_type Char_type; - String_type result( 6, '\\' ); result[1] = 'u'; @@ -146,8 +146,8 @@ namespace json_spirit void output( const Obj_member_type& member ) { - output( Config_type::get_name( member ) ); space(); - os_ << ':'; space(); + output( Config_type::get_name( member ) ); space(); + os_ << ':'; space(); output( Config_type::get_value( member ) ); } @@ -179,7 +179,7 @@ namespace json_spirit os_ << start_char; new_line(); ++indentation_level_; - + for( typename T::const_iterator i = t.begin(); i != t.end(); ++i ) { indent(); output( *i ); @@ -198,13 +198,13 @@ namespace json_spirit indent(); os_ << end_char; } - + void indent() { if( !pretty_ ) return; for( int i = 0; i < indentation_level_; ++i ) - { + { os_ << " "; } } diff --git a/src/kernel.h b/src/kernel.h deleted file mode 100644 index b8a4bb41da..0000000000 --- a/src/kernel.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2012-2013 The PPCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef PPCOIN_KERNEL_H -#define PPCOIN_KERNEL_H - -#include "main.h" -#include "core.h" - -// To decrease granularity of timestamp -// Supposed to be 2^n-1 -static const int STAKE_TIMESTAMP_MASK = 15; - -// MODIFIER_INTERVAL: time to elapse before new modifier is computed -extern unsigned int nModifierInterval; - -// MODIFIER_INTERVAL_RATIO: -// ratio of group interval length between the last group and the first group -static const int MODIFIER_INTERVAL_RATIO = 3; - -// Compute the hash modifier for proof-of-stake -bool ComputeNextStakeModifier(const CBlockIndex* pindexPrev, uint64_t& nStakeModifier, bool& fGeneratedStakeModifier); -bool ComputeNextStakeModifierThin(const CBlockThinIndex* pindexPrev, uint64_t& nStakeModifier, bool& fGeneratedStakeModifier); -uint256 ComputeStakeModifierV2(const CBlockIndex* pindexPrev, const uint256& kernel); - -// Check whether stake kernel meets hash target -// Sets hashProofOfStake on success return -bool CheckStakeKernelHash(int nPrevHeight, CStakeModifier* pStakeMod, unsigned int nBits, const CBlock& blockFrom, unsigned int nTxPrevOffset, const CTransaction& txPrev, const COutPoint& prevout, unsigned int nTimeTx, uint256& hashProofOfStake, uint256& targetProofOfStake, bool fPrintProofOfStake); - -// Check kernel hash target and coinstake signature -// Sets hashProofOfStake on success return -bool CheckProofOfStake(CBlockIndex* pindexPrev, const CTransaction& tx, unsigned int nBits, uint256& hashProofOfStake, uint256& targetProofOfStake); - -// Check whether the coinstake timestamp meets protocol -bool CheckCoinStakeTimestamp(int nHeight, int64_t nTimeBlock, int64_t nTimeTx); - -// Get time weight using supplied timestamps -int64_t GetWeight(int64_t nIntervalBeginning, int64_t nIntervalEnd); // TODO: posv2 remove - -// Wrapper around CheckStakeKernelHash() -// Also checks existence of kernel input and min age -// Convenient for searching a kernel -bool CheckKernel(CBlockIndex* pindexPrev, unsigned int nBits, int64_t nTime, const COutPoint& prevout, int64_t* pBlockTime = NULL); - - -#endif // PPCOIN_KERNEL_H diff --git a/src/kernel/chainparams.cpp b/src/kernel/chainparams.cpp new file mode 100644 index 0000000000..9bafb266b9 --- /dev/null +++ b/src/kernel/chainparams.cpp @@ -0,0 +1,366 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2010 Satoshi Nakamoto +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + +#include "assert.h" + +#include "kernel/chainparams.h" +#include "main.h" + +#include + +using namespace boost::assign; + +struct SeedSpec6 { + uint8_t addr[16]; + uint16_t port; +}; + +#include "kernel/chainparamsseeds.h" + +int64_t CChainParams::GetProofOfWorkReward(int nHeight, int64_t nFees) const +{ + // miner's coin base reward + int64_t nSubsidy = 0; + + if(nHeight == 1) + nSubsidy = (NetworkID() == CChainParams::TESTNET ? 2000000 : 20000000) * COIN; // 20Mill Pre-mine on MainNet, 2Mill pre-mine on TestNet + + else if(nHeight <= nLastPOWBlock) + nSubsidy = 0; + + if (fDebug && GetBoolArg("-printcreation")) + LogPrintf("GetProofOfWorkReward() : create=%s nSubsidy=%d\n", FormatMoney(nSubsidy).c_str(), nSubsidy); + + return nSubsidy; +}; + + +int64_t CChainParams::GetProofOfStakeReward(const CBlockIndex* pindexPrev, int64_t nCoinAge, int64_t nFees) const +{ + // miner's coin stake reward based on coin age spent (coin-days) + int64_t nSubsidy; + + if (IsForkV4SupplyIncrease(pindexPrev)) + nSubsidy = (NetworkID() == CChainParams::TESTNET ? 300000 : 3000000) * COIN; + else if (IsProtocolV3(pindexPrev->nHeight)) + nSubsidy = Params().IsForkV3(pindexPrev->GetBlockTime()) ? + nStakeReward : + (pindexPrev->nMoneySupply / COIN) * COIN_YEAR_REWARD / (365 * 24 * (60 * 60 / 64)); + else + nSubsidy = nCoinAge * COIN_YEAR_REWARD * 33 / (365 * 33 + 8); + + if (fDebug && GetBoolArg("-printcreation")) + { + if (IsProtocolV3(pindexPrev->nHeight)) + LogPrintf("GetProofOfStakeReward(): create=%s\n", FormatMoney(nSubsidy).c_str()); + else + LogPrintf("GetProofOfStakeReward(): create=%s nCoinAge=%d\n", FormatMoney(nSubsidy).c_str(), nCoinAge); + } + + return nSubsidy + nFees; +} + +int64_t CChainParams::GetProofOfAnonStakeReward(const CBlockIndex* pindexPrev, int64_t nFees) const +{ + int64_t nSubsidy = nAnonStakeReward; + if (IsForkV4SupplyIncrease(pindexPrev)) + nSubsidy = (NetworkID() == CChainParams::TESTNET ? 300000 : 3000000) * COIN; + + if (fDebug && GetBoolArg("-printcreation")) + LogPrintf("GetProofOfAnonStakeReward(): create=%s\n", FormatMoney(nSubsidy).c_str()); + + return nSubsidy + nFees; +} + +bool CChainParams::IsForkV4SupplyIncrease(const CBlockIndex* pindexPrev) const +{ + return pindexPrev->GetBlockTime() >= nForkV4Time && pindexPrev->pprev->GetBlockTime() < nForkV4Time; +} + +// +// Main network +// + +// Convert the pnSeeds array into usable address objects. +static void convertSeeds(std::vector &vSeedsOut, const unsigned int *data, unsigned int count, int port) +{ + // It'll only connect to one or two seed nodes because once it connects, + // it'll get a pile of addresses with newer timestamps. + // Seed nodes are given a random 'last seen time' of between one and two + // weeks ago. + const int64_t nOneWeek = 7*24*60*60; + for (unsigned int k = 0; k < count; ++k) + { + struct in_addr ip; + unsigned int i = data[k], t; + + // -- convert to big endian + t = (i & 0x000000ff) << 24u + | (i & 0x0000ff00) << 8u + | (i & 0x00ff0000) >> 8u + | (i & 0xff000000) >> 24u; + + memcpy(&ip, &t, sizeof(ip)); + + CAddress addr(CService(ip, port)); + addr.nTime = GetTime()-GetRand(nOneWeek)-nOneWeek; + vSeedsOut.push_back(addr); + } +} + +class CBaseChainParams : public CChainParams { +public: + CBaseChainParams() { + const char* pszTimestamp = "https://www.cryptocoinsnews.com/encrypted-services-exec-bitcoins-price-history-follows-gartners-hype-cycle/"; + CTransaction txNew; + txNew.nTime = GENESIS_BLOCK_TIME; + txNew.vin.resize(1); + txNew.vout.resize(1); + txNew.vin[0].scriptSig = CScript() << 0 << CBigNum(42) << std::vector((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); + txNew.vout[0].SetEmpty(); + genesis.vtx.push_back(txNew); + genesis.hashPrevBlock = 0; + genesis.hashMerkleRoot = genesis.BuildMerkleTree(); + genesis.nVersion = 1; + genesis.nTime = GENESIS_BLOCK_TIME; + + vSeeds.push_back(CDNSSeedData("node1.spectreproject.io", "node1.spectreproject.io")); + vSeeds.push_back(CDNSSeedData("node2.spectreproject.io", "node2.spectreproject.io")); + vSeeds.push_back(CDNSSeedData("node3.spectreproject.io", "node3.spectreproject.io")); + vSeeds.push_back(CDNSSeedData("node4.spectreproject.io", "node4.spectreproject.io")); + } + virtual const CBlock& GenesisBlock() const { return genesis; } + virtual const std::vector& FixedSeeds() const { + return vFixedSeeds; + } +protected: + CBlock genesis; + std::vector vFixedSeeds; +}; + +class CMainParams : public CBaseChainParams { +public: + CMainParams() { + strNetworkID = "main"; + + // The message start string is designed to be unlikely to occur in normal data. + // The characters are rarely used upper ASCII, not valid as UTF-8, and produce + // a large 4-byte int at any alignment. + pchMessageStart[0] = 0xb5; + pchMessageStart[1] = 0x22; + pchMessageStart[2] = 0x5c; + pchMessageStart[3] = 0xd3; + + vAlertPubKey = ParseHex("04f7bbad03208ea942e292080854d422d046d457949ea70ad3306438fc8357343dccaa73e52291ebe07de85c6701d88d87af2d29c2e3b024fb0ad53f045a6d3ad6"); + + nDefaultPort = 37347; + nRPCPort = 36657; + nBIP44ID = 0x800000d5; + + //nLastPOWBlock = 2016; // Running for 1 Week after ICO + nLastPOWBlock = 17000; + nFirstPosv2Block = 17001; + nFirstPosv3Block = 17010; + + bnProofOfWorkLimit = CBigNum(~uint256(0) >> 20); // "standard" scrypt target limit for proof of work, results with 0,000244140625 proof-of-work difficulty + bnProofOfStakeLimit = CBigNum(~uint256(0) >> 20); + bnProofOfStakeLimitV2 = CBigNum(~uint256(0) >> 48); + + nStakeMinConfirmationsLegacy = 288; + nStakeMinConfirmations = 450; // block time 96 seconds * 450 = 12 hours + + genesis.nBits = bnProofOfWorkLimit.GetCompact(); + genesis.nNonce = 715015; + + hashGenesisBlock = genesis.GetHash(); + assert(hashGenesisBlock == uint256("0x000001fd6111f0d71d90b7d8c827c6028dbc867f6c527d90794a0d22f68fecd4")); + assert(genesis.hashMerkleRoot == uint256("0x48d79d88cdf7d5c84dbb2ffb4fcaab253cebe040a4e7b46cdd507fbb93623e3f")); + + base58Prefixes[PUBKEY_ADDRESS] = list_of(63).convert_to_container >(); + base58Prefixes[SCRIPT_ADDRESS] = list_of(136).convert_to_container >(); + base58Prefixes[SECRET_KEY] = list_of(179).convert_to_container >(); + base58Prefixes[STEALTH_ADDRESS] = list_of(40).convert_to_container >(); + base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x2C)(0x51)(0x3B)(0xD7).convert_to_container >(); + base58Prefixes[EXT_SECRET_KEY] = list_of(0x2C)(0x51)(0xC1)(0x5A).convert_to_container >(); + base58Prefixes[EXT_KEY_HASH] = list_of(137).convert_to_container >(); // x + base58Prefixes[EXT_ACC_HASH] = list_of(83).convert_to_container >(); // a + base58Prefixes[EXT_PUBLIC_KEY_BTC] = list_of(0x04)(0x88)(0xB2)(0x1E).convert_to_container >(); // xprv + base58Prefixes[EXT_SECRET_KEY_BTC] = list_of(0x04)(0x88)(0xAD)(0xE4).convert_to_container >(); // xpub + + convertSeeds(vFixedSeeds, pnSeed, ARRAYLEN(pnSeed), nDefaultPort); + + nForkV2Time = 1534888800; // MAINNET V2 chain fork (GMT: Tuesday, 21. August 2018 22.00) + nForkV3Time = 1558123200; // MAINNET V3 chain fork (GMT: Friday, 17. May 2019 20:00:00) + nForkV4Time = 1569614400; // MAINNET V4 chain fork (GMT: Friday, 27. September 2019 20:00:00) + + devContributionAddress = "SdrdWNtjD7V6BSt3EyQZKCnZDkeE28cZhr"; + supplyIncreaseAddress = "SSGCEMb6xESgmuGXkx7yozGDxhVSXzBP3a"; + } + + virtual Network NetworkID() const { return CChainParams::MAIN; } +}; +static CMainParams mainParams; + +// +// Testnet +// + +class CTestNetParams : public CBaseChainParams { +public: + CTestNetParams() { + strNetworkID = "test"; + strDataDir = "testnet"; + + // The message start string is designed to be unlikely to occur in normal data. + // The characters are rarely used upper ASCII, not valid as UTF-8, and produce + // a large 4-byte int at any alignment. + pchMessageStart[0] = 0xa3; + pchMessageStart[1] = 0x2c; + pchMessageStart[2] = 0x44; + pchMessageStart[3] = 0xb4; + + vAlertPubKey = ParseHex("04e564bc9bf28e6d395cd89c4d2bdb235c3873f59b1330d2e6a30c6fa85d8a8637693ae367ce39c2fe0f4e8e3c7c3a34feb82305388f19030aa4fcd4955abeb810"); + + nDefaultPort = 37111; + nRPCPort = 36757; + nBIP44ID = 0x80000001; + + nLastPOWBlock = 20; + nFirstPosv2Block = 20; + nFirstPosv3Block = 500; + + bnProofOfWorkLimit = CBigNum(~uint256(0) >> 1); + bnProofOfStakeLimit = CBigNum(~uint256(0) >> 20); + bnProofOfStakeLimitV2 = CBigNum(~uint256(0) >> 46); + + nStakeMinConfirmationsLegacy = 28; + nStakeMinConfirmations = 30; + + genesis.nBits = bnProofOfWorkLimit.GetCompact(); + genesis.nNonce = 20; + + hashGenesisBlock = genesis.GetHash(); + assert(hashGenesisBlock == uint256("0x0a3e03a153b1713ebc1f03fefa5d013bba4d2677ae189fcb727396b98043d95c")); + + base58Prefixes[PUBKEY_ADDRESS] = list_of(127).convert_to_container >(); + base58Prefixes[SCRIPT_ADDRESS] = list_of(196).convert_to_container >(); + base58Prefixes[SECRET_KEY] = list_of(255).convert_to_container >(); + base58Prefixes[STEALTH_ADDRESS] = list_of(40).convert_to_container >(); + base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x76)(0xC0)(0xFD)(0xFB).convert_to_container >(); + base58Prefixes[EXT_SECRET_KEY] = list_of(0x76)(0xC1)(0x07)(0x7A).convert_to_container >(); + base58Prefixes[EXT_KEY_HASH] = list_of(75).convert_to_container >(); // X + base58Prefixes[EXT_ACC_HASH] = list_of(23).convert_to_container >(); // A + base58Prefixes[EXT_PUBLIC_KEY_BTC] = list_of(0x04)(0x35)(0x87)(0xCF).convert_to_container >(); // tprv + base58Prefixes[EXT_SECRET_KEY_BTC] = list_of(0x04)(0x35)(0x83)(0x94).convert_to_container >(); // tpub + + convertSeeds(vFixedSeeds, pnTestnetSeed, ARRAYLEN(pnTestnetSeed), nDefaultPort); + + nForkV2Time = 1532466000; // TESTNET V2 chain fork (GMT: Tuesday, 24. July 2018 21.00) + nForkV3Time = 1546470000; // TESTNET V3 chain fork (01/02/2019 @ 11:00pm (UTC)) + nForkV4Time = 1567972800; // TESTNET V4 chain fork (Sunday, 8. September 2019 20:00:00) + + + devContributionAddress = "tSJoPZoXumJyDmGKYo9Y7SZkJvymESFYkD"; + supplyIncreaseAddress = devContributionAddress; + } + virtual Network NetworkID() const { return CChainParams::TESTNET; } +}; +static CTestNetParams testNetParams; + + +// +// Regression test +// +class CRegTestParams : public CTestNetParams { +public: + CRegTestParams() { + strNetworkID = "regtest"; + strDataDir = "regtest"; + + nFirstPosv2Block = -1; + nFirstPosv3Block = -1; + + pchMessageStart[0] = 0x05; + pchMessageStart[1] = 0xc5; + pchMessageStart[2] = 0x04; + pchMessageStart[3] = 0x3a; + bnProofOfWorkLimit = CBigNum(~uint256(0) >> 1); + genesis.nTime = 1479594600; + genesis.nBits = bnProofOfWorkLimit.GetCompact(); + genesis.nNonce = 2; + + hashGenesisBlock = genesis.GetHash(); + nDefaultPort = 18444; + + assert(hashGenesisBlock == uint256("0x562dba63b74b056329585b9779306f3d3caf447b5df40fb088cebbfb31fd5d5d")); + + vSeeds.clear(); // Regtest mode doesn't have any DNS seeds. + } + + virtual bool RequireRPCPassword() const { return false; } + virtual Network NetworkID() const { return CChainParams::REGTEST; } +}; +static CRegTestParams regTestParams; + +static CChainParams *pCurrentParams = &mainParams; + +const CChainParams &Params() { + return *pCurrentParams; +} + +const CChainParams &TestNetParams() { + return testNetParams; +} + +const CChainParams &MainNetParams() { + return mainParams; +} + +void SelectParams(CChainParams::Network network) +{ + switch (network) + { + case CChainParams::MAIN: + pCurrentParams = &mainParams; + break; + case CChainParams::TESTNET: + pCurrentParams = &testNetParams; + break; + case CChainParams::REGTEST: + pCurrentParams = ®TestParams; + break; + default: + assert(false && "Unimplemented network"); + return; + }; +}; + +bool SelectParamsFromCommandLine() +{ + bool fRegTest = GetBoolArg("-regtest", false); + bool fTestNet = GetBoolArg("-testnet", false); + + if (fTestNet && fRegTest) + { + return false; + }; + + if (fRegTest) + { + SelectParams(CChainParams::REGTEST); + } else + if (fTestNet) + { + SelectParams(CChainParams::TESTNET); + } else + { + SelectParams(CChainParams::MAIN); + }; + + return true; +} diff --git a/src/kernel/chainparams.h b/src/kernel/chainparams.h new file mode 100644 index 0000000000..8203fd23a2 --- /dev/null +++ b/src/kernel/chainparams.h @@ -0,0 +1,178 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + +#ifndef BITCOIN_CHAIN_PARAMS_H +#define BITCOIN_CHAIN_PARAMS_H + +#include "bignum.h" +#include "uint256.h" +#include "util/util.h" + +#include + +#define MESSAGE_START_SIZE 4 +typedef unsigned char MessageStartChars[MESSAGE_START_SIZE]; + +class CAddress; +class CBlock; +class CBlockIndex; + +struct CDNSSeedData { + std::string name, host; + CDNSSeedData(const std::string &strName, const std::string &strHost) : name(strName), host(strHost) {} +}; + + + +/** + * CChainParams defines various tweakable parameters of a given instance of the + * Bitcoin system. There are three: the main network on which people trade goods + * and services, the public test network which gets reset from time to time and + * a regression test mode which is intended for private networks only. It has + * minimal difficulty to ensure that blocks can be found instantly. + */ +class CChainParams +{ +public: + enum Network { + MAIN, + TESTNET, + REGTEST, + + MAX_NETWORK_TYPES + }; + + enum Base58Type { + PUBKEY_ADDRESS, + SCRIPT_ADDRESS, + SECRET_KEY, + STEALTH_ADDRESS, + EXT_PUBLIC_KEY, + EXT_SECRET_KEY, + EXT_KEY_HASH, + EXT_ACC_HASH, + EXT_PUBLIC_KEY_BTC, + EXT_SECRET_KEY_BTC, + + MAX_BASE58_TYPES + }; + + const uint256& HashGenesisBlock() const { return hashGenesisBlock; } + const MessageStartChars& MessageStart() const { return pchMessageStart; } + const std::vector& AlertKey() const { return vAlertPubKey; } + int GetDefaultPort() const { return nDefaultPort; } + + bool IsProtocolV2(int nHeight) const { return nHeight > nFirstPosv2Block; } + bool IsProtocolV3(int nHeight) const { return nHeight > nFirstPosv3Block; } + + const CBigNum& ProofOfWorkLimit() const { return bnProofOfWorkLimit; } + const CBigNum& ProofOfStakeLimit(int nHeight) const { return IsProtocolV2(nHeight) ? bnProofOfStakeLimitV2 : bnProofOfStakeLimit; } + + + virtual const CBlock& GenesisBlock() const = 0; + virtual bool RequireRPCPassword() const { return true; } + const std::string& DataDir() const { return strDataDir; } + virtual Network NetworkID() const = 0; + const std::vector& DNSSeeds() const { return vSeeds; } + const std::vector &Base58Prefix(Base58Type type) const { return base58Prefixes[type]; } + virtual const std::vector& FixedSeeds() const = 0; + + std::string NetworkIDString() const { return strNetworkID; } + + int RPCPort() const { return nRPCPort; } + + int BIP44ID() const { return nBIP44ID; } + + + int LastPOWBlock() const { return nLastPOWBlock; } + //int LastFairLaunchBlock() const { return nLastFairLaunchBlock; } + + int64_t GetProofOfWorkReward(int nHeight, int64_t nFees) const; + int64_t GetProofOfStakeReward(const CBlockIndex* pindexPrev, int64_t nCoinAge, int64_t nFees) const; + int64_t GetProofOfAnonStakeReward(const CBlockIndex* pindexPrev, int64_t nFees) const; + + const std::string GetDevContributionAddress() const { return devContributionAddress; } + const std::string GetSupplyIncreaseAddress() const { return supplyIncreaseAddress; } + + bool IsForkV2(int64_t nTime) const { return nTime > nForkV2Time; } + bool IsForkV3(int64_t nTime) const { return nTime > nForkV3Time; } + bool IsForkV4(int64_t nTime) const { return nTime >= nForkV4Time; } + bool IsForkV4SupplyIncrease(const CBlockIndex* pindexPrev) const; + int GetForkId(int64_t nTime) const { return (nTime >= nForkV4Time) ? 4 : (nTime > nForkV3Time) ? 3 : (nTime > nForkV2Time) ? 2 : 0; } + + const CBigNum BnProofOfWorkLimit() const { return bnProofOfWorkLimit; } + const CBigNum BnProofOfStakeLimit() const { return bnProofOfStakeLimit; } + + int GetStakeMinConfirmations(int64_t nTime) const { return IsForkV3(nTime) ? nStakeMinConfirmations : nStakeMinConfirmationsLegacy; } + int GetAnonStakeMinConfirmations() const { return nStakeMinConfirmations; } + +protected: + CChainParams() {}; + + uint256 hashGenesisBlock; + MessageStartChars pchMessageStart; + // Raw pub key bytes for the broadcast alert signing key. + std::vector vAlertPubKey; + std::string strNetworkID; + int nDefaultPort; + int nRPCPort; + int nBIP44ID; + + int nFirstPosv2Block; + int nFirstPosv3Block; + CBigNum bnProofOfWorkLimit; + CBigNum bnProofOfStakeLimit; + CBigNum bnProofOfStakeLimitV2; + + int nStakeMinConfirmationsLegacy; + int nStakeMinConfirmations; + + std::string strDataDir; + std::vector vSeeds; + std::vector base58Prefixes[MAX_BASE58_TYPES]; + int nLastPOWBlock; + + std::string devContributionAddress; + std::string supplyIncreaseAddress; + + int64_t nForkV2Time; + int64_t nForkV3Time; + int64_t nForkV4Time; +}; + +/** + * Return the currently selected parameters. This won't change after app startup + * outside of the unit tests. + */ +const CChainParams &Params(); + +/** + * Return the testnet parameters. + */ +const CChainParams &TestNetParams(); + +/** + * Return the mainnet parameters. + */ +const CChainParams &MainNetParams(); + +/** Sets the params returned by Params() to those for the given network. */ +void SelectParams(CChainParams::Network network); + +/** + * Looks for -regtest or -testnet and then calls SelectParams as appropriate. + * Returns false if an invalid combination is given. + */ +bool SelectParamsFromCommandLine(); + +const inline bool TestNet() { + // Note: it's deliberate that this returns "false" for regression test mode. + return Params().NetworkID() == CChainParams::TESTNET; +} + +#endif diff --git a/src/kernel/chainparamsseeds.h b/src/kernel/chainparamsseeds.h new file mode 100644 index 0000000000..d426d08627 --- /dev/null +++ b/src/kernel/chainparamsseeds.h @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// +// SPDX-License-Identifier: MIT + +#ifndef CHAINPARAMSSEEDS_H +#define CHAINPARAMSSEEDS_H + +static const unsigned int pnSeed[] = +{ + 0x05fab2da, + 0x05fab2db, + 0x68a766cc, + 0x68a766ce, +}; + +static const unsigned int pnTestnetSeed[] = +{ + 0x05fab2da, + 0x05fab2db, + 0x68a766cc, + 0x68a766ce, +}; + +#endif diff --git a/src/eckey.cpp b/src/key/eckey.cpp similarity index 84% rename from src/eckey.cpp rename to src/key/eckey.cpp index ff87ed186b..ca7e6cc278 100644 --- a/src/eckey.cpp +++ b/src/key/eckey.cpp @@ -1,10 +1,13 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2013 The Bitcoin developers -// Copyright (c) 2014-2015 The ShadowCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT -#include "eckey.h" +#include "key/eckey.h" // anonymous namespace with local implementation code (OpenSSL interaction) namespace { @@ -56,6 +59,8 @@ int ECDSA_SIG_recover_key_GFp(EC_KEY *eckey, ECDSA_SIG *ecsig, const unsigned ch int ret = 0; BN_CTX *ctx = NULL; + const BIGNUM *pr = NULL; + const BIGNUM *ps = NULL; BIGNUM *x = NULL; BIGNUM *e = NULL; BIGNUM *order = NULL; @@ -78,7 +83,8 @@ int ECDSA_SIG_recover_key_GFp(EC_KEY *eckey, ECDSA_SIG *ecsig, const unsigned ch x = BN_CTX_get(ctx); if (!BN_copy(x, order)) { ret=-1; goto err; } if (!BN_mul_word(x, i)) { ret=-1; goto err; } - if (!BN_add(x, x, ecsig->r)) { ret=-1; goto err; } + ECDSA_SIG_get0(ecsig, &pr, &ps); + if (!BN_add(x, x, pr)) { ret=-1; goto err; } field = BN_CTX_get(ctx); if (!EC_GROUP_get_curve_GFp(group, field, NULL, NULL, ctx)) { ret=-2; goto err; } if (BN_cmp(x, field) >= 0) { ret=0; goto err; } @@ -96,12 +102,12 @@ int ECDSA_SIG_recover_key_GFp(EC_KEY *eckey, ECDSA_SIG *ecsig, const unsigned ch if (!BN_bin2bn(msg, msglen, e)) { ret=-1; goto err; } if (8*msglen > n) BN_rshift(e, e, 8-(n & 7)); zero = BN_CTX_get(ctx); - if (!BN_zero(zero)) { ret=-1; goto err; } + BN_zero(zero); if (!BN_mod_sub(e, zero, e, order, ctx)) { ret=-1; goto err; } rr = BN_CTX_get(ctx); - if (!BN_mod_inverse(rr, ecsig->r, order, ctx)) { ret=-1; goto err; } + if (!BN_mod_inverse(rr, pr, order, ctx)) { ret=-1; goto err; } sor = BN_CTX_get(ctx); - if (!BN_mod_mul(sor, ecsig->s, rr, order, ctx)) { ret=-1; goto err; } + if (!BN_mod_mul(sor, ps, rr, order, ctx)) { ret=-1; goto err; } eor = BN_CTX_get(ctx); if (!BN_mod_mul(eor, e, rr, order, ctx)) { ret=-1; goto err; } if (!EC_POINT_mul(group, Q, eor, R, sor, ctx)) { ret=-2; goto err; } @@ -134,11 +140,11 @@ void CECKey::GetSecretBytes(unsigned char vch[32]) const void CECKey::SetSecretBytes(const unsigned char vch[32]) { - BIGNUM bn; - BN_init(&bn); - assert(BN_bin2bn(vch, 32, &bn)); - assert(EC_KEY_regenerate_key(pkey, &bn)); - BN_clear_free(&bn); + BIGNUM *bn; + bn = BN_new(); + assert(BN_bin2bn(vch, 32, bn)); + assert(EC_KEY_regenerate_key(pkey, bn)); + BN_clear_free(bn); } void CECKey::GetPrivKey(CPrivKey &privkey, bool fCompressed) { @@ -194,9 +200,15 @@ bool CECKey::Sign(const uint256 &hash, std::vector& vchSig) { BIGNUM *halforder = BN_CTX_get(ctx); EC_GROUP_get_order(group, order, ctx); BN_rshift1(halforder, order); - if (BN_cmp(sig->s, halforder) > 0) { + const BIGNUM *pr = NULL; + const BIGNUM *ps = NULL; + ECDSA_SIG_get0(sig, &pr, &ps); + if (BN_cmp(ps, halforder) > 0) { // enforce low S values, by negating the value (modulo the order) if above order/2. - BN_sub(sig->s, order, sig->s); + BIGNUM *pr0 = BN_dup(pr); + BIGNUM *ps0 = BN_new(); + BN_sub(ps0, order, ps); + ECDSA_SIG_set0(sig, pr0, ps0); } BN_CTX_end(ctx); BN_CTX_free(ctx); @@ -222,8 +234,11 @@ bool CECKey::SignCompact(const uint256 &hash, unsigned char *p64, int &rec) { if (sig==NULL) return false; memset(p64, 0, 64); - int nBitsR = BN_num_bits(sig->r); - int nBitsS = BN_num_bits(sig->s); + const BIGNUM *pr = NULL; + const BIGNUM *ps = NULL; + ECDSA_SIG_get0(sig, &pr, &ps); + int nBitsR = BN_num_bits(pr); + int nBitsS = BN_num_bits(ps); if (nBitsR <= 256 && nBitsS <= 256) { CPubKey pubkey; GetPubKey(pubkey, true); @@ -240,8 +255,8 @@ bool CECKey::SignCompact(const uint256 &hash, unsigned char *p64, int &rec) { } } assert(fOk); - BN_bn2bin(sig->r,&p64[32-(nBitsR+7)/8]); - BN_bn2bin(sig->s,&p64[64-(nBitsS+7)/8]); + BN_bn2bin(pr, &p64[32-(nBitsR+7)/8]); + BN_bn2bin(ps, &p64[64-(nBitsS+7)/8]); } ECDSA_SIG_free(sig); return fOk; @@ -256,8 +271,13 @@ bool CECKey::Recover(const uint256 &hash, const unsigned char *p64, int rec) if (rec<0 || rec>=3) return false; ECDSA_SIG *sig = ECDSA_SIG_new(); - BN_bin2bn(&p64[0], 32, sig->r); - BN_bin2bn(&p64[32], 32, sig->s); + // BN_bin2bn(p, len, NULL) allocates a fresh BIGNUM and returns it. + // Passing a NULL local without capturing the return left both BIGNUMs + // NULL and crashed inside ECDSA_SIG_recover_key_GFp — must capture + // the returned pointer here. + BIGNUM *pr = BN_bin2bn(&p64[0], 32, NULL); + BIGNUM *ps = BN_bin2bn(&p64[32], 32, NULL); + ECDSA_SIG_set0(sig, pr, ps); bool ret = ECDSA_SIG_recover_key_GFp(pkey, sig, (unsigned char*)&hash, sizeof(hash), rec, 0) == 1; ECDSA_SIG_free(sig); return ret; diff --git a/src/key/eckey.h b/src/key/eckey.h new file mode 100644 index 0000000000..5e0272f0e8 --- /dev/null +++ b/src/key/eckey.h @@ -0,0 +1,73 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + +#ifndef CEC_KEY_H +#define CEC_KEY_H + +#include +#include +#include +#include + +#include "key/key.h" +#include "util/util.h" +#include + +// RAII Wrapper around OpenSSL's EC_KEY +class CECKey { +private: + EC_KEY *pkey; + +public: + CECKey() { + //PKEY will crash if NDEBUG is enabled. Make sure the calls to "asserts" are turned on" + pkey = EC_KEY_new_by_curve_name(NID_secp256k1); + assert(pkey != NULL); + } + + ~CECKey() { + EC_KEY_free(pkey); + } + + EC_KEY* GetECKey() {return pkey;}; + + void GetSecretBytes(unsigned char vch[32]) const; + + void SetSecretBytes(const unsigned char vch[32]); + + void GetPrivKey(CPrivKey &privkey, bool fCompressed); + + bool SetPrivKey(const CPrivKey &privkey, bool fSkipCheck=false); + + void GetPubKey(CPubKey &pubkey, bool fCompressed); + + bool SetPubKey(const CPubKey &pubkey); + + bool Sign(const uint256 &hash, std::vector& vchSig); + + bool Verify(const uint256 &hash, const std::vector& vchSig); + + bool SignCompact(const uint256 &hash, unsigned char *p64, int &rec); + + // reconstruct public key from a compact signature + // This is only slightly more CPU intensive than just verifying it. + // If this function succeeds, the recovered public key is guaranteed to be valid + // (the signature is a valid signature of the given data for that key) + bool Recover(const uint256 &hash, const unsigned char *p64, int rec); + + bool TweakPublic(const unsigned char vchTweak[32]); +}; + +bool TweakSecret(unsigned char vchSecretOut[32], const unsigned char vchSecretIn[32], const unsigned char vchTweak[32]); + + + +#endif + + diff --git a/src/extkey.cpp b/src/key/extkey.cpp similarity index 95% rename from src/extkey.cpp rename to src/key/extkey.cpp index ffcec589ee..6d45b3525a 100644 --- a/src/extkey.cpp +++ b/src/key/extkey.cpp @@ -1,14 +1,17 @@ -// Copyright (c) 2014-2015 The ShadowCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +// +// SPDX-License-Identifier: MIT -#include "extkey.h" +#include "key/extkey.h" -#include "util.h" +#include "util/util.h" #include "base58.h" #include "state.h" -#include "wallet.h" -#include "init.h" // for pwalletMain +#include "wallet/wallet.h" +#include "init/init.h" // for pwalletMain #include "wordlists/english.h" #include "wordlists/french.h" @@ -44,7 +47,7 @@ const char *ExtKeyGetString(int ind) case 13: return "Failed to unlock"; default: return "Unknown error, check log"; }; - + }; std::vector &SetCompressedInt64(std::vector &v, uint64_t n) @@ -53,7 +56,7 @@ std::vector &SetCompressedInt64(std::vector &v, uint64_t n) v.resize(b); if (b > 0) memcpy(&v[0], (uint8_t*) &n, b); - + return v; }; @@ -66,7 +69,7 @@ int64_t GetCompressedInt64(const std::vector &v, uint64_t &n) else if (b < 9) memcpy((uint8_t*) &n, &v[0], b); - + return (int64_t)n; }; @@ -81,9 +84,9 @@ bool GetCKeyID(const std::vector &v, CKeyID &n) { if (v.size() != 20) return false; - + memcpy((uint8_t*) &n, &v[0], 20); - + return true; }; @@ -92,7 +95,7 @@ std::vector &SetString(std::vector &v, const char *s) size_t len = strlen(s); v.resize(len); memcpy(&v[0], (uint8_t*) &s, len); - + return v; }; @@ -100,7 +103,7 @@ std::vector &SetChar(std::vector &v, const uint8_t c) { v.resize(1); v[0] = c; - + return v; }; @@ -108,7 +111,7 @@ std::vector &PushUInt32(std::vector &v, const uint32_t i) { size_t o = v.size(); v.resize(o+4); - + memcpy(&v[o], (uint8_t*) &i, 4); return v; }; @@ -122,12 +125,12 @@ static uint32_t strtou32max(const char *nptr, int base) char c; uintmax_t cutoff; int neg, any, cutlim; - + s = nptr; do { c = *s++; } while (isspace((unsigned char)c)); - + if (c == '-') { neg = 1; c = *s++; @@ -198,24 +201,24 @@ static inline int validDigit(char c, int base) int ExtractExtKeyPath(const std::string &sPath, std::vector &vPath) { char data[512]; - + vPath.clear(); - + if (sPath.length() > sizeof(data) -2) return 2; if (sPath.length() < 1) return 3; - + memcpy(data, sPath.data(), sPath.length()); data[sPath.length()] = '\0'; - + int nSlashes = 0; for (size_t k = 0; k < sPath.length(); ++k) { if (sPath[k] == '/') { nSlashes++; - + // - catch start or end '/', and '//' if (k == 0 || k == sPath.length()-1 @@ -223,11 +226,11 @@ int ExtractExtKeyPath(const std::string &sPath, std::vector &vPath) return 7; }; }; - + vPath.reserve(nSlashes + 1); - + char *p = strtok(data, "/"); - + while (p) { uint32_t nChild; @@ -236,9 +239,9 @@ int ExtractExtKeyPath(const std::string &sPath, std::vector &vPath) nChild = 0; } else { - + bool fHarden = false; - + // - don't allow octal, only hex and binary int nBase = *p == '0' && (*(p+1) == 'b' || *(p+1) == 'B') ? 2 : *p == '0' && (*(p+1) == 'x' || *(p+1) == 'X') ? 16 : 10; @@ -256,12 +259,12 @@ int ExtractExtKeyPath(const std::string &sPath, std::vector &vPath) if (!validDigit(*p, nBase)) return 4; }; - + errno = 0; nChild = strtou32max(ps, nBase); if (errno != 0) return 5; - + if (fHarden) { if ((nChild >> 31) == 0) @@ -273,20 +276,20 @@ int ExtractExtKeyPath(const std::string &sPath, std::vector &vPath) }; }; }; - + vPath.push_back(nChild); - + p = strtok(NULL, "/"); - + if (nChild == 0 && vPath.size() != 1 && p) return 6; }; - + if (vPath.size() < 1) return 3; - + return 0; }; @@ -295,14 +298,14 @@ int PathToString(const std::vector &vPath, std::string &sPath, char cH) sPath = ""; if (vPath.size() % 4 != 0) return 1; - + sPath = "m"; for (size_t o = 0; o < vPath.size(); o+=4) { uint32_t n; memcpy(&n, &vPath[o], 4); sPath += "/"; - + bool fHardened = false; if ((n >> 31) == 1) { @@ -313,17 +316,17 @@ int PathToString(const std::vector &vPath, std::string &sPath, char cH) if (fHardened) sPath += cH; }; - + return 0; }; std::string CEKAStealthKey::ToStealthAddress() const { // - return base58 encoded public stealth address - + std::vector raw; raw = Params().Base58Prefix(CChainParams::STEALTH_ADDRESS); - + raw.push_back(nFlags); raw.insert(raw.end(), pkScan.begin(), pkScan.end()); raw.push_back(1); // number of spend pubkeys @@ -331,17 +334,18 @@ std::string CEKAStealthKey::ToStealthAddress() const raw.push_back(0); // number of signatures raw.push_back(0); // ? AppendChecksum(raw); - + return EncodeBase58(raw); }; -int CEKAStealthKey::SetSxAddr(CStealthAddress &sxAddr) +int CEKAStealthKey::SetSxAddr(CStealthAddress &sxAddr) const { sxAddr.scan_pubkey = pkScan; sxAddr.spend_pubkey = pkSpend; sxAddr.scan_secret.resize(EC_SECRET_SIZE); memcpy(&sxAddr.scan_secret[0], skScan.begin(), EC_SECRET_SIZE); - + sxAddr.label = sLabel; + return 0; }; @@ -365,13 +369,13 @@ std::string CExtKeyAccount::GetIDString58() const int CExtKeyAccount::HaveKey(const CKeyID &id, bool fUpdate, CEKAKey &ak) { // - rv 0 = no, 1 = yes, 2 = lookahead, 3 = lookahead + updated - + LOCK(cs_account); // - if fUpdate, promote key if found in look ahead AccKeyMap::const_iterator mi = mapKeys.find(id); if (mi != mapKeys.end()) return 1; - + mi = mapLookAhead.find(id); if (mi != mapLookAhead.end()) { @@ -385,18 +389,18 @@ int CExtKeyAccount::HaveKey(const CKeyID &id, bool fUpdate, CEKAKey &ak) }; return 2; }; - + AccKeySCMap::const_iterator miSck = mapStealthChildKeys.find(id); if (miSck != mapStealthChildKeys.end()) return 1; - + return 0; }; bool CExtKeyAccount::GetKey(const CKeyID &id, CKey &keyOut) const { LOCK(cs_account); - + AccKeyMap::const_iterator mi; AccKeySCMap::const_iterator miSck; if ((mi = mapKeys.find(id)) != mapKeys.end()) @@ -412,42 +416,42 @@ bool CExtKeyAccount::GetKey(const CKeyID &id, CKey &keyOut) const { return false; }; - + // [rm] necessary? if (fDebug && keyOut.GetPubKey().GetID() != id) { return error("Stored key mismatch."); }; - + return true; } bool CExtKeyAccount::GetKey(const CEKAKey &ak, CKey &keyOut) const { LOCK(cs_account); - + if (ak.nParent >= vExtKeys.size()) return error("%s: Account key invalid parent ext key %d, account %s.", __func__, ak.nParent, GetIDString58().c_str()); - + const CStoredExtKey *chain = vExtKeys[ak.nParent]; - + if (chain->fLocked) return error("%s: Chain locked, account %s.", __func__, GetIDString58().c_str()); - + if (!chain->kp.Derive(keyOut, ak.nKey)) return false; - + return true; }; bool CExtKeyAccount::GetKey(const CEKASCKey &asck, CKey &keyOut) const { LOCK(cs_account); - + AccStealthKeyMap::const_iterator miSk = mapStealthKeys.find(asck.idStealthKey); if (miSk == mapStealthKeys.end()) return error("%s: CEKASCKey Stealth key not in this account!", __func__); - + return (0 == ExpandStealthChildKey(&miSk->second, asck.sShared, keyOut)); }; @@ -469,43 +473,43 @@ bool CExtKeyAccount::GetPubKey(const CKeyID &id, CPubKey &pkOut) const { return false; }; - + if (fDebug) // [rm] necessary { if (pkOut.GetID() != id) return errorN(1, "%s: Extracted public key mismatch.", __func__); }; - + return true; }; bool CExtKeyAccount::GetPubKey(const CEKAKey &ak, CPubKey &pkOut) const { LOCK(cs_account); - + if (ak.nParent >= vExtKeys.size()) return error("%s: Account key invalid parent ext key %d, account %s.", __func__, ak.nParent, GetIDString58().c_str()); - + const CStoredExtKey *chain = GetChain(ak.nParent); - + if (!chain) return error("%s: Chain unknown, account %s.", __func__, GetIDString58().c_str()); - + if (!chain->kp.Derive(pkOut, ak.nKey)) return false; - + return true; }; bool CExtKeyAccount::GetPubKey(const CEKASCKey &asck, CPubKey &pkOut) const { LOCK(cs_account); - + AccStealthKeyMap::const_iterator miSk = mapStealthKeys.find(asck.idStealthKey); if (miSk == mapStealthKeys.end()) return error("%s: CEKASCKey Stealth key not in this account!", __func__); - - + + return (0 == ExpandStealthChildPubKey(&miSk->second, asck.sShared, pkOut)); }; @@ -516,31 +520,31 @@ bool CExtKeyAccount::SaveKey(const CKeyID &id, CEKAKey &keyIn) AccKeyMap::const_iterator mi = mapKeys.find(id); if (mi != mapKeys.end()) return false; // already saved - + if (mapLookAhead.erase(id) != 1) { CBitcoinAddress addr(id); LogPrintf("Warning: SaveKey %s key not found in look ahead %s.\n", GetIDString58().c_str(), addr.ToString().c_str()); }; - + mapKeys[id] = keyIn; - + CStoredExtKey *pc; if ((pc = GetChain(keyIn.nParent)) != NULL) { if (keyIn.nKey == pc->nGenerated) // TODO: gaps? pc->nGenerated++; - + if (pc->nFlags & EAF_ACTIVE && pc->nFlags & EAF_RECEIVE_ON) AddLookAhead(keyIn.nParent, 1); }; - + if (fDebug) { CBitcoinAddress addr(id); LogPrintf("Saved key %s, %s.\n", GetIDString58().c_str(), addr.ToString().c_str()); - + // - check match CStoredExtKey *pa; if ((pa = GetChain(keyIn.nParent)) != NULL) @@ -551,21 +555,21 @@ bool CExtKeyAccount::SaveKey(const CKeyID &id, CEKAKey &keyIn) LogPrintf("Can't check hardened key when wallet locked.\n"); return true; }; - + CPubKey pk; if (!GetPubKey(keyIn, pk)) return error("GetPubKey failed."); - + if (pk.GetID() != id) return error("Key mismatch!!!"); - + LogPrintf("key match verified.\n"); } else { return error("Unknown chain."); }; }; - + return true; }; @@ -575,26 +579,26 @@ bool CExtKeyAccount::SaveKey(const CKeyID &id, CEKASCKey &keyIn) AccKeySCMap::const_iterator mi = mapStealthChildKeys.find(id); if (mi != mapStealthChildKeys.end()) return false; // already saved - + AccStealthKeyMap::const_iterator miSk = mapStealthKeys.find(keyIn.idStealthKey); if (miSk == mapStealthKeys.end()) return error("SaveKey(): CEKASCKey Stealth key not in this account!"); - + mapStealthChildKeys[id] = keyIn; - + if (fDebug) { CBitcoinAddress addr(id); LogPrintf("SaveKey(): CEKASCKey %s, %s.\n", GetIDString58().c_str(), addr.ToString().c_str()); }; - + return true; }; bool CExtKeyAccount::IsLocked(const CEKAStealthKey &aks) { // TODO: check aks belongs to account?? - + CStoredExtKey *pc = GetChain(aks.akSpend.nParent); if (pc && !pc->fLocked) return false; @@ -607,14 +611,14 @@ int CExtKeyAccount::AddLookAhead(uint32_t nChain, uint32_t nKeys) CStoredExtKey *pc = GetChain(nChain); if (!pc) return errorN(1, "%s: Unknown chain, %d.", __func__, nChain); - + if (fDebug) LogPrintf("%s: chain %s, keys %d.\n", __func__, pc->GetIDString58(), nKeys); - + AccKeyMap::const_iterator mi; uint32_t nChild = pc->nGenerated; uint32_t nChildOut = nChild; - + CKeyID keyId; CPubKey pk; for (uint32_t k = 0; k < nKeys; ++k) @@ -629,7 +633,7 @@ int CExtKeyAccount::AddLookAhead(uint32_t nChain, uint32_t nKeys) continue; }; nChild = nChildOut+1; - + keyId = pk.GetID(); if ((mi = mapKeys.find(keyId)) != mapKeys.end()) { @@ -643,48 +647,48 @@ int CExtKeyAccount::AddLookAhead(uint32_t nChain, uint32_t nKeys) fGotKey = true; break; }; - + if (!fGotKey) { LogPrintf("%s: DeriveKey loop failed, chain %d, child %d.\n", __func__, nChain, nChild); continue; }; - + mapLookAhead[keyId] = CEKAKey(nChain, nChildOut); - + if (fDebug) { CBitcoinAddress addr(keyId); LogPrintf("%s: added %s\n", __func__, addr.ToString().c_str()); }; }; - + return 0; }; int CExtKeyAccount::ExpandStealthChildKey(const CEKAStealthKey *aks, const ec_secret &sShared, CKey &kOut) const { // - derive the secret key of the stealth address and then the secret key out - + LOCK(cs_account); - + if (!aks) return errorN(1, "%s: Sanity checks failed.", __func__); - + CKey kSpend; if (!GetKey(aks->akSpend, kSpend)) return errorN(1, "%s: GetKey() failed.", __func__); - + ec_secret sSpendR; ec_secret sSpend; - + memcpy(&sSpend.e[0], kSpend.begin(), EC_SECRET_SIZE); - + if (StealthSharedToSecretSpend(sShared, sSpend, sSpendR) != 0) return errorN(1, "%s: StealthSharedToSecretSpend() failed.", __func__); - + kOut.Set(&sSpendR.e[0], true); - + if (!kOut.IsValid()) return errorN(1, "%s: Invalid key.", __func__); return 0; @@ -693,22 +697,22 @@ int CExtKeyAccount::ExpandStealthChildKey(const CEKAStealthKey *aks, const ec_se int CExtKeyAccount::ExpandStealthChildPubKey(const CEKAStealthKey *aks, const ec_secret &sShared, CPubKey &pkOut) const { // - works with locked wallet - + LOCK(cs_account); - + if (!aks) return errorN(1, "%s: Sanity checks failed.", __func__); - + ec_point pkExtract; - + if (StealthSharedToPublicKey(aks->pkSpend, sShared, pkExtract) != 0) return errorN(1, "%s: StealthSharedToPublicKey() failed.", __func__); - + pkOut = CPubKey(pkExtract); - + if (!pkOut.IsValid()) return errorN(1, "%s: Invalid public key.", __func__); - + return 0; }; @@ -719,14 +723,14 @@ int CExtKeyAccount::WipeEncryption() { if (!((*it)->nFlags & EAF_IS_CRYPTED)) continue; - + if ((*it)->fLocked) return errorN(1, "Attempting to undo encryption of a locked key."); - + (*it)->nFlags &= ~EAF_IS_CRYPTED; (*it)->vchCryptedSecret.clear(); }; - + return 0; }; @@ -735,17 +739,17 @@ bool IsBIP32(const char *base58) std::vector vchBytes; if (!DecodeBase58(base58, vchBytes)) return false; - + if (vchBytes.size() != BIP32_KEY_LEN) return false; - + if (0 == memcmp(&vchBytes[0], &Params().Base58Prefix(CChainParams::EXT_SECRET_KEY)[0], 4) || 0 == memcmp(&vchBytes[0], &Params().Base58Prefix(CChainParams::EXT_PUBLIC_KEY)[0], 4)) return true; - + if (!VerifyChecksum(vchBytes)) return false; - + return false; }; @@ -753,43 +757,43 @@ bool IsBIP32(const char *base58) int LoopExtKeysInDB(bool fInactive, bool fInAccount, LoopExtKeyCallback &callback) { AssertLockHeld(pwalletMain->cs_wallet); - + CWalletDB wdb(pwalletMain->strWalletFile); - + Dbc *pcursor; if (!(pcursor = wdb.GetAtCursor())) throw std::runtime_error(strprintf("%s : cannot create DB cursor", __func__).c_str()); - + CDataStream ssKey(SER_DISK, CLIENT_VERSION); CDataStream ssValue(SER_DISK, CLIENT_VERSION); - + CKeyID ckeyId; CStoredExtKey sek; std::string strType; - + uint32_t fFlags = DB_SET_RANGE; ssKey << std::string("ek32"); - + while (wdb.ReadAtCursor(pcursor, ssKey, ssValue, fFlags) == 0) { fFlags = DB_NEXT; - + ssKey >> strType; if (strType != "ek32") break; - + ssKey >> ckeyId; ssValue >> sek; - + if (!fInAccount && sek.nFlags & EAF_IN_ACCOUNT) continue; - + callback.ProcessKey(ckeyId, sek); }; - + pcursor->close(); - + return 0; }; @@ -798,38 +802,38 @@ int LoopExtAccountsInDB(bool fInactive, LoopExtKeyCallback &callback) AssertLockHeld(pwalletMain->cs_wallet); CWalletDB wdb(pwalletMain->strWalletFile); // - list accounts - + Dbc *pcursor; if (!(pcursor = wdb.GetAtCursor())) throw std::runtime_error(strprintf("%s : cannot create DB cursor", __func__).c_str()); - + CDataStream ssKey(SER_DISK, CLIENT_VERSION); CDataStream ssValue(SER_DISK, CLIENT_VERSION); CKeyID idAccount; CExtKeyAccount sea; CBitcoinAddress addr; std::string strType, sError; - + uint32_t fFlags = DB_SET_RANGE; ssKey << std::string("eacc"); - + while (wdb.ReadAtCursor(pcursor, ssKey, ssValue, fFlags) == 0) { fFlags = DB_NEXT; - + ssKey >> strType; if (strType != "eacc") break; - + ssKey >> idAccount; ssValue >> sea; - + sea.vExtKeys.resize(sea.vExtKeyIDs.size()); for (size_t i = 0; i < sea.vExtKeyIDs.size(); ++i) { CKeyID &id = sea.vExtKeyIDs[i]; CStoredExtKey *sek = new CStoredExtKey(); - + if (wdb.ReadExtKey(id, *sek)) { sea.vExtKeys[i] = sek; @@ -842,12 +846,12 @@ int LoopExtAccountsInDB(bool fInactive, LoopExtKeyCallback &callback) }; }; callback.ProcessAccount(idAccount, sea); - + sea.FreeChains(); }; - + pcursor->close(); - + return 0; }; @@ -861,11 +865,11 @@ static int GetWord(int o, const char *pwl, int max, std::string &sWord) if (*pt == '\n') o--; pt++; - + if (pt >= pwl+max) return 1; }; - + while (pt < (pwl+max)) { if (*pt == '\n') @@ -873,7 +877,7 @@ static int GetWord(int o, const char *pwl, int max, std::string &sWord) sWord += *pt; pt++; }; - + return 1; }; @@ -908,7 +912,7 @@ int GetWordOffset(const char *p, const char *pwl, int max, int &o) }; pt++; }; - + return 1; }; @@ -939,17 +943,17 @@ int MnemonicDetectLanguage(const std::string &sWordList) char tmp[2048]; if (sWordList.size() >= 2048) return errorN(-1, "%s: Word List too long.", __func__); - + // try to detect the language // try max 4 words // allow errors to account for spelling mistakes for (int l = 1; l < WLL_MAX; ++l) { strcpy(tmp, sWordList.c_str()); - + char *pwl = (char*) mnLanguages[l]; int m = mnLanguageLens[l]; - + int maxTries = 4; int nHit = 0; int nMiss = 0; @@ -962,16 +966,16 @@ int MnemonicDetectLanguage(const std::string &sWordList) nHit++; else nMiss++; - + if (!maxTries--) break; p = strtok(NULL, " "); }; - + if (nHit > nMiss) return l; }; - + return 0; }; @@ -979,27 +983,27 @@ int MnemonicEncode(int nLanguage, const std::vector &vEntropy, std::str { if (fDebug) LogPrintf("%s: language %d.\n", __func__, nLanguage); - + if (nLanguage < 1 || nLanguage > WLL_MAX) { sError = "Unknown language."; return errorN(1, "%s: %s", __func__, sError.c_str()); }; - + // -- checksum is 1st n bytes of the sha256 hash uint8_t hash[32]; SHA256(&vEntropy[0], vEntropy.size(), (uint8_t*)hash); - + int nCsSize = vEntropy.size() / 4; // 32 / 8 - + if (nCsSize < 1 || nCsSize > 256) { sError = "Entropy bytes out of range."; return errorN(2, "%s: %s", __func__, sError.c_str()); }; - + std::vector vIn = vEntropy; - + int ncb = nCsSize/8; int r = nCsSize % 8; if (r != 0) @@ -1007,26 +1011,26 @@ int MnemonicEncode(int nLanguage, const std::vector &vEntropy, std::str std::vector vTmp(32); memcpy(&vTmp[0], &hash, ncb); memset(&vTmp[ncb], 0, 32-ncb); - + vIn.insert(vIn.end(), vTmp.begin(), vTmp.end()); - + std::vector vWord; - + int nBits = vEntropy.size() * 8 + nCsSize; - + int i = 0; while (i < nBits) { int o = 0; int s = i / 8; int r = i % 8; - + uint8_t b1 = vIn[s]; uint8_t b2 = vIn[s+1]; - + o = (b1 << r) & 0xFF; o = o << (11 - 8); - + if (r > 5) { uint8_t b3 = vIn[s+2]; @@ -1036,36 +1040,36 @@ int MnemonicEncode(int nLanguage, const std::vector &vEntropy, std::str { o |= ((int)b2) >> ((8 - (11 - 8))-r); }; - + o = o & 0x7FF; - + vWord.push_back(o); i += 11; }; - + char *pwl = (char*) mnLanguages[nLanguage]; int m = mnLanguageLens[nLanguage]; - + for (size_t k = 0; k < vWord.size(); ++k) { int o = vWord[k]; - + std::string sWord; - + if (0 != GetWord(o, pwl, m, sWord)) { sError = strprintf("Word extract failed %d.", o); return errorN(3, "%s: %s", __func__, sError.c_str()); }; - + if (sWordList != "") sWordList += " "; sWordList += sWord; }; - + if (nLanguage == WLL_JAPANESE) ReplaceStrInPlace(sWordList, " ", "\u3000"); - + return 0; }; @@ -1073,33 +1077,33 @@ int MnemonicDecode(int nLanguage, const std::string &sWordListIn, std::vector WLL_MAX) { sError = "Unknown language."; return errorN(1, "%s: %s", __func__, sError.c_str()); }; - + char tmp[2048]; if (sWordList.size() >= 2048) { sError = "Word List too long."; return errorN(2, "%s: %s", __func__, sError.c_str()); }; - + strcpy(tmp, sWordList.c_str()); - + char *pwl = (char*) mnLanguages[nLanguage]; int m = mnLanguageLens[nLanguage]; - + std::vector vWordInts; - + char *p; p = strtok(tmp, " "); while (p != NULL) @@ -1110,37 +1114,37 @@ int MnemonicDecode(int nLanguage, const std::string &sWordListIn, std::vector> (r+3)) & 0x7FF; - + if (s < (int)el-1) { if (r > 5) @@ -1157,43 +1161,43 @@ int MnemonicDecode(int nLanguage, const std::string &sWordListIn, std::vector vCS; - + vCS.resize(nBytesChecksum); memcpy(&vCS[0], &vEntropy[nBytesEntropy], nBytesChecksum); - + vEntropy.resize(nBytesEntropy); - + uint8_t hash[32]; SHA256(&vEntropy[0], vEntropy.size(), (uint8_t*)hash); - + std::vector vCSTest; - + vCSTest.resize(nBytesChecksum); memcpy(&vCSTest[0], &hash, nBytesChecksum); - + int r = nLenChecksum % 8; - + if (r > 0) vCSTest[nBytesChecksum-1] &= (((1< vEntropy; if (0 != (rv = MnemonicDecode(nLanguage, sWordListIn, vEntropy, sError, true))) return rv; - + if (0 != (rv = MnemonicEncode(nLanguage, vEntropy, sWordListOut, sError))) return rv; - + if (0 != (rv = MnemonicDecode(nLanguage, sWordListOut, vEntropy, sError))) return rv; - + return 0; }; diff --git a/src/extkey.h b/src/key/extkey.h similarity index 94% rename from src/extkey.h rename to src/key/extkey.h index e7df3223a6..6fcb1b1b52 100644 --- a/src/extkey.h +++ b/src/key/extkey.h @@ -1,14 +1,17 @@ -// Copyright (c) 2014-2015 The ShadowCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +// +// SPDX-License-Identifier: MIT #ifndef EXT_KEY_H #define EXT_KEY_H -#include "key.h" -#include "hash.h" -#include "crypter.h" -#include "stealth.h" +#include "key/key.h" +#include "crypto/hash.h" +#include "wallet/crypter.h" +#include "anon/stealth.h" #include "state.h" @@ -17,8 +20,8 @@ static const uint32_t BIP32_KEY_LEN = 82; // raw, 74 + 4 bytes id + 4 checksum static const uint32_t BIP32_KEY_N_BYTES = 74; // raw without id and checksum static const uint32_t MAX_KEY_PACK_SIZE = 100; -static const uint32_t N_DEFAULT_LOOKAHEAD = 10; -static const uint32_t N_DEFAULT_EKVT_LOOKAHEAD = 20; +static const uint32_t N_DEFAULT_LOOKAHEAD = 100; +static const uint32_t N_DEFAULT_EKVT_LOOKAHEAD = 100; static const uint32_t BIP44_PURPOSE = (((uint32_t)44) | (1 << 31)); @@ -61,7 +64,7 @@ enum WordListLanguages WLL_SPANISH = 4, WLL_CHINESE_S = 5, WLL_CHINESE_T = 6, - + WLL_MAX }; @@ -78,32 +81,32 @@ class CStoredExtKey nGenerated = 0; nHGenerated = 0; } - + std::string GetIDString58() const; - + CKeyID GetID() const { return kp.GetID(); }; - + bool operator <(const CStoredExtKey& y) const { return kp < y.kp; }; - + bool operator ==(const CStoredExtKey& y) const { // - Compare pubkeys instead of CExtKeyPair for speed return kp.pubkey == y.kp.pubkey; }; - - + + template int DeriveKey(T &keyOut, uint32_t nChildIn, uint32_t &nChildOut, bool fHardened = false) { if (fHardened && !kp.IsValidV()) return errorN(1, "Ext key does not contain a secret."); - + for (uint32_t i = 0; i < MAX_DERIVE_TRIES; ++i) { if ((nChildIn >> 31) == 1) @@ -113,36 +116,36 @@ class CStoredExtKey return errorN(1, "No more hardened keys can be derived from master."); return errorN(1, "No more keys can be derived from master."); }; - + uint32_t nNum = fHardened ? nChildIn | 1 << 31 : nChildIn; - + if (kp.Derive(keyOut, nNum)) { nChildOut = nNum; // nChildOut has bit 31 set for harnened keys return 0; }; - + nChildIn++; }; return 1; }; - + template int DeriveNextKey(T &keyOut, uint32_t &nChildOut, bool fHardened = false, bool fUpdate = true) { uint32_t nChild = fHardened ? nHGenerated : nGenerated; - + int rv; if ((rv = DeriveKey(keyOut, nChild, nChildOut, fHardened)) != 0) return rv; - + nChild = nChildOut & ~(1 << 31); // clear the hardened bit if (fUpdate) SetCounter(nChild+1, fHardened); - + return 0; }; - + int SetCounter(uint32_t nC, bool fHardened) { if (fHardened) @@ -151,12 +154,12 @@ class CStoredExtKey nGenerated = nC; return 0; }; - + uint32_t GetCounter(bool fHardened) { return fHardened ? nHGenerated : nGenerated; }; - + IMPLEMENT_SERIALIZE ( // - Never save secret data when key is encrypted @@ -168,7 +171,7 @@ class CStoredExtKey { READWRITE(kp); }; - + READWRITE(vchCryptedSecret); READWRITE(sLabel); READWRITE(nFlags); @@ -176,18 +179,18 @@ class CStoredExtKey READWRITE(nHGenerated); READWRITE(mapValue); ); - + // - when encrypted, pk can't be derived from vk CExtKeyPair kp; std::vector vchCryptedSecret; - + std::string sLabel; - + uint8_t fLocked; // not part of nFlags so not saved uint32_t nFlags; uint32_t nGenerated; uint32_t nHGenerated; - + mapEKValue_t mapValue; }; @@ -198,18 +201,18 @@ class CEKAKey public: CEKAKey() {}; CEKAKey(uint32_t nParent_, uint32_t nKey_) : nParent(nParent_), nKey(nKey_) {}; - + IMPLEMENT_SERIALIZE ( READWRITE(nParent); READWRITE(nKey); READWRITE(sLabel); ); - + uint32_t nParent; // vExtKeys uint32_t nKey; //uint32_t nChecksum; // TODO: is it worth storing 4 bytes of the id (160 hash here) - + std::string sLabel; // TODO: use later }; @@ -219,20 +222,25 @@ class CEKASCKey public: CEKASCKey() {}; CEKASCKey(CKeyID &idStealthKey_, ec_secret &sShared_) : idStealthKey(idStealthKey_), sShared(sShared_) {}; - + IMPLEMENT_SERIALIZE ( READWRITE(idStealthKey); READWRITE(sShared); READWRITE(sLabel); ); - + // TODO: store an offset instead of the full id of the stealth address CKeyID idStealthKey; // id of parent stealth key (received on) ec_secret sShared; - + //uint32_t nChecksum; // TODO: is it worth storing 4 bytes of the id (160 hash here) std::string sLabel; // TODO: use later + + // overloaded == operator + bool operator==(const CEKASCKey& o) const { + return idStealthKey == o.idStealthKey && (memcmp(&sShared.e[0], &o.sShared.e[0], EC_COMPRESSED_SIZE) == 0); + } }; class CEKAStealthKey @@ -249,23 +257,23 @@ class CEKAStealthKey CPubKey pk = skScan.GetPubKey(); pkScan.resize(pk.size()); memcpy(&pkScan[0], pk.begin(), pk.size()); - + akSpend = CEKAKey(nSpendParent_, nSpendKey_); pk = spendSecret_.GetPubKey(); pkSpend.resize(pk.size()); memcpy(&pkSpend[0], pk.begin(), pk.size()); }; - + std::string ToStealthAddress() const; - int SetSxAddr(CStealthAddress &sxAddr); - + int SetSxAddr(CStealthAddress &sxAddr) const; + CKeyID GetID() const { // - not likely to be called very often return skScan.GetPubKey().GetID(); }; - - + + IMPLEMENT_SERIALIZE ( READWRITE(nFlags); @@ -277,15 +285,15 @@ class CEKAStealthKey READWRITE(pkScan); READWRITE(pkSpend); ); - - + + uint8_t nFlags; // options of CStealthAddress std::string sLabel; uint32_t nScanParent; // vExtKeys uint32_t nScanKey; CKey skScan; CEKAKey akSpend; - + ec_point pkScan; ec_point pkSpend; }; @@ -295,13 +303,13 @@ class CEKAKeyPack public: CEKAKeyPack() {}; CEKAKeyPack(CKeyID id_, CEKAKey &ak_) : id(id_), ak(ak_) {}; - + IMPLEMENT_SERIALIZE ( READWRITE(id); READWRITE(ak); ); - + CKeyID id; CEKAKey ak; }; @@ -311,13 +319,13 @@ class CEKASCKeyPack public: CEKASCKeyPack() {}; CEKASCKeyPack(CKeyID id_, CEKASCKey &asck_) : id(id_), asck(asck_) {}; - + IMPLEMENT_SERIALIZE ( READWRITE(id); READWRITE(asck); ); - + CKeyID id; CEKASCKey asck; }; @@ -327,13 +335,13 @@ class CEKAStealthKeyPack public: CEKAStealthKeyPack() {}; CEKAStealthKeyPack(CKeyID id_, CEKAStealthKey &aks_) : id(id_), aks(aks_) {}; - + IMPLEMENT_SERIALIZE ( READWRITE(id); READWRITE(aks); ); - + CKeyID id; CEKAStealthKey aks; }; @@ -356,7 +364,7 @@ class CExtKeyAccount nPack = 0; nPackStealth = 0; }; - + int FreeChains() { // - Keys are normally freed by the wallet @@ -368,85 +376,85 @@ class CExtKeyAccount }; return 0; }; - + std::string GetIDString58() const; - + CKeyID GetID() const { if (vExtKeyIDs.size() < 1) return CKeyID(0); return vExtKeyIDs[0]; }; - + int HaveKey(const CKeyID &id, bool fUpdate, CEKAKey &ak); bool GetKey(const CKeyID &id, CKey &keyOut) const; bool GetKey(const CEKAKey &ak, CKey &keyOut) const; bool GetKey(const CEKASCKey &asck, CKey &keyOut) const; - + bool GetPubKey(const CKeyID &id, CPubKey &pkOut) const; bool GetPubKey(const CEKAKey &ak, CPubKey &pkOut) const; bool GetPubKey(const CEKASCKey &asck, CPubKey &pkOut) const; - + bool SaveKey(const CKeyID &id, CEKAKey &keyIn); bool SaveKey(const CKeyID &id, CEKASCKey &keyIn); - + bool IsLocked(const CEKAStealthKey &aks); - + CStoredExtKey *GetChain(uint32_t nChain) const { if (nChain >= vExtKeys.size()) return NULL; return vExtKeys[nChain]; }; - + CStoredExtKey *ChainExternal() { return GetChain(nActiveExternal); }; - + CStoredExtKey *ChainInternal() { return GetChain(nActiveInternal); }; - + CStoredExtKey *ChainStealth() { return GetChain(nActiveStealth); }; - + CStoredExtKey *ChainAccount() { if (vExtKeys.size() < 1) return NULL; return vExtKeys[0]; }; - + int AddLookAhead(uint32_t nChain, uint32_t nKeys); - + int AddLookAheadInternal(uint32_t nKeys) { return AddLookAhead(nActiveExternal, nKeys); }; - + int AddLookAheadExternal(uint32_t nKeys) { return AddLookAhead(nActiveInternal, nKeys); }; - + int ExpandStealthChildKey(const CEKAStealthKey *aks, const ec_secret &sShared, CKey &kOut) const; int ExpandStealthChildPubKey(const CEKAStealthKey *aks, const ec_secret &sShared, CPubKey &pkOut) const; - + int WipeEncryption(); - + IMPLEMENT_SERIALIZE ( READWRITE(sLabel); READWRITE(idMaster); - + READWRITE(nActiveExternal); READWRITE(nActiveInternal); READWRITE(nActiveStealth); - + READWRITE(vExtKeyIDs); READWRITE(nHeightCheckedUncrypted); READWRITE(nFlags); @@ -455,38 +463,38 @@ class CExtKeyAccount READWRITE(nPackStealthKeys); READWRITE(mapValue); ); - - + + // TODO: Could store used keys in archived packs, which don't get loaded into memory AccKeyMap mapKeys; AccKeyMap mapLookAhead; - + AccKeySCMap mapStealthChildKeys; // keys derived from stealth addresses - + AccStealthKeyMap mapStealthKeys; AccStealthKeyMap mapLookAheadStealth; - - + + std::string sLabel; // account name CKeyID idMaster; - + uint32_t nActiveExternal; uint32_t nActiveInternal; uint32_t nActiveStealth; - - + + // Note: Stealth addresses consist of 2 secret keys, one of which (scan secret) must remain unencrypted while wallet locked // store a separate child key used only to derive secret keys // Stealth addresses must only ever be generated as hardened keys - + mutable CCriticalSection cs_account; - + // - 0th key is always the account key std::vector vExtKeys; std::vector vExtKeyIDs; - + int nHeightCheckedUncrypted; // last block checked while uncrypted - + uint32_t nFlags; uint32_t nPack; uint32_t nPackStealth; diff --git a/src/key.cpp b/src/key/key.cpp similarity index 97% rename from src/key.cpp rename to src/key/key.cpp index ab6b8276c1..bed8167bfd 100644 --- a/src/key.cpp +++ b/src/key/key.cpp @@ -1,9 +1,12 @@ -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT -#include "key.h" -#include "eckey.h" +#include "key/key.h" +#include "key/eckey.h" int CompareBigEndian(const unsigned char *c1, size_t c1len, const unsigned char *c2, size_t c2len) { @@ -50,7 +53,14 @@ const unsigned char vchMaxModHalfOrder[32] = { 0xDF,0xE9,0x2F,0x46,0x68,0x1B,0x20,0xA0 }; -const unsigned char vchZero[0] = {}; + +#ifdef _MSC_VER +#define vchZeroSize 1 +#else +#define vchZeroSize 0 +#endif + +const unsigned char vchZero[vchZeroSize] = {}; @@ -270,7 +280,7 @@ bool CKey::Derive(CKey& keyChild, unsigned char ccChild[32], unsigned int nChild assert(begin() + 32 == end()); BIP32Hash(cc, nChild, 0, begin(), out); }; - + memcpy(ccChild, out+32, 32); bool ret = TweakSecret((unsigned char*)keyChild.begin(), begin(), out); UnlockObject(out); @@ -401,7 +411,7 @@ bool CExtPubKey::Derive(CExtPubKey &out, unsigned int nChild) const { out.nDepth = nDepth + 1; CKeyID id = pubkey.GetID(); - + memcpy(&out.vchFingerprint[0], &id, 4); out.nChild = nChild; return pubkey.Derive(out.pubkey, out.vchChainCode, nChild, vchChainCode); @@ -476,7 +486,7 @@ bool CExtKeyPair::Derive(CExtPubKey &out, unsigned int nChild) const }; if (!key.IsValid()) return false; - + out.nDepth = nDepth + 1; CKeyID id = pubkey.GetID(); memcpy(&out.vchFingerprint[0], &id, 4); @@ -484,7 +494,7 @@ bool CExtKeyPair::Derive(CExtPubKey &out, unsigned int nChild) const CKey tkey; if (!key.Derive(tkey, out.vchChainCode, nChild, vchChainCode)) return false; - + out.pubkey = tkey.GetPubKey(true); return true; }; @@ -493,7 +503,7 @@ bool CExtKeyPair::Derive(CKey &out, unsigned int nChild) const { if (!key.IsValid()) return false; - + unsigned char temp[32]; return key.Derive(out, temp, nChild, vchChainCode); }; @@ -507,7 +517,7 @@ bool CExtKeyPair::Derive(CPubKey &out, unsigned int nChild) const }; if (!key.IsValid()) return false; - + CKey tkey; if (!key.Derive(tkey, temp, nChild, vchChainCode)) return false; diff --git a/src/key.h b/src/key/key.h similarity index 97% rename from src/key.h rename to src/key/key.h index 294f734c49..0e27a2ab3f 100644 --- a/src/key.h +++ b/src/key/key.h @@ -1,16 +1,20 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2013 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + #ifndef BITCOIN_KEY_H #define BITCOIN_KEY_H #include -#include "allocators.h" +#include "support/allocators.h" #include "serialize.h" #include "uint256.h" -#include "hash.h" +#include "crypto/hash.h" // secp256k1: // const unsigned int PRIVATE_KEY_SIZE = 279; @@ -76,7 +80,7 @@ class CPubKey { CPubKey(const std::vector &vch) { Set(vch.begin(), vch.end()); } - + CPubKey(const unsigned char* p, const int len) { if (len <= 65) @@ -150,7 +154,7 @@ class CPubKey { bool IsCompressed() const { return size() == 33; } - + bool SetZero() { memset(&vch[0], 0, 65); @@ -173,7 +177,7 @@ class CPubKey { // Derive BIP32 child pubkey. bool Derive(CPubKey& pubkeyChild, unsigned char ccChild[32], unsigned int nChild, const unsigned char cc[32]) const; - + }; @@ -238,15 +242,15 @@ class CKey { fValid = false; } } - + void Clear() { memset(vch, 0, sizeof(vch)); fCompressed = true; fValid = false; }; - - + + void Set(const unsigned char *p, bool fCompressedIn) { if (Check(p)) { @@ -297,13 +301,13 @@ class CKey { // Derive BIP32 child key. bool Derive(CKey& keyChild, unsigned char ccChild[32], unsigned int nChild, const unsigned char cc[32]) const; - + /** * Verify thoroughly whether a private key and a public key match. * This is done using a different mechanism than just regenerating it. */ bool VerifyPubKey(const CPubKey& vchPubKey) const; - + // Load private key and check that public key matches. bool Load(CPrivKey &privkey, CPubKey &vchPubKey, bool fSkipCheck); @@ -314,13 +318,13 @@ class CKey { { return 33; } - + template void Serialize(Stream &s, int nType, int nVersion) const { s.write((char*)vch, 32); s.write((char*)&fValid, 1); } - + template void Unserialize(Stream &s, int nType, int nVersion) { fCompressed = true; @@ -340,9 +344,9 @@ struct CExtPubKey { return a.nDepth == b.nDepth && memcmp(&a.vchFingerprint[0], &b.vchFingerprint[0], 4) == 0 && a.nChild == b.nChild && memcmp(&a.vchChainCode[0], &b.vchChainCode[0], 32) == 0 && a.pubkey == b.pubkey; } - + bool IsValid() const { return pubkey.IsValid(); } - + CKeyID GetID() const { return pubkey.GetID(); } @@ -350,30 +354,30 @@ struct CExtPubKey { void Encode(unsigned char code[74]) const; void Decode(const unsigned char code[74]); bool Derive(CExtPubKey &out, unsigned int nChild) const; - - + + unsigned int GetSerializeSize(int nType, int nVersion) const { return 41 + pubkey.GetSerializeSize(nType, nVersion); } - + template void Serialize(Stream &s, int nType, int nVersion) const { s.write((char*)&nDepth, 1); s.write((char*)vchFingerprint, 4); s.write((char*)&nChild, 4); s.write((char*)vchChainCode, 32); - + pubkey.Serialize(s, nType, nVersion); } - + template void Unserialize(Stream &s, int nType, int nVersion) { s.read((char*)&nDepth, 1); s.read((char*)vchFingerprint, 4); s.read((char*)&nChild, 4); s.read((char*)vchChainCode, 32); - + pubkey.Unserialize(s, nType, nVersion); } }; @@ -389,7 +393,7 @@ struct CExtKey { return a.nDepth == b.nDepth && memcmp(&a.vchFingerprint[0], &b.vchFingerprint[0], 4) == 0 && a.nChild == b.nChild && memcmp(&a.vchChainCode[0], &b.vchChainCode[0], 32) == 0 && a.key == b.key; } - + bool IsValid() const { return key.IsValid(); } void Encode(unsigned char code[74]) const; @@ -398,32 +402,32 @@ struct CExtKey { CExtPubKey Neutered() const; void SetMaster(const unsigned char *seed, unsigned int nSeedLen); int SetKeyCode(const unsigned char *pkey, const unsigned char *pcode); - + unsigned int GetSerializeSize(int nType, int nVersion) const { return 42 + (key.IsValid() ? 32 : 0); } - + template void Serialize(Stream &s, int nType, int nVersion) const { s.write((char*)&nDepth, 1); s.write((char*)vchFingerprint, 4); s.write((char*)&nChild, 4); s.write((char*)vchChainCode, 32); - + char fValid = key.IsValid(); s.write((char*)&fValid, 1); if (fValid) s.write((char*)key.begin(), 32); } - + template void Unserialize(Stream &s, int nType, int nVersion) { s.read((char*)&nDepth, 1); s.read((char*)vchFingerprint, 4); s.read((char*)&nChild, 4); s.read((char*)vchChainCode, 32); - + char tmp[33]; s.read((char*)tmp, 1); // key.IsValid() if (tmp[0]) @@ -444,7 +448,7 @@ class CExtKeyPair unsigned char vchChainCode[32]; CKey key; CPubKey pubkey; - + CExtKeyPair() {}; CExtKeyPair(CExtKey &vk) { @@ -455,8 +459,8 @@ class CExtKeyPair key = vk.key; pubkey = key.GetPubKey(); }; - - + + CExtKey GetExtKey() const { CExtKey vk; @@ -467,69 +471,69 @@ class CExtKeyPair vk.key = key; return vk; }; - + CKeyID GetID() const { return pubkey.GetID(); } - - + + bool operator <(const CExtKeyPair& y) const { return pubkey < y.pubkey; }; - + friend bool operator==(const CExtKeyPair &a, const CExtKeyPair &b) { return a.nDepth == b.nDepth && memcmp(&a.vchFingerprint[0], &b.vchFingerprint[0], 4) == 0 && a.nChild == b.nChild && memcmp(&a.vchChainCode[0], &b.vchChainCode[0], 32) == 0 && a.key == b.key && a.pubkey == b.pubkey ; } - + bool IsValidV() const { return key.IsValid(); } bool IsValidP() const { return pubkey.IsValid(); } void EncodeV(unsigned char code[74]) const; void DecodeV(const unsigned char code[74]); - + void EncodeP(unsigned char code[74]) const; void DecodeP(const unsigned char code[74]); - + bool Derive(CExtKey &out, unsigned int nChild) const; bool Derive(CExtPubKey &out, unsigned int nChild) const; bool Derive(CKey &out, unsigned int nChild) const; bool Derive(CPubKey &out, unsigned int nChild) const; - + CExtPubKey GetExtPubKey() const; CExtKeyPair Neutered() const; void SetMaster(const unsigned char *seed, unsigned int nSeedLen); int SetKeyCode(const unsigned char *pkey, const unsigned char *pcode); - + unsigned int GetSerializeSize(int nType, int nVersion) const { return 42 + (key.IsValid() ? 32 : 0) + pubkey.GetSerializeSize(nType, nVersion); } - + template void Serialize(Stream &s, int nType, int nVersion) const { s.write((char*)&nDepth, 1); s.write((char*)vchFingerprint, 4); s.write((char*)&nChild, 4); s.write((char*)vchChainCode, 32); - + char fValid = key.IsValid(); s.write((char*)&fValid, 1); if (fValid) s.write((char*)key.begin(), 32); - + pubkey.Serialize(s, nType, nVersion); } - + template void Unserialize(Stream &s, int nType, int nVersion) { s.read((char*)&nDepth, 1); s.read((char*)vchFingerprint, 4); s.read((char*)&nChild, 4); s.read((char*)vchChainCode, 32); - + char tmp[33]; s.read((char*)tmp, 1); // key.IsValid() if (tmp[0]) diff --git a/src/keystore.cpp b/src/key/keystore.cpp similarity index 77% rename from src/keystore.cpp rename to src/key/keystore.cpp index 8fea421989..c404795474 100644 --- a/src/keystore.cpp +++ b/src/key/keystore.cpp @@ -1,10 +1,13 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "keystore.h" -#include "script.h" +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + +#include "key/keystore.h" +#include "script/script.h" bool CKeyStore::GetPubKey(const CKeyID &address, CPubKey &vchPubKeyOut) const { diff --git a/src/keystore.h b/src/key/keystore.h similarity index 87% rename from src/keystore.h rename to src/key/keystore.h index 57955dd647..f6a20cd126 100644 --- a/src/keystore.h +++ b/src/key/keystore.h @@ -1,13 +1,20 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + #ifndef BITCOIN_KEYSTORE_H #define BITCOIN_KEYSTORE_H -#include "key.h" -#include "sync.h" +#include "key/key.h" +#include "util/sync.h" + +#ifndef Q_MOC_RUN #include +#endif class CScript; class CScriptID; diff --git a/src/leveldb/.gitignore b/src/leveldb/.gitignore deleted file mode 100644 index 71d87a4eeb..0000000000 --- a/src/leveldb/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -build_config.mk -*.a -*.o -*.dylib* -*.so -*.so.* -*_test -db_bench -leveldbutil -Release -Debug -Benchmark -vs2010.* diff --git a/src/leveldb/AUTHORS b/src/leveldb/AUTHORS deleted file mode 100644 index 2439d7a452..0000000000 --- a/src/leveldb/AUTHORS +++ /dev/null @@ -1,12 +0,0 @@ -# Names should be added to this file like so: -# Name or Organization - -Google Inc. - -# Initial version authors: -Jeffrey Dean -Sanjay Ghemawat - -# Partial list of contributors: -Kevin Regan -Johan Bilien diff --git a/src/leveldb/CONTRIBUTING.md b/src/leveldb/CONTRIBUTING.md deleted file mode 100644 index cd600ff46b..0000000000 --- a/src/leveldb/CONTRIBUTING.md +++ /dev/null @@ -1,36 +0,0 @@ -# Contributing - -We'd love to accept your code patches! However, before we can take them, we -have to jump a couple of legal hurdles. - -## Contributor License Agreements - -Please fill out either the individual or corporate Contributor License -Agreement as appropriate. - -* If you are an individual writing original source code and you're sure you -own the intellectual property, then sign an [individual CLA](https://developers.google.com/open-source/cla/individual). -* If you work for a company that wants to allow you to contribute your work, -then sign a [corporate CLA](https://developers.google.com/open-source/cla/corporate). - -Follow either of the two links above to access the appropriate CLA and -instructions for how to sign and return it. - -## Submitting a Patch - -1. Sign the contributors license agreement above. -2. Decide which code you want to submit. A submission should be a set of changes -that addresses one issue in the [issue tracker](https://github.com/google/leveldb/issues). -Please don't mix more than one logical change per submission, because it makes -the history hard to follow. If you want to make a change -(e.g. add a sample or feature) that doesn't have a corresponding issue in the -issue tracker, please create one. -3. **Submitting**: When you are ready to submit, send us a Pull Request. Be -sure to include the issue number you fixed and the name you used to sign -the CLA. - -## Writing Code ## - -If your contribution contains code, please make sure that it follows -[the style guide](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml). -Otherwise we will have to ask you to make changes, and that's no fun for anyone. diff --git a/src/leveldb/LICENSE b/src/leveldb/LICENSE deleted file mode 100644 index 8e80208cd7..0000000000 --- a/src/leveldb/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2011 The LevelDB Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/leveldb/Makefile b/src/leveldb/Makefile deleted file mode 100644 index 2bd2cadcdd..0000000000 --- a/src/leveldb/Makefile +++ /dev/null @@ -1,227 +0,0 @@ -# Copyright (c) 2011 The LevelDB Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. See the AUTHORS file for names of contributors. - -#----------------------------------------------- -# Uncomment exactly one of the lines labelled (A), (B), and (C) below -# to switch between compilation modes. - -# (A) Production use (optimized mode) -OPT ?= -O2 -DNDEBUG -# (B) Debug mode, w/ full line-level debugging symbols -# OPT ?= -g2 -# (C) Profiling mode: opt, but w/debugging symbols -# OPT ?= -O2 -g2 -DNDEBUG -#----------------------------------------------- - -# detect what platform we're building on -$(shell CC="$(CC)" CXX="$(CXX)" TARGET_OS="$(TARGET_OS)" \ - ./build_detect_platform build_config.mk ./) -# this file is generated by the previous line to set build flags and sources -include build_config.mk - -CFLAGS += -I. -I./include $(PLATFORM_CCFLAGS) $(OPT) -CXXFLAGS += -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) - -LDFLAGS += $(PLATFORM_LDFLAGS) -LIBS += $(PLATFORM_LIBS) - -LIBOBJECTS = $(SOURCES:.cc=.o) -MEMENVOBJECTS = $(MEMENV_SOURCES:.cc=.o) - -TESTUTIL = ./util/testutil.o -TESTHARNESS = ./util/testharness.o $(TESTUTIL) - -# Note: iOS should probably be using libtool, not ar. -ifeq ($(PLATFORM), IOS) -AR=xcrun ar -endif - -TESTS = \ - arena_test \ - autocompact_test \ - bloom_test \ - c_test \ - cache_test \ - coding_test \ - corruption_test \ - crc32c_test \ - db_test \ - dbformat_test \ - env_test \ - filename_test \ - filter_block_test \ - hash_test \ - issue178_test \ - issue200_test \ - log_test \ - memenv_test \ - skiplist_test \ - table_test \ - version_edit_test \ - version_set_test \ - write_batch_test - -PROGRAMS = db_bench leveldbutil $(TESTS) -BENCHMARKS = db_bench_sqlite3 db_bench_tree_db - -LIBRARY = libleveldb.a -MEMENVLIBRARY = libmemenv.a - -default: all - -# Should we build shared libraries? -ifneq ($(PLATFORM_SHARED_EXT),) - -ifneq ($(PLATFORM_SHARED_VERSIONED),true) -SHARED1 = libleveldb.$(PLATFORM_SHARED_EXT) -SHARED2 = $(SHARED1) -SHARED3 = $(SHARED1) -SHARED = $(SHARED1) -else -# Update db.h if you change these. -SHARED_MAJOR = 1 -SHARED_MINOR = 18 -SHARED1 = libleveldb.$(PLATFORM_SHARED_EXT) -SHARED2 = $(SHARED1).$(SHARED_MAJOR) -SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR) -SHARED = $(SHARED1) $(SHARED2) $(SHARED3) -$(SHARED1): $(SHARED3) - ln -fs $(SHARED3) $(SHARED1) -$(SHARED2): $(SHARED3) - ln -fs $(SHARED3) $(SHARED2) -endif - -$(SHARED3): - $(CXX) $(LDFLAGS) $(PLATFORM_SHARED_LDFLAGS)$(SHARED2) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(SOURCES) -o $(SHARED3) $(LIBS) - -endif # PLATFORM_SHARED_EXT - -all: $(SHARED) $(LIBRARY) - -check: all $(PROGRAMS) $(TESTS) - for t in $(TESTS); do echo "***** Running $$t"; ./$$t || exit 1; done - -clean: - -rm -f $(PROGRAMS) $(BENCHMARKS) $(LIBRARY) $(SHARED) $(MEMENVLIBRARY) */*.o */*/*.o ios-x86/*/*.o ios-arm/*/*.o build_config.mk - -rm -rf ios-x86/* ios-arm/* - -$(LIBRARY): $(LIBOBJECTS) - rm -f $@ - $(AR) -rs $@ $(LIBOBJECTS) - -db_bench: db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) - $(CXX) $(LDFLAGS) db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) -o $@ $(LIBS) - -db_bench_sqlite3: doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL) - $(CXX) $(LDFLAGS) doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL) -o $@ -lsqlite3 $(LIBS) - -db_bench_tree_db: doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL) - $(CXX) $(LDFLAGS) doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL) -o $@ -lkyotocabinet $(LIBS) - -leveldbutil: db/leveldb_main.o $(LIBOBJECTS) - $(CXX) $(LDFLAGS) db/leveldb_main.o $(LIBOBJECTS) -o $@ $(LIBS) - -arena_test: util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -autocompact_test: db/autocompact_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) db/autocompact_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) db/c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -cache_test: util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -coding_test: util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -crc32c_test: util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -db_test: db/db_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) db/db_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -env_test: util/env_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) util/env_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -filter_block_test: table/filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) table/filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -hash_test: util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -issue178_test: issues/issue178_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) issues/issue178_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -issue200_test: issues/issue200_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) issues/issue200_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -table_test: table/table_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) table/table_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -skiplist_test: db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS) - $(CXX) $(LDFLAGS) db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) - -$(MEMENVLIBRARY) : $(MEMENVOBJECTS) - rm -f $@ - $(AR) -rs $@ $(MEMENVOBJECTS) - -memenv_test : helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS) - $(CXX) $(LDFLAGS) helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS) -o $@ $(LIBS) - -ifeq ($(PLATFORM), IOS) -# For iOS, create universal object files to be used on both the simulator and -# a device. -PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms -SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer -DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer -IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString) -IOSARCH=-arch armv6 -arch armv7 -arch armv7s -arch arm64 - -.cc.o: - mkdir -p ios-x86/$(dir $@) - xcrun -sdk iphonesimulator $(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@ - mkdir -p ios-arm/$(dir $@) - xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk $(IOSARCH) -c $< -o ios-arm/$@ - xcrun lipo ios-x86/$@ ios-arm/$@ -create -output $@ - -.c.o: - mkdir -p ios-x86/$(dir $@) - xcrun -sdk iphonesimulator $(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@ - mkdir -p ios-arm/$(dir $@) - xcrun -sdk iphoneos $(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk $(IOSARCH) -c $< -o ios-arm/$@ - xcrun lipo ios-x86/$@ ios-arm/$@ -create -output $@ - -else -.cc.o: - $(CXX) $(CXXFLAGS) -c $< -o $@ - -.c.o: - $(CC) $(CFLAGS) -c $< -o $@ -endif diff --git a/src/leveldb/NEWS b/src/leveldb/NEWS deleted file mode 100644 index 3fd99242d7..0000000000 --- a/src/leveldb/NEWS +++ /dev/null @@ -1,17 +0,0 @@ -Release 1.2 2011-05-16 ----------------------- - -Fixes for larger databases (tested up to one billion 100-byte entries, -i.e., ~100GB). - -(1) Place hard limit on number of level-0 files. This fixes errors -of the form "too many open files". - -(2) Fixed memtable management. Before the fix, a heavy write burst -could cause unbounded memory usage. - -A fix for a logging bug where the reader would incorrectly complain -about corruption. - -Allow public access to WriteBatch contents so that users can easily -wrap a DB. diff --git a/src/leveldb/README b/src/leveldb/README deleted file mode 100644 index 3618adeeed..0000000000 --- a/src/leveldb/README +++ /dev/null @@ -1,51 +0,0 @@ -leveldb: A key-value store -Authors: Sanjay Ghemawat (sanjay@google.com) and Jeff Dean (jeff@google.com) - -The code under this directory implements a system for maintaining a -persistent key/value store. - -See doc/index.html for more explanation. -See doc/impl.html for a brief overview of the implementation. - -The public interface is in include/*.h. Callers should not include or -rely on the details of any other header files in this package. Those -internal APIs may be changed without warning. - -Guide to header files: - -include/db.h - Main interface to the DB: Start here - -include/options.h - Control over the behavior of an entire database, and also - control over the behavior of individual reads and writes. - -include/comparator.h - Abstraction for user-specified comparison function. If you want - just bytewise comparison of keys, you can use the default comparator, - but clients can write their own comparator implementations if they - want custom ordering (e.g. to handle different character - encodings, etc.) - -include/iterator.h - Interface for iterating over data. You can get an iterator - from a DB object. - -include/write_batch.h - Interface for atomically applying multiple updates to a database. - -include/slice.h - A simple module for maintaining a pointer and a length into some - other byte array. - -include/status.h - Status is returned from many of the public interfaces and is used - to report success and various kinds of errors. - -include/env.h - Abstraction of the OS environment. A posix implementation of - this interface is in util/env_posix.cc - -include/table.h -include/table_builder.h - Lower-level modules that most clients probably won't use directly diff --git a/src/leveldb/README.md b/src/leveldb/README.md deleted file mode 100644 index 480affb5ca..0000000000 --- a/src/leveldb/README.md +++ /dev/null @@ -1,138 +0,0 @@ -**LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values.** - -Authors: Sanjay Ghemawat (sanjay@google.com) and Jeff Dean (jeff@google.com) - -# Features - * Keys and values are arbitrary byte arrays. - * Data is stored sorted by key. - * Callers can provide a custom comparison function to override the sort order. - * The basic operations are `Put(key,value)`, `Get(key)`, `Delete(key)`. - * Multiple changes can be made in one atomic batch. - * Users can create a transient snapshot to get a consistent view of data. - * Forward and backward iteration is supported over the data. - * Data is automatically compressed using the [Snappy compression library](http://code.google.com/p/snappy). - * External activity (file system operations etc.) is relayed through a virtual interface so users can customize the operating system interactions. - * [Detailed documentation](http://htmlpreview.github.io/?https://github.com/google/leveldb/blob/master/doc/index.html) about how to use the library is included with the source code. - - -# Limitations - * This is not a SQL database. It does not have a relational data model, it does not support SQL queries, and it has no support for indexes. - * Only a single process (possibly multi-threaded) can access a particular database at a time. - * There is no client-server support builtin to the library. An application that needs such support will have to wrap their own server around the library. - -# Performance - -Here is a performance report (with explanations) from the run of the -included db_bench program. The results are somewhat noisy, but should -be enough to get a ballpark performance estimate. - -## Setup - -We use a database with a million entries. Each entry has a 16 byte -key, and a 100 byte value. Values used by the benchmark compress to -about half their original size. - - LevelDB: version 1.1 - Date: Sun May 1 12:11:26 2011 - CPU: 4 x Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz - CPUCache: 4096 KB - Keys: 16 bytes each - Values: 100 bytes each (50 bytes after compression) - Entries: 1000000 - Raw Size: 110.6 MB (estimated) - File Size: 62.9 MB (estimated) - -## Write performance - -The "fill" benchmarks create a brand new database, in either -sequential, or random order. The "fillsync" benchmark flushes data -from the operating system to the disk after every operation; the other -write operations leave the data sitting in the operating system buffer -cache for a while. The "overwrite" benchmark does random writes that -update existing keys in the database. - - fillseq : 1.765 micros/op; 62.7 MB/s - fillsync : 268.409 micros/op; 0.4 MB/s (10000 ops) - fillrandom : 2.460 micros/op; 45.0 MB/s - overwrite : 2.380 micros/op; 46.5 MB/s - -Each "op" above corresponds to a write of a single key/value pair. -I.e., a random write benchmark goes at approximately 400,000 writes per second. - -Each "fillsync" operation costs much less (0.3 millisecond) -than a disk seek (typically 10 milliseconds). We suspect that this is -because the hard disk itself is buffering the update in its memory and -responding before the data has been written to the platter. This may -or may not be safe based on whether or not the hard disk has enough -power to save its memory in the event of a power failure. - -## Read performance - -We list the performance of reading sequentially in both the forward -and reverse direction, and also the performance of a random lookup. -Note that the database created by the benchmark is quite small. -Therefore the report characterizes the performance of leveldb when the -working set fits in memory. The cost of reading a piece of data that -is not present in the operating system buffer cache will be dominated -by the one or two disk seeks needed to fetch the data from disk. -Write performance will be mostly unaffected by whether or not the -working set fits in memory. - - readrandom : 16.677 micros/op; (approximately 60,000 reads per second) - readseq : 0.476 micros/op; 232.3 MB/s - readreverse : 0.724 micros/op; 152.9 MB/s - -LevelDB compacts its underlying storage data in the background to -improve read performance. The results listed above were done -immediately after a lot of random writes. The results after -compactions (which are usually triggered automatically) are better. - - readrandom : 11.602 micros/op; (approximately 85,000 reads per second) - readseq : 0.423 micros/op; 261.8 MB/s - readreverse : 0.663 micros/op; 166.9 MB/s - -Some of the high cost of reads comes from repeated decompression of blocks -read from disk. If we supply enough cache to the leveldb so it can hold the -uncompressed blocks in memory, the read performance improves again: - - readrandom : 9.775 micros/op; (approximately 100,000 reads per second before compaction) - readrandom : 5.215 micros/op; (approximately 190,000 reads per second after compaction) - -## Repository contents - -See doc/index.html for more explanation. See doc/impl.html for a brief overview of the implementation. - -The public interface is in include/*.h. Callers should not include or -rely on the details of any other header files in this package. Those -internal APIs may be changed without warning. - -Guide to header files: - -* **include/db.h**: Main interface to the DB: Start here - -* **include/options.h**: Control over the behavior of an entire database, -and also control over the behavior of individual reads and writes. - -* **include/comparator.h**: Abstraction for user-specified comparison function. -If you want just bytewise comparison of keys, you can use the default -comparator, but clients can write their own comparator implementations if they -want custom ordering (e.g. to handle different character encodings, etc.) - -* **include/iterator.h**: Interface for iterating over data. You can get -an iterator from a DB object. - -* **include/write_batch.h**: Interface for atomically applying multiple -updates to a database. - -* **include/slice.h**: A simple module for maintaining a pointer and a -length into some other byte array. - -* **include/status.h**: Status is returned from many of the public interfaces -and is used to report success and various kinds of errors. - -* **include/env.h**: -Abstraction of the OS environment. A posix implementation of this interface is -in util/env_posix.cc - -* **include/table.h, include/table_builder.h**: Lower-level modules that most -clients probably won't use directly diff --git a/src/leveldb/TODO b/src/leveldb/TODO deleted file mode 100644 index e603c07137..0000000000 --- a/src/leveldb/TODO +++ /dev/null @@ -1,14 +0,0 @@ -ss -- Stats - -db -- Maybe implement DB::BulkDeleteForRange(start_key, end_key) - that would blow away files whose ranges are entirely contained - within [start_key..end_key]? For Chrome, deletion of obsolete - object stores, etc. can be done in the background anyway, so - probably not that important. -- There have been requests for MultiGet. - -After a range is completely deleted, what gets rid of the -corresponding files if we do no future changes to that range. Make -the conditions for triggering compactions fire in more situations? diff --git a/src/leveldb/WINDOWS.md b/src/leveldb/WINDOWS.md deleted file mode 100644 index 5b76c2448f..0000000000 --- a/src/leveldb/WINDOWS.md +++ /dev/null @@ -1,39 +0,0 @@ -# Building LevelDB On Windows - -## Prereqs - -Install the [Windows Software Development Kit version 7.1](http://www.microsoft.com/downloads/dlx/en-us/listdetailsview.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b). - -Download and extract the [Snappy source distribution](http://snappy.googlecode.com/files/snappy-1.0.5.tar.gz) - -1. Open the "Windows SDK 7.1 Command Prompt" : - Start Menu -> "Microsoft Windows SDK v7.1" > "Windows SDK 7.1 Command Prompt" -2. Change the directory to the leveldb project - -## Building the Static lib - -* 32 bit Version - - setenv /x86 - msbuild.exe /p:Configuration=Release /p:Platform=Win32 /p:Snappy=..\snappy-1.0.5 - -* 64 bit Version - - setenv /x64 - msbuild.exe /p:Configuration=Release /p:Platform=x64 /p:Snappy=..\snappy-1.0.5 - - -## Building and Running the Benchmark app - -* 32 bit Version - - setenv /x86 - msbuild.exe /p:Configuration=Benchmark /p:Platform=Win32 /p:Snappy=..\snappy-1.0.5 - Benchmark\leveldb.exe - -* 64 bit Version - - setenv /x64 - msbuild.exe /p:Configuration=Benchmark /p:Platform=x64 /p:Snappy=..\snappy-1.0.5 - x64\Benchmark\leveldb.exe - diff --git a/src/leveldb/build_detect_platform b/src/leveldb/build_detect_platform deleted file mode 100755 index a1101c1bda..0000000000 --- a/src/leveldb/build_detect_platform +++ /dev/null @@ -1,231 +0,0 @@ -#!/bin/sh -# -# Detects OS we're compiling on and outputs a file specified by the first -# argument, which in turn gets read while processing Makefile. -# -# The output will set the following variables: -# CC C Compiler path -# CXX C++ Compiler path -# PLATFORM_LDFLAGS Linker flags -# PLATFORM_LIBS Libraries flags -# PLATFORM_SHARED_EXT Extension for shared libraries -# PLATFORM_SHARED_LDFLAGS Flags for building shared library -# This flag is embedded just before the name -# of the shared library without intervening spaces -# PLATFORM_SHARED_CFLAGS Flags for compiling objects for shared library -# PLATFORM_CCFLAGS C compiler flags -# PLATFORM_CXXFLAGS C++ compiler flags. Will contain: -# PLATFORM_SHARED_VERSIONED Set to 'true' if platform supports versioned -# shared libraries, empty otherwise. -# -# The PLATFORM_CCFLAGS and PLATFORM_CXXFLAGS might include the following: -# -# -DLEVELDB_ATOMIC_PRESENT if is present -# -DLEVELDB_PLATFORM_POSIX for Posix-based platforms -# -DSNAPPY if the Snappy library is present -# - -OUTPUT=$1 -PREFIX=$2 -if test -z "$OUTPUT" || test -z "$PREFIX"; then - echo "usage: $0 " >&2 - exit 1 -fi - -# Delete existing output, if it exists -rm -f $OUTPUT -touch $OUTPUT - -if test -z "$CC"; then - CC=cc -fi - -if test -z "$CXX"; then - CXX=g++ -fi - -if test -z "$TMPDIR"; then - TMPDIR=/tmp -fi - -# Detect OS -if test -z "$TARGET_OS"; then - TARGET_OS=`uname -s` -fi - -COMMON_FLAGS= -CROSS_COMPILE= -PLATFORM_CCFLAGS= -PLATFORM_CXXFLAGS= -PLATFORM_LDFLAGS= -PLATFORM_LIBS= -PLATFORM_SHARED_EXT="so" -PLATFORM_SHARED_LDFLAGS="-shared -Wl,-soname -Wl," -PLATFORM_SHARED_CFLAGS="-fPIC" -PLATFORM_SHARED_VERSIONED=true - -MEMCMP_FLAG= -if [ "$CXX" = "g++" ]; then - # Use libc's memcmp instead of GCC's memcmp. This results in ~40% - # performance improvement on readrandom under gcc 4.4.3 on Linux/x86. - MEMCMP_FLAG="-fno-builtin-memcmp" -fi - -case "$TARGET_OS" in - CYGWIN_*) - PLATFORM=OS_LINUX - COMMON_FLAGS="$MEMCMP_FLAG -lpthread -DOS_LINUX -DCYGWIN" - PLATFORM_LDFLAGS="-lpthread" - PORT_FILE=port/port_posix.cc - ;; - Darwin) - PLATFORM=OS_MACOSX - COMMON_FLAGS="$MEMCMP_FLAG -DOS_MACOSX" - PLATFORM_SHARED_EXT=dylib - [ -z "$INSTALL_PATH" ] && INSTALL_PATH=`pwd` - PLATFORM_SHARED_LDFLAGS="-dynamiclib -install_name $INSTALL_PATH/" - PORT_FILE=port/port_posix.cc - ;; - Linux) - PLATFORM=OS_LINUX - COMMON_FLAGS="$MEMCMP_FLAG -pthread -DOS_LINUX" - PLATFORM_LDFLAGS="-pthread" - PORT_FILE=port/port_posix.cc - ;; - SunOS) - PLATFORM=OS_SOLARIS - COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_SOLARIS" - PLATFORM_LIBS="-lpthread -lrt" - PORT_FILE=port/port_posix.cc - ;; - FreeBSD) - PLATFORM=OS_FREEBSD - COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_FREEBSD" - PLATFORM_LIBS="-lpthread" - PORT_FILE=port/port_posix.cc - ;; - GNU/kFreeBSD) - PLATFORM=OS_KFREEBSD - COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_KFREEBSD" - PLATFORM_LIBS="-lpthread" - PORT_FILE=port/port_posix.cc - ;; - NetBSD) - PLATFORM=OS_NETBSD - COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_NETBSD" - PLATFORM_LIBS="-lpthread -lgcc_s" - PORT_FILE=port/port_posix.cc - ;; - OpenBSD) - PLATFORM=OS_OPENBSD - COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_OPENBSD" - PLATFORM_LDFLAGS="-pthread" - PORT_FILE=port/port_posix.cc - ;; - DragonFly) - PLATFORM=OS_DRAGONFLYBSD - COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_DRAGONFLYBSD" - PLATFORM_LIBS="-lpthread" - PORT_FILE=port/port_posix.cc - ;; - OS_ANDROID_CROSSCOMPILE) - PLATFORM=OS_ANDROID - COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_ANDROID -DLEVELDB_PLATFORM_POSIX" - PLATFORM_LDFLAGS="" # All pthread features are in the Android C library - PORT_FILE=port/port_posix.cc - CROSS_COMPILE=true - ;; - HP-UX) - PLATFORM=OS_HPUX - COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_HPUX" - PLATFORM_LDFLAGS="-pthread" - PORT_FILE=port/port_posix.cc - # man ld: +h internal_name - PLATFORM_SHARED_LDFLAGS="-shared -Wl,+h -Wl," - ;; - IOS) - PLATFORM=IOS - COMMON_FLAGS="$MEMCMP_FLAG -DOS_MACOSX" - [ -z "$INSTALL_PATH" ] && INSTALL_PATH=`pwd` - PORT_FILE=port/port_posix.cc - PLATFORM_SHARED_EXT= - PLATFORM_SHARED_LDFLAGS= - PLATFORM_SHARED_CFLAGS= - PLATFORM_SHARED_VERSIONED= - ;; - OS_WINDOWS_CROSSCOMPILE | NATIVE_WINDOWS) - PLATFORM=OS_WINDOWS - COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_WINDOWS -DLEVELDB_PLATFORM_WINDOWS -DWINVER=0x0500 -D__USE_MINGW_ANSI_STDIO=1" - PLATFORM_SOURCES="util/env_win.cc" - PLATFORM_LIBS="-lshlwapi" - PORT_FILE=port/port_win.cc - CROSS_COMPILE=true - ;; - *) - echo "Unknown platform!" >&2 - exit 1 -esac - -# We want to make a list of all cc files within util, db, table, and helpers -# except for the test and benchmark files. By default, find will output a list -# of all files matching either rule, so we need to append -print to make the -# prune take effect. -DIRS="$PREFIX/db $PREFIX/util $PREFIX/table" - -set -f # temporarily disable globbing so that our patterns aren't expanded -PRUNE_TEST="-name *test*.cc -prune" -PRUNE_BENCH="-name *_bench.cc -prune" -PRUNE_TOOL="-name leveldb_main.cc -prune" -PORTABLE_FILES=`find $DIRS $PRUNE_TEST -o $PRUNE_BENCH -o $PRUNE_TOOL -o -name '*.cc' -print | sort | sed "s,^$PREFIX/,," | tr "\n" " "` - -set +f # re-enable globbing - -# The sources consist of the portable files, plus the platform-specific port -# file. -echo "SOURCES=$PORTABLE_FILES $PORT_FILE" >> $OUTPUT -echo "MEMENV_SOURCES=helpers/memenv/memenv.cc" >> $OUTPUT - -if [ "$CROSS_COMPILE" = "true" ]; then - # Cross-compiling; do not try any compilation tests. - true -else - CXXOUTPUT="${TMPDIR}/leveldb_build_detect_platform-cxx.$$" - - # If -std=c++0x works, use as fallback for when memory barriers - # are not available. - $CXX $CXXFLAGS -std=c++0x -x c++ - -o $CXXOUTPUT 2>/dev/null < - int main() {} -EOF - if [ "$?" = 0 ]; then - COMMON_FLAGS="$COMMON_FLAGS -DLEVELDB_PLATFORM_POSIX -DLEVELDB_ATOMIC_PRESENT" - PLATFORM_CXXFLAGS="-std=c++0x" - else - COMMON_FLAGS="$COMMON_FLAGS -DLEVELDB_PLATFORM_POSIX" - fi - - # Test whether tcmalloc is available - $CXX $CXXFLAGS -x c++ - -o $CXXOUTPUT -ltcmalloc 2>/dev/null </dev/null -fi - -PLATFORM_CCFLAGS="$PLATFORM_CCFLAGS $COMMON_FLAGS" -PLATFORM_CXXFLAGS="$PLATFORM_CXXFLAGS $COMMON_FLAGS" - -echo "CC=$CC" >> $OUTPUT -echo "CXX=$CXX" >> $OUTPUT -echo "PLATFORM=$PLATFORM" >> $OUTPUT -echo "PLATFORM_LDFLAGS=$PLATFORM_LDFLAGS" >> $OUTPUT -echo "PLATFORM_LIBS=$PLATFORM_LIBS" >> $OUTPUT -echo "PLATFORM_CCFLAGS=$PLATFORM_CCFLAGS" >> $OUTPUT -echo "PLATFORM_CXXFLAGS=$PLATFORM_CXXFLAGS" >> $OUTPUT -echo "PLATFORM_SHARED_CFLAGS=$PLATFORM_SHARED_CFLAGS" >> $OUTPUT -echo "PLATFORM_SHARED_EXT=$PLATFORM_SHARED_EXT" >> $OUTPUT -echo "PLATFORM_SHARED_LDFLAGS=$PLATFORM_SHARED_LDFLAGS" >> $OUTPUT -echo "PLATFORM_SHARED_VERSIONED=$PLATFORM_SHARED_VERSIONED" >> $OUTPUT diff --git a/src/leveldb/db/autocompact_test.cc b/src/leveldb/db/autocompact_test.cc deleted file mode 100644 index d20a2362c3..0000000000 --- a/src/leveldb/db/autocompact_test.cc +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (c) 2013 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/db.h" -#include "db/db_impl.h" -#include "leveldb/cache.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -class AutoCompactTest { - public: - std::string dbname_; - Cache* tiny_cache_; - Options options_; - DB* db_; - - AutoCompactTest() { - dbname_ = test::TmpDir() + "/autocompact_test"; - tiny_cache_ = NewLRUCache(100); - options_.block_cache = tiny_cache_; - DestroyDB(dbname_, options_); - options_.create_if_missing = true; - options_.compression = kNoCompression; - ASSERT_OK(DB::Open(options_, dbname_, &db_)); - } - - ~AutoCompactTest() { - delete db_; - DestroyDB(dbname_, Options()); - delete tiny_cache_; - } - - std::string Key(int i) { - char buf[100]; - snprintf(buf, sizeof(buf), "key%06d", i); - return std::string(buf); - } - - uint64_t Size(const Slice& start, const Slice& limit) { - Range r(start, limit); - uint64_t size; - db_->GetApproximateSizes(&r, 1, &size); - return size; - } - - void DoReads(int n); -}; - -static const int kValueSize = 200 * 1024; -static const int kTotalSize = 100 * 1024 * 1024; -static const int kCount = kTotalSize / kValueSize; - -// Read through the first n keys repeatedly and check that they get -// compacted (verified by checking the size of the key space). -void AutoCompactTest::DoReads(int n) { - std::string value(kValueSize, 'x'); - DBImpl* dbi = reinterpret_cast(db_); - - // Fill database - for (int i = 0; i < kCount; i++) { - ASSERT_OK(db_->Put(WriteOptions(), Key(i), value)); - } - ASSERT_OK(dbi->TEST_CompactMemTable()); - - // Delete everything - for (int i = 0; i < kCount; i++) { - ASSERT_OK(db_->Delete(WriteOptions(), Key(i))); - } - ASSERT_OK(dbi->TEST_CompactMemTable()); - - // Get initial measurement of the space we will be reading. - const int64_t initial_size = Size(Key(0), Key(n)); - const int64_t initial_other_size = Size(Key(n), Key(kCount)); - - // Read until size drops significantly. - std::string limit_key = Key(n); - for (int read = 0; true; read++) { - ASSERT_LT(read, 100) << "Taking too long to compact"; - Iterator* iter = db_->NewIterator(ReadOptions()); - for (iter->SeekToFirst(); - iter->Valid() && iter->key().ToString() < limit_key; - iter->Next()) { - // Drop data - } - delete iter; - // Wait a little bit to allow any triggered compactions to complete. - Env::Default()->SleepForMicroseconds(1000000); - uint64_t size = Size(Key(0), Key(n)); - fprintf(stderr, "iter %3d => %7.3f MB [other %7.3f MB]\n", - read+1, size/1048576.0, Size(Key(n), Key(kCount))/1048576.0); - if (size <= initial_size/10) { - break; - } - } - - // Verify that the size of the key space not touched by the reads - // is pretty much unchanged. - const int64_t final_other_size = Size(Key(n), Key(kCount)); - ASSERT_LE(final_other_size, initial_other_size + 1048576); - ASSERT_GE(final_other_size, initial_other_size/5 - 1048576); -} - -TEST(AutoCompactTest, ReadAll) { - DoReads(kCount); -} - -TEST(AutoCompactTest, ReadHalf) { - DoReads(kCount/2); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/db/builder.cc b/src/leveldb/db/builder.cc deleted file mode 100644 index f419882197..0000000000 --- a/src/leveldb/db/builder.cc +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/builder.h" - -#include "db/filename.h" -#include "db/dbformat.h" -#include "db/table_cache.h" -#include "db/version_edit.h" -#include "leveldb/db.h" -#include "leveldb/env.h" -#include "leveldb/iterator.h" - -namespace leveldb { - -Status BuildTable(const std::string& dbname, - Env* env, - const Options& options, - TableCache* table_cache, - Iterator* iter, - FileMetaData* meta) { - Status s; - meta->file_size = 0; - iter->SeekToFirst(); - - std::string fname = TableFileName(dbname, meta->number); - if (iter->Valid()) { - WritableFile* file; - s = env->NewWritableFile(fname, &file); - if (!s.ok()) { - return s; - } - - TableBuilder* builder = new TableBuilder(options, file); - meta->smallest.DecodeFrom(iter->key()); - for (; iter->Valid(); iter->Next()) { - Slice key = iter->key(); - meta->largest.DecodeFrom(key); - builder->Add(key, iter->value()); - } - - // Finish and check for builder errors - if (s.ok()) { - s = builder->Finish(); - if (s.ok()) { - meta->file_size = builder->FileSize(); - assert(meta->file_size > 0); - } - } else { - builder->Abandon(); - } - delete builder; - - // Finish and check for file errors - if (s.ok()) { - s = file->Sync(); - } - if (s.ok()) { - s = file->Close(); - } - delete file; - file = NULL; - - if (s.ok()) { - // Verify that the table is usable - Iterator* it = table_cache->NewIterator(ReadOptions(), - meta->number, - meta->file_size); - s = it->status(); - delete it; - } - } - - // Check for input iterator errors - if (!iter->status().ok()) { - s = iter->status(); - } - - if (s.ok() && meta->file_size > 0) { - // Keep it - } else { - env->DeleteFile(fname); - } - return s; -} - -} // namespace leveldb diff --git a/src/leveldb/db/builder.h b/src/leveldb/db/builder.h deleted file mode 100644 index 62431fcf44..0000000000 --- a/src/leveldb/db/builder.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_BUILDER_H_ -#define STORAGE_LEVELDB_DB_BUILDER_H_ - -#include "leveldb/status.h" - -namespace leveldb { - -struct Options; -struct FileMetaData; - -class Env; -class Iterator; -class TableCache; -class VersionEdit; - -// Build a Table file from the contents of *iter. The generated file -// will be named according to meta->number. On success, the rest of -// *meta will be filled with metadata about the generated table. -// If no data is present in *iter, meta->file_size will be set to -// zero, and no Table file will be produced. -extern Status BuildTable(const std::string& dbname, - Env* env, - const Options& options, - TableCache* table_cache, - Iterator* iter, - FileMetaData* meta); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_BUILDER_H_ diff --git a/src/leveldb/db/c.cc b/src/leveldb/db/c.cc deleted file mode 100644 index 08ff0ad90a..0000000000 --- a/src/leveldb/db/c.cc +++ /dev/null @@ -1,595 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/c.h" - -#include -#include -#include "leveldb/cache.h" -#include "leveldb/comparator.h" -#include "leveldb/db.h" -#include "leveldb/env.h" -#include "leveldb/filter_policy.h" -#include "leveldb/iterator.h" -#include "leveldb/options.h" -#include "leveldb/status.h" -#include "leveldb/write_batch.h" - -using leveldb::Cache; -using leveldb::Comparator; -using leveldb::CompressionType; -using leveldb::DB; -using leveldb::Env; -using leveldb::FileLock; -using leveldb::FilterPolicy; -using leveldb::Iterator; -using leveldb::kMajorVersion; -using leveldb::kMinorVersion; -using leveldb::Logger; -using leveldb::NewBloomFilterPolicy; -using leveldb::NewLRUCache; -using leveldb::Options; -using leveldb::RandomAccessFile; -using leveldb::Range; -using leveldb::ReadOptions; -using leveldb::SequentialFile; -using leveldb::Slice; -using leveldb::Snapshot; -using leveldb::Status; -using leveldb::WritableFile; -using leveldb::WriteBatch; -using leveldb::WriteOptions; - -extern "C" { - -struct leveldb_t { DB* rep; }; -struct leveldb_iterator_t { Iterator* rep; }; -struct leveldb_writebatch_t { WriteBatch rep; }; -struct leveldb_snapshot_t { const Snapshot* rep; }; -struct leveldb_readoptions_t { ReadOptions rep; }; -struct leveldb_writeoptions_t { WriteOptions rep; }; -struct leveldb_options_t { Options rep; }; -struct leveldb_cache_t { Cache* rep; }; -struct leveldb_seqfile_t { SequentialFile* rep; }; -struct leveldb_randomfile_t { RandomAccessFile* rep; }; -struct leveldb_writablefile_t { WritableFile* rep; }; -struct leveldb_logger_t { Logger* rep; }; -struct leveldb_filelock_t { FileLock* rep; }; - -struct leveldb_comparator_t : public Comparator { - void* state_; - void (*destructor_)(void*); - int (*compare_)( - void*, - const char* a, size_t alen, - const char* b, size_t blen); - const char* (*name_)(void*); - - virtual ~leveldb_comparator_t() { - (*destructor_)(state_); - } - - virtual int Compare(const Slice& a, const Slice& b) const { - return (*compare_)(state_, a.data(), a.size(), b.data(), b.size()); - } - - virtual const char* Name() const { - return (*name_)(state_); - } - - // No-ops since the C binding does not support key shortening methods. - virtual void FindShortestSeparator(std::string*, const Slice&) const { } - virtual void FindShortSuccessor(std::string* key) const { } -}; - -struct leveldb_filterpolicy_t : public FilterPolicy { - void* state_; - void (*destructor_)(void*); - const char* (*name_)(void*); - char* (*create_)( - void*, - const char* const* key_array, const size_t* key_length_array, - int num_keys, - size_t* filter_length); - unsigned char (*key_match_)( - void*, - const char* key, size_t length, - const char* filter, size_t filter_length); - - virtual ~leveldb_filterpolicy_t() { - (*destructor_)(state_); - } - - virtual const char* Name() const { - return (*name_)(state_); - } - - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const { - std::vector key_pointers(n); - std::vector key_sizes(n); - for (int i = 0; i < n; i++) { - key_pointers[i] = keys[i].data(); - key_sizes[i] = keys[i].size(); - } - size_t len; - char* filter = (*create_)(state_, &key_pointers[0], &key_sizes[0], n, &len); - dst->append(filter, len); - free(filter); - } - - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const { - return (*key_match_)(state_, key.data(), key.size(), - filter.data(), filter.size()); - } -}; - -struct leveldb_env_t { - Env* rep; - bool is_default; -}; - -static bool SaveError(char** errptr, const Status& s) { - assert(errptr != NULL); - if (s.ok()) { - return false; - } else if (*errptr == NULL) { - *errptr = strdup(s.ToString().c_str()); - } else { - // TODO(sanjay): Merge with existing error? - free(*errptr); - *errptr = strdup(s.ToString().c_str()); - } - return true; -} - -static char* CopyString(const std::string& str) { - char* result = reinterpret_cast(malloc(sizeof(char) * str.size())); - memcpy(result, str.data(), sizeof(char) * str.size()); - return result; -} - -leveldb_t* leveldb_open( - const leveldb_options_t* options, - const char* name, - char** errptr) { - DB* db; - if (SaveError(errptr, DB::Open(options->rep, std::string(name), &db))) { - return NULL; - } - leveldb_t* result = new leveldb_t; - result->rep = db; - return result; -} - -void leveldb_close(leveldb_t* db) { - delete db->rep; - delete db; -} - -void leveldb_put( - leveldb_t* db, - const leveldb_writeoptions_t* options, - const char* key, size_t keylen, - const char* val, size_t vallen, - char** errptr) { - SaveError(errptr, - db->rep->Put(options->rep, Slice(key, keylen), Slice(val, vallen))); -} - -void leveldb_delete( - leveldb_t* db, - const leveldb_writeoptions_t* options, - const char* key, size_t keylen, - char** errptr) { - SaveError(errptr, db->rep->Delete(options->rep, Slice(key, keylen))); -} - - -void leveldb_write( - leveldb_t* db, - const leveldb_writeoptions_t* options, - leveldb_writebatch_t* batch, - char** errptr) { - SaveError(errptr, db->rep->Write(options->rep, &batch->rep)); -} - -char* leveldb_get( - leveldb_t* db, - const leveldb_readoptions_t* options, - const char* key, size_t keylen, - size_t* vallen, - char** errptr) { - char* result = NULL; - std::string tmp; - Status s = db->rep->Get(options->rep, Slice(key, keylen), &tmp); - if (s.ok()) { - *vallen = tmp.size(); - result = CopyString(tmp); - } else { - *vallen = 0; - if (!s.IsNotFound()) { - SaveError(errptr, s); - } - } - return result; -} - -leveldb_iterator_t* leveldb_create_iterator( - leveldb_t* db, - const leveldb_readoptions_t* options) { - leveldb_iterator_t* result = new leveldb_iterator_t; - result->rep = db->rep->NewIterator(options->rep); - return result; -} - -const leveldb_snapshot_t* leveldb_create_snapshot( - leveldb_t* db) { - leveldb_snapshot_t* result = new leveldb_snapshot_t; - result->rep = db->rep->GetSnapshot(); - return result; -} - -void leveldb_release_snapshot( - leveldb_t* db, - const leveldb_snapshot_t* snapshot) { - db->rep->ReleaseSnapshot(snapshot->rep); - delete snapshot; -} - -char* leveldb_property_value( - leveldb_t* db, - const char* propname) { - std::string tmp; - if (db->rep->GetProperty(Slice(propname), &tmp)) { - // We use strdup() since we expect human readable output. - return strdup(tmp.c_str()); - } else { - return NULL; - } -} - -void leveldb_approximate_sizes( - leveldb_t* db, - int num_ranges, - const char* const* range_start_key, const size_t* range_start_key_len, - const char* const* range_limit_key, const size_t* range_limit_key_len, - uint64_t* sizes) { - Range* ranges = new Range[num_ranges]; - for (int i = 0; i < num_ranges; i++) { - ranges[i].start = Slice(range_start_key[i], range_start_key_len[i]); - ranges[i].limit = Slice(range_limit_key[i], range_limit_key_len[i]); - } - db->rep->GetApproximateSizes(ranges, num_ranges, sizes); - delete[] ranges; -} - -void leveldb_compact_range( - leveldb_t* db, - const char* start_key, size_t start_key_len, - const char* limit_key, size_t limit_key_len) { - Slice a, b; - db->rep->CompactRange( - // Pass NULL Slice if corresponding "const char*" is NULL - (start_key ? (a = Slice(start_key, start_key_len), &a) : NULL), - (limit_key ? (b = Slice(limit_key, limit_key_len), &b) : NULL)); -} - -void leveldb_destroy_db( - const leveldb_options_t* options, - const char* name, - char** errptr) { - SaveError(errptr, DestroyDB(name, options->rep)); -} - -void leveldb_repair_db( - const leveldb_options_t* options, - const char* name, - char** errptr) { - SaveError(errptr, RepairDB(name, options->rep)); -} - -void leveldb_iter_destroy(leveldb_iterator_t* iter) { - delete iter->rep; - delete iter; -} - -unsigned char leveldb_iter_valid(const leveldb_iterator_t* iter) { - return iter->rep->Valid(); -} - -void leveldb_iter_seek_to_first(leveldb_iterator_t* iter) { - iter->rep->SeekToFirst(); -} - -void leveldb_iter_seek_to_last(leveldb_iterator_t* iter) { - iter->rep->SeekToLast(); -} - -void leveldb_iter_seek(leveldb_iterator_t* iter, const char* k, size_t klen) { - iter->rep->Seek(Slice(k, klen)); -} - -void leveldb_iter_next(leveldb_iterator_t* iter) { - iter->rep->Next(); -} - -void leveldb_iter_prev(leveldb_iterator_t* iter) { - iter->rep->Prev(); -} - -const char* leveldb_iter_key(const leveldb_iterator_t* iter, size_t* klen) { - Slice s = iter->rep->key(); - *klen = s.size(); - return s.data(); -} - -const char* leveldb_iter_value(const leveldb_iterator_t* iter, size_t* vlen) { - Slice s = iter->rep->value(); - *vlen = s.size(); - return s.data(); -} - -void leveldb_iter_get_error(const leveldb_iterator_t* iter, char** errptr) { - SaveError(errptr, iter->rep->status()); -} - -leveldb_writebatch_t* leveldb_writebatch_create() { - return new leveldb_writebatch_t; -} - -void leveldb_writebatch_destroy(leveldb_writebatch_t* b) { - delete b; -} - -void leveldb_writebatch_clear(leveldb_writebatch_t* b) { - b->rep.Clear(); -} - -void leveldb_writebatch_put( - leveldb_writebatch_t* b, - const char* key, size_t klen, - const char* val, size_t vlen) { - b->rep.Put(Slice(key, klen), Slice(val, vlen)); -} - -void leveldb_writebatch_delete( - leveldb_writebatch_t* b, - const char* key, size_t klen) { - b->rep.Delete(Slice(key, klen)); -} - -void leveldb_writebatch_iterate( - leveldb_writebatch_t* b, - void* state, - void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen), - void (*deleted)(void*, const char* k, size_t klen)) { - class H : public WriteBatch::Handler { - public: - void* state_; - void (*put_)(void*, const char* k, size_t klen, const char* v, size_t vlen); - void (*deleted_)(void*, const char* k, size_t klen); - virtual void Put(const Slice& key, const Slice& value) { - (*put_)(state_, key.data(), key.size(), value.data(), value.size()); - } - virtual void Delete(const Slice& key) { - (*deleted_)(state_, key.data(), key.size()); - } - }; - H handler; - handler.state_ = state; - handler.put_ = put; - handler.deleted_ = deleted; - b->rep.Iterate(&handler); -} - -leveldb_options_t* leveldb_options_create() { - return new leveldb_options_t; -} - -void leveldb_options_destroy(leveldb_options_t* options) { - delete options; -} - -void leveldb_options_set_comparator( - leveldb_options_t* opt, - leveldb_comparator_t* cmp) { - opt->rep.comparator = cmp; -} - -void leveldb_options_set_filter_policy( - leveldb_options_t* opt, - leveldb_filterpolicy_t* policy) { - opt->rep.filter_policy = policy; -} - -void leveldb_options_set_create_if_missing( - leveldb_options_t* opt, unsigned char v) { - opt->rep.create_if_missing = v; -} - -void leveldb_options_set_error_if_exists( - leveldb_options_t* opt, unsigned char v) { - opt->rep.error_if_exists = v; -} - -void leveldb_options_set_paranoid_checks( - leveldb_options_t* opt, unsigned char v) { - opt->rep.paranoid_checks = v; -} - -void leveldb_options_set_env(leveldb_options_t* opt, leveldb_env_t* env) { - opt->rep.env = (env ? env->rep : NULL); -} - -void leveldb_options_set_info_log(leveldb_options_t* opt, leveldb_logger_t* l) { - opt->rep.info_log = (l ? l->rep : NULL); -} - -void leveldb_options_set_write_buffer_size(leveldb_options_t* opt, size_t s) { - opt->rep.write_buffer_size = s; -} - -void leveldb_options_set_max_open_files(leveldb_options_t* opt, int n) { - opt->rep.max_open_files = n; -} - -void leveldb_options_set_cache(leveldb_options_t* opt, leveldb_cache_t* c) { - opt->rep.block_cache = c->rep; -} - -void leveldb_options_set_block_size(leveldb_options_t* opt, size_t s) { - opt->rep.block_size = s; -} - -void leveldb_options_set_block_restart_interval(leveldb_options_t* opt, int n) { - opt->rep.block_restart_interval = n; -} - -void leveldb_options_set_compression(leveldb_options_t* opt, int t) { - opt->rep.compression = static_cast(t); -} - -leveldb_comparator_t* leveldb_comparator_create( - void* state, - void (*destructor)(void*), - int (*compare)( - void*, - const char* a, size_t alen, - const char* b, size_t blen), - const char* (*name)(void*)) { - leveldb_comparator_t* result = new leveldb_comparator_t; - result->state_ = state; - result->destructor_ = destructor; - result->compare_ = compare; - result->name_ = name; - return result; -} - -void leveldb_comparator_destroy(leveldb_comparator_t* cmp) { - delete cmp; -} - -leveldb_filterpolicy_t* leveldb_filterpolicy_create( - void* state, - void (*destructor)(void*), - char* (*create_filter)( - void*, - const char* const* key_array, const size_t* key_length_array, - int num_keys, - size_t* filter_length), - unsigned char (*key_may_match)( - void*, - const char* key, size_t length, - const char* filter, size_t filter_length), - const char* (*name)(void*)) { - leveldb_filterpolicy_t* result = new leveldb_filterpolicy_t; - result->state_ = state; - result->destructor_ = destructor; - result->create_ = create_filter; - result->key_match_ = key_may_match; - result->name_ = name; - return result; -} - -void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t* filter) { - delete filter; -} - -leveldb_filterpolicy_t* leveldb_filterpolicy_create_bloom(int bits_per_key) { - // Make a leveldb_filterpolicy_t, but override all of its methods so - // they delegate to a NewBloomFilterPolicy() instead of user - // supplied C functions. - struct Wrapper : public leveldb_filterpolicy_t { - const FilterPolicy* rep_; - ~Wrapper() { delete rep_; } - const char* Name() const { return rep_->Name(); } - void CreateFilter(const Slice* keys, int n, std::string* dst) const { - return rep_->CreateFilter(keys, n, dst); - } - bool KeyMayMatch(const Slice& key, const Slice& filter) const { - return rep_->KeyMayMatch(key, filter); - } - static void DoNothing(void*) { } - }; - Wrapper* wrapper = new Wrapper; - wrapper->rep_ = NewBloomFilterPolicy(bits_per_key); - wrapper->state_ = NULL; - wrapper->destructor_ = &Wrapper::DoNothing; - return wrapper; -} - -leveldb_readoptions_t* leveldb_readoptions_create() { - return new leveldb_readoptions_t; -} - -void leveldb_readoptions_destroy(leveldb_readoptions_t* opt) { - delete opt; -} - -void leveldb_readoptions_set_verify_checksums( - leveldb_readoptions_t* opt, - unsigned char v) { - opt->rep.verify_checksums = v; -} - -void leveldb_readoptions_set_fill_cache( - leveldb_readoptions_t* opt, unsigned char v) { - opt->rep.fill_cache = v; -} - -void leveldb_readoptions_set_snapshot( - leveldb_readoptions_t* opt, - const leveldb_snapshot_t* snap) { - opt->rep.snapshot = (snap ? snap->rep : NULL); -} - -leveldb_writeoptions_t* leveldb_writeoptions_create() { - return new leveldb_writeoptions_t; -} - -void leveldb_writeoptions_destroy(leveldb_writeoptions_t* opt) { - delete opt; -} - -void leveldb_writeoptions_set_sync( - leveldb_writeoptions_t* opt, unsigned char v) { - opt->rep.sync = v; -} - -leveldb_cache_t* leveldb_cache_create_lru(size_t capacity) { - leveldb_cache_t* c = new leveldb_cache_t; - c->rep = NewLRUCache(capacity); - return c; -} - -void leveldb_cache_destroy(leveldb_cache_t* cache) { - delete cache->rep; - delete cache; -} - -leveldb_env_t* leveldb_create_default_env() { - leveldb_env_t* result = new leveldb_env_t; - result->rep = Env::Default(); - result->is_default = true; - return result; -} - -void leveldb_env_destroy(leveldb_env_t* env) { - if (!env->is_default) delete env->rep; - delete env; -} - -void leveldb_free(void* ptr) { - free(ptr); -} - -int leveldb_major_version() { - return kMajorVersion; -} - -int leveldb_minor_version() { - return kMinorVersion; -} - -} // end extern "C" diff --git a/src/leveldb/db/c_test.c b/src/leveldb/db/c_test.c deleted file mode 100644 index 7cd5ee0207..0000000000 --- a/src/leveldb/db/c_test.c +++ /dev/null @@ -1,390 +0,0 @@ -/* Copyright (c) 2011 The LevelDB Authors. All rights reserved. - Use of this source code is governed by a BSD-style license that can be - found in the LICENSE file. See the AUTHORS file for names of contributors. */ - -#include "leveldb/c.h" - -#include -#include -#include -#include -#include -#include - -const char* phase = ""; -static char dbname[200]; - -static void StartPhase(const char* name) { - fprintf(stderr, "=== Test %s\n", name); - phase = name; -} - -static const char* GetTempDir(void) { - const char* ret = getenv("TEST_TMPDIR"); - if (ret == NULL || ret[0] == '\0') - ret = "/tmp"; - return ret; -} - -#define CheckNoError(err) \ - if ((err) != NULL) { \ - fprintf(stderr, "%s:%d: %s: %s\n", __FILE__, __LINE__, phase, (err)); \ - abort(); \ - } - -#define CheckCondition(cond) \ - if (!(cond)) { \ - fprintf(stderr, "%s:%d: %s: %s\n", __FILE__, __LINE__, phase, #cond); \ - abort(); \ - } - -static void CheckEqual(const char* expected, const char* v, size_t n) { - if (expected == NULL && v == NULL) { - // ok - } else if (expected != NULL && v != NULL && n == strlen(expected) && - memcmp(expected, v, n) == 0) { - // ok - return; - } else { - fprintf(stderr, "%s: expected '%s', got '%s'\n", - phase, - (expected ? expected : "(null)"), - (v ? v : "(null")); - abort(); - } -} - -static void Free(char** ptr) { - if (*ptr) { - free(*ptr); - *ptr = NULL; - } -} - -static void CheckGet( - leveldb_t* db, - const leveldb_readoptions_t* options, - const char* key, - const char* expected) { - char* err = NULL; - size_t val_len; - char* val; - val = leveldb_get(db, options, key, strlen(key), &val_len, &err); - CheckNoError(err); - CheckEqual(expected, val, val_len); - Free(&val); -} - -static void CheckIter(leveldb_iterator_t* iter, - const char* key, const char* val) { - size_t len; - const char* str; - str = leveldb_iter_key(iter, &len); - CheckEqual(key, str, len); - str = leveldb_iter_value(iter, &len); - CheckEqual(val, str, len); -} - -// Callback from leveldb_writebatch_iterate() -static void CheckPut(void* ptr, - const char* k, size_t klen, - const char* v, size_t vlen) { - int* state = (int*) ptr; - CheckCondition(*state < 2); - switch (*state) { - case 0: - CheckEqual("bar", k, klen); - CheckEqual("b", v, vlen); - break; - case 1: - CheckEqual("box", k, klen); - CheckEqual("c", v, vlen); - break; - } - (*state)++; -} - -// Callback from leveldb_writebatch_iterate() -static void CheckDel(void* ptr, const char* k, size_t klen) { - int* state = (int*) ptr; - CheckCondition(*state == 2); - CheckEqual("bar", k, klen); - (*state)++; -} - -static void CmpDestroy(void* arg) { } - -static int CmpCompare(void* arg, const char* a, size_t alen, - const char* b, size_t blen) { - int n = (alen < blen) ? alen : blen; - int r = memcmp(a, b, n); - if (r == 0) { - if (alen < blen) r = -1; - else if (alen > blen) r = +1; - } - return r; -} - -static const char* CmpName(void* arg) { - return "foo"; -} - -// Custom filter policy -static unsigned char fake_filter_result = 1; -static void FilterDestroy(void* arg) { } -static const char* FilterName(void* arg) { - return "TestFilter"; -} -static char* FilterCreate( - void* arg, - const char* const* key_array, const size_t* key_length_array, - int num_keys, - size_t* filter_length) { - *filter_length = 4; - char* result = malloc(4); - memcpy(result, "fake", 4); - return result; -} -unsigned char FilterKeyMatch( - void* arg, - const char* key, size_t length, - const char* filter, size_t filter_length) { - CheckCondition(filter_length == 4); - CheckCondition(memcmp(filter, "fake", 4) == 0); - return fake_filter_result; -} - -int main(int argc, char** argv) { - leveldb_t* db; - leveldb_comparator_t* cmp; - leveldb_cache_t* cache; - leveldb_env_t* env; - leveldb_options_t* options; - leveldb_readoptions_t* roptions; - leveldb_writeoptions_t* woptions; - char* err = NULL; - int run = -1; - - CheckCondition(leveldb_major_version() >= 1); - CheckCondition(leveldb_minor_version() >= 1); - - snprintf(dbname, sizeof(dbname), - "%s/leveldb_c_test-%d", - GetTempDir(), - ((int) geteuid())); - - StartPhase("create_objects"); - cmp = leveldb_comparator_create(NULL, CmpDestroy, CmpCompare, CmpName); - env = leveldb_create_default_env(); - cache = leveldb_cache_create_lru(100000); - - options = leveldb_options_create(); - leveldb_options_set_comparator(options, cmp); - leveldb_options_set_error_if_exists(options, 1); - leveldb_options_set_cache(options, cache); - leveldb_options_set_env(options, env); - leveldb_options_set_info_log(options, NULL); - leveldb_options_set_write_buffer_size(options, 100000); - leveldb_options_set_paranoid_checks(options, 1); - leveldb_options_set_max_open_files(options, 10); - leveldb_options_set_block_size(options, 1024); - leveldb_options_set_block_restart_interval(options, 8); - leveldb_options_set_compression(options, leveldb_no_compression); - - roptions = leveldb_readoptions_create(); - leveldb_readoptions_set_verify_checksums(roptions, 1); - leveldb_readoptions_set_fill_cache(roptions, 0); - - woptions = leveldb_writeoptions_create(); - leveldb_writeoptions_set_sync(woptions, 1); - - StartPhase("destroy"); - leveldb_destroy_db(options, dbname, &err); - Free(&err); - - StartPhase("open_error"); - db = leveldb_open(options, dbname, &err); - CheckCondition(err != NULL); - Free(&err); - - StartPhase("leveldb_free"); - db = leveldb_open(options, dbname, &err); - CheckCondition(err != NULL); - leveldb_free(err); - err = NULL; - - StartPhase("open"); - leveldb_options_set_create_if_missing(options, 1); - db = leveldb_open(options, dbname, &err); - CheckNoError(err); - CheckGet(db, roptions, "foo", NULL); - - StartPhase("put"); - leveldb_put(db, woptions, "foo", 3, "hello", 5, &err); - CheckNoError(err); - CheckGet(db, roptions, "foo", "hello"); - - StartPhase("compactall"); - leveldb_compact_range(db, NULL, 0, NULL, 0); - CheckGet(db, roptions, "foo", "hello"); - - StartPhase("compactrange"); - leveldb_compact_range(db, "a", 1, "z", 1); - CheckGet(db, roptions, "foo", "hello"); - - StartPhase("writebatch"); - { - leveldb_writebatch_t* wb = leveldb_writebatch_create(); - leveldb_writebatch_put(wb, "foo", 3, "a", 1); - leveldb_writebatch_clear(wb); - leveldb_writebatch_put(wb, "bar", 3, "b", 1); - leveldb_writebatch_put(wb, "box", 3, "c", 1); - leveldb_writebatch_delete(wb, "bar", 3); - leveldb_write(db, woptions, wb, &err); - CheckNoError(err); - CheckGet(db, roptions, "foo", "hello"); - CheckGet(db, roptions, "bar", NULL); - CheckGet(db, roptions, "box", "c"); - int pos = 0; - leveldb_writebatch_iterate(wb, &pos, CheckPut, CheckDel); - CheckCondition(pos == 3); - leveldb_writebatch_destroy(wb); - } - - StartPhase("iter"); - { - leveldb_iterator_t* iter = leveldb_create_iterator(db, roptions); - CheckCondition(!leveldb_iter_valid(iter)); - leveldb_iter_seek_to_first(iter); - CheckCondition(leveldb_iter_valid(iter)); - CheckIter(iter, "box", "c"); - leveldb_iter_next(iter); - CheckIter(iter, "foo", "hello"); - leveldb_iter_prev(iter); - CheckIter(iter, "box", "c"); - leveldb_iter_prev(iter); - CheckCondition(!leveldb_iter_valid(iter)); - leveldb_iter_seek_to_last(iter); - CheckIter(iter, "foo", "hello"); - leveldb_iter_seek(iter, "b", 1); - CheckIter(iter, "box", "c"); - leveldb_iter_get_error(iter, &err); - CheckNoError(err); - leveldb_iter_destroy(iter); - } - - StartPhase("approximate_sizes"); - { - int i; - int n = 20000; - char keybuf[100]; - char valbuf[100]; - uint64_t sizes[2]; - const char* start[2] = { "a", "k00000000000000010000" }; - size_t start_len[2] = { 1, 21 }; - const char* limit[2] = { "k00000000000000010000", "z" }; - size_t limit_len[2] = { 21, 1 }; - leveldb_writeoptions_set_sync(woptions, 0); - for (i = 0; i < n; i++) { - snprintf(keybuf, sizeof(keybuf), "k%020d", i); - snprintf(valbuf, sizeof(valbuf), "v%020d", i); - leveldb_put(db, woptions, keybuf, strlen(keybuf), valbuf, strlen(valbuf), - &err); - CheckNoError(err); - } - leveldb_approximate_sizes(db, 2, start, start_len, limit, limit_len, sizes); - CheckCondition(sizes[0] > 0); - CheckCondition(sizes[1] > 0); - } - - StartPhase("property"); - { - char* prop = leveldb_property_value(db, "nosuchprop"); - CheckCondition(prop == NULL); - prop = leveldb_property_value(db, "leveldb.stats"); - CheckCondition(prop != NULL); - Free(&prop); - } - - StartPhase("snapshot"); - { - const leveldb_snapshot_t* snap; - snap = leveldb_create_snapshot(db); - leveldb_delete(db, woptions, "foo", 3, &err); - CheckNoError(err); - leveldb_readoptions_set_snapshot(roptions, snap); - CheckGet(db, roptions, "foo", "hello"); - leveldb_readoptions_set_snapshot(roptions, NULL); - CheckGet(db, roptions, "foo", NULL); - leveldb_release_snapshot(db, snap); - } - - StartPhase("repair"); - { - leveldb_close(db); - leveldb_options_set_create_if_missing(options, 0); - leveldb_options_set_error_if_exists(options, 0); - leveldb_repair_db(options, dbname, &err); - CheckNoError(err); - db = leveldb_open(options, dbname, &err); - CheckNoError(err); - CheckGet(db, roptions, "foo", NULL); - CheckGet(db, roptions, "bar", NULL); - CheckGet(db, roptions, "box", "c"); - leveldb_options_set_create_if_missing(options, 1); - leveldb_options_set_error_if_exists(options, 1); - } - - StartPhase("filter"); - for (run = 0; run < 2; run++) { - // First run uses custom filter, second run uses bloom filter - CheckNoError(err); - leveldb_filterpolicy_t* policy; - if (run == 0) { - policy = leveldb_filterpolicy_create( - NULL, FilterDestroy, FilterCreate, FilterKeyMatch, FilterName); - } else { - policy = leveldb_filterpolicy_create_bloom(10); - } - - // Create new database - leveldb_close(db); - leveldb_destroy_db(options, dbname, &err); - leveldb_options_set_filter_policy(options, policy); - db = leveldb_open(options, dbname, &err); - CheckNoError(err); - leveldb_put(db, woptions, "foo", 3, "foovalue", 8, &err); - CheckNoError(err); - leveldb_put(db, woptions, "bar", 3, "barvalue", 8, &err); - CheckNoError(err); - leveldb_compact_range(db, NULL, 0, NULL, 0); - - fake_filter_result = 1; - CheckGet(db, roptions, "foo", "foovalue"); - CheckGet(db, roptions, "bar", "barvalue"); - if (phase == 0) { - // Must not find value when custom filter returns false - fake_filter_result = 0; - CheckGet(db, roptions, "foo", NULL); - CheckGet(db, roptions, "bar", NULL); - fake_filter_result = 1; - - CheckGet(db, roptions, "foo", "foovalue"); - CheckGet(db, roptions, "bar", "barvalue"); - } - leveldb_options_set_filter_policy(options, NULL); - leveldb_filterpolicy_destroy(policy); - } - - StartPhase("cleanup"); - leveldb_close(db); - leveldb_options_destroy(options); - leveldb_readoptions_destroy(roptions); - leveldb_writeoptions_destroy(woptions); - leveldb_cache_destroy(cache); - leveldb_comparator_destroy(cmp); - leveldb_env_destroy(env); - - fprintf(stderr, "PASS\n"); - return 0; -} diff --git a/src/leveldb/db/corruption_test.cc b/src/leveldb/db/corruption_test.cc deleted file mode 100644 index 96afc68913..0000000000 --- a/src/leveldb/db/corruption_test.cc +++ /dev/null @@ -1,374 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/db.h" - -#include -#include -#include -#include -#include "leveldb/cache.h" -#include "leveldb/env.h" -#include "leveldb/table.h" -#include "leveldb/write_batch.h" -#include "db/db_impl.h" -#include "db/filename.h" -#include "db/log_format.h" -#include "db/version_set.h" -#include "util/logging.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -static const int kValueSize = 1000; - -class CorruptionTest { - public: - test::ErrorEnv env_; - std::string dbname_; - Cache* tiny_cache_; - Options options_; - DB* db_; - - CorruptionTest() { - tiny_cache_ = NewLRUCache(100); - options_.env = &env_; - options_.block_cache = tiny_cache_; - dbname_ = test::TmpDir() + "/db_test"; - DestroyDB(dbname_, options_); - - db_ = NULL; - options_.create_if_missing = true; - Reopen(); - options_.create_if_missing = false; - } - - ~CorruptionTest() { - delete db_; - DestroyDB(dbname_, Options()); - delete tiny_cache_; - } - - Status TryReopen() { - delete db_; - db_ = NULL; - return DB::Open(options_, dbname_, &db_); - } - - void Reopen() { - ASSERT_OK(TryReopen()); - } - - void RepairDB() { - delete db_; - db_ = NULL; - ASSERT_OK(::leveldb::RepairDB(dbname_, options_)); - } - - void Build(int n) { - std::string key_space, value_space; - WriteBatch batch; - for (int i = 0; i < n; i++) { - //if ((i % 100) == 0) fprintf(stderr, "@ %d of %d\n", i, n); - Slice key = Key(i, &key_space); - batch.Clear(); - batch.Put(key, Value(i, &value_space)); - WriteOptions options; - // Corrupt() doesn't work without this sync on windows; stat reports 0 for - // the file size. - if (i == n - 1) { - options.sync = true; - } - ASSERT_OK(db_->Write(options, &batch)); - } - } - - void Check(int min_expected, int max_expected) { - int next_expected = 0; - int missed = 0; - int bad_keys = 0; - int bad_values = 0; - int correct = 0; - std::string value_space; - Iterator* iter = db_->NewIterator(ReadOptions()); - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - uint64_t key; - Slice in(iter->key()); - if (in == "" || in == "~") { - // Ignore boundary keys. - continue; - } - if (!ConsumeDecimalNumber(&in, &key) || - !in.empty() || - key < next_expected) { - bad_keys++; - continue; - } - missed += (key - next_expected); - next_expected = key + 1; - if (iter->value() != Value(key, &value_space)) { - bad_values++; - } else { - correct++; - } - } - delete iter; - - fprintf(stderr, - "expected=%d..%d; got=%d; bad_keys=%d; bad_values=%d; missed=%d\n", - min_expected, max_expected, correct, bad_keys, bad_values, missed); - ASSERT_LE(min_expected, correct); - ASSERT_GE(max_expected, correct); - } - - void Corrupt(FileType filetype, int offset, int bytes_to_corrupt) { - // Pick file to corrupt - std::vector filenames; - ASSERT_OK(env_.GetChildren(dbname_, &filenames)); - uint64_t number; - FileType type; - std::string fname; - int picked_number = -1; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type) && - type == filetype && - int(number) > picked_number) { // Pick latest file - fname = dbname_ + "/" + filenames[i]; - picked_number = number; - } - } - ASSERT_TRUE(!fname.empty()) << filetype; - - struct stat sbuf; - if (stat(fname.c_str(), &sbuf) != 0) { - const char* msg = strerror(errno); - ASSERT_TRUE(false) << fname << ": " << msg; - } - - if (offset < 0) { - // Relative to end of file; make it absolute - if (-offset > sbuf.st_size) { - offset = 0; - } else { - offset = sbuf.st_size + offset; - } - } - if (offset > sbuf.st_size) { - offset = sbuf.st_size; - } - if (offset + bytes_to_corrupt > sbuf.st_size) { - bytes_to_corrupt = sbuf.st_size - offset; - } - - // Do it - std::string contents; - Status s = ReadFileToString(Env::Default(), fname, &contents); - ASSERT_TRUE(s.ok()) << s.ToString(); - for (int i = 0; i < bytes_to_corrupt; i++) { - contents[i + offset] ^= 0x80; - } - s = WriteStringToFile(Env::Default(), contents, fname); - ASSERT_TRUE(s.ok()) << s.ToString(); - } - - int Property(const std::string& name) { - std::string property; - int result; - if (db_->GetProperty(name, &property) && - sscanf(property.c_str(), "%d", &result) == 1) { - return result; - } else { - return -1; - } - } - - // Return the ith key - Slice Key(int i, std::string* storage) { - char buf[100]; - snprintf(buf, sizeof(buf), "%016d", i); - storage->assign(buf, strlen(buf)); - return Slice(*storage); - } - - // Return the value to associate with the specified key - Slice Value(int k, std::string* storage) { - Random r(k); - return test::RandomString(&r, kValueSize, storage); - } -}; - -TEST(CorruptionTest, Recovery) { - Build(100); - Check(100, 100); - Corrupt(kLogFile, 19, 1); // WriteBatch tag for first record - Corrupt(kLogFile, log::kBlockSize + 1000, 1); // Somewhere in second block - Reopen(); - - // The 64 records in the first two log blocks are completely lost. - Check(36, 36); -} - -TEST(CorruptionTest, RecoverWriteError) { - env_.writable_file_error_ = true; - Status s = TryReopen(); - ASSERT_TRUE(!s.ok()); -} - -TEST(CorruptionTest, NewFileErrorDuringWrite) { - // Do enough writing to force minor compaction - env_.writable_file_error_ = true; - const int num = 3 + (Options().write_buffer_size / kValueSize); - std::string value_storage; - Status s; - for (int i = 0; s.ok() && i < num; i++) { - WriteBatch batch; - batch.Put("a", Value(100, &value_storage)); - s = db_->Write(WriteOptions(), &batch); - } - ASSERT_TRUE(!s.ok()); - ASSERT_GE(env_.num_writable_file_errors_, 1); - env_.writable_file_error_ = false; - Reopen(); -} - -TEST(CorruptionTest, TableFile) { - Build(100); - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - dbi->TEST_CompactRange(0, NULL, NULL); - dbi->TEST_CompactRange(1, NULL, NULL); - - Corrupt(kTableFile, 100, 1); - Check(90, 99); -} - -TEST(CorruptionTest, TableFileRepair) { - options_.block_size = 2 * kValueSize; // Limit scope of corruption - options_.paranoid_checks = true; - Reopen(); - Build(100); - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - dbi->TEST_CompactRange(0, NULL, NULL); - dbi->TEST_CompactRange(1, NULL, NULL); - - Corrupt(kTableFile, 100, 1); - RepairDB(); - Reopen(); - Check(95, 99); -} - -TEST(CorruptionTest, TableFileIndexData) { - Build(10000); // Enough to build multiple Tables - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - - Corrupt(kTableFile, -2000, 500); - Reopen(); - Check(5000, 9999); -} - -TEST(CorruptionTest, MissingDescriptor) { - Build(1000); - RepairDB(); - Reopen(); - Check(1000, 1000); -} - -TEST(CorruptionTest, SequenceNumberRecovery) { - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v1")); - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v2")); - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v3")); - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v4")); - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v5")); - RepairDB(); - Reopen(); - std::string v; - ASSERT_OK(db_->Get(ReadOptions(), "foo", &v)); - ASSERT_EQ("v5", v); - // Write something. If sequence number was not recovered properly, - // it will be hidden by an earlier write. - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v6")); - ASSERT_OK(db_->Get(ReadOptions(), "foo", &v)); - ASSERT_EQ("v6", v); - Reopen(); - ASSERT_OK(db_->Get(ReadOptions(), "foo", &v)); - ASSERT_EQ("v6", v); -} - -TEST(CorruptionTest, CorruptedDescriptor) { - ASSERT_OK(db_->Put(WriteOptions(), "foo", "hello")); - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - dbi->TEST_CompactRange(0, NULL, NULL); - - Corrupt(kDescriptorFile, 0, 1000); - Status s = TryReopen(); - ASSERT_TRUE(!s.ok()); - - RepairDB(); - Reopen(); - std::string v; - ASSERT_OK(db_->Get(ReadOptions(), "foo", &v)); - ASSERT_EQ("hello", v); -} - -TEST(CorruptionTest, CompactionInputError) { - Build(10); - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - const int last = config::kMaxMemCompactLevel; - ASSERT_EQ(1, Property("leveldb.num-files-at-level" + NumberToString(last))); - - Corrupt(kTableFile, 100, 1); - Check(5, 9); - - // Force compactions by writing lots of values - Build(10000); - Check(10000, 10000); -} - -TEST(CorruptionTest, CompactionInputErrorParanoid) { - options_.paranoid_checks = true; - options_.write_buffer_size = 512 << 10; - Reopen(); - DBImpl* dbi = reinterpret_cast(db_); - - // Make multiple inputs so we need to compact. - for (int i = 0; i < 2; i++) { - Build(10); - dbi->TEST_CompactMemTable(); - Corrupt(kTableFile, 100, 1); - env_.SleepForMicroseconds(100000); - } - dbi->CompactRange(NULL, NULL); - - // Write must fail because of corrupted table - std::string tmp1, tmp2; - Status s = db_->Put(WriteOptions(), Key(5, &tmp1), Value(5, &tmp2)); - ASSERT_TRUE(!s.ok()) << "write did not fail in corrupted paranoid db"; -} - -TEST(CorruptionTest, UnrelatedKeys) { - Build(10); - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - Corrupt(kTableFile, 100, 1); - - std::string tmp1, tmp2; - ASSERT_OK(db_->Put(WriteOptions(), Key(1000, &tmp1), Value(1000, &tmp2))); - std::string v; - ASSERT_OK(db_->Get(ReadOptions(), Key(1000, &tmp1), &v)); - ASSERT_EQ(Value(1000, &tmp2).ToString(), v); - dbi->TEST_CompactMemTable(); - ASSERT_OK(db_->Get(ReadOptions(), Key(1000, &tmp1), &v)); - ASSERT_EQ(Value(1000, &tmp2).ToString(), v); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/db/db_bench.cc b/src/leveldb/db/db_bench.cc deleted file mode 100644 index 705a170aae..0000000000 --- a/src/leveldb/db/db_bench.cc +++ /dev/null @@ -1,978 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include -#include "db/db_impl.h" -#include "db/version_set.h" -#include "leveldb/cache.h" -#include "leveldb/db.h" -#include "leveldb/env.h" -#include "leveldb/write_batch.h" -#include "port/port.h" -#include "util/crc32c.h" -#include "util/histogram.h" -#include "util/mutexlock.h" -#include "util/random.h" -#include "util/testutil.h" - -// Comma-separated list of operations to run in the specified order -// Actual benchmarks: -// fillseq -- write N values in sequential key order in async mode -// fillrandom -- write N values in random key order in async mode -// overwrite -- overwrite N values in random key order in async mode -// fillsync -- write N/100 values in random key order in sync mode -// fill100K -- write N/1000 100K values in random order in async mode -// deleteseq -- delete N keys in sequential order -// deleterandom -- delete N keys in random order -// readseq -- read N times sequentially -// readreverse -- read N times in reverse order -// readrandom -- read N times in random order -// readmissing -- read N missing keys in random order -// readhot -- read N times in random order from 1% section of DB -// seekrandom -- N random seeks -// crc32c -- repeated crc32c of 4K of data -// acquireload -- load N*1000 times -// Meta operations: -// compact -- Compact the entire DB -// stats -- Print DB stats -// sstables -- Print sstable info -// heapprofile -- Dump a heap profile (if supported by this port) -static const char* FLAGS_benchmarks = - "fillseq," - "fillsync," - "fillrandom," - "overwrite," - "readrandom," - "readrandom," // Extra run to allow previous compactions to quiesce - "readseq," - "readreverse," - "compact," - "readrandom," - "readseq," - "readreverse," - "fill100K," - "crc32c," - "snappycomp," - "snappyuncomp," - "acquireload," - ; - -// Number of key/values to place in database -static int FLAGS_num = 1000000; - -// Number of read operations to do. If negative, do FLAGS_num reads. -static int FLAGS_reads = -1; - -// Number of concurrent threads to run. -static int FLAGS_threads = 1; - -// Size of each value -static int FLAGS_value_size = 100; - -// Arrange to generate values that shrink to this fraction of -// their original size after compression -static double FLAGS_compression_ratio = 0.5; - -// Print histogram of operation timings -static bool FLAGS_histogram = false; - -// Number of bytes to buffer in memtable before compacting -// (initialized to default value by "main") -static int FLAGS_write_buffer_size = 0; - -// Number of bytes to use as a cache of uncompressed data. -// Negative means use default settings. -static int FLAGS_cache_size = -1; - -// Maximum number of files to keep open at the same time (use default if == 0) -static int FLAGS_open_files = 0; - -// Bloom filter bits per key. -// Negative means use default settings. -static int FLAGS_bloom_bits = -1; - -// If true, do not destroy the existing database. If you set this -// flag and also specify a benchmark that wants a fresh database, that -// benchmark will fail. -static bool FLAGS_use_existing_db = false; - -// Use the db with the following name. -static const char* FLAGS_db = NULL; - -namespace leveldb { - -namespace { - -// Helper for quickly generating random data. -class RandomGenerator { - private: - std::string data_; - int pos_; - - public: - RandomGenerator() { - // We use a limited amount of data over and over again and ensure - // that it is larger than the compression window (32KB), and also - // large enough to serve all typical value sizes we want to write. - Random rnd(301); - std::string piece; - while (data_.size() < 1048576) { - // Add a short fragment that is as compressible as specified - // by FLAGS_compression_ratio. - test::CompressibleString(&rnd, FLAGS_compression_ratio, 100, &piece); - data_.append(piece); - } - pos_ = 0; - } - - Slice Generate(size_t len) { - if (pos_ + len > data_.size()) { - pos_ = 0; - assert(len < data_.size()); - } - pos_ += len; - return Slice(data_.data() + pos_ - len, len); - } -}; - -static Slice TrimSpace(Slice s) { - size_t start = 0; - while (start < s.size() && isspace(s[start])) { - start++; - } - size_t limit = s.size(); - while (limit > start && isspace(s[limit-1])) { - limit--; - } - return Slice(s.data() + start, limit - start); -} - -static void AppendWithSpace(std::string* str, Slice msg) { - if (msg.empty()) return; - if (!str->empty()) { - str->push_back(' '); - } - str->append(msg.data(), msg.size()); -} - -class Stats { - private: - double start_; - double finish_; - double seconds_; - int done_; - int next_report_; - int64_t bytes_; - double last_op_finish_; - Histogram hist_; - std::string message_; - - public: - Stats() { Start(); } - - void Start() { - next_report_ = 100; - last_op_finish_ = start_; - hist_.Clear(); - done_ = 0; - bytes_ = 0; - seconds_ = 0; - start_ = Env::Default()->NowMicros(); - finish_ = start_; - message_.clear(); - } - - void Merge(const Stats& other) { - hist_.Merge(other.hist_); - done_ += other.done_; - bytes_ += other.bytes_; - seconds_ += other.seconds_; - if (other.start_ < start_) start_ = other.start_; - if (other.finish_ > finish_) finish_ = other.finish_; - - // Just keep the messages from one thread - if (message_.empty()) message_ = other.message_; - } - - void Stop() { - finish_ = Env::Default()->NowMicros(); - seconds_ = (finish_ - start_) * 1e-6; - } - - void AddMessage(Slice msg) { - AppendWithSpace(&message_, msg); - } - - void FinishedSingleOp() { - if (FLAGS_histogram) { - double now = Env::Default()->NowMicros(); - double micros = now - last_op_finish_; - hist_.Add(micros); - if (micros > 20000) { - fprintf(stderr, "long op: %.1f micros%30s\r", micros, ""); - fflush(stderr); - } - last_op_finish_ = now; - } - - done_++; - if (done_ >= next_report_) { - if (next_report_ < 1000) next_report_ += 100; - else if (next_report_ < 5000) next_report_ += 500; - else if (next_report_ < 10000) next_report_ += 1000; - else if (next_report_ < 50000) next_report_ += 5000; - else if (next_report_ < 100000) next_report_ += 10000; - else if (next_report_ < 500000) next_report_ += 50000; - else next_report_ += 100000; - fprintf(stderr, "... finished %d ops%30s\r", done_, ""); - fflush(stderr); - } - } - - void AddBytes(int64_t n) { - bytes_ += n; - } - - void Report(const Slice& name) { - // Pretend at least one op was done in case we are running a benchmark - // that does not call FinishedSingleOp(). - if (done_ < 1) done_ = 1; - - std::string extra; - if (bytes_ > 0) { - // Rate is computed on actual elapsed time, not the sum of per-thread - // elapsed times. - double elapsed = (finish_ - start_) * 1e-6; - char rate[100]; - snprintf(rate, sizeof(rate), "%6.1f MB/s", - (bytes_ / 1048576.0) / elapsed); - extra = rate; - } - AppendWithSpace(&extra, message_); - - fprintf(stdout, "%-12s : %11.3f micros/op;%s%s\n", - name.ToString().c_str(), - seconds_ * 1e6 / done_, - (extra.empty() ? "" : " "), - extra.c_str()); - if (FLAGS_histogram) { - fprintf(stdout, "Microseconds per op:\n%s\n", hist_.ToString().c_str()); - } - fflush(stdout); - } -}; - -// State shared by all concurrent executions of the same benchmark. -struct SharedState { - port::Mutex mu; - port::CondVar cv; - int total; - - // Each thread goes through the following states: - // (1) initializing - // (2) waiting for others to be initialized - // (3) running - // (4) done - - int num_initialized; - int num_done; - bool start; - - SharedState() : cv(&mu) { } -}; - -// Per-thread state for concurrent executions of the same benchmark. -struct ThreadState { - int tid; // 0..n-1 when running in n threads - Random rand; // Has different seeds for different threads - Stats stats; - SharedState* shared; - - ThreadState(int index) - : tid(index), - rand(1000 + index) { - } -}; - -} // namespace - -class Benchmark { - private: - Cache* cache_; - const FilterPolicy* filter_policy_; - DB* db_; - int num_; - int value_size_; - int entries_per_batch_; - WriteOptions write_options_; - int reads_; - int heap_counter_; - - void PrintHeader() { - const int kKeySize = 16; - PrintEnvironment(); - fprintf(stdout, "Keys: %d bytes each\n", kKeySize); - fprintf(stdout, "Values: %d bytes each (%d bytes after compression)\n", - FLAGS_value_size, - static_cast(FLAGS_value_size * FLAGS_compression_ratio + 0.5)); - fprintf(stdout, "Entries: %d\n", num_); - fprintf(stdout, "RawSize: %.1f MB (estimated)\n", - ((static_cast(kKeySize + FLAGS_value_size) * num_) - / 1048576.0)); - fprintf(stdout, "FileSize: %.1f MB (estimated)\n", - (((kKeySize + FLAGS_value_size * FLAGS_compression_ratio) * num_) - / 1048576.0)); - PrintWarnings(); - fprintf(stdout, "------------------------------------------------\n"); - } - - void PrintWarnings() { -#if defined(__GNUC__) && !defined(__OPTIMIZE__) - fprintf(stdout, - "WARNING: Optimization is disabled: benchmarks unnecessarily slow\n" - ); -#endif -#ifndef NDEBUG - fprintf(stdout, - "WARNING: Assertions are enabled; benchmarks unnecessarily slow\n"); -#endif - - // See if snappy is working by attempting to compress a compressible string - const char text[] = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; - std::string compressed; - if (!port::Snappy_Compress(text, sizeof(text), &compressed)) { - fprintf(stdout, "WARNING: Snappy compression is not enabled\n"); - } else if (compressed.size() >= sizeof(text)) { - fprintf(stdout, "WARNING: Snappy compression is not effective\n"); - } - } - - void PrintEnvironment() { - fprintf(stderr, "LevelDB: version %d.%d\n", - kMajorVersion, kMinorVersion); - -#if defined(__linux) - time_t now = time(NULL); - fprintf(stderr, "Date: %s", ctime(&now)); // ctime() adds newline - - FILE* cpuinfo = fopen("/proc/cpuinfo", "r"); - if (cpuinfo != NULL) { - char line[1000]; - int num_cpus = 0; - std::string cpu_type; - std::string cache_size; - while (fgets(line, sizeof(line), cpuinfo) != NULL) { - const char* sep = strchr(line, ':'); - if (sep == NULL) { - continue; - } - Slice key = TrimSpace(Slice(line, sep - 1 - line)); - Slice val = TrimSpace(Slice(sep + 1)); - if (key == "model name") { - ++num_cpus; - cpu_type = val.ToString(); - } else if (key == "cache size") { - cache_size = val.ToString(); - } - } - fclose(cpuinfo); - fprintf(stderr, "CPU: %d * %s\n", num_cpus, cpu_type.c_str()); - fprintf(stderr, "CPUCache: %s\n", cache_size.c_str()); - } -#endif - } - - public: - Benchmark() - : cache_(FLAGS_cache_size >= 0 ? NewLRUCache(FLAGS_cache_size) : NULL), - filter_policy_(FLAGS_bloom_bits >= 0 - ? NewBloomFilterPolicy(FLAGS_bloom_bits) - : NULL), - db_(NULL), - num_(FLAGS_num), - value_size_(FLAGS_value_size), - entries_per_batch_(1), - reads_(FLAGS_reads < 0 ? FLAGS_num : FLAGS_reads), - heap_counter_(0) { - std::vector files; - Env::Default()->GetChildren(FLAGS_db, &files); - for (size_t i = 0; i < files.size(); i++) { - if (Slice(files[i]).starts_with("heap-")) { - Env::Default()->DeleteFile(std::string(FLAGS_db) + "/" + files[i]); - } - } - if (!FLAGS_use_existing_db) { - DestroyDB(FLAGS_db, Options()); - } - } - - ~Benchmark() { - delete db_; - delete cache_; - delete filter_policy_; - } - - void Run() { - PrintHeader(); - Open(); - - const char* benchmarks = FLAGS_benchmarks; - while (benchmarks != NULL) { - const char* sep = strchr(benchmarks, ','); - Slice name; - if (sep == NULL) { - name = benchmarks; - benchmarks = NULL; - } else { - name = Slice(benchmarks, sep - benchmarks); - benchmarks = sep + 1; - } - - // Reset parameters that may be overridden below - num_ = FLAGS_num; - reads_ = (FLAGS_reads < 0 ? FLAGS_num : FLAGS_reads); - value_size_ = FLAGS_value_size; - entries_per_batch_ = 1; - write_options_ = WriteOptions(); - - void (Benchmark::*method)(ThreadState*) = NULL; - bool fresh_db = false; - int num_threads = FLAGS_threads; - - if (name == Slice("fillseq")) { - fresh_db = true; - method = &Benchmark::WriteSeq; - } else if (name == Slice("fillbatch")) { - fresh_db = true; - entries_per_batch_ = 1000; - method = &Benchmark::WriteSeq; - } else if (name == Slice("fillrandom")) { - fresh_db = true; - method = &Benchmark::WriteRandom; - } else if (name == Slice("overwrite")) { - fresh_db = false; - method = &Benchmark::WriteRandom; - } else if (name == Slice("fillsync")) { - fresh_db = true; - num_ /= 1000; - write_options_.sync = true; - method = &Benchmark::WriteRandom; - } else if (name == Slice("fill100K")) { - fresh_db = true; - num_ /= 1000; - value_size_ = 100 * 1000; - method = &Benchmark::WriteRandom; - } else if (name == Slice("readseq")) { - method = &Benchmark::ReadSequential; - } else if (name == Slice("readreverse")) { - method = &Benchmark::ReadReverse; - } else if (name == Slice("readrandom")) { - method = &Benchmark::ReadRandom; - } else if (name == Slice("readmissing")) { - method = &Benchmark::ReadMissing; - } else if (name == Slice("seekrandom")) { - method = &Benchmark::SeekRandom; - } else if (name == Slice("readhot")) { - method = &Benchmark::ReadHot; - } else if (name == Slice("readrandomsmall")) { - reads_ /= 1000; - method = &Benchmark::ReadRandom; - } else if (name == Slice("deleteseq")) { - method = &Benchmark::DeleteSeq; - } else if (name == Slice("deleterandom")) { - method = &Benchmark::DeleteRandom; - } else if (name == Slice("readwhilewriting")) { - num_threads++; // Add extra thread for writing - method = &Benchmark::ReadWhileWriting; - } else if (name == Slice("compact")) { - method = &Benchmark::Compact; - } else if (name == Slice("crc32c")) { - method = &Benchmark::Crc32c; - } else if (name == Slice("acquireload")) { - method = &Benchmark::AcquireLoad; - } else if (name == Slice("snappycomp")) { - method = &Benchmark::SnappyCompress; - } else if (name == Slice("snappyuncomp")) { - method = &Benchmark::SnappyUncompress; - } else if (name == Slice("heapprofile")) { - HeapProfile(); - } else if (name == Slice("stats")) { - PrintStats("leveldb.stats"); - } else if (name == Slice("sstables")) { - PrintStats("leveldb.sstables"); - } else { - if (name != Slice()) { // No error message for empty name - fprintf(stderr, "unknown benchmark '%s'\n", name.ToString().c_str()); - } - } - - if (fresh_db) { - if (FLAGS_use_existing_db) { - fprintf(stdout, "%-12s : skipped (--use_existing_db is true)\n", - name.ToString().c_str()); - method = NULL; - } else { - delete db_; - db_ = NULL; - DestroyDB(FLAGS_db, Options()); - Open(); - } - } - - if (method != NULL) { - RunBenchmark(num_threads, name, method); - } - } - } - - private: - struct ThreadArg { - Benchmark* bm; - SharedState* shared; - ThreadState* thread; - void (Benchmark::*method)(ThreadState*); - }; - - static void ThreadBody(void* v) { - ThreadArg* arg = reinterpret_cast(v); - SharedState* shared = arg->shared; - ThreadState* thread = arg->thread; - { - MutexLock l(&shared->mu); - shared->num_initialized++; - if (shared->num_initialized >= shared->total) { - shared->cv.SignalAll(); - } - while (!shared->start) { - shared->cv.Wait(); - } - } - - thread->stats.Start(); - (arg->bm->*(arg->method))(thread); - thread->stats.Stop(); - - { - MutexLock l(&shared->mu); - shared->num_done++; - if (shared->num_done >= shared->total) { - shared->cv.SignalAll(); - } - } - } - - void RunBenchmark(int n, Slice name, - void (Benchmark::*method)(ThreadState*)) { - SharedState shared; - shared.total = n; - shared.num_initialized = 0; - shared.num_done = 0; - shared.start = false; - - ThreadArg* arg = new ThreadArg[n]; - for (int i = 0; i < n; i++) { - arg[i].bm = this; - arg[i].method = method; - arg[i].shared = &shared; - arg[i].thread = new ThreadState(i); - arg[i].thread->shared = &shared; - Env::Default()->StartThread(ThreadBody, &arg[i]); - } - - shared.mu.Lock(); - while (shared.num_initialized < n) { - shared.cv.Wait(); - } - - shared.start = true; - shared.cv.SignalAll(); - while (shared.num_done < n) { - shared.cv.Wait(); - } - shared.mu.Unlock(); - - for (int i = 1; i < n; i++) { - arg[0].thread->stats.Merge(arg[i].thread->stats); - } - arg[0].thread->stats.Report(name); - - for (int i = 0; i < n; i++) { - delete arg[i].thread; - } - delete[] arg; - } - - void Crc32c(ThreadState* thread) { - // Checksum about 500MB of data total - const int size = 4096; - const char* label = "(4K per op)"; - std::string data(size, 'x'); - int64_t bytes = 0; - uint32_t crc = 0; - while (bytes < 500 * 1048576) { - crc = crc32c::Value(data.data(), size); - thread->stats.FinishedSingleOp(); - bytes += size; - } - // Print so result is not dead - fprintf(stderr, "... crc=0x%x\r", static_cast(crc)); - - thread->stats.AddBytes(bytes); - thread->stats.AddMessage(label); - } - - void AcquireLoad(ThreadState* thread) { - int dummy; - port::AtomicPointer ap(&dummy); - int count = 0; - void *ptr = NULL; - thread->stats.AddMessage("(each op is 1000 loads)"); - while (count < 100000) { - for (int i = 0; i < 1000; i++) { - ptr = ap.Acquire_Load(); - } - count++; - thread->stats.FinishedSingleOp(); - } - if (ptr == NULL) exit(1); // Disable unused variable warning. - } - - void SnappyCompress(ThreadState* thread) { - RandomGenerator gen; - Slice input = gen.Generate(Options().block_size); - int64_t bytes = 0; - int64_t produced = 0; - bool ok = true; - std::string compressed; - while (ok && bytes < 1024 * 1048576) { // Compress 1G - ok = port::Snappy_Compress(input.data(), input.size(), &compressed); - produced += compressed.size(); - bytes += input.size(); - thread->stats.FinishedSingleOp(); - } - - if (!ok) { - thread->stats.AddMessage("(snappy failure)"); - } else { - char buf[100]; - snprintf(buf, sizeof(buf), "(output: %.1f%%)", - (produced * 100.0) / bytes); - thread->stats.AddMessage(buf); - thread->stats.AddBytes(bytes); - } - } - - void SnappyUncompress(ThreadState* thread) { - RandomGenerator gen; - Slice input = gen.Generate(Options().block_size); - std::string compressed; - bool ok = port::Snappy_Compress(input.data(), input.size(), &compressed); - int64_t bytes = 0; - char* uncompressed = new char[input.size()]; - while (ok && bytes < 1024 * 1048576) { // Compress 1G - ok = port::Snappy_Uncompress(compressed.data(), compressed.size(), - uncompressed); - bytes += input.size(); - thread->stats.FinishedSingleOp(); - } - delete[] uncompressed; - - if (!ok) { - thread->stats.AddMessage("(snappy failure)"); - } else { - thread->stats.AddBytes(bytes); - } - } - - void Open() { - assert(db_ == NULL); - Options options; - options.create_if_missing = !FLAGS_use_existing_db; - options.block_cache = cache_; - options.write_buffer_size = FLAGS_write_buffer_size; - options.max_open_files = FLAGS_open_files; - options.filter_policy = filter_policy_; - Status s = DB::Open(options, FLAGS_db, &db_); - if (!s.ok()) { - fprintf(stderr, "open error: %s\n", s.ToString().c_str()); - exit(1); - } - } - - void WriteSeq(ThreadState* thread) { - DoWrite(thread, true); - } - - void WriteRandom(ThreadState* thread) { - DoWrite(thread, false); - } - - void DoWrite(ThreadState* thread, bool seq) { - if (num_ != FLAGS_num) { - char msg[100]; - snprintf(msg, sizeof(msg), "(%d ops)", num_); - thread->stats.AddMessage(msg); - } - - RandomGenerator gen; - WriteBatch batch; - Status s; - int64_t bytes = 0; - for (int i = 0; i < num_; i += entries_per_batch_) { - batch.Clear(); - for (int j = 0; j < entries_per_batch_; j++) { - const int k = seq ? i+j : (thread->rand.Next() % FLAGS_num); - char key[100]; - snprintf(key, sizeof(key), "%016d", k); - batch.Put(key, gen.Generate(value_size_)); - bytes += value_size_ + strlen(key); - thread->stats.FinishedSingleOp(); - } - s = db_->Write(write_options_, &batch); - if (!s.ok()) { - fprintf(stderr, "put error: %s\n", s.ToString().c_str()); - exit(1); - } - } - thread->stats.AddBytes(bytes); - } - - void ReadSequential(ThreadState* thread) { - Iterator* iter = db_->NewIterator(ReadOptions()); - int i = 0; - int64_t bytes = 0; - for (iter->SeekToFirst(); i < reads_ && iter->Valid(); iter->Next()) { - bytes += iter->key().size() + iter->value().size(); - thread->stats.FinishedSingleOp(); - ++i; - } - delete iter; - thread->stats.AddBytes(bytes); - } - - void ReadReverse(ThreadState* thread) { - Iterator* iter = db_->NewIterator(ReadOptions()); - int i = 0; - int64_t bytes = 0; - for (iter->SeekToLast(); i < reads_ && iter->Valid(); iter->Prev()) { - bytes += iter->key().size() + iter->value().size(); - thread->stats.FinishedSingleOp(); - ++i; - } - delete iter; - thread->stats.AddBytes(bytes); - } - - void ReadRandom(ThreadState* thread) { - ReadOptions options; - std::string value; - int found = 0; - for (int i = 0; i < reads_; i++) { - char key[100]; - const int k = thread->rand.Next() % FLAGS_num; - snprintf(key, sizeof(key), "%016d", k); - if (db_->Get(options, key, &value).ok()) { - found++; - } - thread->stats.FinishedSingleOp(); - } - char msg[100]; - snprintf(msg, sizeof(msg), "(%d of %d found)", found, num_); - thread->stats.AddMessage(msg); - } - - void ReadMissing(ThreadState* thread) { - ReadOptions options; - std::string value; - for (int i = 0; i < reads_; i++) { - char key[100]; - const int k = thread->rand.Next() % FLAGS_num; - snprintf(key, sizeof(key), "%016d.", k); - db_->Get(options, key, &value); - thread->stats.FinishedSingleOp(); - } - } - - void ReadHot(ThreadState* thread) { - ReadOptions options; - std::string value; - const int range = (FLAGS_num + 99) / 100; - for (int i = 0; i < reads_; i++) { - char key[100]; - const int k = thread->rand.Next() % range; - snprintf(key, sizeof(key), "%016d", k); - db_->Get(options, key, &value); - thread->stats.FinishedSingleOp(); - } - } - - void SeekRandom(ThreadState* thread) { - ReadOptions options; - int found = 0; - for (int i = 0; i < reads_; i++) { - Iterator* iter = db_->NewIterator(options); - char key[100]; - const int k = thread->rand.Next() % FLAGS_num; - snprintf(key, sizeof(key), "%016d", k); - iter->Seek(key); - if (iter->Valid() && iter->key() == key) found++; - delete iter; - thread->stats.FinishedSingleOp(); - } - char msg[100]; - snprintf(msg, sizeof(msg), "(%d of %d found)", found, num_); - thread->stats.AddMessage(msg); - } - - void DoDelete(ThreadState* thread, bool seq) { - RandomGenerator gen; - WriteBatch batch; - Status s; - for (int i = 0; i < num_; i += entries_per_batch_) { - batch.Clear(); - for (int j = 0; j < entries_per_batch_; j++) { - const int k = seq ? i+j : (thread->rand.Next() % FLAGS_num); - char key[100]; - snprintf(key, sizeof(key), "%016d", k); - batch.Delete(key); - thread->stats.FinishedSingleOp(); - } - s = db_->Write(write_options_, &batch); - if (!s.ok()) { - fprintf(stderr, "del error: %s\n", s.ToString().c_str()); - exit(1); - } - } - } - - void DeleteSeq(ThreadState* thread) { - DoDelete(thread, true); - } - - void DeleteRandom(ThreadState* thread) { - DoDelete(thread, false); - } - - void ReadWhileWriting(ThreadState* thread) { - if (thread->tid > 0) { - ReadRandom(thread); - } else { - // Special thread that keeps writing until other threads are done. - RandomGenerator gen; - while (true) { - { - MutexLock l(&thread->shared->mu); - if (thread->shared->num_done + 1 >= thread->shared->num_initialized) { - // Other threads have finished - break; - } - } - - const int k = thread->rand.Next() % FLAGS_num; - char key[100]; - snprintf(key, sizeof(key), "%016d", k); - Status s = db_->Put(write_options_, key, gen.Generate(value_size_)); - if (!s.ok()) { - fprintf(stderr, "put error: %s\n", s.ToString().c_str()); - exit(1); - } - } - - // Do not count any of the preceding work/delay in stats. - thread->stats.Start(); - } - } - - void Compact(ThreadState* thread) { - db_->CompactRange(NULL, NULL); - } - - void PrintStats(const char* key) { - std::string stats; - if (!db_->GetProperty(key, &stats)) { - stats = "(failed)"; - } - fprintf(stdout, "\n%s\n", stats.c_str()); - } - - static void WriteToFile(void* arg, const char* buf, int n) { - reinterpret_cast(arg)->Append(Slice(buf, n)); - } - - void HeapProfile() { - char fname[100]; - snprintf(fname, sizeof(fname), "%s/heap-%04d", FLAGS_db, ++heap_counter_); - WritableFile* file; - Status s = Env::Default()->NewWritableFile(fname, &file); - if (!s.ok()) { - fprintf(stderr, "%s\n", s.ToString().c_str()); - return; - } - bool ok = port::GetHeapProfile(WriteToFile, file); - delete file; - if (!ok) { - fprintf(stderr, "heap profiling not supported\n"); - Env::Default()->DeleteFile(fname); - } - } -}; - -} // namespace leveldb - -int main(int argc, char** argv) { - FLAGS_write_buffer_size = leveldb::Options().write_buffer_size; - FLAGS_open_files = leveldb::Options().max_open_files; - std::string default_db_path; - - for (int i = 1; i < argc; i++) { - double d; - int n; - char junk; - if (leveldb::Slice(argv[i]).starts_with("--benchmarks=")) { - FLAGS_benchmarks = argv[i] + strlen("--benchmarks="); - } else if (sscanf(argv[i], "--compression_ratio=%lf%c", &d, &junk) == 1) { - FLAGS_compression_ratio = d; - } else if (sscanf(argv[i], "--histogram=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_histogram = n; - } else if (sscanf(argv[i], "--use_existing_db=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_use_existing_db = n; - } else if (sscanf(argv[i], "--num=%d%c", &n, &junk) == 1) { - FLAGS_num = n; - } else if (sscanf(argv[i], "--reads=%d%c", &n, &junk) == 1) { - FLAGS_reads = n; - } else if (sscanf(argv[i], "--threads=%d%c", &n, &junk) == 1) { - FLAGS_threads = n; - } else if (sscanf(argv[i], "--value_size=%d%c", &n, &junk) == 1) { - FLAGS_value_size = n; - } else if (sscanf(argv[i], "--write_buffer_size=%d%c", &n, &junk) == 1) { - FLAGS_write_buffer_size = n; - } else if (sscanf(argv[i], "--cache_size=%d%c", &n, &junk) == 1) { - FLAGS_cache_size = n; - } else if (sscanf(argv[i], "--bloom_bits=%d%c", &n, &junk) == 1) { - FLAGS_bloom_bits = n; - } else if (sscanf(argv[i], "--open_files=%d%c", &n, &junk) == 1) { - FLAGS_open_files = n; - } else if (strncmp(argv[i], "--db=", 5) == 0) { - FLAGS_db = argv[i] + 5; - } else { - fprintf(stderr, "Invalid flag '%s'\n", argv[i]); - exit(1); - } - } - - // Choose a location for the test database if none given with --db= - if (FLAGS_db == NULL) { - leveldb::Env::Default()->GetTestDirectory(&default_db_path); - default_db_path += "/dbbench"; - FLAGS_db = default_db_path.c_str(); - } - - leveldb::Benchmark benchmark; - benchmark.Run(); - return 0; -} diff --git a/src/leveldb/db/db_impl.cc b/src/leveldb/db/db_impl.cc deleted file mode 100644 index 49b95953b4..0000000000 --- a/src/leveldb/db/db_impl.cc +++ /dev/null @@ -1,1513 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/db_impl.h" - -#include -#include -#include -#include -#include -#include -#include "db/builder.h" -#include "db/db_iter.h" -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/log_writer.h" -#include "db/memtable.h" -#include "db/table_cache.h" -#include "db/version_set.h" -#include "db/write_batch_internal.h" -#include "leveldb/db.h" -#include "leveldb/env.h" -#include "leveldb/status.h" -#include "leveldb/table.h" -#include "leveldb/table_builder.h" -#include "port/port.h" -#include "table/block.h" -#include "table/merger.h" -#include "table/two_level_iterator.h" -#include "util/coding.h" -#include "util/logging.h" -#include "util/mutexlock.h" - -namespace leveldb { - -const int kNumNonTableCacheFiles = 10; - -// Information kept for every waiting writer -struct DBImpl::Writer { - Status status; - WriteBatch* batch; - bool sync; - bool done; - port::CondVar cv; - - explicit Writer(port::Mutex* mu) : cv(mu) { } -}; - -struct DBImpl::CompactionState { - Compaction* const compaction; - - // Sequence numbers < smallest_snapshot are not significant since we - // will never have to service a snapshot below smallest_snapshot. - // Therefore if we have seen a sequence number S <= smallest_snapshot, - // we can drop all entries for the same key with sequence numbers < S. - SequenceNumber smallest_snapshot; - - // Files produced by compaction - struct Output { - uint64_t number; - uint64_t file_size; - InternalKey smallest, largest; - }; - std::vector outputs; - - // State kept for output being generated - WritableFile* outfile; - TableBuilder* builder; - - uint64_t total_bytes; - - Output* current_output() { return &outputs[outputs.size()-1]; } - - explicit CompactionState(Compaction* c) - : compaction(c), - outfile(NULL), - builder(NULL), - total_bytes(0) { - } -}; - -// Fix user-supplied options to be reasonable -template -static void ClipToRange(T* ptr, V minvalue, V maxvalue) { - if (static_cast(*ptr) > maxvalue) *ptr = maxvalue; - if (static_cast(*ptr) < minvalue) *ptr = minvalue; -} -Options SanitizeOptions(const std::string& dbname, - const InternalKeyComparator* icmp, - const InternalFilterPolicy* ipolicy, - const Options& src) { - Options result = src; - result.comparator = icmp; - result.filter_policy = (src.filter_policy != NULL) ? ipolicy : NULL; - ClipToRange(&result.max_open_files, 64 + kNumNonTableCacheFiles, 50000); - ClipToRange(&result.write_buffer_size, 64<<10, 1<<30); - ClipToRange(&result.block_size, 1<<10, 4<<20); - if (result.info_log == NULL) { - // Open a log file in the same directory as the db - src.env->CreateDir(dbname); // In case it does not exist - src.env->RenameFile(InfoLogFileName(dbname), OldInfoLogFileName(dbname)); - Status s = src.env->NewLogger(InfoLogFileName(dbname), &result.info_log); - if (!s.ok()) { - // No place suitable for logging - result.info_log = NULL; - } - } - if (result.block_cache == NULL) { - result.block_cache = NewLRUCache(8 << 20); - } - return result; -} - -DBImpl::DBImpl(const Options& raw_options, const std::string& dbname) - : env_(raw_options.env), - internal_comparator_(raw_options.comparator), - internal_filter_policy_(raw_options.filter_policy), - options_(SanitizeOptions(dbname, &internal_comparator_, - &internal_filter_policy_, raw_options)), - owns_info_log_(options_.info_log != raw_options.info_log), - owns_cache_(options_.block_cache != raw_options.block_cache), - dbname_(dbname), - db_lock_(NULL), - shutting_down_(NULL), - bg_cv_(&mutex_), - mem_(new MemTable(internal_comparator_)), - imm_(NULL), - logfile_(NULL), - logfile_number_(0), - log_(NULL), - seed_(0), - tmp_batch_(new WriteBatch), - bg_compaction_scheduled_(false), - manual_compaction_(NULL) { - mem_->Ref(); - has_imm_.Release_Store(NULL); - - // Reserve ten files or so for other uses and give the rest to TableCache. - const int table_cache_size = options_.max_open_files - kNumNonTableCacheFiles; - table_cache_ = new TableCache(dbname_, &options_, table_cache_size); - - versions_ = new VersionSet(dbname_, &options_, table_cache_, - &internal_comparator_); -} - -DBImpl::~DBImpl() { - // Wait for background work to finish - mutex_.Lock(); - shutting_down_.Release_Store(this); // Any non-NULL value is ok - while (bg_compaction_scheduled_) { - bg_cv_.Wait(); - } - mutex_.Unlock(); - - if (db_lock_ != NULL) { - env_->UnlockFile(db_lock_); - } - - delete versions_; - if (mem_ != NULL) mem_->Unref(); - if (imm_ != NULL) imm_->Unref(); - delete tmp_batch_; - delete log_; - delete logfile_; - delete table_cache_; - - if (owns_info_log_) { - delete options_.info_log; - } - if (owns_cache_) { - delete options_.block_cache; - } -} - -Status DBImpl::NewDB() { - VersionEdit new_db; - new_db.SetComparatorName(user_comparator()->Name()); - new_db.SetLogNumber(0); - new_db.SetNextFile(2); - new_db.SetLastSequence(0); - - const std::string manifest = DescriptorFileName(dbname_, 1); - WritableFile* file; - Status s = env_->NewWritableFile(manifest, &file); - if (!s.ok()) { - return s; - } - { - log::Writer log(file); - std::string record; - new_db.EncodeTo(&record); - s = log.AddRecord(record); - if (s.ok()) { - s = file->Close(); - } - } - delete file; - if (s.ok()) { - // Make "CURRENT" file that points to the new manifest file. - s = SetCurrentFile(env_, dbname_, 1); - } else { - env_->DeleteFile(manifest); - } - return s; -} - -void DBImpl::MaybeIgnoreError(Status* s) const { - if (s->ok() || options_.paranoid_checks) { - // No change needed - } else { - Log(options_.info_log, "Ignoring error %s", s->ToString().c_str()); - *s = Status::OK(); - } -} - -void DBImpl::DeleteObsoleteFiles() { - if (!bg_error_.ok()) { - // After a background error, we don't know whether a new version may - // or may not have been committed, so we cannot safely garbage collect. - return; - } - - // Make a set of all of the live files - std::set live = pending_outputs_; - versions_->AddLiveFiles(&live); - - std::vector filenames; - env_->GetChildren(dbname_, &filenames); // Ignoring errors on purpose - uint64_t number; - FileType type; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type)) { - bool keep = true; - switch (type) { - case kLogFile: - keep = ((number >= versions_->LogNumber()) || - (number == versions_->PrevLogNumber())); - break; - case kDescriptorFile: - // Keep my manifest file, and any newer incarnations' - // (in case there is a race that allows other incarnations) - keep = (number >= versions_->ManifestFileNumber()); - break; - case kTableFile: - keep = (live.find(number) != live.end()); - break; - case kTempFile: - // Any temp files that are currently being written to must - // be recorded in pending_outputs_, which is inserted into "live" - keep = (live.find(number) != live.end()); - break; - case kCurrentFile: - case kDBLockFile: - case kInfoLogFile: - keep = true; - break; - } - - if (!keep) { - if (type == kTableFile) { - table_cache_->Evict(number); - } - Log(options_.info_log, "Delete type=%d #%lld\n", - int(type), - static_cast(number)); - env_->DeleteFile(dbname_ + "/" + filenames[i]); - } - } - } -} - -Status DBImpl::Recover(VersionEdit* edit) { - mutex_.AssertHeld(); - - // Ignore error from CreateDir since the creation of the DB is - // committed only when the descriptor is created, and this directory - // may already exist from a previous failed creation attempt. - env_->CreateDir(dbname_); - assert(db_lock_ == NULL); - Status s = env_->LockFile(LockFileName(dbname_), &db_lock_); - if (!s.ok()) { - return s; - } - - if (!env_->FileExists(CurrentFileName(dbname_))) { - if (options_.create_if_missing) { - s = NewDB(); - if (!s.ok()) { - return s; - } - } else { - return Status::InvalidArgument( - dbname_, "does not exist (create_if_missing is false)"); - } - } else { - if (options_.error_if_exists) { - return Status::InvalidArgument( - dbname_, "exists (error_if_exists is true)"); - } - } - - s = versions_->Recover(); - if (s.ok()) { - SequenceNumber max_sequence(0); - - // Recover from all newer log files than the ones named in the - // descriptor (new log files may have been added by the previous - // incarnation without registering them in the descriptor). - // - // Note that PrevLogNumber() is no longer used, but we pay - // attention to it in case we are recovering a database - // produced by an older version of leveldb. - const uint64_t min_log = versions_->LogNumber(); - const uint64_t prev_log = versions_->PrevLogNumber(); - std::vector filenames; - s = env_->GetChildren(dbname_, &filenames); - if (!s.ok()) { - return s; - } - std::set expected; - versions_->AddLiveFiles(&expected); - uint64_t number; - FileType type; - std::vector logs; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type)) { - expected.erase(number); - if (type == kLogFile && ((number >= min_log) || (number == prev_log))) - logs.push_back(number); - } - } - if (!expected.empty()) { - char buf[50]; - snprintf(buf, sizeof(buf), "%d missing files; e.g.", - static_cast(expected.size())); - return Status::Corruption(buf, TableFileName(dbname_, *(expected.begin()))); - } - - // Recover in the order in which the logs were generated - std::sort(logs.begin(), logs.end()); - for (size_t i = 0; i < logs.size(); i++) { - s = RecoverLogFile(logs[i], edit, &max_sequence); - - // The previous incarnation may not have written any MANIFEST - // records after allocating this log number. So we manually - // update the file number allocation counter in VersionSet. - versions_->MarkFileNumberUsed(logs[i]); - } - - if (s.ok()) { - if (versions_->LastSequence() < max_sequence) { - versions_->SetLastSequence(max_sequence); - } - } - } - - return s; -} - -Status DBImpl::RecoverLogFile(uint64_t log_number, - VersionEdit* edit, - SequenceNumber* max_sequence) { - struct LogReporter : public log::Reader::Reporter { - Env* env; - Logger* info_log; - const char* fname; - Status* status; // NULL if options_.paranoid_checks==false - virtual void Corruption(size_t bytes, const Status& s) { - Log(info_log, "%s%s: dropping %d bytes; %s", - (this->status == NULL ? "(ignoring error) " : ""), - fname, static_cast(bytes), s.ToString().c_str()); - if (this->status != NULL && this->status->ok()) *this->status = s; - } - }; - - mutex_.AssertHeld(); - - // Open the log file - std::string fname = LogFileName(dbname_, log_number); - SequentialFile* file; - Status status = env_->NewSequentialFile(fname, &file); - if (!status.ok()) { - MaybeIgnoreError(&status); - return status; - } - - // Create the log reader. - LogReporter reporter; - reporter.env = env_; - reporter.info_log = options_.info_log; - reporter.fname = fname.c_str(); - reporter.status = (options_.paranoid_checks ? &status : NULL); - // We intentionally make log::Reader do checksumming even if - // paranoid_checks==false so that corruptions cause entire commits - // to be skipped instead of propagating bad information (like overly - // large sequence numbers). - log::Reader reader(file, &reporter, true/*checksum*/, - 0/*initial_offset*/); - Log(options_.info_log, "Recovering log #%llu", - (unsigned long long) log_number); - - // Read all the records and add to a memtable - std::string scratch; - Slice record; - WriteBatch batch; - MemTable* mem = NULL; - while (reader.ReadRecord(&record, &scratch) && - status.ok()) { - if (record.size() < 12) { - reporter.Corruption( - record.size(), Status::Corruption("log record too small")); - continue; - } - WriteBatchInternal::SetContents(&batch, record); - - if (mem == NULL) { - mem = new MemTable(internal_comparator_); - mem->Ref(); - } - status = WriteBatchInternal::InsertInto(&batch, mem); - MaybeIgnoreError(&status); - if (!status.ok()) { - break; - } - const SequenceNumber last_seq = - WriteBatchInternal::Sequence(&batch) + - WriteBatchInternal::Count(&batch) - 1; - if (last_seq > *max_sequence) { - *max_sequence = last_seq; - } - - if (mem->ApproximateMemoryUsage() > options_.write_buffer_size) { - status = WriteLevel0Table(mem, edit, NULL); - if (!status.ok()) { - // Reflect errors immediately so that conditions like full - // file-systems cause the DB::Open() to fail. - break; - } - mem->Unref(); - mem = NULL; - } - } - - if (status.ok() && mem != NULL) { - status = WriteLevel0Table(mem, edit, NULL); - // Reflect errors immediately so that conditions like full - // file-systems cause the DB::Open() to fail. - } - - if (mem != NULL) mem->Unref(); - delete file; - return status; -} - -Status DBImpl::WriteLevel0Table(MemTable* mem, VersionEdit* edit, - Version* base) { - mutex_.AssertHeld(); - const uint64_t start_micros = env_->NowMicros(); - FileMetaData meta; - meta.number = versions_->NewFileNumber(); - pending_outputs_.insert(meta.number); - Iterator* iter = mem->NewIterator(); - Log(options_.info_log, "Level-0 table #%llu: started", - (unsigned long long) meta.number); - - Status s; - { - mutex_.Unlock(); - s = BuildTable(dbname_, env_, options_, table_cache_, iter, &meta); - mutex_.Lock(); - } - - Log(options_.info_log, "Level-0 table #%llu: %lld bytes %s", - (unsigned long long) meta.number, - (unsigned long long) meta.file_size, - s.ToString().c_str()); - delete iter; - pending_outputs_.erase(meta.number); - - - // Note that if file_size is zero, the file has been deleted and - // should not be added to the manifest. - int level = 0; - if (s.ok() && meta.file_size > 0) { - const Slice min_user_key = meta.smallest.user_key(); - const Slice max_user_key = meta.largest.user_key(); - if (base != NULL) { - level = base->PickLevelForMemTableOutput(min_user_key, max_user_key); - } - edit->AddFile(level, meta.number, meta.file_size, - meta.smallest, meta.largest); - } - - CompactionStats stats; - stats.micros = env_->NowMicros() - start_micros; - stats.bytes_written = meta.file_size; - stats_[level].Add(stats); - return s; -} - -void DBImpl::CompactMemTable() { - mutex_.AssertHeld(); - assert(imm_ != NULL); - - // Save the contents of the memtable as a new Table - VersionEdit edit; - Version* base = versions_->current(); - base->Ref(); - Status s = WriteLevel0Table(imm_, &edit, base); - base->Unref(); - - if (s.ok() && shutting_down_.Acquire_Load()) { - s = Status::IOError("Deleting DB during memtable compaction"); - } - - // Replace immutable memtable with the generated Table - if (s.ok()) { - edit.SetPrevLogNumber(0); - edit.SetLogNumber(logfile_number_); // Earlier logs no longer needed - s = versions_->LogAndApply(&edit, &mutex_); - } - - if (s.ok()) { - // Commit to the new state - imm_->Unref(); - imm_ = NULL; - has_imm_.Release_Store(NULL); - DeleteObsoleteFiles(); - } else { - RecordBackgroundError(s); - } -} - -void DBImpl::CompactRange(const Slice* begin, const Slice* end) { - int max_level_with_files = 1; - { - MutexLock l(&mutex_); - Version* base = versions_->current(); - for (int level = 1; level < config::kNumLevels; level++) { - if (base->OverlapInLevel(level, begin, end)) { - max_level_with_files = level; - } - } - } - TEST_CompactMemTable(); // TODO(sanjay): Skip if memtable does not overlap - for (int level = 0; level < max_level_with_files; level++) { - TEST_CompactRange(level, begin, end); - } -} - -void DBImpl::TEST_CompactRange(int level, const Slice* begin,const Slice* end) { - assert(level >= 0); - assert(level + 1 < config::kNumLevels); - - InternalKey begin_storage, end_storage; - - ManualCompaction manual; - manual.level = level; - manual.done = false; - if (begin == NULL) { - manual.begin = NULL; - } else { - begin_storage = InternalKey(*begin, kMaxSequenceNumber, kValueTypeForSeek); - manual.begin = &begin_storage; - } - if (end == NULL) { - manual.end = NULL; - } else { - end_storage = InternalKey(*end, 0, static_cast(0)); - manual.end = &end_storage; - } - - MutexLock l(&mutex_); - while (!manual.done && !shutting_down_.Acquire_Load() && bg_error_.ok()) { - if (manual_compaction_ == NULL) { // Idle - manual_compaction_ = &manual; - MaybeScheduleCompaction(); - } else { // Running either my compaction or another compaction. - bg_cv_.Wait(); - } - } - if (manual_compaction_ == &manual) { - // Cancel my manual compaction since we aborted early for some reason. - manual_compaction_ = NULL; - } -} - -Status DBImpl::TEST_CompactMemTable() { - // NULL batch means just wait for earlier writes to be done - Status s = Write(WriteOptions(), NULL); - if (s.ok()) { - // Wait until the compaction completes - MutexLock l(&mutex_); - while (imm_ != NULL && bg_error_.ok()) { - bg_cv_.Wait(); - } - if (imm_ != NULL) { - s = bg_error_; - } - } - return s; -} - -void DBImpl::RecordBackgroundError(const Status& s) { - mutex_.AssertHeld(); - if (bg_error_.ok()) { - bg_error_ = s; - bg_cv_.SignalAll(); - } -} - -void DBImpl::MaybeScheduleCompaction() { - mutex_.AssertHeld(); - if (bg_compaction_scheduled_) { - // Already scheduled - } else if (shutting_down_.Acquire_Load()) { - // DB is being deleted; no more background compactions - } else if (!bg_error_.ok()) { - // Already got an error; no more changes - } else if (imm_ == NULL && - manual_compaction_ == NULL && - !versions_->NeedsCompaction()) { - // No work to be done - } else { - bg_compaction_scheduled_ = true; - env_->Schedule(&DBImpl::BGWork, this); - } -} - -void DBImpl::BGWork(void* db) { - reinterpret_cast(db)->BackgroundCall(); -} - -void DBImpl::BackgroundCall() { - MutexLock l(&mutex_); - assert(bg_compaction_scheduled_); - if (shutting_down_.Acquire_Load()) { - // No more background work when shutting down. - } else if (!bg_error_.ok()) { - // No more background work after a background error. - } else { - BackgroundCompaction(); - } - - bg_compaction_scheduled_ = false; - - // Previous compaction may have produced too many files in a level, - // so reschedule another compaction if needed. - MaybeScheduleCompaction(); - bg_cv_.SignalAll(); -} - -void DBImpl::BackgroundCompaction() { - mutex_.AssertHeld(); - - if (imm_ != NULL) { - CompactMemTable(); - return; - } - - Compaction* c; - bool is_manual = (manual_compaction_ != NULL); - InternalKey manual_end; - if (is_manual) { - ManualCompaction* m = manual_compaction_; - c = versions_->CompactRange(m->level, m->begin, m->end); - m->done = (c == NULL); - if (c != NULL) { - manual_end = c->input(0, c->num_input_files(0) - 1)->largest; - } - Log(options_.info_log, - "Manual compaction at level-%d from %s .. %s; will stop at %s\n", - m->level, - (m->begin ? m->begin->DebugString().c_str() : "(begin)"), - (m->end ? m->end->DebugString().c_str() : "(end)"), - (m->done ? "(end)" : manual_end.DebugString().c_str())); - } else { - c = versions_->PickCompaction(); - } - - Status status; - if (c == NULL) { - // Nothing to do - } else if (!is_manual && c->IsTrivialMove()) { - // Move file to next level - assert(c->num_input_files(0) == 1); - FileMetaData* f = c->input(0, 0); - c->edit()->DeleteFile(c->level(), f->number); - c->edit()->AddFile(c->level() + 1, f->number, f->file_size, - f->smallest, f->largest); - status = versions_->LogAndApply(c->edit(), &mutex_); - if (!status.ok()) { - RecordBackgroundError(status); - } - VersionSet::LevelSummaryStorage tmp; - Log(options_.info_log, "Moved #%lld to level-%d %lld bytes %s: %s\n", - static_cast(f->number), - c->level() + 1, - static_cast(f->file_size), - status.ToString().c_str(), - versions_->LevelSummary(&tmp)); - } else { - CompactionState* compact = new CompactionState(c); - status = DoCompactionWork(compact); - if (!status.ok()) { - RecordBackgroundError(status); - } - CleanupCompaction(compact); - c->ReleaseInputs(); - DeleteObsoleteFiles(); - } - delete c; - - if (status.ok()) { - // Done - } else if (shutting_down_.Acquire_Load()) { - // Ignore compaction errors found during shutting down - } else { - Log(options_.info_log, - "Compaction error: %s", status.ToString().c_str()); - } - - if (is_manual) { - ManualCompaction* m = manual_compaction_; - if (!status.ok()) { - m->done = true; - } - if (!m->done) { - // We only compacted part of the requested range. Update *m - // to the range that is left to be compacted. - m->tmp_storage = manual_end; - m->begin = &m->tmp_storage; - } - manual_compaction_ = NULL; - } -} - -void DBImpl::CleanupCompaction(CompactionState* compact) { - mutex_.AssertHeld(); - if (compact->builder != NULL) { - // May happen if we get a shutdown call in the middle of compaction - compact->builder->Abandon(); - delete compact->builder; - } else { - assert(compact->outfile == NULL); - } - delete compact->outfile; - for (size_t i = 0; i < compact->outputs.size(); i++) { - const CompactionState::Output& out = compact->outputs[i]; - pending_outputs_.erase(out.number); - } - delete compact; -} - -Status DBImpl::OpenCompactionOutputFile(CompactionState* compact) { - assert(compact != NULL); - assert(compact->builder == NULL); - uint64_t file_number; - { - mutex_.Lock(); - file_number = versions_->NewFileNumber(); - pending_outputs_.insert(file_number); - CompactionState::Output out; - out.number = file_number; - out.smallest.Clear(); - out.largest.Clear(); - compact->outputs.push_back(out); - mutex_.Unlock(); - } - - // Make the output file - std::string fname = TableFileName(dbname_, file_number); - Status s = env_->NewWritableFile(fname, &compact->outfile); - if (s.ok()) { - compact->builder = new TableBuilder(options_, compact->outfile); - } - return s; -} - -Status DBImpl::FinishCompactionOutputFile(CompactionState* compact, - Iterator* input) { - assert(compact != NULL); - assert(compact->outfile != NULL); - assert(compact->builder != NULL); - - const uint64_t output_number = compact->current_output()->number; - assert(output_number != 0); - - // Check for iterator errors - Status s = input->status(); - const uint64_t current_entries = compact->builder->NumEntries(); - if (s.ok()) { - s = compact->builder->Finish(); - } else { - compact->builder->Abandon(); - } - const uint64_t current_bytes = compact->builder->FileSize(); - compact->current_output()->file_size = current_bytes; - compact->total_bytes += current_bytes; - delete compact->builder; - compact->builder = NULL; - - // Finish and check for file errors - if (s.ok()) { - s = compact->outfile->Sync(); - } - if (s.ok()) { - s = compact->outfile->Close(); - } - delete compact->outfile; - compact->outfile = NULL; - - if (s.ok() && current_entries > 0) { - // Verify that the table is usable - Iterator* iter = table_cache_->NewIterator(ReadOptions(), - output_number, - current_bytes); - s = iter->status(); - delete iter; - if (s.ok()) { - Log(options_.info_log, - "Generated table #%llu: %lld keys, %lld bytes", - (unsigned long long) output_number, - (unsigned long long) current_entries, - (unsigned long long) current_bytes); - } - } - return s; -} - - -Status DBImpl::InstallCompactionResults(CompactionState* compact) { - mutex_.AssertHeld(); - Log(options_.info_log, "Compacted %d@%d + %d@%d files => %lld bytes", - compact->compaction->num_input_files(0), - compact->compaction->level(), - compact->compaction->num_input_files(1), - compact->compaction->level() + 1, - static_cast(compact->total_bytes)); - - // Add compaction outputs - compact->compaction->AddInputDeletions(compact->compaction->edit()); - const int level = compact->compaction->level(); - for (size_t i = 0; i < compact->outputs.size(); i++) { - const CompactionState::Output& out = compact->outputs[i]; - compact->compaction->edit()->AddFile( - level + 1, - out.number, out.file_size, out.smallest, out.largest); - } - return versions_->LogAndApply(compact->compaction->edit(), &mutex_); -} - -Status DBImpl::DoCompactionWork(CompactionState* compact) { - const uint64_t start_micros = env_->NowMicros(); - int64_t imm_micros = 0; // Micros spent doing imm_ compactions - - Log(options_.info_log, "Compacting %d@%d + %d@%d files", - compact->compaction->num_input_files(0), - compact->compaction->level(), - compact->compaction->num_input_files(1), - compact->compaction->level() + 1); - - assert(versions_->NumLevelFiles(compact->compaction->level()) > 0); - assert(compact->builder == NULL); - assert(compact->outfile == NULL); - if (snapshots_.empty()) { - compact->smallest_snapshot = versions_->LastSequence(); - } else { - compact->smallest_snapshot = snapshots_.oldest()->number_; - } - - // Release mutex while we're actually doing the compaction work - mutex_.Unlock(); - - Iterator* input = versions_->MakeInputIterator(compact->compaction); - input->SeekToFirst(); - Status status; - ParsedInternalKey ikey; - std::string current_user_key; - bool has_current_user_key = false; - SequenceNumber last_sequence_for_key = kMaxSequenceNumber; - for (; input->Valid() && !shutting_down_.Acquire_Load(); ) { - // Prioritize immutable compaction work - if (has_imm_.NoBarrier_Load() != NULL) { - const uint64_t imm_start = env_->NowMicros(); - mutex_.Lock(); - if (imm_ != NULL) { - CompactMemTable(); - bg_cv_.SignalAll(); // Wakeup MakeRoomForWrite() if necessary - } - mutex_.Unlock(); - imm_micros += (env_->NowMicros() - imm_start); - } - - Slice key = input->key(); - if (compact->compaction->ShouldStopBefore(key) && - compact->builder != NULL) { - status = FinishCompactionOutputFile(compact, input); - if (!status.ok()) { - break; - } - } - - // Handle key/value, add to state, etc. - bool drop = false; - if (!ParseInternalKey(key, &ikey)) { - // Do not hide error keys - current_user_key.clear(); - has_current_user_key = false; - last_sequence_for_key = kMaxSequenceNumber; - } else { - if (!has_current_user_key || - user_comparator()->Compare(ikey.user_key, - Slice(current_user_key)) != 0) { - // First occurrence of this user key - current_user_key.assign(ikey.user_key.data(), ikey.user_key.size()); - has_current_user_key = true; - last_sequence_for_key = kMaxSequenceNumber; - } - - if (last_sequence_for_key <= compact->smallest_snapshot) { - // Hidden by an newer entry for same user key - drop = true; // (A) - } else if (ikey.type == kTypeDeletion && - ikey.sequence <= compact->smallest_snapshot && - compact->compaction->IsBaseLevelForKey(ikey.user_key)) { - // For this user key: - // (1) there is no data in higher levels - // (2) data in lower levels will have larger sequence numbers - // (3) data in layers that are being compacted here and have - // smaller sequence numbers will be dropped in the next - // few iterations of this loop (by rule (A) above). - // Therefore this deletion marker is obsolete and can be dropped. - drop = true; - } - - last_sequence_for_key = ikey.sequence; - } -#if 0 - Log(options_.info_log, - " Compact: %s, seq %d, type: %d %d, drop: %d, is_base: %d, " - "%d smallest_snapshot: %d", - ikey.user_key.ToString().c_str(), - (int)ikey.sequence, ikey.type, kTypeValue, drop, - compact->compaction->IsBaseLevelForKey(ikey.user_key), - (int)last_sequence_for_key, (int)compact->smallest_snapshot); -#endif - - if (!drop) { - // Open output file if necessary - if (compact->builder == NULL) { - status = OpenCompactionOutputFile(compact); - if (!status.ok()) { - break; - } - } - if (compact->builder->NumEntries() == 0) { - compact->current_output()->smallest.DecodeFrom(key); - } - compact->current_output()->largest.DecodeFrom(key); - compact->builder->Add(key, input->value()); - - // Close output file if it is big enough - if (compact->builder->FileSize() >= - compact->compaction->MaxOutputFileSize()) { - status = FinishCompactionOutputFile(compact, input); - if (!status.ok()) { - break; - } - } - } - - input->Next(); - } - - if (status.ok() && shutting_down_.Acquire_Load()) { - status = Status::IOError("Deleting DB during compaction"); - } - if (status.ok() && compact->builder != NULL) { - status = FinishCompactionOutputFile(compact, input); - } - if (status.ok()) { - status = input->status(); - } - delete input; - input = NULL; - - CompactionStats stats; - stats.micros = env_->NowMicros() - start_micros - imm_micros; - for (int which = 0; which < 2; which++) { - for (int i = 0; i < compact->compaction->num_input_files(which); i++) { - stats.bytes_read += compact->compaction->input(which, i)->file_size; - } - } - for (size_t i = 0; i < compact->outputs.size(); i++) { - stats.bytes_written += compact->outputs[i].file_size; - } - - mutex_.Lock(); - stats_[compact->compaction->level() + 1].Add(stats); - - if (status.ok()) { - status = InstallCompactionResults(compact); - } - if (!status.ok()) { - RecordBackgroundError(status); - } - VersionSet::LevelSummaryStorage tmp; - Log(options_.info_log, - "compacted to: %s", versions_->LevelSummary(&tmp)); - return status; -} - -namespace { -struct IterState { - port::Mutex* mu; - Version* version; - MemTable* mem; - MemTable* imm; -}; - -static void CleanupIteratorState(void* arg1, void* arg2) { - IterState* state = reinterpret_cast(arg1); - state->mu->Lock(); - state->mem->Unref(); - if (state->imm != NULL) state->imm->Unref(); - state->version->Unref(); - state->mu->Unlock(); - delete state; -} -} // namespace - -Iterator* DBImpl::NewInternalIterator(const ReadOptions& options, - SequenceNumber* latest_snapshot, - uint32_t* seed) { - IterState* cleanup = new IterState; - mutex_.Lock(); - *latest_snapshot = versions_->LastSequence(); - - // Collect together all needed child iterators - std::vector list; - list.push_back(mem_->NewIterator()); - mem_->Ref(); - if (imm_ != NULL) { - list.push_back(imm_->NewIterator()); - imm_->Ref(); - } - versions_->current()->AddIterators(options, &list); - Iterator* internal_iter = - NewMergingIterator(&internal_comparator_, &list[0], list.size()); - versions_->current()->Ref(); - - cleanup->mu = &mutex_; - cleanup->mem = mem_; - cleanup->imm = imm_; - cleanup->version = versions_->current(); - internal_iter->RegisterCleanup(CleanupIteratorState, cleanup, NULL); - - *seed = ++seed_; - mutex_.Unlock(); - return internal_iter; -} - -Iterator* DBImpl::TEST_NewInternalIterator() { - SequenceNumber ignored; - uint32_t ignored_seed; - return NewInternalIterator(ReadOptions(), &ignored, &ignored_seed); -} - -int64_t DBImpl::TEST_MaxNextLevelOverlappingBytes() { - MutexLock l(&mutex_); - return versions_->MaxNextLevelOverlappingBytes(); -} - -Status DBImpl::Get(const ReadOptions& options, - const Slice& key, - std::string* value) { - Status s; - MutexLock l(&mutex_); - SequenceNumber snapshot; - if (options.snapshot != NULL) { - snapshot = reinterpret_cast(options.snapshot)->number_; - } else { - snapshot = versions_->LastSequence(); - } - - MemTable* mem = mem_; - MemTable* imm = imm_; - Version* current = versions_->current(); - mem->Ref(); - if (imm != NULL) imm->Ref(); - current->Ref(); - - bool have_stat_update = false; - Version::GetStats stats; - - // Unlock while reading from files and memtables - { - mutex_.Unlock(); - // First look in the memtable, then in the immutable memtable (if any). - LookupKey lkey(key, snapshot); - if (mem->Get(lkey, value, &s)) { - // Done - } else if (imm != NULL && imm->Get(lkey, value, &s)) { - // Done - } else { - s = current->Get(options, lkey, value, &stats); - have_stat_update = true; - } - mutex_.Lock(); - } - - if (have_stat_update && current->UpdateStats(stats)) { - MaybeScheduleCompaction(); - } - mem->Unref(); - if (imm != NULL) imm->Unref(); - current->Unref(); - return s; -} - -Iterator* DBImpl::NewIterator(const ReadOptions& options) { - SequenceNumber latest_snapshot; - uint32_t seed; - Iterator* iter = NewInternalIterator(options, &latest_snapshot, &seed); - return NewDBIterator( - this, user_comparator(), iter, - (options.snapshot != NULL - ? reinterpret_cast(options.snapshot)->number_ - : latest_snapshot), - seed); -} - -void DBImpl::RecordReadSample(Slice key) { - MutexLock l(&mutex_); - if (versions_->current()->RecordReadSample(key)) { - MaybeScheduleCompaction(); - } -} - -const Snapshot* DBImpl::GetSnapshot() { - MutexLock l(&mutex_); - return snapshots_.New(versions_->LastSequence()); -} - -void DBImpl::ReleaseSnapshot(const Snapshot* s) { - MutexLock l(&mutex_); - snapshots_.Delete(reinterpret_cast(s)); -} - -// Convenience methods -Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) { - return DB::Put(o, key, val); -} - -Status DBImpl::Delete(const WriteOptions& options, const Slice& key) { - return DB::Delete(options, key); -} - -Status DBImpl::Write(const WriteOptions& options, WriteBatch* my_batch) { - Writer w(&mutex_); - w.batch = my_batch; - w.sync = options.sync; - w.done = false; - - MutexLock l(&mutex_); - writers_.push_back(&w); - while (!w.done && &w != writers_.front()) { - w.cv.Wait(); - } - if (w.done) { - return w.status; - } - - // May temporarily unlock and wait. - Status status = MakeRoomForWrite(my_batch == NULL); - uint64_t last_sequence = versions_->LastSequence(); - Writer* last_writer = &w; - if (status.ok() && my_batch != NULL) { // NULL batch is for compactions - WriteBatch* updates = BuildBatchGroup(&last_writer); - WriteBatchInternal::SetSequence(updates, last_sequence + 1); - last_sequence += WriteBatchInternal::Count(updates); - - // Add to log and apply to memtable. We can release the lock - // during this phase since &w is currently responsible for logging - // and protects against concurrent loggers and concurrent writes - // into mem_. - { - mutex_.Unlock(); - status = log_->AddRecord(WriteBatchInternal::Contents(updates)); - bool sync_error = false; - if (status.ok() && options.sync) { - status = logfile_->Sync(); - if (!status.ok()) { - sync_error = true; - } - } - if (status.ok()) { - status = WriteBatchInternal::InsertInto(updates, mem_); - } - mutex_.Lock(); - if (sync_error) { - // The state of the log file is indeterminate: the log record we - // just added may or may not show up when the DB is re-opened. - // So we force the DB into a mode where all future writes fail. - RecordBackgroundError(status); - } - } - if (updates == tmp_batch_) tmp_batch_->Clear(); - - versions_->SetLastSequence(last_sequence); - } - - while (true) { - Writer* ready = writers_.front(); - writers_.pop_front(); - if (ready != &w) { - ready->status = status; - ready->done = true; - ready->cv.Signal(); - } - if (ready == last_writer) break; - } - - // Notify new head of write queue - if (!writers_.empty()) { - writers_.front()->cv.Signal(); - } - - return status; -} - -// REQUIRES: Writer list must be non-empty -// REQUIRES: First writer must have a non-NULL batch -WriteBatch* DBImpl::BuildBatchGroup(Writer** last_writer) { - assert(!writers_.empty()); - Writer* first = writers_.front(); - WriteBatch* result = first->batch; - assert(result != NULL); - - size_t size = WriteBatchInternal::ByteSize(first->batch); - - // Allow the group to grow up to a maximum size, but if the - // original write is small, limit the growth so we do not slow - // down the small write too much. - size_t max_size = 1 << 20; - if (size <= (128<<10)) { - max_size = size + (128<<10); - } - - *last_writer = first; - std::deque::iterator iter = writers_.begin(); - ++iter; // Advance past "first" - for (; iter != writers_.end(); ++iter) { - Writer* w = *iter; - if (w->sync && !first->sync) { - // Do not include a sync write into a batch handled by a non-sync write. - break; - } - - if (w->batch != NULL) { - size += WriteBatchInternal::ByteSize(w->batch); - if (size > max_size) { - // Do not make batch too big - break; - } - - // Append to *result - if (result == first->batch) { - // Switch to temporary batch instead of disturbing caller's batch - result = tmp_batch_; - assert(WriteBatchInternal::Count(result) == 0); - WriteBatchInternal::Append(result, first->batch); - } - WriteBatchInternal::Append(result, w->batch); - } - *last_writer = w; - } - return result; -} - -// REQUIRES: mutex_ is held -// REQUIRES: this thread is currently at the front of the writer queue -Status DBImpl::MakeRoomForWrite(bool force) { - mutex_.AssertHeld(); - assert(!writers_.empty()); - bool allow_delay = !force; - Status s; - while (true) { - if (!bg_error_.ok()) { - // Yield previous error - s = bg_error_; - break; - } else if ( - allow_delay && - versions_->NumLevelFiles(0) >= config::kL0_SlowdownWritesTrigger) { - // We are getting close to hitting a hard limit on the number of - // L0 files. Rather than delaying a single write by several - // seconds when we hit the hard limit, start delaying each - // individual write by 1ms to reduce latency variance. Also, - // this delay hands over some CPU to the compaction thread in - // case it is sharing the same core as the writer. - mutex_.Unlock(); - env_->SleepForMicroseconds(1000); - allow_delay = false; // Do not delay a single write more than once - mutex_.Lock(); - } else if (!force && - (mem_->ApproximateMemoryUsage() <= options_.write_buffer_size)) { - // There is room in current memtable - break; - } else if (imm_ != NULL) { - // We have filled up the current memtable, but the previous - // one is still being compacted, so we wait. - Log(options_.info_log, "Current memtable full; waiting...\n"); - bg_cv_.Wait(); - } else if (versions_->NumLevelFiles(0) >= config::kL0_StopWritesTrigger) { - // There are too many level-0 files. - Log(options_.info_log, "Too many L0 files; waiting...\n"); - bg_cv_.Wait(); - } else { - // Attempt to switch to a new memtable and trigger compaction of old - assert(versions_->PrevLogNumber() == 0); - uint64_t new_log_number = versions_->NewFileNumber(); - WritableFile* lfile = NULL; - s = env_->NewWritableFile(LogFileName(dbname_, new_log_number), &lfile); - if (!s.ok()) { - // Avoid chewing through file number space in a tight loop. - versions_->ReuseFileNumber(new_log_number); - break; - } - delete log_; - delete logfile_; - logfile_ = lfile; - logfile_number_ = new_log_number; - log_ = new log::Writer(lfile); - imm_ = mem_; - has_imm_.Release_Store(imm_); - mem_ = new MemTable(internal_comparator_); - mem_->Ref(); - force = false; // Do not force another compaction if have room - MaybeScheduleCompaction(); - } - } - return s; -} - -bool DBImpl::GetProperty(const Slice& property, std::string* value) { - value->clear(); - - MutexLock l(&mutex_); - Slice in = property; - Slice prefix("leveldb."); - if (!in.starts_with(prefix)) return false; - in.remove_prefix(prefix.size()); - - if (in.starts_with("num-files-at-level")) { - in.remove_prefix(strlen("num-files-at-level")); - uint64_t level; - bool ok = ConsumeDecimalNumber(&in, &level) && in.empty(); - if (!ok || level >= config::kNumLevels) { - return false; - } else { - char buf[100]; - snprintf(buf, sizeof(buf), "%d", - versions_->NumLevelFiles(static_cast(level))); - *value = buf; - return true; - } - } else if (in == "stats") { - char buf[200]; - snprintf(buf, sizeof(buf), - " Compactions\n" - "Level Files Size(MB) Time(sec) Read(MB) Write(MB)\n" - "--------------------------------------------------\n" - ); - value->append(buf); - for (int level = 0; level < config::kNumLevels; level++) { - int files = versions_->NumLevelFiles(level); - if (stats_[level].micros > 0 || files > 0) { - snprintf( - buf, sizeof(buf), - "%3d %8d %8.0f %9.0f %8.0f %9.0f\n", - level, - files, - versions_->NumLevelBytes(level) / 1048576.0, - stats_[level].micros / 1e6, - stats_[level].bytes_read / 1048576.0, - stats_[level].bytes_written / 1048576.0); - value->append(buf); - } - } - return true; - } else if (in == "sstables") { - *value = versions_->current()->DebugString(); - return true; - } - - return false; -} - -void DBImpl::GetApproximateSizes( - const Range* range, int n, - uint64_t* sizes) { - // TODO(opt): better implementation - Version* v; - { - MutexLock l(&mutex_); - versions_->current()->Ref(); - v = versions_->current(); - } - - for (int i = 0; i < n; i++) { - // Convert user_key into a corresponding internal key. - InternalKey k1(range[i].start, kMaxSequenceNumber, kValueTypeForSeek); - InternalKey k2(range[i].limit, kMaxSequenceNumber, kValueTypeForSeek); - uint64_t start = versions_->ApproximateOffsetOf(v, k1); - uint64_t limit = versions_->ApproximateOffsetOf(v, k2); - sizes[i] = (limit >= start ? limit - start : 0); - } - - { - MutexLock l(&mutex_); - v->Unref(); - } -} - -// Default implementations of convenience methods that subclasses of DB -// can call if they wish -Status DB::Put(const WriteOptions& opt, const Slice& key, const Slice& value) { - WriteBatch batch; - batch.Put(key, value); - return Write(opt, &batch); -} - -Status DB::Delete(const WriteOptions& opt, const Slice& key) { - WriteBatch batch; - batch.Delete(key); - return Write(opt, &batch); -} - -DB::~DB() { } - -Status DB::Open(const Options& options, const std::string& dbname, - DB** dbptr) { - *dbptr = NULL; - - DBImpl* impl = new DBImpl(options, dbname); - impl->mutex_.Lock(); - VersionEdit edit; - Status s = impl->Recover(&edit); // Handles create_if_missing, error_if_exists - if (s.ok()) { - uint64_t new_log_number = impl->versions_->NewFileNumber(); - WritableFile* lfile; - s = options.env->NewWritableFile(LogFileName(dbname, new_log_number), - &lfile); - if (s.ok()) { - edit.SetLogNumber(new_log_number); - impl->logfile_ = lfile; - impl->logfile_number_ = new_log_number; - impl->log_ = new log::Writer(lfile); - s = impl->versions_->LogAndApply(&edit, &impl->mutex_); - } - if (s.ok()) { - impl->DeleteObsoleteFiles(); - impl->MaybeScheduleCompaction(); - } - } - impl->mutex_.Unlock(); - if (s.ok()) { - *dbptr = impl; - } else { - delete impl; - } - return s; -} - -Snapshot::~Snapshot() { -} - -Status DestroyDB(const std::string& dbname, const Options& options) { - Env* env = options.env; - std::vector filenames; - // Ignore error in case directory does not exist - env->GetChildren(dbname, &filenames); - if (filenames.empty()) { - return Status::OK(); - } - - FileLock* lock; - const std::string lockname = LockFileName(dbname); - Status result = env->LockFile(lockname, &lock); - if (result.ok()) { - uint64_t number; - FileType type; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type) && - type != kDBLockFile) { // Lock file will be deleted at end - Status del = env->DeleteFile(dbname + "/" + filenames[i]); - if (result.ok() && !del.ok()) { - result = del; - } - } - } - env->UnlockFile(lock); // Ignore error since state is already gone - env->DeleteFile(lockname); - env->DeleteDir(dbname); // Ignore error in case dir contains other files - } - return result; -} - -} // namespace leveldb diff --git a/src/leveldb/db/db_impl.h b/src/leveldb/db/db_impl.h deleted file mode 100644 index cfc998164a..0000000000 --- a/src/leveldb/db/db_impl.h +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_DB_IMPL_H_ -#define STORAGE_LEVELDB_DB_DB_IMPL_H_ - -#include -#include -#include "db/dbformat.h" -#include "db/log_writer.h" -#include "db/snapshot.h" -#include "leveldb/db.h" -#include "leveldb/env.h" -#include "port/port.h" -#include "port/thread_annotations.h" - -namespace leveldb { - -class MemTable; -class TableCache; -class Version; -class VersionEdit; -class VersionSet; - -class DBImpl : public DB { - public: - DBImpl(const Options& options, const std::string& dbname); - virtual ~DBImpl(); - - // Implementations of the DB interface - virtual Status Put(const WriteOptions&, const Slice& key, const Slice& value); - virtual Status Delete(const WriteOptions&, const Slice& key); - virtual Status Write(const WriteOptions& options, WriteBatch* updates); - virtual Status Get(const ReadOptions& options, - const Slice& key, - std::string* value); - virtual Iterator* NewIterator(const ReadOptions&); - virtual const Snapshot* GetSnapshot(); - virtual void ReleaseSnapshot(const Snapshot* snapshot); - virtual bool GetProperty(const Slice& property, std::string* value); - virtual void GetApproximateSizes(const Range* range, int n, uint64_t* sizes); - virtual void CompactRange(const Slice* begin, const Slice* end); - - // Extra methods (for testing) that are not in the public DB interface - - // Compact any files in the named level that overlap [*begin,*end] - void TEST_CompactRange(int level, const Slice* begin, const Slice* end); - - // Force current memtable contents to be compacted. - Status TEST_CompactMemTable(); - - // Return an internal iterator over the current state of the database. - // The keys of this iterator are internal keys (see format.h). - // The returned iterator should be deleted when no longer needed. - Iterator* TEST_NewInternalIterator(); - - // Return the maximum overlapping data (in bytes) at next level for any - // file at a level >= 1. - int64_t TEST_MaxNextLevelOverlappingBytes(); - - // Record a sample of bytes read at the specified internal key. - // Samples are taken approximately once every config::kReadBytesPeriod - // bytes. - void RecordReadSample(Slice key); - - private: - friend class DB; - struct CompactionState; - struct Writer; - - Iterator* NewInternalIterator(const ReadOptions&, - SequenceNumber* latest_snapshot, - uint32_t* seed); - - Status NewDB(); - - // Recover the descriptor from persistent storage. May do a significant - // amount of work to recover recently logged updates. Any changes to - // be made to the descriptor are added to *edit. - Status Recover(VersionEdit* edit) EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - void MaybeIgnoreError(Status* s) const; - - // Delete any unneeded files and stale in-memory entries. - void DeleteObsoleteFiles(); - - // Compact the in-memory write buffer to disk. Switches to a new - // log-file/memtable and writes a new descriptor iff successful. - // Errors are recorded in bg_error_. - void CompactMemTable() EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - Status RecoverLogFile(uint64_t log_number, - VersionEdit* edit, - SequenceNumber* max_sequence) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - Status WriteLevel0Table(MemTable* mem, VersionEdit* edit, Version* base) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - Status MakeRoomForWrite(bool force /* compact even if there is room? */) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - WriteBatch* BuildBatchGroup(Writer** last_writer); - - void RecordBackgroundError(const Status& s); - - void MaybeScheduleCompaction() EXCLUSIVE_LOCKS_REQUIRED(mutex_); - static void BGWork(void* db); - void BackgroundCall(); - void BackgroundCompaction() EXCLUSIVE_LOCKS_REQUIRED(mutex_); - void CleanupCompaction(CompactionState* compact) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - Status DoCompactionWork(CompactionState* compact) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - Status OpenCompactionOutputFile(CompactionState* compact); - Status FinishCompactionOutputFile(CompactionState* compact, Iterator* input); - Status InstallCompactionResults(CompactionState* compact) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - // Constant after construction - Env* const env_; - const InternalKeyComparator internal_comparator_; - const InternalFilterPolicy internal_filter_policy_; - const Options options_; // options_.comparator == &internal_comparator_ - bool owns_info_log_; - bool owns_cache_; - const std::string dbname_; - - // table_cache_ provides its own synchronization - TableCache* table_cache_; - - // Lock over the persistent DB state. Non-NULL iff successfully acquired. - FileLock* db_lock_; - - // State below is protected by mutex_ - port::Mutex mutex_; - port::AtomicPointer shutting_down_; - port::CondVar bg_cv_; // Signalled when background work finishes - MemTable* mem_; - MemTable* imm_; // Memtable being compacted - port::AtomicPointer has_imm_; // So bg thread can detect non-NULL imm_ - WritableFile* logfile_; - uint64_t logfile_number_; - log::Writer* log_; - uint32_t seed_; // For sampling. - - // Queue of writers. - std::deque writers_; - WriteBatch* tmp_batch_; - - SnapshotList snapshots_; - - // Set of table files to protect from deletion because they are - // part of ongoing compactions. - std::set pending_outputs_; - - // Has a background compaction been scheduled or is running? - bool bg_compaction_scheduled_; - - // Information for a manual compaction - struct ManualCompaction { - int level; - bool done; - const InternalKey* begin; // NULL means beginning of key range - const InternalKey* end; // NULL means end of key range - InternalKey tmp_storage; // Used to keep track of compaction progress - }; - ManualCompaction* manual_compaction_; - - VersionSet* versions_; - - // Have we encountered a background error in paranoid mode? - Status bg_error_; - - // Per level compaction stats. stats_[level] stores the stats for - // compactions that produced data for the specified "level". - struct CompactionStats { - int64_t micros; - int64_t bytes_read; - int64_t bytes_written; - - CompactionStats() : micros(0), bytes_read(0), bytes_written(0) { } - - void Add(const CompactionStats& c) { - this->micros += c.micros; - this->bytes_read += c.bytes_read; - this->bytes_written += c.bytes_written; - } - }; - CompactionStats stats_[config::kNumLevels]; - - // No copying allowed - DBImpl(const DBImpl&); - void operator=(const DBImpl&); - - const Comparator* user_comparator() const { - return internal_comparator_.user_comparator(); - } -}; - -// Sanitize db options. The caller should delete result.info_log if -// it is not equal to src.info_log. -extern Options SanitizeOptions(const std::string& db, - const InternalKeyComparator* icmp, - const InternalFilterPolicy* ipolicy, - const Options& src); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_DB_IMPL_H_ diff --git a/src/leveldb/db/db_iter.cc b/src/leveldb/db/db_iter.cc deleted file mode 100644 index 3b2035e9e3..0000000000 --- a/src/leveldb/db/db_iter.cc +++ /dev/null @@ -1,317 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/db_iter.h" - -#include "db/filename.h" -#include "db/db_impl.h" -#include "db/dbformat.h" -#include "leveldb/env.h" -#include "leveldb/iterator.h" -#include "port/port.h" -#include "util/logging.h" -#include "util/mutexlock.h" -#include "util/random.h" - -namespace leveldb { - -#if 0 -static void DumpInternalIter(Iterator* iter) { - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - ParsedInternalKey k; - if (!ParseInternalKey(iter->key(), &k)) { - fprintf(stderr, "Corrupt '%s'\n", EscapeString(iter->key()).c_str()); - } else { - fprintf(stderr, "@ '%s'\n", k.DebugString().c_str()); - } - } -} -#endif - -namespace { - -// Memtables and sstables that make the DB representation contain -// (userkey,seq,type) => uservalue entries. DBIter -// combines multiple entries for the same userkey found in the DB -// representation into a single entry while accounting for sequence -// numbers, deletion markers, overwrites, etc. -class DBIter: public Iterator { - public: - // Which direction is the iterator currently moving? - // (1) When moving forward, the internal iterator is positioned at - // the exact entry that yields this->key(), this->value() - // (2) When moving backwards, the internal iterator is positioned - // just before all entries whose user key == this->key(). - enum Direction { - kForward, - kReverse - }; - - DBIter(DBImpl* db, const Comparator* cmp, Iterator* iter, SequenceNumber s, - uint32_t seed) - : db_(db), - user_comparator_(cmp), - iter_(iter), - sequence_(s), - direction_(kForward), - valid_(false), - rnd_(seed), - bytes_counter_(RandomPeriod()) { - } - virtual ~DBIter() { - delete iter_; - } - virtual bool Valid() const { return valid_; } - virtual Slice key() const { - assert(valid_); - return (direction_ == kForward) ? ExtractUserKey(iter_->key()) : saved_key_; - } - virtual Slice value() const { - assert(valid_); - return (direction_ == kForward) ? iter_->value() : saved_value_; - } - virtual Status status() const { - if (status_.ok()) { - return iter_->status(); - } else { - return status_; - } - } - - virtual void Next(); - virtual void Prev(); - virtual void Seek(const Slice& target); - virtual void SeekToFirst(); - virtual void SeekToLast(); - - private: - void FindNextUserEntry(bool skipping, std::string* skip); - void FindPrevUserEntry(); - bool ParseKey(ParsedInternalKey* key); - - inline void SaveKey(const Slice& k, std::string* dst) { - dst->assign(k.data(), k.size()); - } - - inline void ClearSavedValue() { - if (saved_value_.capacity() > 1048576) { - std::string empty; - swap(empty, saved_value_); - } else { - saved_value_.clear(); - } - } - - // Pick next gap with average value of config::kReadBytesPeriod. - ssize_t RandomPeriod() { - return rnd_.Uniform(2*config::kReadBytesPeriod); - } - - DBImpl* db_; - const Comparator* const user_comparator_; - Iterator* const iter_; - SequenceNumber const sequence_; - - Status status_; - std::string saved_key_; // == current key when direction_==kReverse - std::string saved_value_; // == current raw value when direction_==kReverse - Direction direction_; - bool valid_; - - Random rnd_; - ssize_t bytes_counter_; - - // No copying allowed - DBIter(const DBIter&); - void operator=(const DBIter&); -}; - -inline bool DBIter::ParseKey(ParsedInternalKey* ikey) { - Slice k = iter_->key(); - ssize_t n = k.size() + iter_->value().size(); - bytes_counter_ -= n; - while (bytes_counter_ < 0) { - bytes_counter_ += RandomPeriod(); - db_->RecordReadSample(k); - } - if (!ParseInternalKey(k, ikey)) { - status_ = Status::Corruption("corrupted internal key in DBIter"); - return false; - } else { - return true; - } -} - -void DBIter::Next() { - assert(valid_); - - if (direction_ == kReverse) { // Switch directions? - direction_ = kForward; - // iter_ is pointing just before the entries for this->key(), - // so advance into the range of entries for this->key() and then - // use the normal skipping code below. - if (!iter_->Valid()) { - iter_->SeekToFirst(); - } else { - iter_->Next(); - } - if (!iter_->Valid()) { - valid_ = false; - saved_key_.clear(); - return; - } - // saved_key_ already contains the key to skip past. - } else { - // Store in saved_key_ the current key so we skip it below. - SaveKey(ExtractUserKey(iter_->key()), &saved_key_); - } - - FindNextUserEntry(true, &saved_key_); -} - -void DBIter::FindNextUserEntry(bool skipping, std::string* skip) { - // Loop until we hit an acceptable entry to yield - assert(iter_->Valid()); - assert(direction_ == kForward); - do { - ParsedInternalKey ikey; - if (ParseKey(&ikey) && ikey.sequence <= sequence_) { - switch (ikey.type) { - case kTypeDeletion: - // Arrange to skip all upcoming entries for this key since - // they are hidden by this deletion. - SaveKey(ikey.user_key, skip); - skipping = true; - break; - case kTypeValue: - if (skipping && - user_comparator_->Compare(ikey.user_key, *skip) <= 0) { - // Entry hidden - } else { - valid_ = true; - saved_key_.clear(); - return; - } - break; - } - } - iter_->Next(); - } while (iter_->Valid()); - saved_key_.clear(); - valid_ = false; -} - -void DBIter::Prev() { - assert(valid_); - - if (direction_ == kForward) { // Switch directions? - // iter_ is pointing at the current entry. Scan backwards until - // the key changes so we can use the normal reverse scanning code. - assert(iter_->Valid()); // Otherwise valid_ would have been false - SaveKey(ExtractUserKey(iter_->key()), &saved_key_); - while (true) { - iter_->Prev(); - if (!iter_->Valid()) { - valid_ = false; - saved_key_.clear(); - ClearSavedValue(); - return; - } - if (user_comparator_->Compare(ExtractUserKey(iter_->key()), - saved_key_) < 0) { - break; - } - } - direction_ = kReverse; - } - - FindPrevUserEntry(); -} - -void DBIter::FindPrevUserEntry() { - assert(direction_ == kReverse); - - ValueType value_type = kTypeDeletion; - if (iter_->Valid()) { - do { - ParsedInternalKey ikey; - if (ParseKey(&ikey) && ikey.sequence <= sequence_) { - if ((value_type != kTypeDeletion) && - user_comparator_->Compare(ikey.user_key, saved_key_) < 0) { - // We encountered a non-deleted value in entries for previous keys, - break; - } - value_type = ikey.type; - if (value_type == kTypeDeletion) { - saved_key_.clear(); - ClearSavedValue(); - } else { - Slice raw_value = iter_->value(); - if (saved_value_.capacity() > raw_value.size() + 1048576) { - std::string empty; - swap(empty, saved_value_); - } - SaveKey(ExtractUserKey(iter_->key()), &saved_key_); - saved_value_.assign(raw_value.data(), raw_value.size()); - } - } - iter_->Prev(); - } while (iter_->Valid()); - } - - if (value_type == kTypeDeletion) { - // End - valid_ = false; - saved_key_.clear(); - ClearSavedValue(); - direction_ = kForward; - } else { - valid_ = true; - } -} - -void DBIter::Seek(const Slice& target) { - direction_ = kForward; - ClearSavedValue(); - saved_key_.clear(); - AppendInternalKey( - &saved_key_, ParsedInternalKey(target, sequence_, kValueTypeForSeek)); - iter_->Seek(saved_key_); - if (iter_->Valid()) { - FindNextUserEntry(false, &saved_key_ /* temporary storage */); - } else { - valid_ = false; - } -} - -void DBIter::SeekToFirst() { - direction_ = kForward; - ClearSavedValue(); - iter_->SeekToFirst(); - if (iter_->Valid()) { - FindNextUserEntry(false, &saved_key_ /* temporary storage */); - } else { - valid_ = false; - } -} - -void DBIter::SeekToLast() { - direction_ = kReverse; - ClearSavedValue(); - iter_->SeekToLast(); - FindPrevUserEntry(); -} - -} // anonymous namespace - -Iterator* NewDBIterator( - DBImpl* db, - const Comparator* user_key_comparator, - Iterator* internal_iter, - SequenceNumber sequence, - uint32_t seed) { - return new DBIter(db, user_key_comparator, internal_iter, sequence, seed); -} - -} // namespace leveldb diff --git a/src/leveldb/db/db_iter.h b/src/leveldb/db/db_iter.h deleted file mode 100644 index 04927e937b..0000000000 --- a/src/leveldb/db/db_iter.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_DB_ITER_H_ -#define STORAGE_LEVELDB_DB_DB_ITER_H_ - -#include -#include "leveldb/db.h" -#include "db/dbformat.h" - -namespace leveldb { - -class DBImpl; - -// Return a new iterator that converts internal keys (yielded by -// "*internal_iter") that were live at the specified "sequence" number -// into appropriate user keys. -extern Iterator* NewDBIterator( - DBImpl* db, - const Comparator* user_key_comparator, - Iterator* internal_iter, - SequenceNumber sequence, - uint32_t seed); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_DB_ITER_H_ diff --git a/src/leveldb/db/db_test.cc b/src/leveldb/db/db_test.cc deleted file mode 100644 index 0fed9137d5..0000000000 --- a/src/leveldb/db/db_test.cc +++ /dev/null @@ -1,2128 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/db.h" -#include "leveldb/filter_policy.h" -#include "db/db_impl.h" -#include "db/filename.h" -#include "db/version_set.h" -#include "db/write_batch_internal.h" -#include "leveldb/cache.h" -#include "leveldb/env.h" -#include "leveldb/table.h" -#include "util/hash.h" -#include "util/logging.h" -#include "util/mutexlock.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -static std::string RandomString(Random* rnd, int len) { - std::string r; - test::RandomString(rnd, len, &r); - return r; -} - -namespace { -class AtomicCounter { - private: - port::Mutex mu_; - int count_; - public: - AtomicCounter() : count_(0) { } - void Increment() { - IncrementBy(1); - } - void IncrementBy(int count) { - MutexLock l(&mu_); - count_ += count; - } - int Read() { - MutexLock l(&mu_); - return count_; - } - void Reset() { - MutexLock l(&mu_); - count_ = 0; - } -}; - -void DelayMilliseconds(int millis) { - Env::Default()->SleepForMicroseconds(millis * 1000); -} -} - -// Special Env used to delay background operations -class SpecialEnv : public EnvWrapper { - public: - // sstable/log Sync() calls are blocked while this pointer is non-NULL. - port::AtomicPointer delay_data_sync_; - - // sstable/log Sync() calls return an error. - port::AtomicPointer data_sync_error_; - - // Simulate no-space errors while this pointer is non-NULL. - port::AtomicPointer no_space_; - - // Simulate non-writable file system while this pointer is non-NULL - port::AtomicPointer non_writable_; - - // Force sync of manifest files to fail while this pointer is non-NULL - port::AtomicPointer manifest_sync_error_; - - // Force write to manifest files to fail while this pointer is non-NULL - port::AtomicPointer manifest_write_error_; - - bool count_random_reads_; - AtomicCounter random_read_counter_; - - explicit SpecialEnv(Env* base) : EnvWrapper(base) { - delay_data_sync_.Release_Store(NULL); - data_sync_error_.Release_Store(NULL); - no_space_.Release_Store(NULL); - non_writable_.Release_Store(NULL); - count_random_reads_ = false; - manifest_sync_error_.Release_Store(NULL); - manifest_write_error_.Release_Store(NULL); - } - - Status NewWritableFile(const std::string& f, WritableFile** r) { - class DataFile : public WritableFile { - private: - SpecialEnv* env_; - WritableFile* base_; - - public: - DataFile(SpecialEnv* env, WritableFile* base) - : env_(env), - base_(base) { - } - ~DataFile() { delete base_; } - Status Append(const Slice& data) { - if (env_->no_space_.Acquire_Load() != NULL) { - // Drop writes on the floor - return Status::OK(); - } else { - return base_->Append(data); - } - } - Status Close() { return base_->Close(); } - Status Flush() { return base_->Flush(); } - Status Sync() { - if (env_->data_sync_error_.Acquire_Load() != NULL) { - return Status::IOError("simulated data sync error"); - } - while (env_->delay_data_sync_.Acquire_Load() != NULL) { - DelayMilliseconds(100); - } - return base_->Sync(); - } - }; - class ManifestFile : public WritableFile { - private: - SpecialEnv* env_; - WritableFile* base_; - public: - ManifestFile(SpecialEnv* env, WritableFile* b) : env_(env), base_(b) { } - ~ManifestFile() { delete base_; } - Status Append(const Slice& data) { - if (env_->manifest_write_error_.Acquire_Load() != NULL) { - return Status::IOError("simulated writer error"); - } else { - return base_->Append(data); - } - } - Status Close() { return base_->Close(); } - Status Flush() { return base_->Flush(); } - Status Sync() { - if (env_->manifest_sync_error_.Acquire_Load() != NULL) { - return Status::IOError("simulated sync error"); - } else { - return base_->Sync(); - } - } - }; - - if (non_writable_.Acquire_Load() != NULL) { - return Status::IOError("simulated write error"); - } - - Status s = target()->NewWritableFile(f, r); - if (s.ok()) { - if (strstr(f.c_str(), ".ldb") != NULL || - strstr(f.c_str(), ".log") != NULL) { - *r = new DataFile(this, *r); - } else if (strstr(f.c_str(), "MANIFEST") != NULL) { - *r = new ManifestFile(this, *r); - } - } - return s; - } - - Status NewRandomAccessFile(const std::string& f, RandomAccessFile** r) { - class CountingFile : public RandomAccessFile { - private: - RandomAccessFile* target_; - AtomicCounter* counter_; - public: - CountingFile(RandomAccessFile* target, AtomicCounter* counter) - : target_(target), counter_(counter) { - } - virtual ~CountingFile() { delete target_; } - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const { - counter_->Increment(); - return target_->Read(offset, n, result, scratch); - } - }; - - Status s = target()->NewRandomAccessFile(f, r); - if (s.ok() && count_random_reads_) { - *r = new CountingFile(*r, &random_read_counter_); - } - return s; - } -}; - -class DBTest { - private: - const FilterPolicy* filter_policy_; - - // Sequence of option configurations to try - enum OptionConfig { - kDefault, - kFilter, - kUncompressed, - kEnd - }; - int option_config_; - - public: - std::string dbname_; - SpecialEnv* env_; - DB* db_; - - Options last_options_; - - DBTest() : option_config_(kDefault), - env_(new SpecialEnv(Env::Default())) { - filter_policy_ = NewBloomFilterPolicy(10); - dbname_ = test::TmpDir() + "/db_test"; - DestroyDB(dbname_, Options()); - db_ = NULL; - Reopen(); - } - - ~DBTest() { - delete db_; - DestroyDB(dbname_, Options()); - delete env_; - delete filter_policy_; - } - - // Switch to a fresh database with the next option configuration to - // test. Return false if there are no more configurations to test. - bool ChangeOptions() { - option_config_++; - if (option_config_ >= kEnd) { - return false; - } else { - DestroyAndReopen(); - return true; - } - } - - // Return the current option configuration. - Options CurrentOptions() { - Options options; - switch (option_config_) { - case kFilter: - options.filter_policy = filter_policy_; - break; - case kUncompressed: - options.compression = kNoCompression; - break; - default: - break; - } - return options; - } - - DBImpl* dbfull() { - return reinterpret_cast(db_); - } - - void Reopen(Options* options = NULL) { - ASSERT_OK(TryReopen(options)); - } - - void Close() { - delete db_; - db_ = NULL; - } - - void DestroyAndReopen(Options* options = NULL) { - delete db_; - db_ = NULL; - DestroyDB(dbname_, Options()); - ASSERT_OK(TryReopen(options)); - } - - Status TryReopen(Options* options) { - delete db_; - db_ = NULL; - Options opts; - if (options != NULL) { - opts = *options; - } else { - opts = CurrentOptions(); - opts.create_if_missing = true; - } - last_options_ = opts; - - return DB::Open(opts, dbname_, &db_); - } - - Status Put(const std::string& k, const std::string& v) { - return db_->Put(WriteOptions(), k, v); - } - - Status Delete(const std::string& k) { - return db_->Delete(WriteOptions(), k); - } - - std::string Get(const std::string& k, const Snapshot* snapshot = NULL) { - ReadOptions options; - options.snapshot = snapshot; - std::string result; - Status s = db_->Get(options, k, &result); - if (s.IsNotFound()) { - result = "NOT_FOUND"; - } else if (!s.ok()) { - result = s.ToString(); - } - return result; - } - - // Return a string that contains all key,value pairs in order, - // formatted like "(k1->v1)(k2->v2)". - std::string Contents() { - std::vector forward; - std::string result; - Iterator* iter = db_->NewIterator(ReadOptions()); - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - std::string s = IterStatus(iter); - result.push_back('('); - result.append(s); - result.push_back(')'); - forward.push_back(s); - } - - // Check reverse iteration results are the reverse of forward results - size_t matched = 0; - for (iter->SeekToLast(); iter->Valid(); iter->Prev()) { - ASSERT_LT(matched, forward.size()); - ASSERT_EQ(IterStatus(iter), forward[forward.size() - matched - 1]); - matched++; - } - ASSERT_EQ(matched, forward.size()); - - delete iter; - return result; - } - - std::string AllEntriesFor(const Slice& user_key) { - Iterator* iter = dbfull()->TEST_NewInternalIterator(); - InternalKey target(user_key, kMaxSequenceNumber, kTypeValue); - iter->Seek(target.Encode()); - std::string result; - if (!iter->status().ok()) { - result = iter->status().ToString(); - } else { - result = "[ "; - bool first = true; - while (iter->Valid()) { - ParsedInternalKey ikey; - if (!ParseInternalKey(iter->key(), &ikey)) { - result += "CORRUPTED"; - } else { - if (last_options_.comparator->Compare(ikey.user_key, user_key) != 0) { - break; - } - if (!first) { - result += ", "; - } - first = false; - switch (ikey.type) { - case kTypeValue: - result += iter->value().ToString(); - break; - case kTypeDeletion: - result += "DEL"; - break; - } - } - iter->Next(); - } - if (!first) { - result += " "; - } - result += "]"; - } - delete iter; - return result; - } - - int NumTableFilesAtLevel(int level) { - std::string property; - ASSERT_TRUE( - db_->GetProperty("leveldb.num-files-at-level" + NumberToString(level), - &property)); - return atoi(property.c_str()); - } - - int TotalTableFiles() { - int result = 0; - for (int level = 0; level < config::kNumLevels; level++) { - result += NumTableFilesAtLevel(level); - } - return result; - } - - // Return spread of files per level - std::string FilesPerLevel() { - std::string result; - int last_non_zero_offset = 0; - for (int level = 0; level < config::kNumLevels; level++) { - int f = NumTableFilesAtLevel(level); - char buf[100]; - snprintf(buf, sizeof(buf), "%s%d", (level ? "," : ""), f); - result += buf; - if (f > 0) { - last_non_zero_offset = result.size(); - } - } - result.resize(last_non_zero_offset); - return result; - } - - int CountFiles() { - std::vector files; - env_->GetChildren(dbname_, &files); - return static_cast(files.size()); - } - - uint64_t Size(const Slice& start, const Slice& limit) { - Range r(start, limit); - uint64_t size; - db_->GetApproximateSizes(&r, 1, &size); - return size; - } - - void Compact(const Slice& start, const Slice& limit) { - db_->CompactRange(&start, &limit); - } - - // Do n memtable compactions, each of which produces an sstable - // covering the range [small,large]. - void MakeTables(int n, const std::string& small, const std::string& large) { - for (int i = 0; i < n; i++) { - Put(small, "begin"); - Put(large, "end"); - dbfull()->TEST_CompactMemTable(); - } - } - - // Prevent pushing of new sstables into deeper levels by adding - // tables that cover a specified range to all levels. - void FillLevels(const std::string& smallest, const std::string& largest) { - MakeTables(config::kNumLevels, smallest, largest); - } - - void DumpFileCounts(const char* label) { - fprintf(stderr, "---\n%s:\n", label); - fprintf(stderr, "maxoverlap: %lld\n", - static_cast( - dbfull()->TEST_MaxNextLevelOverlappingBytes())); - for (int level = 0; level < config::kNumLevels; level++) { - int num = NumTableFilesAtLevel(level); - if (num > 0) { - fprintf(stderr, " level %3d : %d files\n", level, num); - } - } - } - - std::string DumpSSTableList() { - std::string property; - db_->GetProperty("leveldb.sstables", &property); - return property; - } - - std::string IterStatus(Iterator* iter) { - std::string result; - if (iter->Valid()) { - result = iter->key().ToString() + "->" + iter->value().ToString(); - } else { - result = "(invalid)"; - } - return result; - } - - bool DeleteAnSSTFile() { - std::vector filenames; - ASSERT_OK(env_->GetChildren(dbname_, &filenames)); - uint64_t number; - FileType type; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type) && type == kTableFile) { - ASSERT_OK(env_->DeleteFile(TableFileName(dbname_, number))); - return true; - } - } - return false; - } - - // Returns number of files renamed. - int RenameLDBToSST() { - std::vector filenames; - ASSERT_OK(env_->GetChildren(dbname_, &filenames)); - uint64_t number; - FileType type; - int files_renamed = 0; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type) && type == kTableFile) { - const std::string from = TableFileName(dbname_, number); - const std::string to = SSTTableFileName(dbname_, number); - ASSERT_OK(env_->RenameFile(from, to)); - files_renamed++; - } - } - return files_renamed; - } -}; - -TEST(DBTest, Empty) { - do { - ASSERT_TRUE(db_ != NULL); - ASSERT_EQ("NOT_FOUND", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, ReadWrite) { - do { - ASSERT_OK(Put("foo", "v1")); - ASSERT_EQ("v1", Get("foo")); - ASSERT_OK(Put("bar", "v2")); - ASSERT_OK(Put("foo", "v3")); - ASSERT_EQ("v3", Get("foo")); - ASSERT_EQ("v2", Get("bar")); - } while (ChangeOptions()); -} - -TEST(DBTest, PutDeleteGet) { - do { - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v1")); - ASSERT_EQ("v1", Get("foo")); - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v2")); - ASSERT_EQ("v2", Get("foo")); - ASSERT_OK(db_->Delete(WriteOptions(), "foo")); - ASSERT_EQ("NOT_FOUND", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, GetFromImmutableLayer) { - do { - Options options = CurrentOptions(); - options.env = env_; - options.write_buffer_size = 100000; // Small write buffer - Reopen(&options); - - ASSERT_OK(Put("foo", "v1")); - ASSERT_EQ("v1", Get("foo")); - - env_->delay_data_sync_.Release_Store(env_); // Block sync calls - Put("k1", std::string(100000, 'x')); // Fill memtable - Put("k2", std::string(100000, 'y')); // Trigger compaction - ASSERT_EQ("v1", Get("foo")); - env_->delay_data_sync_.Release_Store(NULL); // Release sync calls - } while (ChangeOptions()); -} - -TEST(DBTest, GetFromVersions) { - do { - ASSERT_OK(Put("foo", "v1")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("v1", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, GetSnapshot) { - do { - // Try with both a short key and a long key - for (int i = 0; i < 2; i++) { - std::string key = (i == 0) ? std::string("foo") : std::string(200, 'x'); - ASSERT_OK(Put(key, "v1")); - const Snapshot* s1 = db_->GetSnapshot(); - ASSERT_OK(Put(key, "v2")); - ASSERT_EQ("v2", Get(key)); - ASSERT_EQ("v1", Get(key, s1)); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("v2", Get(key)); - ASSERT_EQ("v1", Get(key, s1)); - db_->ReleaseSnapshot(s1); - } - } while (ChangeOptions()); -} - -TEST(DBTest, GetLevel0Ordering) { - do { - // Check that we process level-0 files in correct order. The code - // below generates two level-0 files where the earlier one comes - // before the later one in the level-0 file list since the earlier - // one has a smaller "smallest" key. - ASSERT_OK(Put("bar", "b")); - ASSERT_OK(Put("foo", "v1")); - dbfull()->TEST_CompactMemTable(); - ASSERT_OK(Put("foo", "v2")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("v2", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, GetOrderedByLevels) { - do { - ASSERT_OK(Put("foo", "v1")); - Compact("a", "z"); - ASSERT_EQ("v1", Get("foo")); - ASSERT_OK(Put("foo", "v2")); - ASSERT_EQ("v2", Get("foo")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("v2", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, GetPicksCorrectFile) { - do { - // Arrange to have multiple files in a non-level-0 level. - ASSERT_OK(Put("a", "va")); - Compact("a", "b"); - ASSERT_OK(Put("x", "vx")); - Compact("x", "y"); - ASSERT_OK(Put("f", "vf")); - Compact("f", "g"); - ASSERT_EQ("va", Get("a")); - ASSERT_EQ("vf", Get("f")); - ASSERT_EQ("vx", Get("x")); - } while (ChangeOptions()); -} - -TEST(DBTest, GetEncountersEmptyLevel) { - do { - // Arrange for the following to happen: - // * sstable A in level 0 - // * nothing in level 1 - // * sstable B in level 2 - // Then do enough Get() calls to arrange for an automatic compaction - // of sstable A. A bug would cause the compaction to be marked as - // occurring at level 1 (instead of the correct level 0). - - // Step 1: First place sstables in levels 0 and 2 - int compaction_count = 0; - while (NumTableFilesAtLevel(0) == 0 || - NumTableFilesAtLevel(2) == 0) { - ASSERT_LE(compaction_count, 100) << "could not fill levels 0 and 2"; - compaction_count++; - Put("a", "begin"); - Put("z", "end"); - dbfull()->TEST_CompactMemTable(); - } - - // Step 2: clear level 1 if necessary. - dbfull()->TEST_CompactRange(1, NULL, NULL); - ASSERT_EQ(NumTableFilesAtLevel(0), 1); - ASSERT_EQ(NumTableFilesAtLevel(1), 0); - ASSERT_EQ(NumTableFilesAtLevel(2), 1); - - // Step 3: read a bunch of times - for (int i = 0; i < 1000; i++) { - ASSERT_EQ("NOT_FOUND", Get("missing")); - } - - // Step 4: Wait for compaction to finish - DelayMilliseconds(1000); - - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - } while (ChangeOptions()); -} - -TEST(DBTest, IterEmpty) { - Iterator* iter = db_->NewIterator(ReadOptions()); - - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->Seek("foo"); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - delete iter; -} - -TEST(DBTest, IterSingle) { - ASSERT_OK(Put("a", "va")); - Iterator* iter = db_->NewIterator(ReadOptions()); - - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->Seek(""); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->Seek("a"); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->Seek("b"); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - delete iter; -} - -TEST(DBTest, IterMulti) { - ASSERT_OK(Put("a", "va")); - ASSERT_OK(Put("b", "vb")); - ASSERT_OK(Put("c", "vc")); - Iterator* iter = db_->NewIterator(ReadOptions()); - - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->Seek(""); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Seek("a"); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Seek("ax"); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Seek("b"); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Seek("z"); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - // Switch from reverse to forward - iter->SeekToLast(); - iter->Prev(); - iter->Prev(); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - - // Switch from forward to reverse - iter->SeekToFirst(); - iter->Next(); - iter->Next(); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - - // Make sure iter stays at snapshot - ASSERT_OK(Put("a", "va2")); - ASSERT_OK(Put("a2", "va3")); - ASSERT_OK(Put("b", "vb2")); - ASSERT_OK(Put("c", "vc2")); - ASSERT_OK(Delete("b")); - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - delete iter; -} - -TEST(DBTest, IterSmallAndLargeMix) { - ASSERT_OK(Put("a", "va")); - ASSERT_OK(Put("b", std::string(100000, 'b'))); - ASSERT_OK(Put("c", "vc")); - ASSERT_OK(Put("d", std::string(100000, 'd'))); - ASSERT_OK(Put("e", std::string(100000, 'e'))); - - Iterator* iter = db_->NewIterator(ReadOptions()); - - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "b->" + std::string(100000, 'b')); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "d->" + std::string(100000, 'd')); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "e->" + std::string(100000, 'e')); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "e->" + std::string(100000, 'e')); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "d->" + std::string(100000, 'd')); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "b->" + std::string(100000, 'b')); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - delete iter; -} - -TEST(DBTest, IterMultiWithDelete) { - do { - ASSERT_OK(Put("a", "va")); - ASSERT_OK(Put("b", "vb")); - ASSERT_OK(Put("c", "vc")); - ASSERT_OK(Delete("b")); - ASSERT_EQ("NOT_FOUND", Get("b")); - - Iterator* iter = db_->NewIterator(ReadOptions()); - iter->Seek("c"); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "a->va"); - delete iter; - } while (ChangeOptions()); -} - -TEST(DBTest, Recover) { - do { - ASSERT_OK(Put("foo", "v1")); - ASSERT_OK(Put("baz", "v5")); - - Reopen(); - ASSERT_EQ("v1", Get("foo")); - - ASSERT_EQ("v1", Get("foo")); - ASSERT_EQ("v5", Get("baz")); - ASSERT_OK(Put("bar", "v2")); - ASSERT_OK(Put("foo", "v3")); - - Reopen(); - ASSERT_EQ("v3", Get("foo")); - ASSERT_OK(Put("foo", "v4")); - ASSERT_EQ("v4", Get("foo")); - ASSERT_EQ("v2", Get("bar")); - ASSERT_EQ("v5", Get("baz")); - } while (ChangeOptions()); -} - -TEST(DBTest, RecoveryWithEmptyLog) { - do { - ASSERT_OK(Put("foo", "v1")); - ASSERT_OK(Put("foo", "v2")); - Reopen(); - Reopen(); - ASSERT_OK(Put("foo", "v3")); - Reopen(); - ASSERT_EQ("v3", Get("foo")); - } while (ChangeOptions()); -} - -// Check that writes done during a memtable compaction are recovered -// if the database is shutdown during the memtable compaction. -TEST(DBTest, RecoverDuringMemtableCompaction) { - do { - Options options = CurrentOptions(); - options.env = env_; - options.write_buffer_size = 1000000; - Reopen(&options); - - // Trigger a long memtable compaction and reopen the database during it - ASSERT_OK(Put("foo", "v1")); // Goes to 1st log file - ASSERT_OK(Put("big1", std::string(10000000, 'x'))); // Fills memtable - ASSERT_OK(Put("big2", std::string(1000, 'y'))); // Triggers compaction - ASSERT_OK(Put("bar", "v2")); // Goes to new log file - - Reopen(&options); - ASSERT_EQ("v1", Get("foo")); - ASSERT_EQ("v2", Get("bar")); - ASSERT_EQ(std::string(10000000, 'x'), Get("big1")); - ASSERT_EQ(std::string(1000, 'y'), Get("big2")); - } while (ChangeOptions()); -} - -static std::string Key(int i) { - char buf[100]; - snprintf(buf, sizeof(buf), "key%06d", i); - return std::string(buf); -} - -TEST(DBTest, MinorCompactionsHappen) { - Options options = CurrentOptions(); - options.write_buffer_size = 10000; - Reopen(&options); - - const int N = 500; - - int starting_num_tables = TotalTableFiles(); - for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(i), Key(i) + std::string(1000, 'v'))); - } - int ending_num_tables = TotalTableFiles(); - ASSERT_GT(ending_num_tables, starting_num_tables); - - for (int i = 0; i < N; i++) { - ASSERT_EQ(Key(i) + std::string(1000, 'v'), Get(Key(i))); - } - - Reopen(); - - for (int i = 0; i < N; i++) { - ASSERT_EQ(Key(i) + std::string(1000, 'v'), Get(Key(i))); - } -} - -TEST(DBTest, RecoverWithLargeLog) { - { - Options options = CurrentOptions(); - Reopen(&options); - ASSERT_OK(Put("big1", std::string(200000, '1'))); - ASSERT_OK(Put("big2", std::string(200000, '2'))); - ASSERT_OK(Put("small3", std::string(10, '3'))); - ASSERT_OK(Put("small4", std::string(10, '4'))); - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - } - - // Make sure that if we re-open with a small write buffer size that - // we flush table files in the middle of a large log file. - Options options = CurrentOptions(); - options.write_buffer_size = 100000; - Reopen(&options); - ASSERT_EQ(NumTableFilesAtLevel(0), 3); - ASSERT_EQ(std::string(200000, '1'), Get("big1")); - ASSERT_EQ(std::string(200000, '2'), Get("big2")); - ASSERT_EQ(std::string(10, '3'), Get("small3")); - ASSERT_EQ(std::string(10, '4'), Get("small4")); - ASSERT_GT(NumTableFilesAtLevel(0), 1); -} - -TEST(DBTest, CompactionsGenerateMultipleFiles) { - Options options = CurrentOptions(); - options.write_buffer_size = 100000000; // Large write buffer - Reopen(&options); - - Random rnd(301); - - // Write 8MB (80 values, each 100K) - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - std::vector values; - for (int i = 0; i < 80; i++) { - values.push_back(RandomString(&rnd, 100000)); - ASSERT_OK(Put(Key(i), values[i])); - } - - // Reopening moves updates to level-0 - Reopen(&options); - dbfull()->TEST_CompactRange(0, NULL, NULL); - - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - ASSERT_GT(NumTableFilesAtLevel(1), 1); - for (int i = 0; i < 80; i++) { - ASSERT_EQ(Get(Key(i)), values[i]); - } -} - -TEST(DBTest, RepeatedWritesToSameKey) { - Options options = CurrentOptions(); - options.env = env_; - options.write_buffer_size = 100000; // Small write buffer - Reopen(&options); - - // We must have at most one file per level except for level-0, - // which may have up to kL0_StopWritesTrigger files. - const int kMaxFiles = config::kNumLevels + config::kL0_StopWritesTrigger; - - Random rnd(301); - std::string value = RandomString(&rnd, 2 * options.write_buffer_size); - for (int i = 0; i < 5 * kMaxFiles; i++) { - Put("key", value); - ASSERT_LE(TotalTableFiles(), kMaxFiles); - fprintf(stderr, "after %d: %d files\n", int(i+1), TotalTableFiles()); - } -} - -TEST(DBTest, SparseMerge) { - Options options = CurrentOptions(); - options.compression = kNoCompression; - Reopen(&options); - - FillLevels("A", "Z"); - - // Suppose there is: - // small amount of data with prefix A - // large amount of data with prefix B - // small amount of data with prefix C - // and that recent updates have made small changes to all three prefixes. - // Check that we do not do a compaction that merges all of B in one shot. - const std::string value(1000, 'x'); - Put("A", "va"); - // Write approximately 100MB of "B" values - for (int i = 0; i < 100000; i++) { - char key[100]; - snprintf(key, sizeof(key), "B%010d", i); - Put(key, value); - } - Put("C", "vc"); - dbfull()->TEST_CompactMemTable(); - dbfull()->TEST_CompactRange(0, NULL, NULL); - - // Make sparse update - Put("A", "va2"); - Put("B100", "bvalue2"); - Put("C", "vc2"); - dbfull()->TEST_CompactMemTable(); - - // Compactions should not cause us to create a situation where - // a file overlaps too much data at the next level. - ASSERT_LE(dbfull()->TEST_MaxNextLevelOverlappingBytes(), 20*1048576); - dbfull()->TEST_CompactRange(0, NULL, NULL); - ASSERT_LE(dbfull()->TEST_MaxNextLevelOverlappingBytes(), 20*1048576); - dbfull()->TEST_CompactRange(1, NULL, NULL); - ASSERT_LE(dbfull()->TEST_MaxNextLevelOverlappingBytes(), 20*1048576); -} - -static bool Between(uint64_t val, uint64_t low, uint64_t high) { - bool result = (val >= low) && (val <= high); - if (!result) { - fprintf(stderr, "Value %llu is not in range [%llu, %llu]\n", - (unsigned long long)(val), - (unsigned long long)(low), - (unsigned long long)(high)); - } - return result; -} - -TEST(DBTest, ApproximateSizes) { - do { - Options options = CurrentOptions(); - options.write_buffer_size = 100000000; // Large write buffer - options.compression = kNoCompression; - DestroyAndReopen(); - - ASSERT_TRUE(Between(Size("", "xyz"), 0, 0)); - Reopen(&options); - ASSERT_TRUE(Between(Size("", "xyz"), 0, 0)); - - // Write 8MB (80 values, each 100K) - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - const int N = 80; - static const int S1 = 100000; - static const int S2 = 105000; // Allow some expansion from metadata - Random rnd(301); - for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, S1))); - } - - // 0 because GetApproximateSizes() does not account for memtable space - ASSERT_TRUE(Between(Size("", Key(50)), 0, 0)); - - // Check sizes across recovery by reopening a few times - for (int run = 0; run < 3; run++) { - Reopen(&options); - - for (int compact_start = 0; compact_start < N; compact_start += 10) { - for (int i = 0; i < N; i += 10) { - ASSERT_TRUE(Between(Size("", Key(i)), S1*i, S2*i)); - ASSERT_TRUE(Between(Size("", Key(i)+".suffix"), S1*(i+1), S2*(i+1))); - ASSERT_TRUE(Between(Size(Key(i), Key(i+10)), S1*10, S2*10)); - } - ASSERT_TRUE(Between(Size("", Key(50)), S1*50, S2*50)); - ASSERT_TRUE(Between(Size("", Key(50)+".suffix"), S1*50, S2*50)); - - std::string cstart_str = Key(compact_start); - std::string cend_str = Key(compact_start + 9); - Slice cstart = cstart_str; - Slice cend = cend_str; - dbfull()->TEST_CompactRange(0, &cstart, &cend); - } - - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - ASSERT_GT(NumTableFilesAtLevel(1), 0); - } - } while (ChangeOptions()); -} - -TEST(DBTest, ApproximateSizes_MixOfSmallAndLarge) { - do { - Options options = CurrentOptions(); - options.compression = kNoCompression; - Reopen(); - - Random rnd(301); - std::string big1 = RandomString(&rnd, 100000); - ASSERT_OK(Put(Key(0), RandomString(&rnd, 10000))); - ASSERT_OK(Put(Key(1), RandomString(&rnd, 10000))); - ASSERT_OK(Put(Key(2), big1)); - ASSERT_OK(Put(Key(3), RandomString(&rnd, 10000))); - ASSERT_OK(Put(Key(4), big1)); - ASSERT_OK(Put(Key(5), RandomString(&rnd, 10000))); - ASSERT_OK(Put(Key(6), RandomString(&rnd, 300000))); - ASSERT_OK(Put(Key(7), RandomString(&rnd, 10000))); - - // Check sizes across recovery by reopening a few times - for (int run = 0; run < 3; run++) { - Reopen(&options); - - ASSERT_TRUE(Between(Size("", Key(0)), 0, 0)); - ASSERT_TRUE(Between(Size("", Key(1)), 10000, 11000)); - ASSERT_TRUE(Between(Size("", Key(2)), 20000, 21000)); - ASSERT_TRUE(Between(Size("", Key(3)), 120000, 121000)); - ASSERT_TRUE(Between(Size("", Key(4)), 130000, 131000)); - ASSERT_TRUE(Between(Size("", Key(5)), 230000, 231000)); - ASSERT_TRUE(Between(Size("", Key(6)), 240000, 241000)); - ASSERT_TRUE(Between(Size("", Key(7)), 540000, 541000)); - ASSERT_TRUE(Between(Size("", Key(8)), 550000, 560000)); - - ASSERT_TRUE(Between(Size(Key(3), Key(5)), 110000, 111000)); - - dbfull()->TEST_CompactRange(0, NULL, NULL); - } - } while (ChangeOptions()); -} - -TEST(DBTest, IteratorPinsRef) { - Put("foo", "hello"); - - // Get iterator that will yield the current contents of the DB. - Iterator* iter = db_->NewIterator(ReadOptions()); - - // Write to force compactions - Put("foo", "newvalue1"); - for (int i = 0; i < 100; i++) { - ASSERT_OK(Put(Key(i), Key(i) + std::string(100000, 'v'))); // 100K values - } - Put("foo", "newvalue2"); - - iter->SeekToFirst(); - ASSERT_TRUE(iter->Valid()); - ASSERT_EQ("foo", iter->key().ToString()); - ASSERT_EQ("hello", iter->value().ToString()); - iter->Next(); - ASSERT_TRUE(!iter->Valid()); - delete iter; -} - -TEST(DBTest, Snapshot) { - do { - Put("foo", "v1"); - const Snapshot* s1 = db_->GetSnapshot(); - Put("foo", "v2"); - const Snapshot* s2 = db_->GetSnapshot(); - Put("foo", "v3"); - const Snapshot* s3 = db_->GetSnapshot(); - - Put("foo", "v4"); - ASSERT_EQ("v1", Get("foo", s1)); - ASSERT_EQ("v2", Get("foo", s2)); - ASSERT_EQ("v3", Get("foo", s3)); - ASSERT_EQ("v4", Get("foo")); - - db_->ReleaseSnapshot(s3); - ASSERT_EQ("v1", Get("foo", s1)); - ASSERT_EQ("v2", Get("foo", s2)); - ASSERT_EQ("v4", Get("foo")); - - db_->ReleaseSnapshot(s1); - ASSERT_EQ("v2", Get("foo", s2)); - ASSERT_EQ("v4", Get("foo")); - - db_->ReleaseSnapshot(s2); - ASSERT_EQ("v4", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, HiddenValuesAreRemoved) { - do { - Random rnd(301); - FillLevels("a", "z"); - - std::string big = RandomString(&rnd, 50000); - Put("foo", big); - Put("pastfoo", "v"); - const Snapshot* snapshot = db_->GetSnapshot(); - Put("foo", "tiny"); - Put("pastfoo2", "v2"); // Advance sequence number one more - - ASSERT_OK(dbfull()->TEST_CompactMemTable()); - ASSERT_GT(NumTableFilesAtLevel(0), 0); - - ASSERT_EQ(big, Get("foo", snapshot)); - ASSERT_TRUE(Between(Size("", "pastfoo"), 50000, 60000)); - db_->ReleaseSnapshot(snapshot); - ASSERT_EQ(AllEntriesFor("foo"), "[ tiny, " + big + " ]"); - Slice x("x"); - dbfull()->TEST_CompactRange(0, NULL, &x); - ASSERT_EQ(AllEntriesFor("foo"), "[ tiny ]"); - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - ASSERT_GE(NumTableFilesAtLevel(1), 1); - dbfull()->TEST_CompactRange(1, NULL, &x); - ASSERT_EQ(AllEntriesFor("foo"), "[ tiny ]"); - - ASSERT_TRUE(Between(Size("", "pastfoo"), 0, 1000)); - } while (ChangeOptions()); -} - -TEST(DBTest, DeletionMarkers1) { - Put("foo", "v1"); - ASSERT_OK(dbfull()->TEST_CompactMemTable()); - const int last = config::kMaxMemCompactLevel; - ASSERT_EQ(NumTableFilesAtLevel(last), 1); // foo => v1 is now in last level - - // Place a table at level last-1 to prevent merging with preceding mutation - Put("a", "begin"); - Put("z", "end"); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ(NumTableFilesAtLevel(last), 1); - ASSERT_EQ(NumTableFilesAtLevel(last-1), 1); - - Delete("foo"); - Put("foo", "v2"); - ASSERT_EQ(AllEntriesFor("foo"), "[ v2, DEL, v1 ]"); - ASSERT_OK(dbfull()->TEST_CompactMemTable()); // Moves to level last-2 - ASSERT_EQ(AllEntriesFor("foo"), "[ v2, DEL, v1 ]"); - Slice z("z"); - dbfull()->TEST_CompactRange(last-2, NULL, &z); - // DEL eliminated, but v1 remains because we aren't compacting that level - // (DEL can be eliminated because v2 hides v1). - ASSERT_EQ(AllEntriesFor("foo"), "[ v2, v1 ]"); - dbfull()->TEST_CompactRange(last-1, NULL, NULL); - // Merging last-1 w/ last, so we are the base level for "foo", so - // DEL is removed. (as is v1). - ASSERT_EQ(AllEntriesFor("foo"), "[ v2 ]"); -} - -TEST(DBTest, DeletionMarkers2) { - Put("foo", "v1"); - ASSERT_OK(dbfull()->TEST_CompactMemTable()); - const int last = config::kMaxMemCompactLevel; - ASSERT_EQ(NumTableFilesAtLevel(last), 1); // foo => v1 is now in last level - - // Place a table at level last-1 to prevent merging with preceding mutation - Put("a", "begin"); - Put("z", "end"); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ(NumTableFilesAtLevel(last), 1); - ASSERT_EQ(NumTableFilesAtLevel(last-1), 1); - - Delete("foo"); - ASSERT_EQ(AllEntriesFor("foo"), "[ DEL, v1 ]"); - ASSERT_OK(dbfull()->TEST_CompactMemTable()); // Moves to level last-2 - ASSERT_EQ(AllEntriesFor("foo"), "[ DEL, v1 ]"); - dbfull()->TEST_CompactRange(last-2, NULL, NULL); - // DEL kept: "last" file overlaps - ASSERT_EQ(AllEntriesFor("foo"), "[ DEL, v1 ]"); - dbfull()->TEST_CompactRange(last-1, NULL, NULL); - // Merging last-1 w/ last, so we are the base level for "foo", so - // DEL is removed. (as is v1). - ASSERT_EQ(AllEntriesFor("foo"), "[ ]"); -} - -TEST(DBTest, OverlapInLevel0) { - do { - ASSERT_EQ(config::kMaxMemCompactLevel, 2) << "Fix test to match config"; - - // Fill levels 1 and 2 to disable the pushing of new memtables to levels > 0. - ASSERT_OK(Put("100", "v100")); - ASSERT_OK(Put("999", "v999")); - dbfull()->TEST_CompactMemTable(); - ASSERT_OK(Delete("100")); - ASSERT_OK(Delete("999")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("0,1,1", FilesPerLevel()); - - // Make files spanning the following ranges in level-0: - // files[0] 200 .. 900 - // files[1] 300 .. 500 - // Note that files are sorted by smallest key. - ASSERT_OK(Put("300", "v300")); - ASSERT_OK(Put("500", "v500")); - dbfull()->TEST_CompactMemTable(); - ASSERT_OK(Put("200", "v200")); - ASSERT_OK(Put("600", "v600")); - ASSERT_OK(Put("900", "v900")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("2,1,1", FilesPerLevel()); - - // Compact away the placeholder files we created initially - dbfull()->TEST_CompactRange(1, NULL, NULL); - dbfull()->TEST_CompactRange(2, NULL, NULL); - ASSERT_EQ("2", FilesPerLevel()); - - // Do a memtable compaction. Before bug-fix, the compaction would - // not detect the overlap with level-0 files and would incorrectly place - // the deletion in a deeper level. - ASSERT_OK(Delete("600")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("3", FilesPerLevel()); - ASSERT_EQ("NOT_FOUND", Get("600")); - } while (ChangeOptions()); -} - -TEST(DBTest, L0_CompactionBug_Issue44_a) { - Reopen(); - ASSERT_OK(Put("b", "v")); - Reopen(); - ASSERT_OK(Delete("b")); - ASSERT_OK(Delete("a")); - Reopen(); - ASSERT_OK(Delete("a")); - Reopen(); - ASSERT_OK(Put("a", "v")); - Reopen(); - Reopen(); - ASSERT_EQ("(a->v)", Contents()); - DelayMilliseconds(1000); // Wait for compaction to finish - ASSERT_EQ("(a->v)", Contents()); -} - -TEST(DBTest, L0_CompactionBug_Issue44_b) { - Reopen(); - Put("",""); - Reopen(); - Delete("e"); - Put("",""); - Reopen(); - Put("c", "cv"); - Reopen(); - Put("",""); - Reopen(); - Put("",""); - DelayMilliseconds(1000); // Wait for compaction to finish - Reopen(); - Put("d","dv"); - Reopen(); - Put("",""); - Reopen(); - Delete("d"); - Delete("b"); - Reopen(); - ASSERT_EQ("(->)(c->cv)", Contents()); - DelayMilliseconds(1000); // Wait for compaction to finish - ASSERT_EQ("(->)(c->cv)", Contents()); -} - -TEST(DBTest, ComparatorCheck) { - class NewComparator : public Comparator { - public: - virtual const char* Name() const { return "leveldb.NewComparator"; } - virtual int Compare(const Slice& a, const Slice& b) const { - return BytewiseComparator()->Compare(a, b); - } - virtual void FindShortestSeparator(std::string* s, const Slice& l) const { - BytewiseComparator()->FindShortestSeparator(s, l); - } - virtual void FindShortSuccessor(std::string* key) const { - BytewiseComparator()->FindShortSuccessor(key); - } - }; - NewComparator cmp; - Options new_options = CurrentOptions(); - new_options.comparator = &cmp; - Status s = TryReopen(&new_options); - ASSERT_TRUE(!s.ok()); - ASSERT_TRUE(s.ToString().find("comparator") != std::string::npos) - << s.ToString(); -} - -TEST(DBTest, CustomComparator) { - class NumberComparator : public Comparator { - public: - virtual const char* Name() const { return "test.NumberComparator"; } - virtual int Compare(const Slice& a, const Slice& b) const { - return ToNumber(a) - ToNumber(b); - } - virtual void FindShortestSeparator(std::string* s, const Slice& l) const { - ToNumber(*s); // Check format - ToNumber(l); // Check format - } - virtual void FindShortSuccessor(std::string* key) const { - ToNumber(*key); // Check format - } - private: - static int ToNumber(const Slice& x) { - // Check that there are no extra characters. - ASSERT_TRUE(x.size() >= 2 && x[0] == '[' && x[x.size()-1] == ']') - << EscapeString(x); - int val; - char ignored; - ASSERT_TRUE(sscanf(x.ToString().c_str(), "[%i]%c", &val, &ignored) == 1) - << EscapeString(x); - return val; - } - }; - NumberComparator cmp; - Options new_options = CurrentOptions(); - new_options.create_if_missing = true; - new_options.comparator = &cmp; - new_options.filter_policy = NULL; // Cannot use bloom filters - new_options.write_buffer_size = 1000; // Compact more often - DestroyAndReopen(&new_options); - ASSERT_OK(Put("[10]", "ten")); - ASSERT_OK(Put("[0x14]", "twenty")); - for (int i = 0; i < 2; i++) { - ASSERT_EQ("ten", Get("[10]")); - ASSERT_EQ("ten", Get("[0xa]")); - ASSERT_EQ("twenty", Get("[20]")); - ASSERT_EQ("twenty", Get("[0x14]")); - ASSERT_EQ("NOT_FOUND", Get("[15]")); - ASSERT_EQ("NOT_FOUND", Get("[0xf]")); - Compact("[0]", "[9999]"); - } - - for (int run = 0; run < 2; run++) { - for (int i = 0; i < 1000; i++) { - char buf[100]; - snprintf(buf, sizeof(buf), "[%d]", i*10); - ASSERT_OK(Put(buf, buf)); - } - Compact("[0]", "[1000000]"); - } -} - -TEST(DBTest, ManualCompaction) { - ASSERT_EQ(config::kMaxMemCompactLevel, 2) - << "Need to update this test to match kMaxMemCompactLevel"; - - MakeTables(3, "p", "q"); - ASSERT_EQ("1,1,1", FilesPerLevel()); - - // Compaction range falls before files - Compact("", "c"); - ASSERT_EQ("1,1,1", FilesPerLevel()); - - // Compaction range falls after files - Compact("r", "z"); - ASSERT_EQ("1,1,1", FilesPerLevel()); - - // Compaction range overlaps files - Compact("p1", "p9"); - ASSERT_EQ("0,0,1", FilesPerLevel()); - - // Populate a different range - MakeTables(3, "c", "e"); - ASSERT_EQ("1,1,2", FilesPerLevel()); - - // Compact just the new range - Compact("b", "f"); - ASSERT_EQ("0,0,2", FilesPerLevel()); - - // Compact all - MakeTables(1, "a", "z"); - ASSERT_EQ("0,1,2", FilesPerLevel()); - db_->CompactRange(NULL, NULL); - ASSERT_EQ("0,0,1", FilesPerLevel()); -} - -TEST(DBTest, DBOpen_Options) { - std::string dbname = test::TmpDir() + "/db_options_test"; - DestroyDB(dbname, Options()); - - // Does not exist, and create_if_missing == false: error - DB* db = NULL; - Options opts; - opts.create_if_missing = false; - Status s = DB::Open(opts, dbname, &db); - ASSERT_TRUE(strstr(s.ToString().c_str(), "does not exist") != NULL); - ASSERT_TRUE(db == NULL); - - // Does not exist, and create_if_missing == true: OK - opts.create_if_missing = true; - s = DB::Open(opts, dbname, &db); - ASSERT_OK(s); - ASSERT_TRUE(db != NULL); - - delete db; - db = NULL; - - // Does exist, and error_if_exists == true: error - opts.create_if_missing = false; - opts.error_if_exists = true; - s = DB::Open(opts, dbname, &db); - ASSERT_TRUE(strstr(s.ToString().c_str(), "exists") != NULL); - ASSERT_TRUE(db == NULL); - - // Does exist, and error_if_exists == false: OK - opts.create_if_missing = true; - opts.error_if_exists = false; - s = DB::Open(opts, dbname, &db); - ASSERT_OK(s); - ASSERT_TRUE(db != NULL); - - delete db; - db = NULL; -} - -TEST(DBTest, Locking) { - DB* db2 = NULL; - Status s = DB::Open(CurrentOptions(), dbname_, &db2); - ASSERT_TRUE(!s.ok()) << "Locking did not prevent re-opening db"; -} - -// Check that number of files does not grow when we are out of space -TEST(DBTest, NoSpace) { - Options options = CurrentOptions(); - options.env = env_; - Reopen(&options); - - ASSERT_OK(Put("foo", "v1")); - ASSERT_EQ("v1", Get("foo")); - Compact("a", "z"); - const int num_files = CountFiles(); - env_->no_space_.Release_Store(env_); // Force out-of-space errors - for (int i = 0; i < 10; i++) { - for (int level = 0; level < config::kNumLevels-1; level++) { - dbfull()->TEST_CompactRange(level, NULL, NULL); - } - } - env_->no_space_.Release_Store(NULL); - ASSERT_LT(CountFiles(), num_files + 3); -} - -TEST(DBTest, NonWritableFileSystem) { - Options options = CurrentOptions(); - options.write_buffer_size = 1000; - options.env = env_; - Reopen(&options); - ASSERT_OK(Put("foo", "v1")); - env_->non_writable_.Release_Store(env_); // Force errors for new files - std::string big(100000, 'x'); - int errors = 0; - for (int i = 0; i < 20; i++) { - fprintf(stderr, "iter %d; errors %d\n", i, errors); - if (!Put("foo", big).ok()) { - errors++; - DelayMilliseconds(100); - } - } - ASSERT_GT(errors, 0); - env_->non_writable_.Release_Store(NULL); -} - -TEST(DBTest, WriteSyncError) { - // Check that log sync errors cause the DB to disallow future writes. - - // (a) Cause log sync calls to fail - Options options = CurrentOptions(); - options.env = env_; - Reopen(&options); - env_->data_sync_error_.Release_Store(env_); - - // (b) Normal write should succeed - WriteOptions w; - ASSERT_OK(db_->Put(w, "k1", "v1")); - ASSERT_EQ("v1", Get("k1")); - - // (c) Do a sync write; should fail - w.sync = true; - ASSERT_TRUE(!db_->Put(w, "k2", "v2").ok()); - ASSERT_EQ("v1", Get("k1")); - ASSERT_EQ("NOT_FOUND", Get("k2")); - - // (d) make sync behave normally - env_->data_sync_error_.Release_Store(NULL); - - // (e) Do a non-sync write; should fail - w.sync = false; - ASSERT_TRUE(!db_->Put(w, "k3", "v3").ok()); - ASSERT_EQ("v1", Get("k1")); - ASSERT_EQ("NOT_FOUND", Get("k2")); - ASSERT_EQ("NOT_FOUND", Get("k3")); -} - -TEST(DBTest, ManifestWriteError) { - // Test for the following problem: - // (a) Compaction produces file F - // (b) Log record containing F is written to MANIFEST file, but Sync() fails - // (c) GC deletes F - // (d) After reopening DB, reads fail since deleted F is named in log record - - // We iterate twice. In the second iteration, everything is the - // same except the log record never makes it to the MANIFEST file. - for (int iter = 0; iter < 2; iter++) { - port::AtomicPointer* error_type = (iter == 0) - ? &env_->manifest_sync_error_ - : &env_->manifest_write_error_; - - // Insert foo=>bar mapping - Options options = CurrentOptions(); - options.env = env_; - options.create_if_missing = true; - options.error_if_exists = false; - DestroyAndReopen(&options); - ASSERT_OK(Put("foo", "bar")); - ASSERT_EQ("bar", Get("foo")); - - // Memtable compaction (will succeed) - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("bar", Get("foo")); - const int last = config::kMaxMemCompactLevel; - ASSERT_EQ(NumTableFilesAtLevel(last), 1); // foo=>bar is now in last level - - // Merging compaction (will fail) - error_type->Release_Store(env_); - dbfull()->TEST_CompactRange(last, NULL, NULL); // Should fail - ASSERT_EQ("bar", Get("foo")); - - // Recovery: should not lose data - error_type->Release_Store(NULL); - Reopen(&options); - ASSERT_EQ("bar", Get("foo")); - } -} - -TEST(DBTest, MissingSSTFile) { - ASSERT_OK(Put("foo", "bar")); - ASSERT_EQ("bar", Get("foo")); - - // Dump the memtable to disk. - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("bar", Get("foo")); - - Close(); - ASSERT_TRUE(DeleteAnSSTFile()); - Options options = CurrentOptions(); - options.paranoid_checks = true; - Status s = TryReopen(&options); - ASSERT_TRUE(!s.ok()); - ASSERT_TRUE(s.ToString().find("issing") != std::string::npos) - << s.ToString(); -} - -TEST(DBTest, StillReadSST) { - ASSERT_OK(Put("foo", "bar")); - ASSERT_EQ("bar", Get("foo")); - - // Dump the memtable to disk. - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("bar", Get("foo")); - Close(); - ASSERT_GT(RenameLDBToSST(), 0); - Options options = CurrentOptions(); - options.paranoid_checks = true; - Status s = TryReopen(&options); - ASSERT_TRUE(s.ok()); - ASSERT_EQ("bar", Get("foo")); -} - -TEST(DBTest, FilesDeletedAfterCompaction) { - ASSERT_OK(Put("foo", "v2")); - Compact("a", "z"); - const int num_files = CountFiles(); - for (int i = 0; i < 10; i++) { - ASSERT_OK(Put("foo", "v2")); - Compact("a", "z"); - } - ASSERT_EQ(CountFiles(), num_files); -} - -TEST(DBTest, BloomFilter) { - env_->count_random_reads_ = true; - Options options = CurrentOptions(); - options.env = env_; - options.block_cache = NewLRUCache(0); // Prevent cache hits - options.filter_policy = NewBloomFilterPolicy(10); - Reopen(&options); - - // Populate multiple layers - const int N = 10000; - for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(i), Key(i))); - } - Compact("a", "z"); - for (int i = 0; i < N; i += 100) { - ASSERT_OK(Put(Key(i), Key(i))); - } - dbfull()->TEST_CompactMemTable(); - - // Prevent auto compactions triggered by seeks - env_->delay_data_sync_.Release_Store(env_); - - // Lookup present keys. Should rarely read from small sstable. - env_->random_read_counter_.Reset(); - for (int i = 0; i < N; i++) { - ASSERT_EQ(Key(i), Get(Key(i))); - } - int reads = env_->random_read_counter_.Read(); - fprintf(stderr, "%d present => %d reads\n", N, reads); - ASSERT_GE(reads, N); - ASSERT_LE(reads, N + 2*N/100); - - // Lookup present keys. Should rarely read from either sstable. - env_->random_read_counter_.Reset(); - for (int i = 0; i < N; i++) { - ASSERT_EQ("NOT_FOUND", Get(Key(i) + ".missing")); - } - reads = env_->random_read_counter_.Read(); - fprintf(stderr, "%d missing => %d reads\n", N, reads); - ASSERT_LE(reads, 3*N/100); - - env_->delay_data_sync_.Release_Store(NULL); - Close(); - delete options.block_cache; - delete options.filter_policy; -} - -// Multi-threaded test: -namespace { - -static const int kNumThreads = 4; -static const int kTestSeconds = 10; -static const int kNumKeys = 1000; - -struct MTState { - DBTest* test; - port::AtomicPointer stop; - port::AtomicPointer counter[kNumThreads]; - port::AtomicPointer thread_done[kNumThreads]; -}; - -struct MTThread { - MTState* state; - int id; -}; - -static void MTThreadBody(void* arg) { - MTThread* t = reinterpret_cast(arg); - int id = t->id; - DB* db = t->state->test->db_; - uintptr_t counter = 0; - fprintf(stderr, "... starting thread %d\n", id); - Random rnd(1000 + id); - std::string value; - char valbuf[1500]; - while (t->state->stop.Acquire_Load() == NULL) { - t->state->counter[id].Release_Store(reinterpret_cast(counter)); - - int key = rnd.Uniform(kNumKeys); - char keybuf[20]; - snprintf(keybuf, sizeof(keybuf), "%016d", key); - - if (rnd.OneIn(2)) { - // Write values of the form . - // We add some padding for force compactions. - snprintf(valbuf, sizeof(valbuf), "%d.%d.%-1000d", - key, id, static_cast(counter)); - ASSERT_OK(db->Put(WriteOptions(), Slice(keybuf), Slice(valbuf))); - } else { - // Read a value and verify that it matches the pattern written above. - Status s = db->Get(ReadOptions(), Slice(keybuf), &value); - if (s.IsNotFound()) { - // Key has not yet been written - } else { - // Check that the writer thread counter is >= the counter in the value - ASSERT_OK(s); - int k, w, c; - ASSERT_EQ(3, sscanf(value.c_str(), "%d.%d.%d", &k, &w, &c)) << value; - ASSERT_EQ(k, key); - ASSERT_GE(w, 0); - ASSERT_LT(w, kNumThreads); - ASSERT_LE(static_cast(c), reinterpret_cast( - t->state->counter[w].Acquire_Load())); - } - } - counter++; - } - t->state->thread_done[id].Release_Store(t); - fprintf(stderr, "... stopping thread %d after %d ops\n", id, int(counter)); -} - -} // namespace - -TEST(DBTest, MultiThreaded) { - do { - // Initialize state - MTState mt; - mt.test = this; - mt.stop.Release_Store(0); - for (int id = 0; id < kNumThreads; id++) { - mt.counter[id].Release_Store(0); - mt.thread_done[id].Release_Store(0); - } - - // Start threads - MTThread thread[kNumThreads]; - for (int id = 0; id < kNumThreads; id++) { - thread[id].state = &mt; - thread[id].id = id; - env_->StartThread(MTThreadBody, &thread[id]); - } - - // Let them run for a while - DelayMilliseconds(kTestSeconds * 1000); - - // Stop the threads and wait for them to finish - mt.stop.Release_Store(&mt); - for (int id = 0; id < kNumThreads; id++) { - while (mt.thread_done[id].Acquire_Load() == NULL) { - DelayMilliseconds(100); - } - } - } while (ChangeOptions()); -} - -namespace { -typedef std::map KVMap; -} - -class ModelDB: public DB { - public: - class ModelSnapshot : public Snapshot { - public: - KVMap map_; - }; - - explicit ModelDB(const Options& options): options_(options) { } - ~ModelDB() { } - virtual Status Put(const WriteOptions& o, const Slice& k, const Slice& v) { - return DB::Put(o, k, v); - } - virtual Status Delete(const WriteOptions& o, const Slice& key) { - return DB::Delete(o, key); - } - virtual Status Get(const ReadOptions& options, - const Slice& key, std::string* value) { - assert(false); // Not implemented - return Status::NotFound(key); - } - virtual Iterator* NewIterator(const ReadOptions& options) { - if (options.snapshot == NULL) { - KVMap* saved = new KVMap; - *saved = map_; - return new ModelIter(saved, true); - } else { - const KVMap* snapshot_state = - &(reinterpret_cast(options.snapshot)->map_); - return new ModelIter(snapshot_state, false); - } - } - virtual const Snapshot* GetSnapshot() { - ModelSnapshot* snapshot = new ModelSnapshot; - snapshot->map_ = map_; - return snapshot; - } - - virtual void ReleaseSnapshot(const Snapshot* snapshot) { - delete reinterpret_cast(snapshot); - } - virtual Status Write(const WriteOptions& options, WriteBatch* batch) { - class Handler : public WriteBatch::Handler { - public: - KVMap* map_; - virtual void Put(const Slice& key, const Slice& value) { - (*map_)[key.ToString()] = value.ToString(); - } - virtual void Delete(const Slice& key) { - map_->erase(key.ToString()); - } - }; - Handler handler; - handler.map_ = &map_; - return batch->Iterate(&handler); - } - - virtual bool GetProperty(const Slice& property, std::string* value) { - return false; - } - virtual void GetApproximateSizes(const Range* r, int n, uint64_t* sizes) { - for (int i = 0; i < n; i++) { - sizes[i] = 0; - } - } - virtual void CompactRange(const Slice* start, const Slice* end) { - } - - private: - class ModelIter: public Iterator { - public: - ModelIter(const KVMap* map, bool owned) - : map_(map), owned_(owned), iter_(map_->end()) { - } - ~ModelIter() { - if (owned_) delete map_; - } - virtual bool Valid() const { return iter_ != map_->end(); } - virtual void SeekToFirst() { iter_ = map_->begin(); } - virtual void SeekToLast() { - if (map_->empty()) { - iter_ = map_->end(); - } else { - iter_ = map_->find(map_->rbegin()->first); - } - } - virtual void Seek(const Slice& k) { - iter_ = map_->lower_bound(k.ToString()); - } - virtual void Next() { ++iter_; } - virtual void Prev() { --iter_; } - virtual Slice key() const { return iter_->first; } - virtual Slice value() const { return iter_->second; } - virtual Status status() const { return Status::OK(); } - private: - const KVMap* const map_; - const bool owned_; // Do we own map_ - KVMap::const_iterator iter_; - }; - const Options options_; - KVMap map_; -}; - -static std::string RandomKey(Random* rnd) { - int len = (rnd->OneIn(3) - ? 1 // Short sometimes to encourage collisions - : (rnd->OneIn(100) ? rnd->Skewed(10) : rnd->Uniform(10))); - return test::RandomKey(rnd, len); -} - -static bool CompareIterators(int step, - DB* model, - DB* db, - const Snapshot* model_snap, - const Snapshot* db_snap) { - ReadOptions options; - options.snapshot = model_snap; - Iterator* miter = model->NewIterator(options); - options.snapshot = db_snap; - Iterator* dbiter = db->NewIterator(options); - bool ok = true; - int count = 0; - for (miter->SeekToFirst(), dbiter->SeekToFirst(); - ok && miter->Valid() && dbiter->Valid(); - miter->Next(), dbiter->Next()) { - count++; - if (miter->key().compare(dbiter->key()) != 0) { - fprintf(stderr, "step %d: Key mismatch: '%s' vs. '%s'\n", - step, - EscapeString(miter->key()).c_str(), - EscapeString(dbiter->key()).c_str()); - ok = false; - break; - } - - if (miter->value().compare(dbiter->value()) != 0) { - fprintf(stderr, "step %d: Value mismatch for key '%s': '%s' vs. '%s'\n", - step, - EscapeString(miter->key()).c_str(), - EscapeString(miter->value()).c_str(), - EscapeString(miter->value()).c_str()); - ok = false; - } - } - - if (ok) { - if (miter->Valid() != dbiter->Valid()) { - fprintf(stderr, "step %d: Mismatch at end of iterators: %d vs. %d\n", - step, miter->Valid(), dbiter->Valid()); - ok = false; - } - } - fprintf(stderr, "%d entries compared: ok=%d\n", count, ok); - delete miter; - delete dbiter; - return ok; -} - -TEST(DBTest, Randomized) { - Random rnd(test::RandomSeed()); - do { - ModelDB model(CurrentOptions()); - const int N = 10000; - const Snapshot* model_snap = NULL; - const Snapshot* db_snap = NULL; - std::string k, v; - for (int step = 0; step < N; step++) { - if (step % 100 == 0) { - fprintf(stderr, "Step %d of %d\n", step, N); - } - // TODO(sanjay): Test Get() works - int p = rnd.Uniform(100); - if (p < 45) { // Put - k = RandomKey(&rnd); - v = RandomString(&rnd, - rnd.OneIn(20) - ? 100 + rnd.Uniform(100) - : rnd.Uniform(8)); - ASSERT_OK(model.Put(WriteOptions(), k, v)); - ASSERT_OK(db_->Put(WriteOptions(), k, v)); - - } else if (p < 90) { // Delete - k = RandomKey(&rnd); - ASSERT_OK(model.Delete(WriteOptions(), k)); - ASSERT_OK(db_->Delete(WriteOptions(), k)); - - - } else { // Multi-element batch - WriteBatch b; - const int num = rnd.Uniform(8); - for (int i = 0; i < num; i++) { - if (i == 0 || !rnd.OneIn(10)) { - k = RandomKey(&rnd); - } else { - // Periodically re-use the same key from the previous iter, so - // we have multiple entries in the write batch for the same key - } - if (rnd.OneIn(2)) { - v = RandomString(&rnd, rnd.Uniform(10)); - b.Put(k, v); - } else { - b.Delete(k); - } - } - ASSERT_OK(model.Write(WriteOptions(), &b)); - ASSERT_OK(db_->Write(WriteOptions(), &b)); - } - - if ((step % 100) == 0) { - ASSERT_TRUE(CompareIterators(step, &model, db_, NULL, NULL)); - ASSERT_TRUE(CompareIterators(step, &model, db_, model_snap, db_snap)); - // Save a snapshot from each DB this time that we'll use next - // time we compare things, to make sure the current state is - // preserved with the snapshot - if (model_snap != NULL) model.ReleaseSnapshot(model_snap); - if (db_snap != NULL) db_->ReleaseSnapshot(db_snap); - - Reopen(); - ASSERT_TRUE(CompareIterators(step, &model, db_, NULL, NULL)); - - model_snap = model.GetSnapshot(); - db_snap = db_->GetSnapshot(); - } - } - if (model_snap != NULL) model.ReleaseSnapshot(model_snap); - if (db_snap != NULL) db_->ReleaseSnapshot(db_snap); - } while (ChangeOptions()); -} - -std::string MakeKey(unsigned int num) { - char buf[30]; - snprintf(buf, sizeof(buf), "%016u", num); - return std::string(buf); -} - -void BM_LogAndApply(int iters, int num_base_files) { - std::string dbname = test::TmpDir() + "/leveldb_test_benchmark"; - DestroyDB(dbname, Options()); - - DB* db = NULL; - Options opts; - opts.create_if_missing = true; - Status s = DB::Open(opts, dbname, &db); - ASSERT_OK(s); - ASSERT_TRUE(db != NULL); - - delete db; - db = NULL; - - Env* env = Env::Default(); - - port::Mutex mu; - MutexLock l(&mu); - - InternalKeyComparator cmp(BytewiseComparator()); - Options options; - VersionSet vset(dbname, &options, NULL, &cmp); - ASSERT_OK(vset.Recover()); - VersionEdit vbase; - uint64_t fnum = 1; - for (int i = 0; i < num_base_files; i++) { - InternalKey start(MakeKey(2*fnum), 1, kTypeValue); - InternalKey limit(MakeKey(2*fnum+1), 1, kTypeDeletion); - vbase.AddFile(2, fnum++, 1 /* file size */, start, limit); - } - ASSERT_OK(vset.LogAndApply(&vbase, &mu)); - - uint64_t start_micros = env->NowMicros(); - - for (int i = 0; i < iters; i++) { - VersionEdit vedit; - vedit.DeleteFile(2, fnum); - InternalKey start(MakeKey(2*fnum), 1, kTypeValue); - InternalKey limit(MakeKey(2*fnum+1), 1, kTypeDeletion); - vedit.AddFile(2, fnum++, 1 /* file size */, start, limit); - vset.LogAndApply(&vedit, &mu); - } - uint64_t stop_micros = env->NowMicros(); - unsigned int us = stop_micros - start_micros; - char buf[16]; - snprintf(buf, sizeof(buf), "%d", num_base_files); - fprintf(stderr, - "BM_LogAndApply/%-6s %8d iters : %9u us (%7.0f us / iter)\n", - buf, iters, us, ((float)us) / iters); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - if (argc > 1 && std::string(argv[1]) == "--benchmark") { - leveldb::BM_LogAndApply(1000, 1); - leveldb::BM_LogAndApply(1000, 100); - leveldb::BM_LogAndApply(1000, 10000); - leveldb::BM_LogAndApply(100, 100000); - return 0; - } - - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/db/dbformat.cc b/src/leveldb/db/dbformat.cc deleted file mode 100644 index 20a7ca4462..0000000000 --- a/src/leveldb/db/dbformat.cc +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include "db/dbformat.h" -#include "port/port.h" -#include "util/coding.h" - -namespace leveldb { - -static uint64_t PackSequenceAndType(uint64_t seq, ValueType t) { - assert(seq <= kMaxSequenceNumber); - assert(t <= kValueTypeForSeek); - return (seq << 8) | t; -} - -void AppendInternalKey(std::string* result, const ParsedInternalKey& key) { - result->append(key.user_key.data(), key.user_key.size()); - PutFixed64(result, PackSequenceAndType(key.sequence, key.type)); -} - -std::string ParsedInternalKey::DebugString() const { - char buf[50]; - snprintf(buf, sizeof(buf), "' @ %llu : %d", - (unsigned long long) sequence, - int(type)); - std::string result = "'"; - result += EscapeString(user_key.ToString()); - result += buf; - return result; -} - -std::string InternalKey::DebugString() const { - std::string result; - ParsedInternalKey parsed; - if (ParseInternalKey(rep_, &parsed)) { - result = parsed.DebugString(); - } else { - result = "(bad)"; - result.append(EscapeString(rep_)); - } - return result; -} - -const char* InternalKeyComparator::Name() const { - return "leveldb.InternalKeyComparator"; -} - -int InternalKeyComparator::Compare(const Slice& akey, const Slice& bkey) const { - // Order by: - // increasing user key (according to user-supplied comparator) - // decreasing sequence number - // decreasing type (though sequence# should be enough to disambiguate) - int r = user_comparator_->Compare(ExtractUserKey(akey), ExtractUserKey(bkey)); - if (r == 0) { - const uint64_t anum = DecodeFixed64(akey.data() + akey.size() - 8); - const uint64_t bnum = DecodeFixed64(bkey.data() + bkey.size() - 8); - if (anum > bnum) { - r = -1; - } else if (anum < bnum) { - r = +1; - } - } - return r; -} - -void InternalKeyComparator::FindShortestSeparator( - std::string* start, - const Slice& limit) const { - // Attempt to shorten the user portion of the key - Slice user_start = ExtractUserKey(*start); - Slice user_limit = ExtractUserKey(limit); - std::string tmp(user_start.data(), user_start.size()); - user_comparator_->FindShortestSeparator(&tmp, user_limit); - if (tmp.size() < user_start.size() && - user_comparator_->Compare(user_start, tmp) < 0) { - // User key has become shorter physically, but larger logically. - // Tack on the earliest possible number to the shortened user key. - PutFixed64(&tmp, PackSequenceAndType(kMaxSequenceNumber,kValueTypeForSeek)); - assert(this->Compare(*start, tmp) < 0); - assert(this->Compare(tmp, limit) < 0); - start->swap(tmp); - } -} - -void InternalKeyComparator::FindShortSuccessor(std::string* key) const { - Slice user_key = ExtractUserKey(*key); - std::string tmp(user_key.data(), user_key.size()); - user_comparator_->FindShortSuccessor(&tmp); - if (tmp.size() < user_key.size() && - user_comparator_->Compare(user_key, tmp) < 0) { - // User key has become shorter physically, but larger logically. - // Tack on the earliest possible number to the shortened user key. - PutFixed64(&tmp, PackSequenceAndType(kMaxSequenceNumber,kValueTypeForSeek)); - assert(this->Compare(*key, tmp) < 0); - key->swap(tmp); - } -} - -const char* InternalFilterPolicy::Name() const { - return user_policy_->Name(); -} - -void InternalFilterPolicy::CreateFilter(const Slice* keys, int n, - std::string* dst) const { - // We rely on the fact that the code in table.cc does not mind us - // adjusting keys[]. - Slice* mkey = const_cast(keys); - for (int i = 0; i < n; i++) { - mkey[i] = ExtractUserKey(keys[i]); - // TODO(sanjay): Suppress dups? - } - user_policy_->CreateFilter(keys, n, dst); -} - -bool InternalFilterPolicy::KeyMayMatch(const Slice& key, const Slice& f) const { - return user_policy_->KeyMayMatch(ExtractUserKey(key), f); -} - -LookupKey::LookupKey(const Slice& user_key, SequenceNumber s) { - size_t usize = user_key.size(); - size_t needed = usize + 13; // A conservative estimate - char* dst; - if (needed <= sizeof(space_)) { - dst = space_; - } else { - dst = new char[needed]; - } - start_ = dst; - dst = EncodeVarint32(dst, usize + 8); - kstart_ = dst; - memcpy(dst, user_key.data(), usize); - dst += usize; - EncodeFixed64(dst, PackSequenceAndType(s, kValueTypeForSeek)); - dst += 8; - end_ = dst; -} - -} // namespace leveldb diff --git a/src/leveldb/db/dbformat.h b/src/leveldb/db/dbformat.h deleted file mode 100644 index ea897b13c0..0000000000 --- a/src/leveldb/db/dbformat.h +++ /dev/null @@ -1,230 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_DBFORMAT_H_ -#define STORAGE_LEVELDB_DB_DBFORMAT_H_ - -#include -#include "leveldb/comparator.h" -#include "leveldb/db.h" -#include "leveldb/filter_policy.h" -#include "leveldb/slice.h" -#include "leveldb/table_builder.h" -#include "util/coding.h" -#include "util/logging.h" - -namespace leveldb { - -// Grouping of constants. We may want to make some of these -// parameters set via options. -namespace config { -static const int kNumLevels = 7; - -// Level-0 compaction is started when we hit this many files. -static const int kL0_CompactionTrigger = 4; - -// Soft limit on number of level-0 files. We slow down writes at this point. -static const int kL0_SlowdownWritesTrigger = 8; - -// Maximum number of level-0 files. We stop writes at this point. -static const int kL0_StopWritesTrigger = 12; - -// Maximum level to which a new compacted memtable is pushed if it -// does not create overlap. We try to push to level 2 to avoid the -// relatively expensive level 0=>1 compactions and to avoid some -// expensive manifest file operations. We do not push all the way to -// the largest level since that can generate a lot of wasted disk -// space if the same key space is being repeatedly overwritten. -static const int kMaxMemCompactLevel = 2; - -// Approximate gap in bytes between samples of data read during iteration. -static const int kReadBytesPeriod = 1048576; - -} // namespace config - -class InternalKey; - -// Value types encoded as the last component of internal keys. -// DO NOT CHANGE THESE ENUM VALUES: they are embedded in the on-disk -// data structures. -enum ValueType { - kTypeDeletion = 0x0, - kTypeValue = 0x1 -}; -// kValueTypeForSeek defines the ValueType that should be passed when -// constructing a ParsedInternalKey object for seeking to a particular -// sequence number (since we sort sequence numbers in decreasing order -// and the value type is embedded as the low 8 bits in the sequence -// number in internal keys, we need to use the highest-numbered -// ValueType, not the lowest). -static const ValueType kValueTypeForSeek = kTypeValue; - -typedef uint64_t SequenceNumber; - -// We leave eight bits empty at the bottom so a type and sequence# -// can be packed together into 64-bits. -static const SequenceNumber kMaxSequenceNumber = - ((0x1ull << 56) - 1); - -struct ParsedInternalKey { - Slice user_key; - SequenceNumber sequence; - ValueType type; - - ParsedInternalKey() { } // Intentionally left uninitialized (for speed) - ParsedInternalKey(const Slice& u, const SequenceNumber& seq, ValueType t) - : user_key(u), sequence(seq), type(t) { } - std::string DebugString() const; -}; - -// Return the length of the encoding of "key". -inline size_t InternalKeyEncodingLength(const ParsedInternalKey& key) { - return key.user_key.size() + 8; -} - -// Append the serialization of "key" to *result. -extern void AppendInternalKey(std::string* result, - const ParsedInternalKey& key); - -// Attempt to parse an internal key from "internal_key". On success, -// stores the parsed data in "*result", and returns true. -// -// On error, returns false, leaves "*result" in an undefined state. -extern bool ParseInternalKey(const Slice& internal_key, - ParsedInternalKey* result); - -// Returns the user key portion of an internal key. -inline Slice ExtractUserKey(const Slice& internal_key) { - assert(internal_key.size() >= 8); - return Slice(internal_key.data(), internal_key.size() - 8); -} - -inline ValueType ExtractValueType(const Slice& internal_key) { - assert(internal_key.size() >= 8); - const size_t n = internal_key.size(); - uint64_t num = DecodeFixed64(internal_key.data() + n - 8); - unsigned char c = num & 0xff; - return static_cast(c); -} - -// A comparator for internal keys that uses a specified comparator for -// the user key portion and breaks ties by decreasing sequence number. -class InternalKeyComparator : public Comparator { - private: - const Comparator* user_comparator_; - public: - explicit InternalKeyComparator(const Comparator* c) : user_comparator_(c) { } - virtual const char* Name() const; - virtual int Compare(const Slice& a, const Slice& b) const; - virtual void FindShortestSeparator( - std::string* start, - const Slice& limit) const; - virtual void FindShortSuccessor(std::string* key) const; - - const Comparator* user_comparator() const { return user_comparator_; } - - int Compare(const InternalKey& a, const InternalKey& b) const; -}; - -// Filter policy wrapper that converts from internal keys to user keys -class InternalFilterPolicy : public FilterPolicy { - private: - const FilterPolicy* const user_policy_; - public: - explicit InternalFilterPolicy(const FilterPolicy* p) : user_policy_(p) { } - virtual const char* Name() const; - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const; - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const; -}; - -// Modules in this directory should keep internal keys wrapped inside -// the following class instead of plain strings so that we do not -// incorrectly use string comparisons instead of an InternalKeyComparator. -class InternalKey { - private: - std::string rep_; - public: - InternalKey() { } // Leave rep_ as empty to indicate it is invalid - InternalKey(const Slice& user_key, SequenceNumber s, ValueType t) { - AppendInternalKey(&rep_, ParsedInternalKey(user_key, s, t)); - } - - void DecodeFrom(const Slice& s) { rep_.assign(s.data(), s.size()); } - Slice Encode() const { - assert(!rep_.empty()); - return rep_; - } - - Slice user_key() const { return ExtractUserKey(rep_); } - - void SetFrom(const ParsedInternalKey& p) { - rep_.clear(); - AppendInternalKey(&rep_, p); - } - - void Clear() { rep_.clear(); } - - std::string DebugString() const; -}; - -inline int InternalKeyComparator::Compare( - const InternalKey& a, const InternalKey& b) const { - return Compare(a.Encode(), b.Encode()); -} - -inline bool ParseInternalKey(const Slice& internal_key, - ParsedInternalKey* result) { - const size_t n = internal_key.size(); - if (n < 8) return false; - uint64_t num = DecodeFixed64(internal_key.data() + n - 8); - unsigned char c = num & 0xff; - result->sequence = num >> 8; - result->type = static_cast(c); - result->user_key = Slice(internal_key.data(), n - 8); - return (c <= static_cast(kTypeValue)); -} - -// A helper class useful for DBImpl::Get() -class LookupKey { - public: - // Initialize *this for looking up user_key at a snapshot with - // the specified sequence number. - LookupKey(const Slice& user_key, SequenceNumber sequence); - - ~LookupKey(); - - // Return a key suitable for lookup in a MemTable. - Slice memtable_key() const { return Slice(start_, end_ - start_); } - - // Return an internal key (suitable for passing to an internal iterator) - Slice internal_key() const { return Slice(kstart_, end_ - kstart_); } - - // Return the user key - Slice user_key() const { return Slice(kstart_, end_ - kstart_ - 8); } - - private: - // We construct a char array of the form: - // klength varint32 <-- start_ - // userkey char[klength] <-- kstart_ - // tag uint64 - // <-- end_ - // The array is a suitable MemTable key. - // The suffix starting with "userkey" can be used as an InternalKey. - const char* start_; - const char* kstart_; - const char* end_; - char space_[200]; // Avoid allocation for short keys - - // No copying allowed - LookupKey(const LookupKey&); - void operator=(const LookupKey&); -}; - -inline LookupKey::~LookupKey() { - if (start_ != space_) delete[] start_; -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_DBFORMAT_H_ diff --git a/src/leveldb/db/dbformat_test.cc b/src/leveldb/db/dbformat_test.cc deleted file mode 100644 index 5d82f5d313..0000000000 --- a/src/leveldb/db/dbformat_test.cc +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/dbformat.h" -#include "util/logging.h" -#include "util/testharness.h" - -namespace leveldb { - -static std::string IKey(const std::string& user_key, - uint64_t seq, - ValueType vt) { - std::string encoded; - AppendInternalKey(&encoded, ParsedInternalKey(user_key, seq, vt)); - return encoded; -} - -static std::string Shorten(const std::string& s, const std::string& l) { - std::string result = s; - InternalKeyComparator(BytewiseComparator()).FindShortestSeparator(&result, l); - return result; -} - -static std::string ShortSuccessor(const std::string& s) { - std::string result = s; - InternalKeyComparator(BytewiseComparator()).FindShortSuccessor(&result); - return result; -} - -static void TestKey(const std::string& key, - uint64_t seq, - ValueType vt) { - std::string encoded = IKey(key, seq, vt); - - Slice in(encoded); - ParsedInternalKey decoded("", 0, kTypeValue); - - ASSERT_TRUE(ParseInternalKey(in, &decoded)); - ASSERT_EQ(key, decoded.user_key.ToString()); - ASSERT_EQ(seq, decoded.sequence); - ASSERT_EQ(vt, decoded.type); - - ASSERT_TRUE(!ParseInternalKey(Slice("bar"), &decoded)); -} - -class FormatTest { }; - -TEST(FormatTest, InternalKey_EncodeDecode) { - const char* keys[] = { "", "k", "hello", "longggggggggggggggggggggg" }; - const uint64_t seq[] = { - 1, 2, 3, - (1ull << 8) - 1, 1ull << 8, (1ull << 8) + 1, - (1ull << 16) - 1, 1ull << 16, (1ull << 16) + 1, - (1ull << 32) - 1, 1ull << 32, (1ull << 32) + 1 - }; - for (int k = 0; k < sizeof(keys) / sizeof(keys[0]); k++) { - for (int s = 0; s < sizeof(seq) / sizeof(seq[0]); s++) { - TestKey(keys[k], seq[s], kTypeValue); - TestKey("hello", 1, kTypeDeletion); - } - } -} - -TEST(FormatTest, InternalKeyShortSeparator) { - // When user keys are same - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("foo", 99, kTypeValue))); - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("foo", 101, kTypeValue))); - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("foo", 100, kTypeValue))); - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("foo", 100, kTypeDeletion))); - - // When user keys are misordered - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("bar", 99, kTypeValue))); - - // When user keys are different, but correctly ordered - ASSERT_EQ(IKey("g", kMaxSequenceNumber, kValueTypeForSeek), - Shorten(IKey("foo", 100, kTypeValue), - IKey("hello", 200, kTypeValue))); - - // When start user key is prefix of limit user key - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("foobar", 200, kTypeValue))); - - // When limit user key is prefix of start user key - ASSERT_EQ(IKey("foobar", 100, kTypeValue), - Shorten(IKey("foobar", 100, kTypeValue), - IKey("foo", 200, kTypeValue))); -} - -TEST(FormatTest, InternalKeyShortestSuccessor) { - ASSERT_EQ(IKey("g", kMaxSequenceNumber, kValueTypeForSeek), - ShortSuccessor(IKey("foo", 100, kTypeValue))); - ASSERT_EQ(IKey("\xff\xff", 100, kTypeValue), - ShortSuccessor(IKey("\xff\xff", 100, kTypeValue))); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/db/dumpfile.cc b/src/leveldb/db/dumpfile.cc deleted file mode 100644 index 61c47c2ff9..0000000000 --- a/src/leveldb/db/dumpfile.cc +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/version_edit.h" -#include "db/write_batch_internal.h" -#include "leveldb/env.h" -#include "leveldb/iterator.h" -#include "leveldb/options.h" -#include "leveldb/status.h" -#include "leveldb/table.h" -#include "leveldb/write_batch.h" -#include "util/logging.h" - -namespace leveldb { - -namespace { - -bool GuessType(const std::string& fname, FileType* type) { - size_t pos = fname.rfind('/'); - std::string basename; - if (pos == std::string::npos) { - basename = fname; - } else { - basename = std::string(fname.data() + pos + 1, fname.size() - pos - 1); - } - uint64_t ignored; - return ParseFileName(basename, &ignored, type); -} - -// Notified when log reader encounters corruption. -class CorruptionReporter : public log::Reader::Reporter { - public: - WritableFile* dst_; - virtual void Corruption(size_t bytes, const Status& status) { - std::string r = "corruption: "; - AppendNumberTo(&r, bytes); - r += " bytes; "; - r += status.ToString(); - r.push_back('\n'); - dst_->Append(r); - } -}; - -// Print contents of a log file. (*func)() is called on every record. -Status PrintLogContents(Env* env, const std::string& fname, - void (*func)(uint64_t, Slice, WritableFile*), - WritableFile* dst) { - SequentialFile* file; - Status s = env->NewSequentialFile(fname, &file); - if (!s.ok()) { - return s; - } - CorruptionReporter reporter; - reporter.dst_ = dst; - log::Reader reader(file, &reporter, true, 0); - Slice record; - std::string scratch; - while (reader.ReadRecord(&record, &scratch)) { - (*func)(reader.LastRecordOffset(), record, dst); - } - delete file; - return Status::OK(); -} - -// Called on every item found in a WriteBatch. -class WriteBatchItemPrinter : public WriteBatch::Handler { - public: - WritableFile* dst_; - virtual void Put(const Slice& key, const Slice& value) { - std::string r = " put '"; - AppendEscapedStringTo(&r, key); - r += "' '"; - AppendEscapedStringTo(&r, value); - r += "'\n"; - dst_->Append(r); - } - virtual void Delete(const Slice& key) { - std::string r = " del '"; - AppendEscapedStringTo(&r, key); - r += "'\n"; - dst_->Append(r); - } -}; - - -// Called on every log record (each one of which is a WriteBatch) -// found in a kLogFile. -static void WriteBatchPrinter(uint64_t pos, Slice record, WritableFile* dst) { - std::string r = "--- offset "; - AppendNumberTo(&r, pos); - r += "; "; - if (record.size() < 12) { - r += "log record length "; - AppendNumberTo(&r, record.size()); - r += " is too small\n"; - dst->Append(r); - return; - } - WriteBatch batch; - WriteBatchInternal::SetContents(&batch, record); - r += "sequence "; - AppendNumberTo(&r, WriteBatchInternal::Sequence(&batch)); - r.push_back('\n'); - dst->Append(r); - WriteBatchItemPrinter batch_item_printer; - batch_item_printer.dst_ = dst; - Status s = batch.Iterate(&batch_item_printer); - if (!s.ok()) { - dst->Append(" error: " + s.ToString() + "\n"); - } -} - -Status DumpLog(Env* env, const std::string& fname, WritableFile* dst) { - return PrintLogContents(env, fname, WriteBatchPrinter, dst); -} - -// Called on every log record (each one of which is a WriteBatch) -// found in a kDescriptorFile. -static void VersionEditPrinter(uint64_t pos, Slice record, WritableFile* dst) { - std::string r = "--- offset "; - AppendNumberTo(&r, pos); - r += "; "; - VersionEdit edit; - Status s = edit.DecodeFrom(record); - if (!s.ok()) { - r += s.ToString(); - r.push_back('\n'); - } else { - r += edit.DebugString(); - } - dst->Append(r); -} - -Status DumpDescriptor(Env* env, const std::string& fname, WritableFile* dst) { - return PrintLogContents(env, fname, VersionEditPrinter, dst); -} - -Status DumpTable(Env* env, const std::string& fname, WritableFile* dst) { - uint64_t file_size; - RandomAccessFile* file = NULL; - Table* table = NULL; - Status s = env->GetFileSize(fname, &file_size); - if (s.ok()) { - s = env->NewRandomAccessFile(fname, &file); - } - if (s.ok()) { - // We use the default comparator, which may or may not match the - // comparator used in this database. However this should not cause - // problems since we only use Table operations that do not require - // any comparisons. In particular, we do not call Seek or Prev. - s = Table::Open(Options(), file, file_size, &table); - } - if (!s.ok()) { - delete table; - delete file; - return s; - } - - ReadOptions ro; - ro.fill_cache = false; - Iterator* iter = table->NewIterator(ro); - std::string r; - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - r.clear(); - ParsedInternalKey key; - if (!ParseInternalKey(iter->key(), &key)) { - r = "badkey '"; - AppendEscapedStringTo(&r, iter->key()); - r += "' => '"; - AppendEscapedStringTo(&r, iter->value()); - r += "'\n"; - dst->Append(r); - } else { - r = "'"; - AppendEscapedStringTo(&r, key.user_key); - r += "' @ "; - AppendNumberTo(&r, key.sequence); - r += " : "; - if (key.type == kTypeDeletion) { - r += "del"; - } else if (key.type == kTypeValue) { - r += "val"; - } else { - AppendNumberTo(&r, key.type); - } - r += " => '"; - AppendEscapedStringTo(&r, iter->value()); - r += "'\n"; - dst->Append(r); - } - } - s = iter->status(); - if (!s.ok()) { - dst->Append("iterator error: " + s.ToString() + "\n"); - } - - delete iter; - delete table; - delete file; - return Status::OK(); -} - -} // namespace - -Status DumpFile(Env* env, const std::string& fname, WritableFile* dst) { - FileType ftype; - if (!GuessType(fname, &ftype)) { - return Status::InvalidArgument(fname + ": unknown file type"); - } - switch (ftype) { - case kLogFile: return DumpLog(env, fname, dst); - case kDescriptorFile: return DumpDescriptor(env, fname, dst); - case kTableFile: return DumpTable(env, fname, dst); - default: - break; - } - return Status::InvalidArgument(fname + ": not a dump-able file type"); -} - -} // namespace leveldb diff --git a/src/leveldb/db/filename.cc b/src/leveldb/db/filename.cc deleted file mode 100644 index da32946d99..0000000000 --- a/src/leveldb/db/filename.cc +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include "db/filename.h" -#include "db/dbformat.h" -#include "leveldb/env.h" -#include "util/logging.h" - -namespace leveldb { - -// A utility routine: write "data" to the named file and Sync() it. -extern Status WriteStringToFileSync(Env* env, const Slice& data, - const std::string& fname); - -static std::string MakeFileName(const std::string& name, uint64_t number, - const char* suffix) { - char buf[100]; - snprintf(buf, sizeof(buf), "/%06llu.%s", - static_cast(number), - suffix); - return name + buf; -} - -std::string LogFileName(const std::string& name, uint64_t number) { - assert(number > 0); - return MakeFileName(name, number, "log"); -} - -std::string TableFileName(const std::string& name, uint64_t number) { - assert(number > 0); - return MakeFileName(name, number, "ldb"); -} - -std::string SSTTableFileName(const std::string& name, uint64_t number) { - assert(number > 0); - return MakeFileName(name, number, "sst"); -} - -std::string DescriptorFileName(const std::string& dbname, uint64_t number) { - assert(number > 0); - char buf[100]; - snprintf(buf, sizeof(buf), "/MANIFEST-%06llu", - static_cast(number)); - return dbname + buf; -} - -std::string CurrentFileName(const std::string& dbname) { - return dbname + "/CURRENT"; -} - -std::string LockFileName(const std::string& dbname) { - return dbname + "/LOCK"; -} - -std::string TempFileName(const std::string& dbname, uint64_t number) { - assert(number > 0); - return MakeFileName(dbname, number, "dbtmp"); -} - -std::string InfoLogFileName(const std::string& dbname) { - return dbname + "/LOG"; -} - -// Return the name of the old info log file for "dbname". -std::string OldInfoLogFileName(const std::string& dbname) { - return dbname + "/LOG.old"; -} - - -// Owned filenames have the form: -// dbname/CURRENT -// dbname/LOCK -// dbname/LOG -// dbname/LOG.old -// dbname/MANIFEST-[0-9]+ -// dbname/[0-9]+.(log|sst|ldb) -bool ParseFileName(const std::string& fname, - uint64_t* number, - FileType* type) { - Slice rest(fname); - if (rest == "CURRENT") { - *number = 0; - *type = kCurrentFile; - } else if (rest == "LOCK") { - *number = 0; - *type = kDBLockFile; - } else if (rest == "LOG" || rest == "LOG.old") { - *number = 0; - *type = kInfoLogFile; - } else if (rest.starts_with("MANIFEST-")) { - rest.remove_prefix(strlen("MANIFEST-")); - uint64_t num; - if (!ConsumeDecimalNumber(&rest, &num)) { - return false; - } - if (!rest.empty()) { - return false; - } - *type = kDescriptorFile; - *number = num; - } else { - // Avoid strtoull() to keep filename format independent of the - // current locale - uint64_t num; - if (!ConsumeDecimalNumber(&rest, &num)) { - return false; - } - Slice suffix = rest; - if (suffix == Slice(".log")) { - *type = kLogFile; - } else if (suffix == Slice(".sst") || suffix == Slice(".ldb")) { - *type = kTableFile; - } else if (suffix == Slice(".dbtmp")) { - *type = kTempFile; - } else { - return false; - } - *number = num; - } - return true; -} - -Status SetCurrentFile(Env* env, const std::string& dbname, - uint64_t descriptor_number) { - // Remove leading "dbname/" and add newline to manifest file name - std::string manifest = DescriptorFileName(dbname, descriptor_number); - Slice contents = manifest; - assert(contents.starts_with(dbname + "/")); - contents.remove_prefix(dbname.size() + 1); - std::string tmp = TempFileName(dbname, descriptor_number); - Status s = WriteStringToFileSync(env, contents.ToString() + "\n", tmp); - if (s.ok()) { - s = env->RenameFile(tmp, CurrentFileName(dbname)); - } - if (!s.ok()) { - env->DeleteFile(tmp); - } - return s; -} - -} // namespace leveldb diff --git a/src/leveldb/db/filename.h b/src/leveldb/db/filename.h deleted file mode 100644 index 87a752605d..0000000000 --- a/src/leveldb/db/filename.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// File names used by DB code - -#ifndef STORAGE_LEVELDB_DB_FILENAME_H_ -#define STORAGE_LEVELDB_DB_FILENAME_H_ - -#include -#include -#include "leveldb/slice.h" -#include "leveldb/status.h" -#include "port/port.h" - -namespace leveldb { - -class Env; - -enum FileType { - kLogFile, - kDBLockFile, - kTableFile, - kDescriptorFile, - kCurrentFile, - kTempFile, - kInfoLogFile // Either the current one, or an old one -}; - -// Return the name of the log file with the specified number -// in the db named by "dbname". The result will be prefixed with -// "dbname". -extern std::string LogFileName(const std::string& dbname, uint64_t number); - -// Return the name of the sstable with the specified number -// in the db named by "dbname". The result will be prefixed with -// "dbname". -extern std::string TableFileName(const std::string& dbname, uint64_t number); - -// Return the legacy file name for an sstable with the specified number -// in the db named by "dbname". The result will be prefixed with -// "dbname". -extern std::string SSTTableFileName(const std::string& dbname, uint64_t number); - -// Return the name of the descriptor file for the db named by -// "dbname" and the specified incarnation number. The result will be -// prefixed with "dbname". -extern std::string DescriptorFileName(const std::string& dbname, - uint64_t number); - -// Return the name of the current file. This file contains the name -// of the current manifest file. The result will be prefixed with -// "dbname". -extern std::string CurrentFileName(const std::string& dbname); - -// Return the name of the lock file for the db named by -// "dbname". The result will be prefixed with "dbname". -extern std::string LockFileName(const std::string& dbname); - -// Return the name of a temporary file owned by the db named "dbname". -// The result will be prefixed with "dbname". -extern std::string TempFileName(const std::string& dbname, uint64_t number); - -// Return the name of the info log file for "dbname". -extern std::string InfoLogFileName(const std::string& dbname); - -// Return the name of the old info log file for "dbname". -extern std::string OldInfoLogFileName(const std::string& dbname); - -// If filename is a leveldb file, store the type of the file in *type. -// The number encoded in the filename is stored in *number. If the -// filename was successfully parsed, returns true. Else return false. -extern bool ParseFileName(const std::string& filename, - uint64_t* number, - FileType* type); - -// Make the CURRENT file point to the descriptor file with the -// specified number. -extern Status SetCurrentFile(Env* env, const std::string& dbname, - uint64_t descriptor_number); - - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_FILENAME_H_ diff --git a/src/leveldb/db/filename_test.cc b/src/leveldb/db/filename_test.cc deleted file mode 100644 index a32556deaf..0000000000 --- a/src/leveldb/db/filename_test.cc +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/filename.h" - -#include "db/dbformat.h" -#include "port/port.h" -#include "util/logging.h" -#include "util/testharness.h" - -namespace leveldb { - -class FileNameTest { }; - -TEST(FileNameTest, Parse) { - Slice db; - FileType type; - uint64_t number; - - // Successful parses - static struct { - const char* fname; - uint64_t number; - FileType type; - } cases[] = { - { "100.log", 100, kLogFile }, - { "0.log", 0, kLogFile }, - { "0.sst", 0, kTableFile }, - { "0.ldb", 0, kTableFile }, - { "CURRENT", 0, kCurrentFile }, - { "LOCK", 0, kDBLockFile }, - { "MANIFEST-2", 2, kDescriptorFile }, - { "MANIFEST-7", 7, kDescriptorFile }, - { "LOG", 0, kInfoLogFile }, - { "LOG.old", 0, kInfoLogFile }, - { "18446744073709551615.log", 18446744073709551615ull, kLogFile }, - }; - for (int i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) { - std::string f = cases[i].fname; - ASSERT_TRUE(ParseFileName(f, &number, &type)) << f; - ASSERT_EQ(cases[i].type, type) << f; - ASSERT_EQ(cases[i].number, number) << f; - } - - // Errors - static const char* errors[] = { - "", - "foo", - "foo-dx-100.log", - ".log", - "", - "manifest", - "CURREN", - "CURRENTX", - "MANIFES", - "MANIFEST", - "MANIFEST-", - "XMANIFEST-3", - "MANIFEST-3x", - "LOC", - "LOCKx", - "LO", - "LOGx", - "18446744073709551616.log", - "184467440737095516150.log", - "100", - "100.", - "100.lop" - }; - for (int i = 0; i < sizeof(errors) / sizeof(errors[0]); i++) { - std::string f = errors[i]; - ASSERT_TRUE(!ParseFileName(f, &number, &type)) << f; - } -} - -TEST(FileNameTest, Construction) { - uint64_t number; - FileType type; - std::string fname; - - fname = CurrentFileName("foo"); - ASSERT_EQ("foo/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(0, number); - ASSERT_EQ(kCurrentFile, type); - - fname = LockFileName("foo"); - ASSERT_EQ("foo/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(0, number); - ASSERT_EQ(kDBLockFile, type); - - fname = LogFileName("foo", 192); - ASSERT_EQ("foo/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(192, number); - ASSERT_EQ(kLogFile, type); - - fname = TableFileName("bar", 200); - ASSERT_EQ("bar/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(200, number); - ASSERT_EQ(kTableFile, type); - - fname = DescriptorFileName("bar", 100); - ASSERT_EQ("bar/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(100, number); - ASSERT_EQ(kDescriptorFile, type); - - fname = TempFileName("tmp", 999); - ASSERT_EQ("tmp/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(999, number); - ASSERT_EQ(kTempFile, type); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/db/leveldb_main.cc b/src/leveldb/db/leveldb_main.cc deleted file mode 100644 index 9f4b7dd70c..0000000000 --- a/src/leveldb/db/leveldb_main.cc +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include "leveldb/dumpfile.h" -#include "leveldb/env.h" -#include "leveldb/status.h" - -namespace leveldb { -namespace { - -class StdoutPrinter : public WritableFile { - public: - virtual Status Append(const Slice& data) { - fwrite(data.data(), 1, data.size(), stdout); - return Status::OK(); - } - virtual Status Close() { return Status::OK(); } - virtual Status Flush() { return Status::OK(); } - virtual Status Sync() { return Status::OK(); } -}; - -bool HandleDumpCommand(Env* env, char** files, int num) { - StdoutPrinter printer; - bool ok = true; - for (int i = 0; i < num; i++) { - Status s = DumpFile(env, files[i], &printer); - if (!s.ok()) { - fprintf(stderr, "%s\n", s.ToString().c_str()); - ok = false; - } - } - return ok; -} - -} // namespace -} // namespace leveldb - -static void Usage() { - fprintf( - stderr, - "Usage: leveldbutil command...\n" - " dump files... -- dump contents of specified files\n" - ); -} - -int main(int argc, char** argv) { - leveldb::Env* env = leveldb::Env::Default(); - bool ok = true; - if (argc < 2) { - Usage(); - ok = false; - } else { - std::string command = argv[1]; - if (command == "dump") { - ok = leveldb::HandleDumpCommand(env, argv+2, argc-2); - } else { - Usage(); - ok = false; - } - } - return (ok ? 0 : 1); -} diff --git a/src/leveldb/db/log_format.h b/src/leveldb/db/log_format.h deleted file mode 100644 index a8c06efe18..0000000000 --- a/src/leveldb/db/log_format.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Log format information shared by reader and writer. -// See ../doc/log_format.txt for more detail. - -#ifndef STORAGE_LEVELDB_DB_LOG_FORMAT_H_ -#define STORAGE_LEVELDB_DB_LOG_FORMAT_H_ - -namespace leveldb { -namespace log { - -enum RecordType { - // Zero is reserved for preallocated files - kZeroType = 0, - - kFullType = 1, - - // For fragments - kFirstType = 2, - kMiddleType = 3, - kLastType = 4 -}; -static const int kMaxRecordType = kLastType; - -static const int kBlockSize = 32768; - -// Header is checksum (4 bytes), length (2 bytes), type (1 byte). -static const int kHeaderSize = 4 + 2 + 1; - -} // namespace log -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_LOG_FORMAT_H_ diff --git a/src/leveldb/db/log_reader.cc b/src/leveldb/db/log_reader.cc deleted file mode 100644 index e44b66c85b..0000000000 --- a/src/leveldb/db/log_reader.cc +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/log_reader.h" - -#include -#include "leveldb/env.h" -#include "util/coding.h" -#include "util/crc32c.h" - -namespace leveldb { -namespace log { - -Reader::Reporter::~Reporter() { -} - -Reader::Reader(SequentialFile* file, Reporter* reporter, bool checksum, - uint64_t initial_offset) - : file_(file), - reporter_(reporter), - checksum_(checksum), - backing_store_(new char[kBlockSize]), - buffer_(), - eof_(false), - last_record_offset_(0), - end_of_buffer_offset_(0), - initial_offset_(initial_offset) { -} - -Reader::~Reader() { - delete[] backing_store_; -} - -bool Reader::SkipToInitialBlock() { - size_t offset_in_block = initial_offset_ % kBlockSize; - uint64_t block_start_location = initial_offset_ - offset_in_block; - - // Don't search a block if we'd be in the trailer - if (offset_in_block > kBlockSize - 6) { - offset_in_block = 0; - block_start_location += kBlockSize; - } - - end_of_buffer_offset_ = block_start_location; - - // Skip to start of first block that can contain the initial record - if (block_start_location > 0) { - Status skip_status = file_->Skip(block_start_location); - if (!skip_status.ok()) { - ReportDrop(block_start_location, skip_status); - return false; - } - } - - return true; -} - -bool Reader::ReadRecord(Slice* record, std::string* scratch) { - if (last_record_offset_ < initial_offset_) { - if (!SkipToInitialBlock()) { - return false; - } - } - - scratch->clear(); - record->clear(); - bool in_fragmented_record = false; - // Record offset of the logical record that we're reading - // 0 is a dummy value to make compilers happy - uint64_t prospective_record_offset = 0; - - Slice fragment; - while (true) { - uint64_t physical_record_offset = end_of_buffer_offset_ - buffer_.size(); - const unsigned int record_type = ReadPhysicalRecord(&fragment); - switch (record_type) { - case kFullType: - if (in_fragmented_record) { - // Handle bug in earlier versions of log::Writer where - // it could emit an empty kFirstType record at the tail end - // of a block followed by a kFullType or kFirstType record - // at the beginning of the next block. - if (scratch->empty()) { - in_fragmented_record = false; - } else { - ReportCorruption(scratch->size(), "partial record without end(1)"); - } - } - prospective_record_offset = physical_record_offset; - scratch->clear(); - *record = fragment; - last_record_offset_ = prospective_record_offset; - return true; - - case kFirstType: - if (in_fragmented_record) { - // Handle bug in earlier versions of log::Writer where - // it could emit an empty kFirstType record at the tail end - // of a block followed by a kFullType or kFirstType record - // at the beginning of the next block. - if (scratch->empty()) { - in_fragmented_record = false; - } else { - ReportCorruption(scratch->size(), "partial record without end(2)"); - } - } - prospective_record_offset = physical_record_offset; - scratch->assign(fragment.data(), fragment.size()); - in_fragmented_record = true; - break; - - case kMiddleType: - if (!in_fragmented_record) { - ReportCorruption(fragment.size(), - "missing start of fragmented record(1)"); - } else { - scratch->append(fragment.data(), fragment.size()); - } - break; - - case kLastType: - if (!in_fragmented_record) { - ReportCorruption(fragment.size(), - "missing start of fragmented record(2)"); - } else { - scratch->append(fragment.data(), fragment.size()); - *record = Slice(*scratch); - last_record_offset_ = prospective_record_offset; - return true; - } - break; - - case kEof: - if (in_fragmented_record) { - // This can be caused by the writer dying immediately after - // writing a physical record but before completing the next; don't - // treat it as a corruption, just ignore the entire logical record. - scratch->clear(); - } - return false; - - case kBadRecord: - if (in_fragmented_record) { - ReportCorruption(scratch->size(), "error in middle of record"); - in_fragmented_record = false; - scratch->clear(); - } - break; - - default: { - char buf[40]; - snprintf(buf, sizeof(buf), "unknown record type %u", record_type); - ReportCorruption( - (fragment.size() + (in_fragmented_record ? scratch->size() : 0)), - buf); - in_fragmented_record = false; - scratch->clear(); - break; - } - } - } - return false; -} - -uint64_t Reader::LastRecordOffset() { - return last_record_offset_; -} - -void Reader::ReportCorruption(uint64_t bytes, const char* reason) { - ReportDrop(bytes, Status::Corruption(reason)); -} - -void Reader::ReportDrop(uint64_t bytes, const Status& reason) { - if (reporter_ != NULL && - end_of_buffer_offset_ - buffer_.size() - bytes >= initial_offset_) { - reporter_->Corruption(static_cast(bytes), reason); - } -} - -unsigned int Reader::ReadPhysicalRecord(Slice* result) { - while (true) { - if (buffer_.size() < kHeaderSize) { - if (!eof_) { - // Last read was a full read, so this is a trailer to skip - buffer_.clear(); - Status status = file_->Read(kBlockSize, &buffer_, backing_store_); - end_of_buffer_offset_ += buffer_.size(); - if (!status.ok()) { - buffer_.clear(); - ReportDrop(kBlockSize, status); - eof_ = true; - return kEof; - } else if (buffer_.size() < kBlockSize) { - eof_ = true; - } - continue; - } else { - // Note that if buffer_ is non-empty, we have a truncated header at the - // end of the file, which can be caused by the writer crashing in the - // middle of writing the header. Instead of considering this an error, - // just report EOF. - buffer_.clear(); - return kEof; - } - } - - // Parse the header - const char* header = buffer_.data(); - const uint32_t a = static_cast(header[4]) & 0xff; - const uint32_t b = static_cast(header[5]) & 0xff; - const unsigned int type = header[6]; - const uint32_t length = a | (b << 8); - if (kHeaderSize + length > buffer_.size()) { - size_t drop_size = buffer_.size(); - buffer_.clear(); - if (!eof_) { - ReportCorruption(drop_size, "bad record length"); - return kBadRecord; - } - // If the end of the file has been reached without reading |length| bytes - // of payload, assume the writer died in the middle of writing the record. - // Don't report a corruption. - return kEof; - } - - if (type == kZeroType && length == 0) { - // Skip zero length record without reporting any drops since - // such records are produced by the mmap based writing code in - // env_posix.cc that preallocates file regions. - buffer_.clear(); - return kBadRecord; - } - - // Check crc - if (checksum_) { - uint32_t expected_crc = crc32c::Unmask(DecodeFixed32(header)); - uint32_t actual_crc = crc32c::Value(header + 6, 1 + length); - if (actual_crc != expected_crc) { - // Drop the rest of the buffer since "length" itself may have - // been corrupted and if we trust it, we could find some - // fragment of a real log record that just happens to look - // like a valid log record. - size_t drop_size = buffer_.size(); - buffer_.clear(); - ReportCorruption(drop_size, "checksum mismatch"); - return kBadRecord; - } - } - - buffer_.remove_prefix(kHeaderSize + length); - - // Skip physical record that started before initial_offset_ - if (end_of_buffer_offset_ - buffer_.size() - kHeaderSize - length < - initial_offset_) { - result->clear(); - return kBadRecord; - } - - *result = Slice(header + kHeaderSize, length); - return type; - } -} - -} // namespace log -} // namespace leveldb diff --git a/src/leveldb/db/log_reader.h b/src/leveldb/db/log_reader.h deleted file mode 100644 index 6aff791716..0000000000 --- a/src/leveldb/db/log_reader.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_LOG_READER_H_ -#define STORAGE_LEVELDB_DB_LOG_READER_H_ - -#include - -#include "db/log_format.h" -#include "leveldb/slice.h" -#include "leveldb/status.h" - -namespace leveldb { - -class SequentialFile; - -namespace log { - -class Reader { - public: - // Interface for reporting errors. - class Reporter { - public: - virtual ~Reporter(); - - // Some corruption was detected. "size" is the approximate number - // of bytes dropped due to the corruption. - virtual void Corruption(size_t bytes, const Status& status) = 0; - }; - - // Create a reader that will return log records from "*file". - // "*file" must remain live while this Reader is in use. - // - // If "reporter" is non-NULL, it is notified whenever some data is - // dropped due to a detected corruption. "*reporter" must remain - // live while this Reader is in use. - // - // If "checksum" is true, verify checksums if available. - // - // The Reader will start reading at the first record located at physical - // position >= initial_offset within the file. - Reader(SequentialFile* file, Reporter* reporter, bool checksum, - uint64_t initial_offset); - - ~Reader(); - - // Read the next record into *record. Returns true if read - // successfully, false if we hit end of the input. May use - // "*scratch" as temporary storage. The contents filled in *record - // will only be valid until the next mutating operation on this - // reader or the next mutation to *scratch. - bool ReadRecord(Slice* record, std::string* scratch); - - // Returns the physical offset of the last record returned by ReadRecord. - // - // Undefined before the first call to ReadRecord. - uint64_t LastRecordOffset(); - - private: - SequentialFile* const file_; - Reporter* const reporter_; - bool const checksum_; - char* const backing_store_; - Slice buffer_; - bool eof_; // Last Read() indicated EOF by returning < kBlockSize - - // Offset of the last record returned by ReadRecord. - uint64_t last_record_offset_; - // Offset of the first location past the end of buffer_. - uint64_t end_of_buffer_offset_; - - // Offset at which to start looking for the first record to return - uint64_t const initial_offset_; - - // Extend record types with the following special values - enum { - kEof = kMaxRecordType + 1, - // Returned whenever we find an invalid physical record. - // Currently there are three situations in which this happens: - // * The record has an invalid CRC (ReadPhysicalRecord reports a drop) - // * The record is a 0-length record (No drop is reported) - // * The record is below constructor's initial_offset (No drop is reported) - kBadRecord = kMaxRecordType + 2 - }; - - // Skips all blocks that are completely before "initial_offset_". - // - // Returns true on success. Handles reporting. - bool SkipToInitialBlock(); - - // Return type, or one of the preceding special values - unsigned int ReadPhysicalRecord(Slice* result); - - // Reports dropped bytes to the reporter. - // buffer_ must be updated to remove the dropped bytes prior to invocation. - void ReportCorruption(uint64_t bytes, const char* reason); - void ReportDrop(uint64_t bytes, const Status& reason); - - // No copying allowed - Reader(const Reader&); - void operator=(const Reader&); -}; - -} // namespace log -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_LOG_READER_H_ diff --git a/src/leveldb/db/log_test.cc b/src/leveldb/db/log_test.cc deleted file mode 100644 index dcf0562652..0000000000 --- a/src/leveldb/db/log_test.cc +++ /dev/null @@ -1,530 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/log_reader.h" -#include "db/log_writer.h" -#include "leveldb/env.h" -#include "util/coding.h" -#include "util/crc32c.h" -#include "util/random.h" -#include "util/testharness.h" - -namespace leveldb { -namespace log { - -// Construct a string of the specified length made out of the supplied -// partial string. -static std::string BigString(const std::string& partial_string, size_t n) { - std::string result; - while (result.size() < n) { - result.append(partial_string); - } - result.resize(n); - return result; -} - -// Construct a string from a number -static std::string NumberString(int n) { - char buf[50]; - snprintf(buf, sizeof(buf), "%d.", n); - return std::string(buf); -} - -// Return a skewed potentially long string -static std::string RandomSkewedString(int i, Random* rnd) { - return BigString(NumberString(i), rnd->Skewed(17)); -} - -class LogTest { - private: - class StringDest : public WritableFile { - public: - std::string contents_; - - virtual Status Close() { return Status::OK(); } - virtual Status Flush() { return Status::OK(); } - virtual Status Sync() { return Status::OK(); } - virtual Status Append(const Slice& slice) { - contents_.append(slice.data(), slice.size()); - return Status::OK(); - } - }; - - class StringSource : public SequentialFile { - public: - Slice contents_; - bool force_error_; - bool returned_partial_; - StringSource() : force_error_(false), returned_partial_(false) { } - - virtual Status Read(size_t n, Slice* result, char* scratch) { - ASSERT_TRUE(!returned_partial_) << "must not Read() after eof/error"; - - if (force_error_) { - force_error_ = false; - returned_partial_ = true; - return Status::Corruption("read error"); - } - - if (contents_.size() < n) { - n = contents_.size(); - returned_partial_ = true; - } - *result = Slice(contents_.data(), n); - contents_.remove_prefix(n); - return Status::OK(); - } - - virtual Status Skip(uint64_t n) { - if (n > contents_.size()) { - contents_.clear(); - return Status::NotFound("in-memory file skipepd past end"); - } - - contents_.remove_prefix(n); - - return Status::OK(); - } - }; - - class ReportCollector : public Reader::Reporter { - public: - size_t dropped_bytes_; - std::string message_; - - ReportCollector() : dropped_bytes_(0) { } - virtual void Corruption(size_t bytes, const Status& status) { - dropped_bytes_ += bytes; - message_.append(status.ToString()); - } - }; - - StringDest dest_; - StringSource source_; - ReportCollector report_; - bool reading_; - Writer writer_; - Reader reader_; - - // Record metadata for testing initial offset functionality - static size_t initial_offset_record_sizes_[]; - static uint64_t initial_offset_last_record_offsets_[]; - - public: - LogTest() : reading_(false), - writer_(&dest_), - reader_(&source_, &report_, true/*checksum*/, - 0/*initial_offset*/) { - } - - void Write(const std::string& msg) { - ASSERT_TRUE(!reading_) << "Write() after starting to read"; - writer_.AddRecord(Slice(msg)); - } - - size_t WrittenBytes() const { - return dest_.contents_.size(); - } - - std::string Read() { - if (!reading_) { - reading_ = true; - source_.contents_ = Slice(dest_.contents_); - } - std::string scratch; - Slice record; - if (reader_.ReadRecord(&record, &scratch)) { - return record.ToString(); - } else { - return "EOF"; - } - } - - void IncrementByte(int offset, int delta) { - dest_.contents_[offset] += delta; - } - - void SetByte(int offset, char new_byte) { - dest_.contents_[offset] = new_byte; - } - - void ShrinkSize(int bytes) { - dest_.contents_.resize(dest_.contents_.size() - bytes); - } - - void FixChecksum(int header_offset, int len) { - // Compute crc of type/len/data - uint32_t crc = crc32c::Value(&dest_.contents_[header_offset+6], 1 + len); - crc = crc32c::Mask(crc); - EncodeFixed32(&dest_.contents_[header_offset], crc); - } - - void ForceError() { - source_.force_error_ = true; - } - - size_t DroppedBytes() const { - return report_.dropped_bytes_; - } - - std::string ReportMessage() const { - return report_.message_; - } - - // Returns OK iff recorded error message contains "msg" - std::string MatchError(const std::string& msg) const { - if (report_.message_.find(msg) == std::string::npos) { - return report_.message_; - } else { - return "OK"; - } - } - - void WriteInitialOffsetLog() { - for (int i = 0; i < 4; i++) { - std::string record(initial_offset_record_sizes_[i], - static_cast('a' + i)); - Write(record); - } - } - - void CheckOffsetPastEndReturnsNoRecords(uint64_t offset_past_end) { - WriteInitialOffsetLog(); - reading_ = true; - source_.contents_ = Slice(dest_.contents_); - Reader* offset_reader = new Reader(&source_, &report_, true/*checksum*/, - WrittenBytes() + offset_past_end); - Slice record; - std::string scratch; - ASSERT_TRUE(!offset_reader->ReadRecord(&record, &scratch)); - delete offset_reader; - } - - void CheckInitialOffsetRecord(uint64_t initial_offset, - int expected_record_offset) { - WriteInitialOffsetLog(); - reading_ = true; - source_.contents_ = Slice(dest_.contents_); - Reader* offset_reader = new Reader(&source_, &report_, true/*checksum*/, - initial_offset); - Slice record; - std::string scratch; - ASSERT_TRUE(offset_reader->ReadRecord(&record, &scratch)); - ASSERT_EQ(initial_offset_record_sizes_[expected_record_offset], - record.size()); - ASSERT_EQ(initial_offset_last_record_offsets_[expected_record_offset], - offset_reader->LastRecordOffset()); - ASSERT_EQ((char)('a' + expected_record_offset), record.data()[0]); - delete offset_reader; - } - -}; - -size_t LogTest::initial_offset_record_sizes_[] = - {10000, // Two sizable records in first block - 10000, - 2 * log::kBlockSize - 1000, // Span three blocks - 1}; - -uint64_t LogTest::initial_offset_last_record_offsets_[] = - {0, - kHeaderSize + 10000, - 2 * (kHeaderSize + 10000), - 2 * (kHeaderSize + 10000) + - (2 * log::kBlockSize - 1000) + 3 * kHeaderSize}; - - -TEST(LogTest, Empty) { - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, ReadWrite) { - Write("foo"); - Write("bar"); - Write(""); - Write("xxxx"); - ASSERT_EQ("foo", Read()); - ASSERT_EQ("bar", Read()); - ASSERT_EQ("", Read()); - ASSERT_EQ("xxxx", Read()); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ("EOF", Read()); // Make sure reads at eof work -} - -TEST(LogTest, ManyBlocks) { - for (int i = 0; i < 100000; i++) { - Write(NumberString(i)); - } - for (int i = 0; i < 100000; i++) { - ASSERT_EQ(NumberString(i), Read()); - } - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, Fragmentation) { - Write("small"); - Write(BigString("medium", 50000)); - Write(BigString("large", 100000)); - ASSERT_EQ("small", Read()); - ASSERT_EQ(BigString("medium", 50000), Read()); - ASSERT_EQ(BigString("large", 100000), Read()); - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, MarginalTrailer) { - // Make a trailer that is exactly the same length as an empty record. - const int n = kBlockSize - 2*kHeaderSize; - Write(BigString("foo", n)); - ASSERT_EQ(kBlockSize - kHeaderSize, WrittenBytes()); - Write(""); - Write("bar"); - ASSERT_EQ(BigString("foo", n), Read()); - ASSERT_EQ("", Read()); - ASSERT_EQ("bar", Read()); - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, MarginalTrailer2) { - // Make a trailer that is exactly the same length as an empty record. - const int n = kBlockSize - 2*kHeaderSize; - Write(BigString("foo", n)); - ASSERT_EQ(kBlockSize - kHeaderSize, WrittenBytes()); - Write("bar"); - ASSERT_EQ(BigString("foo", n), Read()); - ASSERT_EQ("bar", Read()); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(0, DroppedBytes()); - ASSERT_EQ("", ReportMessage()); -} - -TEST(LogTest, ShortTrailer) { - const int n = kBlockSize - 2*kHeaderSize + 4; - Write(BigString("foo", n)); - ASSERT_EQ(kBlockSize - kHeaderSize + 4, WrittenBytes()); - Write(""); - Write("bar"); - ASSERT_EQ(BigString("foo", n), Read()); - ASSERT_EQ("", Read()); - ASSERT_EQ("bar", Read()); - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, AlignedEof) { - const int n = kBlockSize - 2*kHeaderSize + 4; - Write(BigString("foo", n)); - ASSERT_EQ(kBlockSize - kHeaderSize + 4, WrittenBytes()); - ASSERT_EQ(BigString("foo", n), Read()); - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, RandomRead) { - const int N = 500; - Random write_rnd(301); - for (int i = 0; i < N; i++) { - Write(RandomSkewedString(i, &write_rnd)); - } - Random read_rnd(301); - for (int i = 0; i < N; i++) { - ASSERT_EQ(RandomSkewedString(i, &read_rnd), Read()); - } - ASSERT_EQ("EOF", Read()); -} - -// Tests of all the error paths in log_reader.cc follow: - -TEST(LogTest, ReadError) { - Write("foo"); - ForceError(); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(kBlockSize, DroppedBytes()); - ASSERT_EQ("OK", MatchError("read error")); -} - -TEST(LogTest, BadRecordType) { - Write("foo"); - // Type is stored in header[6] - IncrementByte(6, 100); - FixChecksum(0, 3); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(3, DroppedBytes()); - ASSERT_EQ("OK", MatchError("unknown record type")); -} - -TEST(LogTest, TruncatedTrailingRecordIsIgnored) { - Write("foo"); - ShrinkSize(4); // Drop all payload as well as a header byte - ASSERT_EQ("EOF", Read()); - // Truncated last record is ignored, not treated as an error. - ASSERT_EQ(0, DroppedBytes()); - ASSERT_EQ("", ReportMessage()); -} - -TEST(LogTest, BadLength) { - const int kPayloadSize = kBlockSize - kHeaderSize; - Write(BigString("bar", kPayloadSize)); - Write("foo"); - // Least significant size byte is stored in header[4]. - IncrementByte(4, 1); - ASSERT_EQ("foo", Read()); - ASSERT_EQ(kBlockSize, DroppedBytes()); - ASSERT_EQ("OK", MatchError("bad record length")); -} - -TEST(LogTest, BadLengthAtEndIsIgnored) { - Write("foo"); - ShrinkSize(1); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(0, DroppedBytes()); - ASSERT_EQ("", ReportMessage()); -} - -TEST(LogTest, ChecksumMismatch) { - Write("foo"); - IncrementByte(0, 10); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(10, DroppedBytes()); - ASSERT_EQ("OK", MatchError("checksum mismatch")); -} - -TEST(LogTest, UnexpectedMiddleType) { - Write("foo"); - SetByte(6, kMiddleType); - FixChecksum(0, 3); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(3, DroppedBytes()); - ASSERT_EQ("OK", MatchError("missing start")); -} - -TEST(LogTest, UnexpectedLastType) { - Write("foo"); - SetByte(6, kLastType); - FixChecksum(0, 3); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(3, DroppedBytes()); - ASSERT_EQ("OK", MatchError("missing start")); -} - -TEST(LogTest, UnexpectedFullType) { - Write("foo"); - Write("bar"); - SetByte(6, kFirstType); - FixChecksum(0, 3); - ASSERT_EQ("bar", Read()); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(3, DroppedBytes()); - ASSERT_EQ("OK", MatchError("partial record without end")); -} - -TEST(LogTest, UnexpectedFirstType) { - Write("foo"); - Write(BigString("bar", 100000)); - SetByte(6, kFirstType); - FixChecksum(0, 3); - ASSERT_EQ(BigString("bar", 100000), Read()); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(3, DroppedBytes()); - ASSERT_EQ("OK", MatchError("partial record without end")); -} - -TEST(LogTest, MissingLastIsIgnored) { - Write(BigString("bar", kBlockSize)); - // Remove the LAST block, including header. - ShrinkSize(14); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ("", ReportMessage()); - ASSERT_EQ(0, DroppedBytes()); -} - -TEST(LogTest, PartialLastIsIgnored) { - Write(BigString("bar", kBlockSize)); - // Cause a bad record length in the LAST block. - ShrinkSize(1); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ("", ReportMessage()); - ASSERT_EQ(0, DroppedBytes()); -} - -TEST(LogTest, ErrorJoinsRecords) { - // Consider two fragmented records: - // first(R1) last(R1) first(R2) last(R2) - // where the middle two fragments disappear. We do not want - // first(R1),last(R2) to get joined and returned as a valid record. - - // Write records that span two blocks - Write(BigString("foo", kBlockSize)); - Write(BigString("bar", kBlockSize)); - Write("correct"); - - // Wipe the middle block - for (int offset = kBlockSize; offset < 2*kBlockSize; offset++) { - SetByte(offset, 'x'); - } - - ASSERT_EQ("correct", Read()); - ASSERT_EQ("EOF", Read()); - const size_t dropped = DroppedBytes(); - ASSERT_LE(dropped, 2*kBlockSize + 100); - ASSERT_GE(dropped, 2*kBlockSize); -} - -TEST(LogTest, ReadStart) { - CheckInitialOffsetRecord(0, 0); -} - -TEST(LogTest, ReadSecondOneOff) { - CheckInitialOffsetRecord(1, 1); -} - -TEST(LogTest, ReadSecondTenThousand) { - CheckInitialOffsetRecord(10000, 1); -} - -TEST(LogTest, ReadSecondStart) { - CheckInitialOffsetRecord(10007, 1); -} - -TEST(LogTest, ReadThirdOneOff) { - CheckInitialOffsetRecord(10008, 2); -} - -TEST(LogTest, ReadThirdStart) { - CheckInitialOffsetRecord(20014, 2); -} - -TEST(LogTest, ReadFourthOneOff) { - CheckInitialOffsetRecord(20015, 3); -} - -TEST(LogTest, ReadFourthFirstBlockTrailer) { - CheckInitialOffsetRecord(log::kBlockSize - 4, 3); -} - -TEST(LogTest, ReadFourthMiddleBlock) { - CheckInitialOffsetRecord(log::kBlockSize + 1, 3); -} - -TEST(LogTest, ReadFourthLastBlock) { - CheckInitialOffsetRecord(2 * log::kBlockSize + 1, 3); -} - -TEST(LogTest, ReadFourthStart) { - CheckInitialOffsetRecord( - 2 * (kHeaderSize + 1000) + (2 * log::kBlockSize - 1000) + 3 * kHeaderSize, - 3); -} - -TEST(LogTest, ReadEnd) { - CheckOffsetPastEndReturnsNoRecords(0); -} - -TEST(LogTest, ReadPastEnd) { - CheckOffsetPastEndReturnsNoRecords(5); -} - -} // namespace log -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/db/log_writer.cc b/src/leveldb/db/log_writer.cc deleted file mode 100644 index 2da99ac088..0000000000 --- a/src/leveldb/db/log_writer.cc +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/log_writer.h" - -#include -#include "leveldb/env.h" -#include "util/coding.h" -#include "util/crc32c.h" - -namespace leveldb { -namespace log { - -Writer::Writer(WritableFile* dest) - : dest_(dest), - block_offset_(0) { - for (int i = 0; i <= kMaxRecordType; i++) { - char t = static_cast(i); - type_crc_[i] = crc32c::Value(&t, 1); - } -} - -Writer::~Writer() { -} - -Status Writer::AddRecord(const Slice& slice) { - const char* ptr = slice.data(); - size_t left = slice.size(); - - // Fragment the record if necessary and emit it. Note that if slice - // is empty, we still want to iterate once to emit a single - // zero-length record - Status s; - bool begin = true; - do { - const int leftover = kBlockSize - block_offset_; - assert(leftover >= 0); - if (leftover < kHeaderSize) { - // Switch to a new block - if (leftover > 0) { - // Fill the trailer (literal below relies on kHeaderSize being 7) - assert(kHeaderSize == 7); - dest_->Append(Slice("\x00\x00\x00\x00\x00\x00", leftover)); - } - block_offset_ = 0; - } - - // Invariant: we never leave < kHeaderSize bytes in a block. - assert(kBlockSize - block_offset_ - kHeaderSize >= 0); - - const size_t avail = kBlockSize - block_offset_ - kHeaderSize; - const size_t fragment_length = (left < avail) ? left : avail; - - RecordType type; - const bool end = (left == fragment_length); - if (begin && end) { - type = kFullType; - } else if (begin) { - type = kFirstType; - } else if (end) { - type = kLastType; - } else { - type = kMiddleType; - } - - s = EmitPhysicalRecord(type, ptr, fragment_length); - ptr += fragment_length; - left -= fragment_length; - begin = false; - } while (s.ok() && left > 0); - return s; -} - -Status Writer::EmitPhysicalRecord(RecordType t, const char* ptr, size_t n) { - assert(n <= 0xffff); // Must fit in two bytes - assert(block_offset_ + kHeaderSize + n <= kBlockSize); - - // Format the header - char buf[kHeaderSize]; - buf[4] = static_cast(n & 0xff); - buf[5] = static_cast(n >> 8); - buf[6] = static_cast(t); - - // Compute the crc of the record type and the payload. - uint32_t crc = crc32c::Extend(type_crc_[t], ptr, n); - crc = crc32c::Mask(crc); // Adjust for storage - EncodeFixed32(buf, crc); - - // Write the header and the payload - Status s = dest_->Append(Slice(buf, kHeaderSize)); - if (s.ok()) { - s = dest_->Append(Slice(ptr, n)); - if (s.ok()) { - s = dest_->Flush(); - } - } - block_offset_ += kHeaderSize + n; - return s; -} - -} // namespace log -} // namespace leveldb diff --git a/src/leveldb/db/log_writer.h b/src/leveldb/db/log_writer.h deleted file mode 100644 index a3a954d967..0000000000 --- a/src/leveldb/db/log_writer.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_LOG_WRITER_H_ -#define STORAGE_LEVELDB_DB_LOG_WRITER_H_ - -#include -#include "db/log_format.h" -#include "leveldb/slice.h" -#include "leveldb/status.h" - -namespace leveldb { - -class WritableFile; - -namespace log { - -class Writer { - public: - // Create a writer that will append data to "*dest". - // "*dest" must be initially empty. - // "*dest" must remain live while this Writer is in use. - explicit Writer(WritableFile* dest); - ~Writer(); - - Status AddRecord(const Slice& slice); - - private: - WritableFile* dest_; - int block_offset_; // Current offset in block - - // crc32c values for all supported record types. These are - // pre-computed to reduce the overhead of computing the crc of the - // record type stored in the header. - uint32_t type_crc_[kMaxRecordType + 1]; - - Status EmitPhysicalRecord(RecordType type, const char* ptr, size_t length); - - // No copying allowed - Writer(const Writer&); - void operator=(const Writer&); -}; - -} // namespace log -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_LOG_WRITER_H_ diff --git a/src/leveldb/db/memtable.cc b/src/leveldb/db/memtable.cc deleted file mode 100644 index bfec0a7e7a..0000000000 --- a/src/leveldb/db/memtable.cc +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/memtable.h" -#include "db/dbformat.h" -#include "leveldb/comparator.h" -#include "leveldb/env.h" -#include "leveldb/iterator.h" -#include "util/coding.h" - -namespace leveldb { - -static Slice GetLengthPrefixedSlice(const char* data) { - uint32_t len; - const char* p = data; - p = GetVarint32Ptr(p, p + 5, &len); // +5: we assume "p" is not corrupted - return Slice(p, len); -} - -MemTable::MemTable(const InternalKeyComparator& cmp) - : comparator_(cmp), - refs_(0), - table_(comparator_, &arena_) { -} - -MemTable::~MemTable() { - assert(refs_ == 0); -} - -size_t MemTable::ApproximateMemoryUsage() { return arena_.MemoryUsage(); } - -int MemTable::KeyComparator::operator()(const char* aptr, const char* bptr) - const { - // Internal keys are encoded as length-prefixed strings. - Slice a = GetLengthPrefixedSlice(aptr); - Slice b = GetLengthPrefixedSlice(bptr); - return comparator.Compare(a, b); -} - -// Encode a suitable internal key target for "target" and return it. -// Uses *scratch as scratch space, and the returned pointer will point -// into this scratch space. -static const char* EncodeKey(std::string* scratch, const Slice& target) { - scratch->clear(); - PutVarint32(scratch, target.size()); - scratch->append(target.data(), target.size()); - return scratch->data(); -} - -class MemTableIterator: public Iterator { - public: - explicit MemTableIterator(MemTable::Table* table) : iter_(table) { } - - virtual bool Valid() const { return iter_.Valid(); } - virtual void Seek(const Slice& k) { iter_.Seek(EncodeKey(&tmp_, k)); } - virtual void SeekToFirst() { iter_.SeekToFirst(); } - virtual void SeekToLast() { iter_.SeekToLast(); } - virtual void Next() { iter_.Next(); } - virtual void Prev() { iter_.Prev(); } - virtual Slice key() const { return GetLengthPrefixedSlice(iter_.key()); } - virtual Slice value() const { - Slice key_slice = GetLengthPrefixedSlice(iter_.key()); - return GetLengthPrefixedSlice(key_slice.data() + key_slice.size()); - } - - virtual Status status() const { return Status::OK(); } - - private: - MemTable::Table::Iterator iter_; - std::string tmp_; // For passing to EncodeKey - - // No copying allowed - MemTableIterator(const MemTableIterator&); - void operator=(const MemTableIterator&); -}; - -Iterator* MemTable::NewIterator() { - return new MemTableIterator(&table_); -} - -void MemTable::Add(SequenceNumber s, ValueType type, - const Slice& key, - const Slice& value) { - // Format of an entry is concatenation of: - // key_size : varint32 of internal_key.size() - // key bytes : char[internal_key.size()] - // value_size : varint32 of value.size() - // value bytes : char[value.size()] - size_t key_size = key.size(); - size_t val_size = value.size(); - size_t internal_key_size = key_size + 8; - const size_t encoded_len = - VarintLength(internal_key_size) + internal_key_size + - VarintLength(val_size) + val_size; - char* buf = arena_.Allocate(encoded_len); - char* p = EncodeVarint32(buf, internal_key_size); - memcpy(p, key.data(), key_size); - p += key_size; - EncodeFixed64(p, (s << 8) | type); - p += 8; - p = EncodeVarint32(p, val_size); - memcpy(p, value.data(), val_size); - assert((p + val_size) - buf == encoded_len); - table_.Insert(buf); -} - -bool MemTable::Get(const LookupKey& key, std::string* value, Status* s) { - Slice memkey = key.memtable_key(); - Table::Iterator iter(&table_); - iter.Seek(memkey.data()); - if (iter.Valid()) { - // entry format is: - // klength varint32 - // userkey char[klength] - // tag uint64 - // vlength varint32 - // value char[vlength] - // Check that it belongs to same user key. We do not check the - // sequence number since the Seek() call above should have skipped - // all entries with overly large sequence numbers. - const char* entry = iter.key(); - uint32_t key_length; - const char* key_ptr = GetVarint32Ptr(entry, entry+5, &key_length); - if (comparator_.comparator.user_comparator()->Compare( - Slice(key_ptr, key_length - 8), - key.user_key()) == 0) { - // Correct user key - const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8); - switch (static_cast(tag & 0xff)) { - case kTypeValue: { - Slice v = GetLengthPrefixedSlice(key_ptr + key_length); - value->assign(v.data(), v.size()); - return true; - } - case kTypeDeletion: - *s = Status::NotFound(Slice()); - return true; - } - } - } - return false; -} - -} // namespace leveldb diff --git a/src/leveldb/db/memtable.h b/src/leveldb/db/memtable.h deleted file mode 100644 index 92e90bb099..0000000000 --- a/src/leveldb/db/memtable.h +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_MEMTABLE_H_ -#define STORAGE_LEVELDB_DB_MEMTABLE_H_ - -#include -#include "leveldb/db.h" -#include "db/dbformat.h" -#include "db/skiplist.h" -#include "util/arena.h" - -namespace leveldb { - -class InternalKeyComparator; -class Mutex; -class MemTableIterator; - -class MemTable { - public: - // MemTables are reference counted. The initial reference count - // is zero and the caller must call Ref() at least once. - explicit MemTable(const InternalKeyComparator& comparator); - - // Increase reference count. - void Ref() { ++refs_; } - - // Drop reference count. Delete if no more references exist. - void Unref() { - --refs_; - assert(refs_ >= 0); - if (refs_ <= 0) { - delete this; - } - } - - // Returns an estimate of the number of bytes of data in use by this - // data structure. - // - // REQUIRES: external synchronization to prevent simultaneous - // operations on the same MemTable. - size_t ApproximateMemoryUsage(); - - // Return an iterator that yields the contents of the memtable. - // - // The caller must ensure that the underlying MemTable remains live - // while the returned iterator is live. The keys returned by this - // iterator are internal keys encoded by AppendInternalKey in the - // db/format.{h,cc} module. - Iterator* NewIterator(); - - // Add an entry into memtable that maps key to value at the - // specified sequence number and with the specified type. - // Typically value will be empty if type==kTypeDeletion. - void Add(SequenceNumber seq, ValueType type, - const Slice& key, - const Slice& value); - - // If memtable contains a value for key, store it in *value and return true. - // If memtable contains a deletion for key, store a NotFound() error - // in *status and return true. - // Else, return false. - bool Get(const LookupKey& key, std::string* value, Status* s); - - private: - ~MemTable(); // Private since only Unref() should be used to delete it - - struct KeyComparator { - const InternalKeyComparator comparator; - explicit KeyComparator(const InternalKeyComparator& c) : comparator(c) { } - int operator()(const char* a, const char* b) const; - }; - friend class MemTableIterator; - friend class MemTableBackwardIterator; - - typedef SkipList Table; - - KeyComparator comparator_; - int refs_; - Arena arena_; - Table table_; - - // No copying allowed - MemTable(const MemTable&); - void operator=(const MemTable&); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_MEMTABLE_H_ diff --git a/src/leveldb/db/repair.cc b/src/leveldb/db/repair.cc deleted file mode 100644 index 4cd4bb047f..0000000000 --- a/src/leveldb/db/repair.cc +++ /dev/null @@ -1,461 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// We recover the contents of the descriptor from the other files we find. -// (1) Any log files are first converted to tables -// (2) We scan every table to compute -// (a) smallest/largest for the table -// (b) largest sequence number in the table -// (3) We generate descriptor contents: -// - log number is set to zero -// - next-file-number is set to 1 + largest file number we found -// - last-sequence-number is set to largest sequence# found across -// all tables (see 2c) -// - compaction pointers are cleared -// - every table file is added at level 0 -// -// Possible optimization 1: -// (a) Compute total size and use to pick appropriate max-level M -// (b) Sort tables by largest sequence# in the table -// (c) For each table: if it overlaps earlier table, place in level-0, -// else place in level-M. -// Possible optimization 2: -// Store per-table metadata (smallest, largest, largest-seq#, ...) -// in the table's meta section to speed up ScanTable. - -#include "db/builder.h" -#include "db/db_impl.h" -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/log_writer.h" -#include "db/memtable.h" -#include "db/table_cache.h" -#include "db/version_edit.h" -#include "db/write_batch_internal.h" -#include "leveldb/comparator.h" -#include "leveldb/db.h" -#include "leveldb/env.h" - -namespace leveldb { - -namespace { - -class Repairer { - public: - Repairer(const std::string& dbname, const Options& options) - : dbname_(dbname), - env_(options.env), - icmp_(options.comparator), - ipolicy_(options.filter_policy), - options_(SanitizeOptions(dbname, &icmp_, &ipolicy_, options)), - owns_info_log_(options_.info_log != options.info_log), - owns_cache_(options_.block_cache != options.block_cache), - next_file_number_(1) { - // TableCache can be small since we expect each table to be opened once. - table_cache_ = new TableCache(dbname_, &options_, 10); - } - - ~Repairer() { - delete table_cache_; - if (owns_info_log_) { - delete options_.info_log; - } - if (owns_cache_) { - delete options_.block_cache; - } - } - - Status Run() { - Status status = FindFiles(); - if (status.ok()) { - ConvertLogFilesToTables(); - ExtractMetaData(); - status = WriteDescriptor(); - } - if (status.ok()) { - unsigned long long bytes = 0; - for (size_t i = 0; i < tables_.size(); i++) { - bytes += tables_[i].meta.file_size; - } - Log(options_.info_log, - "**** Repaired leveldb %s; " - "recovered %d files; %llu bytes. " - "Some data may have been lost. " - "****", - dbname_.c_str(), - static_cast(tables_.size()), - bytes); - } - return status; - } - - private: - struct TableInfo { - FileMetaData meta; - SequenceNumber max_sequence; - }; - - std::string const dbname_; - Env* const env_; - InternalKeyComparator const icmp_; - InternalFilterPolicy const ipolicy_; - Options const options_; - bool owns_info_log_; - bool owns_cache_; - TableCache* table_cache_; - VersionEdit edit_; - - std::vector manifests_; - std::vector table_numbers_; - std::vector logs_; - std::vector tables_; - uint64_t next_file_number_; - - Status FindFiles() { - std::vector filenames; - Status status = env_->GetChildren(dbname_, &filenames); - if (!status.ok()) { - return status; - } - if (filenames.empty()) { - return Status::IOError(dbname_, "repair found no files"); - } - - uint64_t number; - FileType type; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type)) { - if (type == kDescriptorFile) { - manifests_.push_back(filenames[i]); - } else { - if (number + 1 > next_file_number_) { - next_file_number_ = number + 1; - } - if (type == kLogFile) { - logs_.push_back(number); - } else if (type == kTableFile) { - table_numbers_.push_back(number); - } else { - // Ignore other files - } - } - } - } - return status; - } - - void ConvertLogFilesToTables() { - for (size_t i = 0; i < logs_.size(); i++) { - std::string logname = LogFileName(dbname_, logs_[i]); - Status status = ConvertLogToTable(logs_[i]); - if (!status.ok()) { - Log(options_.info_log, "Log #%llu: ignoring conversion error: %s", - (unsigned long long) logs_[i], - status.ToString().c_str()); - } - ArchiveFile(logname); - } - } - - Status ConvertLogToTable(uint64_t log) { - struct LogReporter : public log::Reader::Reporter { - Env* env; - Logger* info_log; - uint64_t lognum; - virtual void Corruption(size_t bytes, const Status& s) { - // We print error messages for corruption, but continue repairing. - Log(info_log, "Log #%llu: dropping %d bytes; %s", - (unsigned long long) lognum, - static_cast(bytes), - s.ToString().c_str()); - } - }; - - // Open the log file - std::string logname = LogFileName(dbname_, log); - SequentialFile* lfile; - Status status = env_->NewSequentialFile(logname, &lfile); - if (!status.ok()) { - return status; - } - - // Create the log reader. - LogReporter reporter; - reporter.env = env_; - reporter.info_log = options_.info_log; - reporter.lognum = log; - // We intentionally make log::Reader do checksumming so that - // corruptions cause entire commits to be skipped instead of - // propagating bad information (like overly large sequence - // numbers). - log::Reader reader(lfile, &reporter, false/*do not checksum*/, - 0/*initial_offset*/); - - // Read all the records and add to a memtable - std::string scratch; - Slice record; - WriteBatch batch; - MemTable* mem = new MemTable(icmp_); - mem->Ref(); - int counter = 0; - while (reader.ReadRecord(&record, &scratch)) { - if (record.size() < 12) { - reporter.Corruption( - record.size(), Status::Corruption("log record too small")); - continue; - } - WriteBatchInternal::SetContents(&batch, record); - status = WriteBatchInternal::InsertInto(&batch, mem); - if (status.ok()) { - counter += WriteBatchInternal::Count(&batch); - } else { - Log(options_.info_log, "Log #%llu: ignoring %s", - (unsigned long long) log, - status.ToString().c_str()); - status = Status::OK(); // Keep going with rest of file - } - } - delete lfile; - - // Do not record a version edit for this conversion to a Table - // since ExtractMetaData() will also generate edits. - FileMetaData meta; - meta.number = next_file_number_++; - Iterator* iter = mem->NewIterator(); - status = BuildTable(dbname_, env_, options_, table_cache_, iter, &meta); - delete iter; - mem->Unref(); - mem = NULL; - if (status.ok()) { - if (meta.file_size > 0) { - table_numbers_.push_back(meta.number); - } - } - Log(options_.info_log, "Log #%llu: %d ops saved to Table #%llu %s", - (unsigned long long) log, - counter, - (unsigned long long) meta.number, - status.ToString().c_str()); - return status; - } - - void ExtractMetaData() { - for (size_t i = 0; i < table_numbers_.size(); i++) { - ScanTable(table_numbers_[i]); - } - } - - Iterator* NewTableIterator(const FileMetaData& meta) { - // Same as compaction iterators: if paranoid_checks are on, turn - // on checksum verification. - ReadOptions r; - r.verify_checksums = options_.paranoid_checks; - return table_cache_->NewIterator(r, meta.number, meta.file_size); - } - - void ScanTable(uint64_t number) { - TableInfo t; - t.meta.number = number; - std::string fname = TableFileName(dbname_, number); - Status status = env_->GetFileSize(fname, &t.meta.file_size); - if (!status.ok()) { - // Try alternate file name. - fname = SSTTableFileName(dbname_, number); - Status s2 = env_->GetFileSize(fname, &t.meta.file_size); - if (s2.ok()) { - status = Status::OK(); - } - } - if (!status.ok()) { - ArchiveFile(TableFileName(dbname_, number)); - ArchiveFile(SSTTableFileName(dbname_, number)); - Log(options_.info_log, "Table #%llu: dropped: %s", - (unsigned long long) t.meta.number, - status.ToString().c_str()); - return; - } - - // Extract metadata by scanning through table. - int counter = 0; - Iterator* iter = NewTableIterator(t.meta); - bool empty = true; - ParsedInternalKey parsed; - t.max_sequence = 0; - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - Slice key = iter->key(); - if (!ParseInternalKey(key, &parsed)) { - Log(options_.info_log, "Table #%llu: unparsable key %s", - (unsigned long long) t.meta.number, - EscapeString(key).c_str()); - continue; - } - - counter++; - if (empty) { - empty = false; - t.meta.smallest.DecodeFrom(key); - } - t.meta.largest.DecodeFrom(key); - if (parsed.sequence > t.max_sequence) { - t.max_sequence = parsed.sequence; - } - } - if (!iter->status().ok()) { - status = iter->status(); - } - delete iter; - Log(options_.info_log, "Table #%llu: %d entries %s", - (unsigned long long) t.meta.number, - counter, - status.ToString().c_str()); - - if (status.ok()) { - tables_.push_back(t); - } else { - RepairTable(fname, t); // RepairTable archives input file. - } - } - - void RepairTable(const std::string& src, TableInfo t) { - // We will copy src contents to a new table and then rename the - // new table over the source. - - // Create builder. - std::string copy = TableFileName(dbname_, next_file_number_++); - WritableFile* file; - Status s = env_->NewWritableFile(copy, &file); - if (!s.ok()) { - return; - } - TableBuilder* builder = new TableBuilder(options_, file); - - // Copy data. - Iterator* iter = NewTableIterator(t.meta); - int counter = 0; - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - builder->Add(iter->key(), iter->value()); - counter++; - } - delete iter; - - ArchiveFile(src); - if (counter == 0) { - builder->Abandon(); // Nothing to save - } else { - s = builder->Finish(); - if (s.ok()) { - t.meta.file_size = builder->FileSize(); - } - } - delete builder; - builder = NULL; - - if (s.ok()) { - s = file->Close(); - } - delete file; - file = NULL; - - if (counter > 0 && s.ok()) { - std::string orig = TableFileName(dbname_, t.meta.number); - s = env_->RenameFile(copy, orig); - if (s.ok()) { - Log(options_.info_log, "Table #%llu: %d entries repaired", - (unsigned long long) t.meta.number, counter); - tables_.push_back(t); - } - } - if (!s.ok()) { - env_->DeleteFile(copy); - } - } - - Status WriteDescriptor() { - std::string tmp = TempFileName(dbname_, 1); - WritableFile* file; - Status status = env_->NewWritableFile(tmp, &file); - if (!status.ok()) { - return status; - } - - SequenceNumber max_sequence = 0; - for (size_t i = 0; i < tables_.size(); i++) { - if (max_sequence < tables_[i].max_sequence) { - max_sequence = tables_[i].max_sequence; - } - } - - edit_.SetComparatorName(icmp_.user_comparator()->Name()); - edit_.SetLogNumber(0); - edit_.SetNextFile(next_file_number_); - edit_.SetLastSequence(max_sequence); - - for (size_t i = 0; i < tables_.size(); i++) { - // TODO(opt): separate out into multiple levels - const TableInfo& t = tables_[i]; - edit_.AddFile(0, t.meta.number, t.meta.file_size, - t.meta.smallest, t.meta.largest); - } - - //fprintf(stderr, "NewDescriptor:\n%s\n", edit_.DebugString().c_str()); - { - log::Writer log(file); - std::string record; - edit_.EncodeTo(&record); - status = log.AddRecord(record); - } - if (status.ok()) { - status = file->Close(); - } - delete file; - file = NULL; - - if (!status.ok()) { - env_->DeleteFile(tmp); - } else { - // Discard older manifests - for (size_t i = 0; i < manifests_.size(); i++) { - ArchiveFile(dbname_ + "/" + manifests_[i]); - } - - // Install new manifest - status = env_->RenameFile(tmp, DescriptorFileName(dbname_, 1)); - if (status.ok()) { - status = SetCurrentFile(env_, dbname_, 1); - } else { - env_->DeleteFile(tmp); - } - } - return status; - } - - void ArchiveFile(const std::string& fname) { - // Move into another directory. E.g., for - // dir/foo - // rename to - // dir/lost/foo - const char* slash = strrchr(fname.c_str(), '/'); - std::string new_dir; - if (slash != NULL) { - new_dir.assign(fname.data(), slash - fname.data()); - } - new_dir.append("/lost"); - env_->CreateDir(new_dir); // Ignore error - std::string new_file = new_dir; - new_file.append("/"); - new_file.append((slash == NULL) ? fname.c_str() : slash + 1); - Status s = env_->RenameFile(fname, new_file); - Log(options_.info_log, "Archiving %s: %s\n", - fname.c_str(), s.ToString().c_str()); - } -}; -} // namespace - -Status RepairDB(const std::string& dbname, const Options& options) { - Repairer repairer(dbname, options); - return repairer.Run(); -} - -} // namespace leveldb diff --git a/src/leveldb/db/skiplist.h b/src/leveldb/db/skiplist.h deleted file mode 100644 index ed8b092203..0000000000 --- a/src/leveldb/db/skiplist.h +++ /dev/null @@ -1,384 +0,0 @@ -#ifndef STORAGE_LEVELDB_DB_SKIPLIST_H_ -#define STORAGE_LEVELDB_DB_SKIPLIST_H_ - -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Thread safety -// ------------- -// -// Writes require external synchronization, most likely a mutex. -// Reads require a guarantee that the SkipList will not be destroyed -// while the read is in progress. Apart from that, reads progress -// without any internal locking or synchronization. -// -// Invariants: -// -// (1) Allocated nodes are never deleted until the SkipList is -// destroyed. This is trivially guaranteed by the code since we -// never delete any skip list nodes. -// -// (2) The contents of a Node except for the next/prev pointers are -// immutable after the Node has been linked into the SkipList. -// Only Insert() modifies the list, and it is careful to initialize -// a node and use release-stores to publish the nodes in one or -// more lists. -// -// ... prev vs. next pointer ordering ... - -#include -#include -#include "port/port.h" -#include "util/arena.h" -#include "util/random.h" - -namespace leveldb { - -class Arena; - -template -class SkipList { - private: - struct Node; - - public: - // Create a new SkipList object that will use "cmp" for comparing keys, - // and will allocate memory using "*arena". Objects allocated in the arena - // must remain allocated for the lifetime of the skiplist object. - explicit SkipList(Comparator cmp, Arena* arena); - - // Insert key into the list. - // REQUIRES: nothing that compares equal to key is currently in the list. - void Insert(const Key& key); - - // Returns true iff an entry that compares equal to key is in the list. - bool Contains(const Key& key) const; - - // Iteration over the contents of a skip list - class Iterator { - public: - // Initialize an iterator over the specified list. - // The returned iterator is not valid. - explicit Iterator(const SkipList* list); - - // Returns true iff the iterator is positioned at a valid node. - bool Valid() const; - - // Returns the key at the current position. - // REQUIRES: Valid() - const Key& key() const; - - // Advances to the next position. - // REQUIRES: Valid() - void Next(); - - // Advances to the previous position. - // REQUIRES: Valid() - void Prev(); - - // Advance to the first entry with a key >= target - void Seek(const Key& target); - - // Position at the first entry in list. - // Final state of iterator is Valid() iff list is not empty. - void SeekToFirst(); - - // Position at the last entry in list. - // Final state of iterator is Valid() iff list is not empty. - void SeekToLast(); - - private: - const SkipList* list_; - Node* node_; - // Intentionally copyable - }; - - private: - enum { kMaxHeight = 12 }; - - // Immutable after construction - Comparator const compare_; - Arena* const arena_; // Arena used for allocations of nodes - - Node* const head_; - - // Modified only by Insert(). Read racily by readers, but stale - // values are ok. - port::AtomicPointer max_height_; // Height of the entire list - - inline int GetMaxHeight() const { - return static_cast( - reinterpret_cast(max_height_.NoBarrier_Load())); - } - - // Read/written only by Insert(). - Random rnd_; - - Node* NewNode(const Key& key, int height); - int RandomHeight(); - bool Equal(const Key& a, const Key& b) const { return (compare_(a, b) == 0); } - - // Return true if key is greater than the data stored in "n" - bool KeyIsAfterNode(const Key& key, Node* n) const; - - // Return the earliest node that comes at or after key. - // Return NULL if there is no such node. - // - // If prev is non-NULL, fills prev[level] with pointer to previous - // node at "level" for every level in [0..max_height_-1]. - Node* FindGreaterOrEqual(const Key& key, Node** prev) const; - - // Return the latest node with a key < key. - // Return head_ if there is no such node. - Node* FindLessThan(const Key& key) const; - - // Return the last node in the list. - // Return head_ if list is empty. - Node* FindLast() const; - - // No copying allowed - SkipList(const SkipList&); - void operator=(const SkipList&); -}; - -// Implementation details follow -template -struct SkipList::Node { - explicit Node(const Key& k) : key(k) { } - - Key const key; - - // Accessors/mutators for links. Wrapped in methods so we can - // add the appropriate barriers as necessary. - Node* Next(int n) { - assert(n >= 0); - // Use an 'acquire load' so that we observe a fully initialized - // version of the returned Node. - return reinterpret_cast(next_[n].Acquire_Load()); - } - void SetNext(int n, Node* x) { - assert(n >= 0); - // Use a 'release store' so that anybody who reads through this - // pointer observes a fully initialized version of the inserted node. - next_[n].Release_Store(x); - } - - // No-barrier variants that can be safely used in a few locations. - Node* NoBarrier_Next(int n) { - assert(n >= 0); - return reinterpret_cast(next_[n].NoBarrier_Load()); - } - void NoBarrier_SetNext(int n, Node* x) { - assert(n >= 0); - next_[n].NoBarrier_Store(x); - } - - private: - // Array of length equal to the node height. next_[0] is lowest level link. - port::AtomicPointer next_[1]; -}; - -template -typename SkipList::Node* -SkipList::NewNode(const Key& key, int height) { - char* mem = arena_->AllocateAligned( - sizeof(Node) + sizeof(port::AtomicPointer) * (height - 1)); - return new (mem) Node(key); -} - -template -inline SkipList::Iterator::Iterator(const SkipList* list) { - list_ = list; - node_ = NULL; -} - -template -inline bool SkipList::Iterator::Valid() const { - return node_ != NULL; -} - -template -inline const Key& SkipList::Iterator::key() const { - assert(Valid()); - return node_->key; -} - -template -inline void SkipList::Iterator::Next() { - assert(Valid()); - node_ = node_->Next(0); -} - -template -inline void SkipList::Iterator::Prev() { - // Instead of using explicit "prev" links, we just search for the - // last node that falls before key. - assert(Valid()); - node_ = list_->FindLessThan(node_->key); - if (node_ == list_->head_) { - node_ = NULL; - } -} - -template -inline void SkipList::Iterator::Seek(const Key& target) { - node_ = list_->FindGreaterOrEqual(target, NULL); -} - -template -inline void SkipList::Iterator::SeekToFirst() { - node_ = list_->head_->Next(0); -} - -template -inline void SkipList::Iterator::SeekToLast() { - node_ = list_->FindLast(); - if (node_ == list_->head_) { - node_ = NULL; - } -} - -template -int SkipList::RandomHeight() { - // Increase height with probability 1 in kBranching - static const unsigned int kBranching = 4; - int height = 1; - while (height < kMaxHeight && ((rnd_.Next() % kBranching) == 0)) { - height++; - } - assert(height > 0); - assert(height <= kMaxHeight); - return height; -} - -template -bool SkipList::KeyIsAfterNode(const Key& key, Node* n) const { - // NULL n is considered infinite - return (n != NULL) && (compare_(n->key, key) < 0); -} - -template -typename SkipList::Node* SkipList::FindGreaterOrEqual(const Key& key, Node** prev) - const { - Node* x = head_; - int level = GetMaxHeight() - 1; - while (true) { - Node* next = x->Next(level); - if (KeyIsAfterNode(key, next)) { - // Keep searching in this list - x = next; - } else { - if (prev != NULL) prev[level] = x; - if (level == 0) { - return next; - } else { - // Switch to next list - level--; - } - } - } -} - -template -typename SkipList::Node* -SkipList::FindLessThan(const Key& key) const { - Node* x = head_; - int level = GetMaxHeight() - 1; - while (true) { - assert(x == head_ || compare_(x->key, key) < 0); - Node* next = x->Next(level); - if (next == NULL || compare_(next->key, key) >= 0) { - if (level == 0) { - return x; - } else { - // Switch to next list - level--; - } - } else { - x = next; - } - } -} - -template -typename SkipList::Node* SkipList::FindLast() - const { - Node* x = head_; - int level = GetMaxHeight() - 1; - while (true) { - Node* next = x->Next(level); - if (next == NULL) { - if (level == 0) { - return x; - } else { - // Switch to next list - level--; - } - } else { - x = next; - } - } -} - -template -SkipList::SkipList(Comparator cmp, Arena* arena) - : compare_(cmp), - arena_(arena), - head_(NewNode(0 /* any key will do */, kMaxHeight)), - max_height_(reinterpret_cast(1)), - rnd_(0xdeadbeef) { - for (int i = 0; i < kMaxHeight; i++) { - head_->SetNext(i, NULL); - } -} - -template -void SkipList::Insert(const Key& key) { - // TODO(opt): We can use a barrier-free variant of FindGreaterOrEqual() - // here since Insert() is externally synchronized. - Node* prev[kMaxHeight]; - Node* x = FindGreaterOrEqual(key, prev); - - // Our data structure does not allow duplicate insertion - assert(x == NULL || !Equal(key, x->key)); - - int height = RandomHeight(); - if (height > GetMaxHeight()) { - for (int i = GetMaxHeight(); i < height; i++) { - prev[i] = head_; - } - //fprintf(stderr, "Change height from %d to %d\n", max_height_, height); - - // It is ok to mutate max_height_ without any synchronization - // with concurrent readers. A concurrent reader that observes - // the new value of max_height_ will see either the old value of - // new level pointers from head_ (NULL), or a new value set in - // the loop below. In the former case the reader will - // immediately drop to the next level since NULL sorts after all - // keys. In the latter case the reader will use the new node. - max_height_.NoBarrier_Store(reinterpret_cast(height)); - } - - x = NewNode(key, height); - for (int i = 0; i < height; i++) { - // NoBarrier_SetNext() suffices since we will add a barrier when - // we publish a pointer to "x" in prev[i]. - x->NoBarrier_SetNext(i, prev[i]->NoBarrier_Next(i)); - prev[i]->SetNext(i, x); - } -} - -template -bool SkipList::Contains(const Key& key) const { - Node* x = FindGreaterOrEqual(key, NULL); - if (x != NULL && Equal(key, x->key)) { - return true; - } else { - return false; - } -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_SKIPLIST_H_ diff --git a/src/leveldb/db/skiplist_test.cc b/src/leveldb/db/skiplist_test.cc deleted file mode 100644 index c78f4b4fb1..0000000000 --- a/src/leveldb/db/skiplist_test.cc +++ /dev/null @@ -1,378 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/skiplist.h" -#include -#include "leveldb/env.h" -#include "util/arena.h" -#include "util/hash.h" -#include "util/random.h" -#include "util/testharness.h" - -namespace leveldb { - -typedef uint64_t Key; - -struct Comparator { - int operator()(const Key& a, const Key& b) const { - if (a < b) { - return -1; - } else if (a > b) { - return +1; - } else { - return 0; - } - } -}; - -class SkipTest { }; - -TEST(SkipTest, Empty) { - Arena arena; - Comparator cmp; - SkipList list(cmp, &arena); - ASSERT_TRUE(!list.Contains(10)); - - SkipList::Iterator iter(&list); - ASSERT_TRUE(!iter.Valid()); - iter.SeekToFirst(); - ASSERT_TRUE(!iter.Valid()); - iter.Seek(100); - ASSERT_TRUE(!iter.Valid()); - iter.SeekToLast(); - ASSERT_TRUE(!iter.Valid()); -} - -TEST(SkipTest, InsertAndLookup) { - const int N = 2000; - const int R = 5000; - Random rnd(1000); - std::set keys; - Arena arena; - Comparator cmp; - SkipList list(cmp, &arena); - for (int i = 0; i < N; i++) { - Key key = rnd.Next() % R; - if (keys.insert(key).second) { - list.Insert(key); - } - } - - for (int i = 0; i < R; i++) { - if (list.Contains(i)) { - ASSERT_EQ(keys.count(i), 1); - } else { - ASSERT_EQ(keys.count(i), 0); - } - } - - // Simple iterator tests - { - SkipList::Iterator iter(&list); - ASSERT_TRUE(!iter.Valid()); - - iter.Seek(0); - ASSERT_TRUE(iter.Valid()); - ASSERT_EQ(*(keys.begin()), iter.key()); - - iter.SeekToFirst(); - ASSERT_TRUE(iter.Valid()); - ASSERT_EQ(*(keys.begin()), iter.key()); - - iter.SeekToLast(); - ASSERT_TRUE(iter.Valid()); - ASSERT_EQ(*(keys.rbegin()), iter.key()); - } - - // Forward iteration test - for (int i = 0; i < R; i++) { - SkipList::Iterator iter(&list); - iter.Seek(i); - - // Compare against model iterator - std::set::iterator model_iter = keys.lower_bound(i); - for (int j = 0; j < 3; j++) { - if (model_iter == keys.end()) { - ASSERT_TRUE(!iter.Valid()); - break; - } else { - ASSERT_TRUE(iter.Valid()); - ASSERT_EQ(*model_iter, iter.key()); - ++model_iter; - iter.Next(); - } - } - } - - // Backward iteration test - { - SkipList::Iterator iter(&list); - iter.SeekToLast(); - - // Compare against model iterator - for (std::set::reverse_iterator model_iter = keys.rbegin(); - model_iter != keys.rend(); - ++model_iter) { - ASSERT_TRUE(iter.Valid()); - ASSERT_EQ(*model_iter, iter.key()); - iter.Prev(); - } - ASSERT_TRUE(!iter.Valid()); - } -} - -// We want to make sure that with a single writer and multiple -// concurrent readers (with no synchronization other than when a -// reader's iterator is created), the reader always observes all the -// data that was present in the skip list when the iterator was -// constructor. Because insertions are happening concurrently, we may -// also observe new values that were inserted since the iterator was -// constructed, but we should never miss any values that were present -// at iterator construction time. -// -// We generate multi-part keys: -// -// where: -// key is in range [0..K-1] -// gen is a generation number for key -// hash is hash(key,gen) -// -// The insertion code picks a random key, sets gen to be 1 + the last -// generation number inserted for that key, and sets hash to Hash(key,gen). -// -// At the beginning of a read, we snapshot the last inserted -// generation number for each key. We then iterate, including random -// calls to Next() and Seek(). For every key we encounter, we -// check that it is either expected given the initial snapshot or has -// been concurrently added since the iterator started. -class ConcurrentTest { - private: - static const uint32_t K = 4; - - static uint64_t key(Key key) { return (key >> 40); } - static uint64_t gen(Key key) { return (key >> 8) & 0xffffffffu; } - static uint64_t hash(Key key) { return key & 0xff; } - - static uint64_t HashNumbers(uint64_t k, uint64_t g) { - uint64_t data[2] = { k, g }; - return Hash(reinterpret_cast(data), sizeof(data), 0); - } - - static Key MakeKey(uint64_t k, uint64_t g) { - assert(sizeof(Key) == sizeof(uint64_t)); - assert(k <= K); // We sometimes pass K to seek to the end of the skiplist - assert(g <= 0xffffffffu); - return ((k << 40) | (g << 8) | (HashNumbers(k, g) & 0xff)); - } - - static bool IsValidKey(Key k) { - return hash(k) == (HashNumbers(key(k), gen(k)) & 0xff); - } - - static Key RandomTarget(Random* rnd) { - switch (rnd->Next() % 10) { - case 0: - // Seek to beginning - return MakeKey(0, 0); - case 1: - // Seek to end - return MakeKey(K, 0); - default: - // Seek to middle - return MakeKey(rnd->Next() % K, 0); - } - } - - // Per-key generation - struct State { - port::AtomicPointer generation[K]; - void Set(int k, intptr_t v) { - generation[k].Release_Store(reinterpret_cast(v)); - } - intptr_t Get(int k) { - return reinterpret_cast(generation[k].Acquire_Load()); - } - - State() { - for (int k = 0; k < K; k++) { - Set(k, 0); - } - } - }; - - // Current state of the test - State current_; - - Arena arena_; - - // SkipList is not protected by mu_. We just use a single writer - // thread to modify it. - SkipList list_; - - public: - ConcurrentTest() : list_(Comparator(), &arena_) { } - - // REQUIRES: External synchronization - void WriteStep(Random* rnd) { - const uint32_t k = rnd->Next() % K; - const intptr_t g = current_.Get(k) + 1; - const Key key = MakeKey(k, g); - list_.Insert(key); - current_.Set(k, g); - } - - void ReadStep(Random* rnd) { - // Remember the initial committed state of the skiplist. - State initial_state; - for (int k = 0; k < K; k++) { - initial_state.Set(k, current_.Get(k)); - } - - Key pos = RandomTarget(rnd); - SkipList::Iterator iter(&list_); - iter.Seek(pos); - while (true) { - Key current; - if (!iter.Valid()) { - current = MakeKey(K, 0); - } else { - current = iter.key(); - ASSERT_TRUE(IsValidKey(current)) << current; - } - ASSERT_LE(pos, current) << "should not go backwards"; - - // Verify that everything in [pos,current) was not present in - // initial_state. - while (pos < current) { - ASSERT_LT(key(pos), K) << pos; - - // Note that generation 0 is never inserted, so it is ok if - // <*,0,*> is missing. - ASSERT_TRUE((gen(pos) == 0) || - (gen(pos) > initial_state.Get(key(pos))) - ) << "key: " << key(pos) - << "; gen: " << gen(pos) - << "; initgen: " - << initial_state.Get(key(pos)); - - // Advance to next key in the valid key space - if (key(pos) < key(current)) { - pos = MakeKey(key(pos) + 1, 0); - } else { - pos = MakeKey(key(pos), gen(pos) + 1); - } - } - - if (!iter.Valid()) { - break; - } - - if (rnd->Next() % 2) { - iter.Next(); - pos = MakeKey(key(pos), gen(pos) + 1); - } else { - Key new_target = RandomTarget(rnd); - if (new_target > pos) { - pos = new_target; - iter.Seek(new_target); - } - } - } - } -}; -const uint32_t ConcurrentTest::K; - -// Simple test that does single-threaded testing of the ConcurrentTest -// scaffolding. -TEST(SkipTest, ConcurrentWithoutThreads) { - ConcurrentTest test; - Random rnd(test::RandomSeed()); - for (int i = 0; i < 10000; i++) { - test.ReadStep(&rnd); - test.WriteStep(&rnd); - } -} - -class TestState { - public: - ConcurrentTest t_; - int seed_; - port::AtomicPointer quit_flag_; - - enum ReaderState { - STARTING, - RUNNING, - DONE - }; - - explicit TestState(int s) - : seed_(s), - quit_flag_(NULL), - state_(STARTING), - state_cv_(&mu_) {} - - void Wait(ReaderState s) { - mu_.Lock(); - while (state_ != s) { - state_cv_.Wait(); - } - mu_.Unlock(); - } - - void Change(ReaderState s) { - mu_.Lock(); - state_ = s; - state_cv_.Signal(); - mu_.Unlock(); - } - - private: - port::Mutex mu_; - ReaderState state_; - port::CondVar state_cv_; -}; - -static void ConcurrentReader(void* arg) { - TestState* state = reinterpret_cast(arg); - Random rnd(state->seed_); - int64_t reads = 0; - state->Change(TestState::RUNNING); - while (!state->quit_flag_.Acquire_Load()) { - state->t_.ReadStep(&rnd); - ++reads; - } - state->Change(TestState::DONE); -} - -static void RunConcurrent(int run) { - const int seed = test::RandomSeed() + (run * 100); - Random rnd(seed); - const int N = 1000; - const int kSize = 1000; - for (int i = 0; i < N; i++) { - if ((i % 100) == 0) { - fprintf(stderr, "Run %d of %d\n", i, N); - } - TestState state(seed + 1); - Env::Default()->Schedule(ConcurrentReader, &state); - state.Wait(TestState::RUNNING); - for (int i = 0; i < kSize; i++) { - state.t_.WriteStep(&rnd); - } - state.quit_flag_.Release_Store(&state); // Any non-NULL arg will do - state.Wait(TestState::DONE); - } -} - -TEST(SkipTest, Concurrent1) { RunConcurrent(1); } -TEST(SkipTest, Concurrent2) { RunConcurrent(2); } -TEST(SkipTest, Concurrent3) { RunConcurrent(3); } -TEST(SkipTest, Concurrent4) { RunConcurrent(4); } -TEST(SkipTest, Concurrent5) { RunConcurrent(5); } - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/db/snapshot.h b/src/leveldb/db/snapshot.h deleted file mode 100644 index e7f8fd2c37..0000000000 --- a/src/leveldb/db/snapshot.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_SNAPSHOT_H_ -#define STORAGE_LEVELDB_DB_SNAPSHOT_H_ - -#include "leveldb/db.h" - -namespace leveldb { - -class SnapshotList; - -// Snapshots are kept in a doubly-linked list in the DB. -// Each SnapshotImpl corresponds to a particular sequence number. -class SnapshotImpl : public Snapshot { - public: - SequenceNumber number_; // const after creation - - private: - friend class SnapshotList; - - // SnapshotImpl is kept in a doubly-linked circular list - SnapshotImpl* prev_; - SnapshotImpl* next_; - - SnapshotList* list_; // just for sanity checks -}; - -class SnapshotList { - public: - SnapshotList() { - list_.prev_ = &list_; - list_.next_ = &list_; - } - - bool empty() const { return list_.next_ == &list_; } - SnapshotImpl* oldest() const { assert(!empty()); return list_.next_; } - SnapshotImpl* newest() const { assert(!empty()); return list_.prev_; } - - const SnapshotImpl* New(SequenceNumber seq) { - SnapshotImpl* s = new SnapshotImpl; - s->number_ = seq; - s->list_ = this; - s->next_ = &list_; - s->prev_ = list_.prev_; - s->prev_->next_ = s; - s->next_->prev_ = s; - return s; - } - - void Delete(const SnapshotImpl* s) { - assert(s->list_ == this); - s->prev_->next_ = s->next_; - s->next_->prev_ = s->prev_; - delete s; - } - - private: - // Dummy head of doubly-linked list of snapshots - SnapshotImpl list_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_SNAPSHOT_H_ diff --git a/src/leveldb/db/table_cache.cc b/src/leveldb/db/table_cache.cc deleted file mode 100644 index e3d82cd3ea..0000000000 --- a/src/leveldb/db/table_cache.cc +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/table_cache.h" - -#include "db/filename.h" -#include "leveldb/env.h" -#include "leveldb/table.h" -#include "util/coding.h" - -namespace leveldb { - -struct TableAndFile { - RandomAccessFile* file; - Table* table; -}; - -static void DeleteEntry(const Slice& key, void* value) { - TableAndFile* tf = reinterpret_cast(value); - delete tf->table; - delete tf->file; - delete tf; -} - -static void UnrefEntry(void* arg1, void* arg2) { - Cache* cache = reinterpret_cast(arg1); - Cache::Handle* h = reinterpret_cast(arg2); - cache->Release(h); -} - -TableCache::TableCache(const std::string& dbname, - const Options* options, - int entries) - : env_(options->env), - dbname_(dbname), - options_(options), - cache_(NewLRUCache(entries)) { -} - -TableCache::~TableCache() { - delete cache_; -} - -Status TableCache::FindTable(uint64_t file_number, uint64_t file_size, - Cache::Handle** handle) { - Status s; - char buf[sizeof(file_number)]; - EncodeFixed64(buf, file_number); - Slice key(buf, sizeof(buf)); - *handle = cache_->Lookup(key); - if (*handle == NULL) { - std::string fname = TableFileName(dbname_, file_number); - RandomAccessFile* file = NULL; - Table* table = NULL; - s = env_->NewRandomAccessFile(fname, &file); - if (!s.ok()) { - std::string old_fname = SSTTableFileName(dbname_, file_number); - if (env_->NewRandomAccessFile(old_fname, &file).ok()) { - s = Status::OK(); - } - } - if (s.ok()) { - s = Table::Open(*options_, file, file_size, &table); - } - - if (!s.ok()) { - assert(table == NULL); - delete file; - // We do not cache error results so that if the error is transient, - // or somebody repairs the file, we recover automatically. - } else { - TableAndFile* tf = new TableAndFile; - tf->file = file; - tf->table = table; - *handle = cache_->Insert(key, tf, 1, &DeleteEntry); - } - } - return s; -} - -Iterator* TableCache::NewIterator(const ReadOptions& options, - uint64_t file_number, - uint64_t file_size, - Table** tableptr) { - if (tableptr != NULL) { - *tableptr = NULL; - } - - Cache::Handle* handle = NULL; - Status s = FindTable(file_number, file_size, &handle); - if (!s.ok()) { - return NewErrorIterator(s); - } - - Table* table = reinterpret_cast(cache_->Value(handle))->table; - Iterator* result = table->NewIterator(options); - result->RegisterCleanup(&UnrefEntry, cache_, handle); - if (tableptr != NULL) { - *tableptr = table; - } - return result; -} - -Status TableCache::Get(const ReadOptions& options, - uint64_t file_number, - uint64_t file_size, - const Slice& k, - void* arg, - void (*saver)(void*, const Slice&, const Slice&)) { - Cache::Handle* handle = NULL; - Status s = FindTable(file_number, file_size, &handle); - if (s.ok()) { - Table* t = reinterpret_cast(cache_->Value(handle))->table; - s = t->InternalGet(options, k, arg, saver); - cache_->Release(handle); - } - return s; -} - -void TableCache::Evict(uint64_t file_number) { - char buf[sizeof(file_number)]; - EncodeFixed64(buf, file_number); - cache_->Erase(Slice(buf, sizeof(buf))); -} - -} // namespace leveldb diff --git a/src/leveldb/db/table_cache.h b/src/leveldb/db/table_cache.h deleted file mode 100644 index 8cf4aaf12d..0000000000 --- a/src/leveldb/db/table_cache.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Thread-safe (provides internal synchronization) - -#ifndef STORAGE_LEVELDB_DB_TABLE_CACHE_H_ -#define STORAGE_LEVELDB_DB_TABLE_CACHE_H_ - -#include -#include -#include "db/dbformat.h" -#include "leveldb/cache.h" -#include "leveldb/table.h" -#include "port/port.h" - -namespace leveldb { - -class Env; - -class TableCache { - public: - TableCache(const std::string& dbname, const Options* options, int entries); - ~TableCache(); - - // Return an iterator for the specified file number (the corresponding - // file length must be exactly "file_size" bytes). If "tableptr" is - // non-NULL, also sets "*tableptr" to point to the Table object - // underlying the returned iterator, or NULL if no Table object underlies - // the returned iterator. The returned "*tableptr" object is owned by - // the cache and should not be deleted, and is valid for as long as the - // returned iterator is live. - Iterator* NewIterator(const ReadOptions& options, - uint64_t file_number, - uint64_t file_size, - Table** tableptr = NULL); - - // If a seek to internal key "k" in specified file finds an entry, - // call (*handle_result)(arg, found_key, found_value). - Status Get(const ReadOptions& options, - uint64_t file_number, - uint64_t file_size, - const Slice& k, - void* arg, - void (*handle_result)(void*, const Slice&, const Slice&)); - - // Evict any entry for the specified file number - void Evict(uint64_t file_number); - - private: - Env* const env_; - const std::string dbname_; - const Options* options_; - Cache* cache_; - - Status FindTable(uint64_t file_number, uint64_t file_size, Cache::Handle**); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_TABLE_CACHE_H_ diff --git a/src/leveldb/db/version_edit.cc b/src/leveldb/db/version_edit.cc deleted file mode 100644 index f10a2d58b2..0000000000 --- a/src/leveldb/db/version_edit.cc +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/version_edit.h" - -#include "db/version_set.h" -#include "util/coding.h" - -namespace leveldb { - -// Tag numbers for serialized VersionEdit. These numbers are written to -// disk and should not be changed. -enum Tag { - kComparator = 1, - kLogNumber = 2, - kNextFileNumber = 3, - kLastSequence = 4, - kCompactPointer = 5, - kDeletedFile = 6, - kNewFile = 7, - // 8 was used for large value refs - kPrevLogNumber = 9 -}; - -void VersionEdit::Clear() { - comparator_.clear(); - log_number_ = 0; - prev_log_number_ = 0; - last_sequence_ = 0; - next_file_number_ = 0; - has_comparator_ = false; - has_log_number_ = false; - has_prev_log_number_ = false; - has_next_file_number_ = false; - has_last_sequence_ = false; - deleted_files_.clear(); - new_files_.clear(); -} - -void VersionEdit::EncodeTo(std::string* dst) const { - if (has_comparator_) { - PutVarint32(dst, kComparator); - PutLengthPrefixedSlice(dst, comparator_); - } - if (has_log_number_) { - PutVarint32(dst, kLogNumber); - PutVarint64(dst, log_number_); - } - if (has_prev_log_number_) { - PutVarint32(dst, kPrevLogNumber); - PutVarint64(dst, prev_log_number_); - } - if (has_next_file_number_) { - PutVarint32(dst, kNextFileNumber); - PutVarint64(dst, next_file_number_); - } - if (has_last_sequence_) { - PutVarint32(dst, kLastSequence); - PutVarint64(dst, last_sequence_); - } - - for (size_t i = 0; i < compact_pointers_.size(); i++) { - PutVarint32(dst, kCompactPointer); - PutVarint32(dst, compact_pointers_[i].first); // level - PutLengthPrefixedSlice(dst, compact_pointers_[i].second.Encode()); - } - - for (DeletedFileSet::const_iterator iter = deleted_files_.begin(); - iter != deleted_files_.end(); - ++iter) { - PutVarint32(dst, kDeletedFile); - PutVarint32(dst, iter->first); // level - PutVarint64(dst, iter->second); // file number - } - - for (size_t i = 0; i < new_files_.size(); i++) { - const FileMetaData& f = new_files_[i].second; - PutVarint32(dst, kNewFile); - PutVarint32(dst, new_files_[i].first); // level - PutVarint64(dst, f.number); - PutVarint64(dst, f.file_size); - PutLengthPrefixedSlice(dst, f.smallest.Encode()); - PutLengthPrefixedSlice(dst, f.largest.Encode()); - } -} - -static bool GetInternalKey(Slice* input, InternalKey* dst) { - Slice str; - if (GetLengthPrefixedSlice(input, &str)) { - dst->DecodeFrom(str); - return true; - } else { - return false; - } -} - -static bool GetLevel(Slice* input, int* level) { - uint32_t v; - if (GetVarint32(input, &v) && - v < config::kNumLevels) { - *level = v; - return true; - } else { - return false; - } -} - -Status VersionEdit::DecodeFrom(const Slice& src) { - Clear(); - Slice input = src; - const char* msg = NULL; - uint32_t tag; - - // Temporary storage for parsing - int level; - uint64_t number; - FileMetaData f; - Slice str; - InternalKey key; - - while (msg == NULL && GetVarint32(&input, &tag)) { - switch (tag) { - case kComparator: - if (GetLengthPrefixedSlice(&input, &str)) { - comparator_ = str.ToString(); - has_comparator_ = true; - } else { - msg = "comparator name"; - } - break; - - case kLogNumber: - if (GetVarint64(&input, &log_number_)) { - has_log_number_ = true; - } else { - msg = "log number"; - } - break; - - case kPrevLogNumber: - if (GetVarint64(&input, &prev_log_number_)) { - has_prev_log_number_ = true; - } else { - msg = "previous log number"; - } - break; - - case kNextFileNumber: - if (GetVarint64(&input, &next_file_number_)) { - has_next_file_number_ = true; - } else { - msg = "next file number"; - } - break; - - case kLastSequence: - if (GetVarint64(&input, &last_sequence_)) { - has_last_sequence_ = true; - } else { - msg = "last sequence number"; - } - break; - - case kCompactPointer: - if (GetLevel(&input, &level) && - GetInternalKey(&input, &key)) { - compact_pointers_.push_back(std::make_pair(level, key)); - } else { - msg = "compaction pointer"; - } - break; - - case kDeletedFile: - if (GetLevel(&input, &level) && - GetVarint64(&input, &number)) { - deleted_files_.insert(std::make_pair(level, number)); - } else { - msg = "deleted file"; - } - break; - - case kNewFile: - if (GetLevel(&input, &level) && - GetVarint64(&input, &f.number) && - GetVarint64(&input, &f.file_size) && - GetInternalKey(&input, &f.smallest) && - GetInternalKey(&input, &f.largest)) { - new_files_.push_back(std::make_pair(level, f)); - } else { - msg = "new-file entry"; - } - break; - - default: - msg = "unknown tag"; - break; - } - } - - if (msg == NULL && !input.empty()) { - msg = "invalid tag"; - } - - Status result; - if (msg != NULL) { - result = Status::Corruption("VersionEdit", msg); - } - return result; -} - -std::string VersionEdit::DebugString() const { - std::string r; - r.append("VersionEdit {"); - if (has_comparator_) { - r.append("\n Comparator: "); - r.append(comparator_); - } - if (has_log_number_) { - r.append("\n LogNumber: "); - AppendNumberTo(&r, log_number_); - } - if (has_prev_log_number_) { - r.append("\n PrevLogNumber: "); - AppendNumberTo(&r, prev_log_number_); - } - if (has_next_file_number_) { - r.append("\n NextFile: "); - AppendNumberTo(&r, next_file_number_); - } - if (has_last_sequence_) { - r.append("\n LastSeq: "); - AppendNumberTo(&r, last_sequence_); - } - for (size_t i = 0; i < compact_pointers_.size(); i++) { - r.append("\n CompactPointer: "); - AppendNumberTo(&r, compact_pointers_[i].first); - r.append(" "); - r.append(compact_pointers_[i].second.DebugString()); - } - for (DeletedFileSet::const_iterator iter = deleted_files_.begin(); - iter != deleted_files_.end(); - ++iter) { - r.append("\n DeleteFile: "); - AppendNumberTo(&r, iter->first); - r.append(" "); - AppendNumberTo(&r, iter->second); - } - for (size_t i = 0; i < new_files_.size(); i++) { - const FileMetaData& f = new_files_[i].second; - r.append("\n AddFile: "); - AppendNumberTo(&r, new_files_[i].first); - r.append(" "); - AppendNumberTo(&r, f.number); - r.append(" "); - AppendNumberTo(&r, f.file_size); - r.append(" "); - r.append(f.smallest.DebugString()); - r.append(" .. "); - r.append(f.largest.DebugString()); - } - r.append("\n}\n"); - return r; -} - -} // namespace leveldb diff --git a/src/leveldb/db/version_edit.h b/src/leveldb/db/version_edit.h deleted file mode 100644 index eaef77b327..0000000000 --- a/src/leveldb/db/version_edit.h +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_VERSION_EDIT_H_ -#define STORAGE_LEVELDB_DB_VERSION_EDIT_H_ - -#include -#include -#include -#include "db/dbformat.h" - -namespace leveldb { - -class VersionSet; - -struct FileMetaData { - int refs; - int allowed_seeks; // Seeks allowed until compaction - uint64_t number; - uint64_t file_size; // File size in bytes - InternalKey smallest; // Smallest internal key served by table - InternalKey largest; // Largest internal key served by table - - FileMetaData() : refs(0), allowed_seeks(1 << 30), file_size(0) { } -}; - -class VersionEdit { - public: - VersionEdit() { Clear(); } - ~VersionEdit() { } - - void Clear(); - - void SetComparatorName(const Slice& name) { - has_comparator_ = true; - comparator_ = name.ToString(); - } - void SetLogNumber(uint64_t num) { - has_log_number_ = true; - log_number_ = num; - } - void SetPrevLogNumber(uint64_t num) { - has_prev_log_number_ = true; - prev_log_number_ = num; - } - void SetNextFile(uint64_t num) { - has_next_file_number_ = true; - next_file_number_ = num; - } - void SetLastSequence(SequenceNumber seq) { - has_last_sequence_ = true; - last_sequence_ = seq; - } - void SetCompactPointer(int level, const InternalKey& key) { - compact_pointers_.push_back(std::make_pair(level, key)); - } - - // Add the specified file at the specified number. - // REQUIRES: This version has not been saved (see VersionSet::SaveTo) - // REQUIRES: "smallest" and "largest" are smallest and largest keys in file - void AddFile(int level, uint64_t file, - uint64_t file_size, - const InternalKey& smallest, - const InternalKey& largest) { - FileMetaData f; - f.number = file; - f.file_size = file_size; - f.smallest = smallest; - f.largest = largest; - new_files_.push_back(std::make_pair(level, f)); - } - - // Delete the specified "file" from the specified "level". - void DeleteFile(int level, uint64_t file) { - deleted_files_.insert(std::make_pair(level, file)); - } - - void EncodeTo(std::string* dst) const; - Status DecodeFrom(const Slice& src); - - std::string DebugString() const; - - private: - friend class VersionSet; - - typedef std::set< std::pair > DeletedFileSet; - - std::string comparator_; - uint64_t log_number_; - uint64_t prev_log_number_; - uint64_t next_file_number_; - SequenceNumber last_sequence_; - bool has_comparator_; - bool has_log_number_; - bool has_prev_log_number_; - bool has_next_file_number_; - bool has_last_sequence_; - - std::vector< std::pair > compact_pointers_; - DeletedFileSet deleted_files_; - std::vector< std::pair > new_files_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_VERSION_EDIT_H_ diff --git a/src/leveldb/db/version_edit_test.cc b/src/leveldb/db/version_edit_test.cc deleted file mode 100644 index 280310b49d..0000000000 --- a/src/leveldb/db/version_edit_test.cc +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/version_edit.h" -#include "util/testharness.h" - -namespace leveldb { - -static void TestEncodeDecode(const VersionEdit& edit) { - std::string encoded, encoded2; - edit.EncodeTo(&encoded); - VersionEdit parsed; - Status s = parsed.DecodeFrom(encoded); - ASSERT_TRUE(s.ok()) << s.ToString(); - parsed.EncodeTo(&encoded2); - ASSERT_EQ(encoded, encoded2); -} - -class VersionEditTest { }; - -TEST(VersionEditTest, EncodeDecode) { - static const uint64_t kBig = 1ull << 50; - - VersionEdit edit; - for (int i = 0; i < 4; i++) { - TestEncodeDecode(edit); - edit.AddFile(3, kBig + 300 + i, kBig + 400 + i, - InternalKey("foo", kBig + 500 + i, kTypeValue), - InternalKey("zoo", kBig + 600 + i, kTypeDeletion)); - edit.DeleteFile(4, kBig + 700 + i); - edit.SetCompactPointer(i, InternalKey("x", kBig + 900 + i, kTypeValue)); - } - - edit.SetComparatorName("foo"); - edit.SetLogNumber(kBig + 100); - edit.SetNextFile(kBig + 200); - edit.SetLastSequence(kBig + 1000); - TestEncodeDecode(edit); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/db/version_set.cc b/src/leveldb/db/version_set.cc deleted file mode 100644 index aa83df55e4..0000000000 --- a/src/leveldb/db/version_set.cc +++ /dev/null @@ -1,1484 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/version_set.h" - -#include -#include -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/log_writer.h" -#include "db/memtable.h" -#include "db/table_cache.h" -#include "leveldb/env.h" -#include "leveldb/table_builder.h" -#include "table/merger.h" -#include "table/two_level_iterator.h" -#include "util/coding.h" -#include "util/logging.h" - -namespace leveldb { - -static const int kTargetFileSize = 2 * 1048576; - -// Maximum bytes of overlaps in grandparent (i.e., level+2) before we -// stop building a single file in a level->level+1 compaction. -static const int64_t kMaxGrandParentOverlapBytes = 10 * kTargetFileSize; - -// Maximum number of bytes in all compacted files. We avoid expanding -// the lower level file set of a compaction if it would make the -// total compaction cover more than this many bytes. -static const int64_t kExpandedCompactionByteSizeLimit = 25 * kTargetFileSize; - -static double MaxBytesForLevel(int level) { - // Note: the result for level zero is not really used since we set - // the level-0 compaction threshold based on number of files. - double result = 10 * 1048576.0; // Result for both level-0 and level-1 - while (level > 1) { - result *= 10; - level--; - } - return result; -} - -static uint64_t MaxFileSizeForLevel(int level) { - return kTargetFileSize; // We could vary per level to reduce number of files? -} - -static int64_t TotalFileSize(const std::vector& files) { - int64_t sum = 0; - for (size_t i = 0; i < files.size(); i++) { - sum += files[i]->file_size; - } - return sum; -} - -Version::~Version() { - assert(refs_ == 0); - - // Remove from linked list - prev_->next_ = next_; - next_->prev_ = prev_; - - // Drop references to files - for (int level = 0; level < config::kNumLevels; level++) { - for (size_t i = 0; i < files_[level].size(); i++) { - FileMetaData* f = files_[level][i]; - assert(f->refs > 0); - f->refs--; - if (f->refs <= 0) { - delete f; - } - } - } -} - -int FindFile(const InternalKeyComparator& icmp, - const std::vector& files, - const Slice& key) { - uint32_t left = 0; - uint32_t right = files.size(); - while (left < right) { - uint32_t mid = (left + right) / 2; - const FileMetaData* f = files[mid]; - if (icmp.InternalKeyComparator::Compare(f->largest.Encode(), key) < 0) { - // Key at "mid.largest" is < "target". Therefore all - // files at or before "mid" are uninteresting. - left = mid + 1; - } else { - // Key at "mid.largest" is >= "target". Therefore all files - // after "mid" are uninteresting. - right = mid; - } - } - return right; -} - -static bool AfterFile(const Comparator* ucmp, - const Slice* user_key, const FileMetaData* f) { - // NULL user_key occurs before all keys and is therefore never after *f - return (user_key != NULL && - ucmp->Compare(*user_key, f->largest.user_key()) > 0); -} - -static bool BeforeFile(const Comparator* ucmp, - const Slice* user_key, const FileMetaData* f) { - // NULL user_key occurs after all keys and is therefore never before *f - return (user_key != NULL && - ucmp->Compare(*user_key, f->smallest.user_key()) < 0); -} - -bool SomeFileOverlapsRange( - const InternalKeyComparator& icmp, - bool disjoint_sorted_files, - const std::vector& files, - const Slice* smallest_user_key, - const Slice* largest_user_key) { - const Comparator* ucmp = icmp.user_comparator(); - if (!disjoint_sorted_files) { - // Need to check against all files - for (size_t i = 0; i < files.size(); i++) { - const FileMetaData* f = files[i]; - if (AfterFile(ucmp, smallest_user_key, f) || - BeforeFile(ucmp, largest_user_key, f)) { - // No overlap - } else { - return true; // Overlap - } - } - return false; - } - - // Binary search over file list - uint32_t index = 0; - if (smallest_user_key != NULL) { - // Find the earliest possible internal key for smallest_user_key - InternalKey small(*smallest_user_key, kMaxSequenceNumber,kValueTypeForSeek); - index = FindFile(icmp, files, small.Encode()); - } - - if (index >= files.size()) { - // beginning of range is after all files, so no overlap. - return false; - } - - return !BeforeFile(ucmp, largest_user_key, files[index]); -} - -// An internal iterator. For a given version/level pair, yields -// information about the files in the level. For a given entry, key() -// is the largest key that occurs in the file, and value() is an -// 16-byte value containing the file number and file size, both -// encoded using EncodeFixed64. -class Version::LevelFileNumIterator : public Iterator { - public: - LevelFileNumIterator(const InternalKeyComparator& icmp, - const std::vector* flist) - : icmp_(icmp), - flist_(flist), - index_(flist->size()) { // Marks as invalid - } - virtual bool Valid() const { - return index_ < flist_->size(); - } - virtual void Seek(const Slice& target) { - index_ = FindFile(icmp_, *flist_, target); - } - virtual void SeekToFirst() { index_ = 0; } - virtual void SeekToLast() { - index_ = flist_->empty() ? 0 : flist_->size() - 1; - } - virtual void Next() { - assert(Valid()); - index_++; - } - virtual void Prev() { - assert(Valid()); - if (index_ == 0) { - index_ = flist_->size(); // Marks as invalid - } else { - index_--; - } - } - Slice key() const { - assert(Valid()); - return (*flist_)[index_]->largest.Encode(); - } - Slice value() const { - assert(Valid()); - EncodeFixed64(value_buf_, (*flist_)[index_]->number); - EncodeFixed64(value_buf_+8, (*flist_)[index_]->file_size); - return Slice(value_buf_, sizeof(value_buf_)); - } - virtual Status status() const { return Status::OK(); } - private: - const InternalKeyComparator icmp_; - const std::vector* const flist_; - uint32_t index_; - - // Backing store for value(). Holds the file number and size. - mutable char value_buf_[16]; -}; - -static Iterator* GetFileIterator(void* arg, - const ReadOptions& options, - const Slice& file_value) { - TableCache* cache = reinterpret_cast(arg); - if (file_value.size() != 16) { - return NewErrorIterator( - Status::Corruption("FileReader invoked with unexpected value")); - } else { - return cache->NewIterator(options, - DecodeFixed64(file_value.data()), - DecodeFixed64(file_value.data() + 8)); - } -} - -Iterator* Version::NewConcatenatingIterator(const ReadOptions& options, - int level) const { - return NewTwoLevelIterator( - new LevelFileNumIterator(vset_->icmp_, &files_[level]), - &GetFileIterator, vset_->table_cache_, options); -} - -void Version::AddIterators(const ReadOptions& options, - std::vector* iters) { - // Merge all level zero files together since they may overlap - for (size_t i = 0; i < files_[0].size(); i++) { - iters->push_back( - vset_->table_cache_->NewIterator( - options, files_[0][i]->number, files_[0][i]->file_size)); - } - - // For levels > 0, we can use a concatenating iterator that sequentially - // walks through the non-overlapping files in the level, opening them - // lazily. - for (int level = 1; level < config::kNumLevels; level++) { - if (!files_[level].empty()) { - iters->push_back(NewConcatenatingIterator(options, level)); - } - } -} - -// Callback from TableCache::Get() -namespace { -enum SaverState { - kNotFound, - kFound, - kDeleted, - kCorrupt, -}; -struct Saver { - SaverState state; - const Comparator* ucmp; - Slice user_key; - std::string* value; -}; -} -static void SaveValue(void* arg, const Slice& ikey, const Slice& v) { - Saver* s = reinterpret_cast(arg); - ParsedInternalKey parsed_key; - if (!ParseInternalKey(ikey, &parsed_key)) { - s->state = kCorrupt; - } else { - if (s->ucmp->Compare(parsed_key.user_key, s->user_key) == 0) { - s->state = (parsed_key.type == kTypeValue) ? kFound : kDeleted; - if (s->state == kFound) { - s->value->assign(v.data(), v.size()); - } - } - } -} - -static bool NewestFirst(FileMetaData* a, FileMetaData* b) { - return a->number > b->number; -} - -void Version::ForEachOverlapping(Slice user_key, Slice internal_key, - void* arg, - bool (*func)(void*, int, FileMetaData*)) { - // TODO(sanjay): Change Version::Get() to use this function. - const Comparator* ucmp = vset_->icmp_.user_comparator(); - - // Search level-0 in order from newest to oldest. - std::vector tmp; - tmp.reserve(files_[0].size()); - for (uint32_t i = 0; i < files_[0].size(); i++) { - FileMetaData* f = files_[0][i]; - if (ucmp->Compare(user_key, f->smallest.user_key()) >= 0 && - ucmp->Compare(user_key, f->largest.user_key()) <= 0) { - tmp.push_back(f); - } - } - if (!tmp.empty()) { - std::sort(tmp.begin(), tmp.end(), NewestFirst); - for (uint32_t i = 0; i < tmp.size(); i++) { - if (!(*func)(arg, 0, tmp[i])) { - return; - } - } - } - - // Search other levels. - for (int level = 1; level < config::kNumLevels; level++) { - size_t num_files = files_[level].size(); - if (num_files == 0) continue; - - // Binary search to find earliest index whose largest key >= internal_key. - uint32_t index = FindFile(vset_->icmp_, files_[level], internal_key); - if (index < num_files) { - FileMetaData* f = files_[level][index]; - if (ucmp->Compare(user_key, f->smallest.user_key()) < 0) { - // All of "f" is past any data for user_key - } else { - if (!(*func)(arg, level, f)) { - return; - } - } - } - } -} - -Status Version::Get(const ReadOptions& options, - const LookupKey& k, - std::string* value, - GetStats* stats) { - Slice ikey = k.internal_key(); - Slice user_key = k.user_key(); - const Comparator* ucmp = vset_->icmp_.user_comparator(); - Status s; - - stats->seek_file = NULL; - stats->seek_file_level = -1; - FileMetaData* last_file_read = NULL; - int last_file_read_level = -1; - - // We can search level-by-level since entries never hop across - // levels. Therefore we are guaranteed that if we find data - // in an smaller level, later levels are irrelevant. - std::vector tmp; - FileMetaData* tmp2; - for (int level = 0; level < config::kNumLevels; level++) { - size_t num_files = files_[level].size(); - if (num_files == 0) continue; - - // Get the list of files to search in this level - FileMetaData* const* files = &files_[level][0]; - if (level == 0) { - // Level-0 files may overlap each other. Find all files that - // overlap user_key and process them in order from newest to oldest. - tmp.reserve(num_files); - for (uint32_t i = 0; i < num_files; i++) { - FileMetaData* f = files[i]; - if (ucmp->Compare(user_key, f->smallest.user_key()) >= 0 && - ucmp->Compare(user_key, f->largest.user_key()) <= 0) { - tmp.push_back(f); - } - } - if (tmp.empty()) continue; - - std::sort(tmp.begin(), tmp.end(), NewestFirst); - files = &tmp[0]; - num_files = tmp.size(); - } else { - // Binary search to find earliest index whose largest key >= ikey. - uint32_t index = FindFile(vset_->icmp_, files_[level], ikey); - if (index >= num_files) { - files = NULL; - num_files = 0; - } else { - tmp2 = files[index]; - if (ucmp->Compare(user_key, tmp2->smallest.user_key()) < 0) { - // All of "tmp2" is past any data for user_key - files = NULL; - num_files = 0; - } else { - files = &tmp2; - num_files = 1; - } - } - } - - for (uint32_t i = 0; i < num_files; ++i) { - if (last_file_read != NULL && stats->seek_file == NULL) { - // We have had more than one seek for this read. Charge the 1st file. - stats->seek_file = last_file_read; - stats->seek_file_level = last_file_read_level; - } - - FileMetaData* f = files[i]; - last_file_read = f; - last_file_read_level = level; - - Saver saver; - saver.state = kNotFound; - saver.ucmp = ucmp; - saver.user_key = user_key; - saver.value = value; - s = vset_->table_cache_->Get(options, f->number, f->file_size, - ikey, &saver, SaveValue); - if (!s.ok()) { - return s; - } - switch (saver.state) { - case kNotFound: - break; // Keep searching in other files - case kFound: - return s; - case kDeleted: - s = Status::NotFound(Slice()); // Use empty error message for speed - return s; - case kCorrupt: - s = Status::Corruption("corrupted key for ", user_key); - return s; - } - } - } - - return Status::NotFound(Slice()); // Use an empty error message for speed -} - -bool Version::UpdateStats(const GetStats& stats) { - FileMetaData* f = stats.seek_file; - if (f != NULL) { - f->allowed_seeks--; - if (f->allowed_seeks <= 0 && file_to_compact_ == NULL) { - file_to_compact_ = f; - file_to_compact_level_ = stats.seek_file_level; - return true; - } - } - return false; -} - -bool Version::RecordReadSample(Slice internal_key) { - ParsedInternalKey ikey; - if (!ParseInternalKey(internal_key, &ikey)) { - return false; - } - - struct State { - GetStats stats; // Holds first matching file - int matches; - - static bool Match(void* arg, int level, FileMetaData* f) { - State* state = reinterpret_cast(arg); - state->matches++; - if (state->matches == 1) { - // Remember first match. - state->stats.seek_file = f; - state->stats.seek_file_level = level; - } - // We can stop iterating once we have a second match. - return state->matches < 2; - } - }; - - State state; - state.matches = 0; - ForEachOverlapping(ikey.user_key, internal_key, &state, &State::Match); - - // Must have at least two matches since we want to merge across - // files. But what if we have a single file that contains many - // overwrites and deletions? Should we have another mechanism for - // finding such files? - if (state.matches >= 2) { - // 1MB cost is about 1 seek (see comment in Builder::Apply). - return UpdateStats(state.stats); - } - return false; -} - -void Version::Ref() { - ++refs_; -} - -void Version::Unref() { - assert(this != &vset_->dummy_versions_); - assert(refs_ >= 1); - --refs_; - if (refs_ == 0) { - delete this; - } -} - -bool Version::OverlapInLevel(int level, - const Slice* smallest_user_key, - const Slice* largest_user_key) { - return SomeFileOverlapsRange(vset_->icmp_, (level > 0), files_[level], - smallest_user_key, largest_user_key); -} - -int Version::PickLevelForMemTableOutput( - const Slice& smallest_user_key, - const Slice& largest_user_key) { - int level = 0; - if (!OverlapInLevel(0, &smallest_user_key, &largest_user_key)) { - // Push to next level if there is no overlap in next level, - // and the #bytes overlapping in the level after that are limited. - InternalKey start(smallest_user_key, kMaxSequenceNumber, kValueTypeForSeek); - InternalKey limit(largest_user_key, 0, static_cast(0)); - std::vector overlaps; - while (level < config::kMaxMemCompactLevel) { - if (OverlapInLevel(level + 1, &smallest_user_key, &largest_user_key)) { - break; - } - if (level + 2 < config::kNumLevels) { - // Check that file does not overlap too many grandparent bytes. - GetOverlappingInputs(level + 2, &start, &limit, &overlaps); - const int64_t sum = TotalFileSize(overlaps); - if (sum > kMaxGrandParentOverlapBytes) { - break; - } - } - level++; - } - } - return level; -} - -// Store in "*inputs" all files in "level" that overlap [begin,end] -void Version::GetOverlappingInputs( - int level, - const InternalKey* begin, - const InternalKey* end, - std::vector* inputs) { - assert(level >= 0); - assert(level < config::kNumLevels); - inputs->clear(); - Slice user_begin, user_end; - if (begin != NULL) { - user_begin = begin->user_key(); - } - if (end != NULL) { - user_end = end->user_key(); - } - const Comparator* user_cmp = vset_->icmp_.user_comparator(); - for (size_t i = 0; i < files_[level].size(); ) { - FileMetaData* f = files_[level][i++]; - const Slice file_start = f->smallest.user_key(); - const Slice file_limit = f->largest.user_key(); - if (begin != NULL && user_cmp->Compare(file_limit, user_begin) < 0) { - // "f" is completely before specified range; skip it - } else if (end != NULL && user_cmp->Compare(file_start, user_end) > 0) { - // "f" is completely after specified range; skip it - } else { - inputs->push_back(f); - if (level == 0) { - // Level-0 files may overlap each other. So check if the newly - // added file has expanded the range. If so, restart search. - if (begin != NULL && user_cmp->Compare(file_start, user_begin) < 0) { - user_begin = file_start; - inputs->clear(); - i = 0; - } else if (end != NULL && user_cmp->Compare(file_limit, user_end) > 0) { - user_end = file_limit; - inputs->clear(); - i = 0; - } - } - } - } -} - -std::string Version::DebugString() const { - std::string r; - for (int level = 0; level < config::kNumLevels; level++) { - // E.g., - // --- level 1 --- - // 17:123['a' .. 'd'] - // 20:43['e' .. 'g'] - r.append("--- level "); - AppendNumberTo(&r, level); - r.append(" ---\n"); - const std::vector& files = files_[level]; - for (size_t i = 0; i < files.size(); i++) { - r.push_back(' '); - AppendNumberTo(&r, files[i]->number); - r.push_back(':'); - AppendNumberTo(&r, files[i]->file_size); - r.append("["); - r.append(files[i]->smallest.DebugString()); - r.append(" .. "); - r.append(files[i]->largest.DebugString()); - r.append("]\n"); - } - } - return r; -} - -// A helper class so we can efficiently apply a whole sequence -// of edits to a particular state without creating intermediate -// Versions that contain full copies of the intermediate state. -class VersionSet::Builder { - private: - // Helper to sort by v->files_[file_number].smallest - struct BySmallestKey { - const InternalKeyComparator* internal_comparator; - - bool operator()(FileMetaData* f1, FileMetaData* f2) const { - int r = internal_comparator->Compare(f1->smallest, f2->smallest); - if (r != 0) { - return (r < 0); - } else { - // Break ties by file number - return (f1->number < f2->number); - } - } - }; - - typedef std::set FileSet; - struct LevelState { - std::set deleted_files; - FileSet* added_files; - }; - - VersionSet* vset_; - Version* base_; - LevelState levels_[config::kNumLevels]; - - public: - // Initialize a builder with the files from *base and other info from *vset - Builder(VersionSet* vset, Version* base) - : vset_(vset), - base_(base) { - base_->Ref(); - BySmallestKey cmp; - cmp.internal_comparator = &vset_->icmp_; - for (int level = 0; level < config::kNumLevels; level++) { - levels_[level].added_files = new FileSet(cmp); - } - } - - ~Builder() { - for (int level = 0; level < config::kNumLevels; level++) { - const FileSet* added = levels_[level].added_files; - std::vector to_unref; - to_unref.reserve(added->size()); - for (FileSet::const_iterator it = added->begin(); - it != added->end(); ++it) { - to_unref.push_back(*it); - } - delete added; - for (uint32_t i = 0; i < to_unref.size(); i++) { - FileMetaData* f = to_unref[i]; - f->refs--; - if (f->refs <= 0) { - delete f; - } - } - } - base_->Unref(); - } - - // Apply all of the edits in *edit to the current state. - void Apply(VersionEdit* edit) { - // Update compaction pointers - for (size_t i = 0; i < edit->compact_pointers_.size(); i++) { - const int level = edit->compact_pointers_[i].first; - vset_->compact_pointer_[level] = - edit->compact_pointers_[i].second.Encode().ToString(); - } - - // Delete files - const VersionEdit::DeletedFileSet& del = edit->deleted_files_; - for (VersionEdit::DeletedFileSet::const_iterator iter = del.begin(); - iter != del.end(); - ++iter) { - const int level = iter->first; - const uint64_t number = iter->second; - levels_[level].deleted_files.insert(number); - } - - // Add new files - for (size_t i = 0; i < edit->new_files_.size(); i++) { - const int level = edit->new_files_[i].first; - FileMetaData* f = new FileMetaData(edit->new_files_[i].second); - f->refs = 1; - - // We arrange to automatically compact this file after - // a certain number of seeks. Let's assume: - // (1) One seek costs 10ms - // (2) Writing or reading 1MB costs 10ms (100MB/s) - // (3) A compaction of 1MB does 25MB of IO: - // 1MB read from this level - // 10-12MB read from next level (boundaries may be misaligned) - // 10-12MB written to next level - // This implies that 25 seeks cost the same as the compaction - // of 1MB of data. I.e., one seek costs approximately the - // same as the compaction of 40KB of data. We are a little - // conservative and allow approximately one seek for every 16KB - // of data before triggering a compaction. - f->allowed_seeks = (f->file_size / 16384); - if (f->allowed_seeks < 100) f->allowed_seeks = 100; - - levels_[level].deleted_files.erase(f->number); - levels_[level].added_files->insert(f); - } - } - - // Save the current state in *v. - void SaveTo(Version* v) { - BySmallestKey cmp; - cmp.internal_comparator = &vset_->icmp_; - for (int level = 0; level < config::kNumLevels; level++) { - // Merge the set of added files with the set of pre-existing files. - // Drop any deleted files. Store the result in *v. - const std::vector& base_files = base_->files_[level]; - std::vector::const_iterator base_iter = base_files.begin(); - std::vector::const_iterator base_end = base_files.end(); - const FileSet* added = levels_[level].added_files; - v->files_[level].reserve(base_files.size() + added->size()); - for (FileSet::const_iterator added_iter = added->begin(); - added_iter != added->end(); - ++added_iter) { - // Add all smaller files listed in base_ - for (std::vector::const_iterator bpos - = std::upper_bound(base_iter, base_end, *added_iter, cmp); - base_iter != bpos; - ++base_iter) { - MaybeAddFile(v, level, *base_iter); - } - - MaybeAddFile(v, level, *added_iter); - } - - // Add remaining base files - for (; base_iter != base_end; ++base_iter) { - MaybeAddFile(v, level, *base_iter); - } - -#ifndef NDEBUG - // Make sure there is no overlap in levels > 0 - if (level > 0) { - for (uint32_t i = 1; i < v->files_[level].size(); i++) { - const InternalKey& prev_end = v->files_[level][i-1]->largest; - const InternalKey& this_begin = v->files_[level][i]->smallest; - if (vset_->icmp_.Compare(prev_end, this_begin) >= 0) { - fprintf(stderr, "overlapping ranges in same level %s vs. %s\n", - prev_end.DebugString().c_str(), - this_begin.DebugString().c_str()); - abort(); - } - } - } -#endif - } - } - - void MaybeAddFile(Version* v, int level, FileMetaData* f) { - if (levels_[level].deleted_files.count(f->number) > 0) { - // File is deleted: do nothing - } else { - std::vector* files = &v->files_[level]; - if (level > 0 && !files->empty()) { - // Must not overlap - assert(vset_->icmp_.Compare((*files)[files->size()-1]->largest, - f->smallest) < 0); - } - f->refs++; - files->push_back(f); - } - } -}; - -VersionSet::VersionSet(const std::string& dbname, - const Options* options, - TableCache* table_cache, - const InternalKeyComparator* cmp) - : env_(options->env), - dbname_(dbname), - options_(options), - table_cache_(table_cache), - icmp_(*cmp), - next_file_number_(2), - manifest_file_number_(0), // Filled by Recover() - last_sequence_(0), - log_number_(0), - prev_log_number_(0), - descriptor_file_(NULL), - descriptor_log_(NULL), - dummy_versions_(this), - current_(NULL) { - AppendVersion(new Version(this)); -} - -VersionSet::~VersionSet() { - current_->Unref(); - assert(dummy_versions_.next_ == &dummy_versions_); // List must be empty - delete descriptor_log_; - delete descriptor_file_; -} - -void VersionSet::AppendVersion(Version* v) { - // Make "v" current - assert(v->refs_ == 0); - assert(v != current_); - if (current_ != NULL) { - current_->Unref(); - } - current_ = v; - v->Ref(); - - // Append to linked list - v->prev_ = dummy_versions_.prev_; - v->next_ = &dummy_versions_; - v->prev_->next_ = v; - v->next_->prev_ = v; -} - -Status VersionSet::LogAndApply(VersionEdit* edit, port::Mutex* mu) { - if (edit->has_log_number_) { - assert(edit->log_number_ >= log_number_); - assert(edit->log_number_ < next_file_number_); - } else { - edit->SetLogNumber(log_number_); - } - - if (!edit->has_prev_log_number_) { - edit->SetPrevLogNumber(prev_log_number_); - } - - edit->SetNextFile(next_file_number_); - edit->SetLastSequence(last_sequence_); - - Version* v = new Version(this); - { - Builder builder(this, current_); - builder.Apply(edit); - builder.SaveTo(v); - } - Finalize(v); - - // Initialize new descriptor log file if necessary by creating - // a temporary file that contains a snapshot of the current version. - std::string new_manifest_file; - Status s; - if (descriptor_log_ == NULL) { - // No reason to unlock *mu here since we only hit this path in the - // first call to LogAndApply (when opening the database). - assert(descriptor_file_ == NULL); - new_manifest_file = DescriptorFileName(dbname_, manifest_file_number_); - edit->SetNextFile(next_file_number_); - s = env_->NewWritableFile(new_manifest_file, &descriptor_file_); - if (s.ok()) { - descriptor_log_ = new log::Writer(descriptor_file_); - s = WriteSnapshot(descriptor_log_); - } - } - - // Unlock during expensive MANIFEST log write - { - mu->Unlock(); - - // Write new record to MANIFEST log - if (s.ok()) { - std::string record; - edit->EncodeTo(&record); - s = descriptor_log_->AddRecord(record); - if (s.ok()) { - s = descriptor_file_->Sync(); - } - if (!s.ok()) { - Log(options_->info_log, "MANIFEST write: %s\n", s.ToString().c_str()); - } - } - - // If we just created a new descriptor file, install it by writing a - // new CURRENT file that points to it. - if (s.ok() && !new_manifest_file.empty()) { - s = SetCurrentFile(env_, dbname_, manifest_file_number_); - } - - mu->Lock(); - } - - // Install the new version - if (s.ok()) { - AppendVersion(v); - log_number_ = edit->log_number_; - prev_log_number_ = edit->prev_log_number_; - } else { - delete v; - if (!new_manifest_file.empty()) { - delete descriptor_log_; - delete descriptor_file_; - descriptor_log_ = NULL; - descriptor_file_ = NULL; - env_->DeleteFile(new_manifest_file); - } - } - - return s; -} - -Status VersionSet::Recover() { - struct LogReporter : public log::Reader::Reporter { - Status* status; - virtual void Corruption(size_t bytes, const Status& s) { - if (this->status->ok()) *this->status = s; - } - }; - - // Read "CURRENT" file, which contains a pointer to the current manifest file - std::string current; - Status s = ReadFileToString(env_, CurrentFileName(dbname_), ¤t); - if (!s.ok()) { - return s; - } - if (current.empty() || current[current.size()-1] != '\n') { - return Status::Corruption("CURRENT file does not end with newline"); - } - current.resize(current.size() - 1); - - std::string dscname = dbname_ + "/" + current; - SequentialFile* file; - s = env_->NewSequentialFile(dscname, &file); - if (!s.ok()) { - return s; - } - - bool have_log_number = false; - bool have_prev_log_number = false; - bool have_next_file = false; - bool have_last_sequence = false; - uint64_t next_file = 0; - uint64_t last_sequence = 0; - uint64_t log_number = 0; - uint64_t prev_log_number = 0; - Builder builder(this, current_); - - { - LogReporter reporter; - reporter.status = &s; - log::Reader reader(file, &reporter, true/*checksum*/, 0/*initial_offset*/); - Slice record; - std::string scratch; - while (reader.ReadRecord(&record, &scratch) && s.ok()) { - VersionEdit edit; - s = edit.DecodeFrom(record); - if (s.ok()) { - if (edit.has_comparator_ && - edit.comparator_ != icmp_.user_comparator()->Name()) { - s = Status::InvalidArgument( - edit.comparator_ + " does not match existing comparator ", - icmp_.user_comparator()->Name()); - } - } - - if (s.ok()) { - builder.Apply(&edit); - } - - if (edit.has_log_number_) { - log_number = edit.log_number_; - have_log_number = true; - } - - if (edit.has_prev_log_number_) { - prev_log_number = edit.prev_log_number_; - have_prev_log_number = true; - } - - if (edit.has_next_file_number_) { - next_file = edit.next_file_number_; - have_next_file = true; - } - - if (edit.has_last_sequence_) { - last_sequence = edit.last_sequence_; - have_last_sequence = true; - } - } - } - delete file; - file = NULL; - - if (s.ok()) { - if (!have_next_file) { - s = Status::Corruption("no meta-nextfile entry in descriptor"); - } else if (!have_log_number) { - s = Status::Corruption("no meta-lognumber entry in descriptor"); - } else if (!have_last_sequence) { - s = Status::Corruption("no last-sequence-number entry in descriptor"); - } - - if (!have_prev_log_number) { - prev_log_number = 0; - } - - MarkFileNumberUsed(prev_log_number); - MarkFileNumberUsed(log_number); - } - - if (s.ok()) { - Version* v = new Version(this); - builder.SaveTo(v); - // Install recovered version - Finalize(v); - AppendVersion(v); - manifest_file_number_ = next_file; - next_file_number_ = next_file + 1; - last_sequence_ = last_sequence; - log_number_ = log_number; - prev_log_number_ = prev_log_number; - } - - return s; -} - -void VersionSet::MarkFileNumberUsed(uint64_t number) { - if (next_file_number_ <= number) { - next_file_number_ = number + 1; - } -} - -void VersionSet::Finalize(Version* v) { - // Precomputed best level for next compaction - int best_level = -1; - double best_score = -1; - - for (int level = 0; level < config::kNumLevels-1; level++) { - double score; - if (level == 0) { - // We treat level-0 specially by bounding the number of files - // instead of number of bytes for two reasons: - // - // (1) With larger write-buffer sizes, it is nice not to do too - // many level-0 compactions. - // - // (2) The files in level-0 are merged on every read and - // therefore we wish to avoid too many files when the individual - // file size is small (perhaps because of a small write-buffer - // setting, or very high compression ratios, or lots of - // overwrites/deletions). - score = v->files_[level].size() / - static_cast(config::kL0_CompactionTrigger); - } else { - // Compute the ratio of current size to size limit. - const uint64_t level_bytes = TotalFileSize(v->files_[level]); - score = static_cast(level_bytes) / MaxBytesForLevel(level); - } - - if (score > best_score) { - best_level = level; - best_score = score; - } - } - - v->compaction_level_ = best_level; - v->compaction_score_ = best_score; -} - -Status VersionSet::WriteSnapshot(log::Writer* log) { - // TODO: Break up into multiple records to reduce memory usage on recovery? - - // Save metadata - VersionEdit edit; - edit.SetComparatorName(icmp_.user_comparator()->Name()); - - // Save compaction pointers - for (int level = 0; level < config::kNumLevels; level++) { - if (!compact_pointer_[level].empty()) { - InternalKey key; - key.DecodeFrom(compact_pointer_[level]); - edit.SetCompactPointer(level, key); - } - } - - // Save files - for (int level = 0; level < config::kNumLevels; level++) { - const std::vector& files = current_->files_[level]; - for (size_t i = 0; i < files.size(); i++) { - const FileMetaData* f = files[i]; - edit.AddFile(level, f->number, f->file_size, f->smallest, f->largest); - } - } - - std::string record; - edit.EncodeTo(&record); - return log->AddRecord(record); -} - -int VersionSet::NumLevelFiles(int level) const { - assert(level >= 0); - assert(level < config::kNumLevels); - return current_->files_[level].size(); -} - -const char* VersionSet::LevelSummary(LevelSummaryStorage* scratch) const { - // Update code if kNumLevels changes - assert(config::kNumLevels == 7); - snprintf(scratch->buffer, sizeof(scratch->buffer), - "files[ %d %d %d %d %d %d %d ]", - int(current_->files_[0].size()), - int(current_->files_[1].size()), - int(current_->files_[2].size()), - int(current_->files_[3].size()), - int(current_->files_[4].size()), - int(current_->files_[5].size()), - int(current_->files_[6].size())); - return scratch->buffer; -} - -uint64_t VersionSet::ApproximateOffsetOf(Version* v, const InternalKey& ikey) { - uint64_t result = 0; - for (int level = 0; level < config::kNumLevels; level++) { - const std::vector& files = v->files_[level]; - for (size_t i = 0; i < files.size(); i++) { - if (icmp_.Compare(files[i]->largest, ikey) <= 0) { - // Entire file is before "ikey", so just add the file size - result += files[i]->file_size; - } else if (icmp_.Compare(files[i]->smallest, ikey) > 0) { - // Entire file is after "ikey", so ignore - if (level > 0) { - // Files other than level 0 are sorted by meta->smallest, so - // no further files in this level will contain data for - // "ikey". - break; - } - } else { - // "ikey" falls in the range for this table. Add the - // approximate offset of "ikey" within the table. - Table* tableptr; - Iterator* iter = table_cache_->NewIterator( - ReadOptions(), files[i]->number, files[i]->file_size, &tableptr); - if (tableptr != NULL) { - result += tableptr->ApproximateOffsetOf(ikey.Encode()); - } - delete iter; - } - } - } - return result; -} - -void VersionSet::AddLiveFiles(std::set* live) { - for (Version* v = dummy_versions_.next_; - v != &dummy_versions_; - v = v->next_) { - for (int level = 0; level < config::kNumLevels; level++) { - const std::vector& files = v->files_[level]; - for (size_t i = 0; i < files.size(); i++) { - live->insert(files[i]->number); - } - } - } -} - -int64_t VersionSet::NumLevelBytes(int level) const { - assert(level >= 0); - assert(level < config::kNumLevels); - return TotalFileSize(current_->files_[level]); -} - -int64_t VersionSet::MaxNextLevelOverlappingBytes() { - int64_t result = 0; - std::vector overlaps; - for (int level = 1; level < config::kNumLevels - 1; level++) { - for (size_t i = 0; i < current_->files_[level].size(); i++) { - const FileMetaData* f = current_->files_[level][i]; - current_->GetOverlappingInputs(level+1, &f->smallest, &f->largest, - &overlaps); - const int64_t sum = TotalFileSize(overlaps); - if (sum > result) { - result = sum; - } - } - } - return result; -} - -// Stores the minimal range that covers all entries in inputs in -// *smallest, *largest. -// REQUIRES: inputs is not empty -void VersionSet::GetRange(const std::vector& inputs, - InternalKey* smallest, - InternalKey* largest) { - assert(!inputs.empty()); - smallest->Clear(); - largest->Clear(); - for (size_t i = 0; i < inputs.size(); i++) { - FileMetaData* f = inputs[i]; - if (i == 0) { - *smallest = f->smallest; - *largest = f->largest; - } else { - if (icmp_.Compare(f->smallest, *smallest) < 0) { - *smallest = f->smallest; - } - if (icmp_.Compare(f->largest, *largest) > 0) { - *largest = f->largest; - } - } - } -} - -// Stores the minimal range that covers all entries in inputs1 and inputs2 -// in *smallest, *largest. -// REQUIRES: inputs is not empty -void VersionSet::GetRange2(const std::vector& inputs1, - const std::vector& inputs2, - InternalKey* smallest, - InternalKey* largest) { - std::vector all = inputs1; - all.insert(all.end(), inputs2.begin(), inputs2.end()); - GetRange(all, smallest, largest); -} - -Iterator* VersionSet::MakeInputIterator(Compaction* c) { - ReadOptions options; - options.verify_checksums = options_->paranoid_checks; - options.fill_cache = false; - - // Level-0 files have to be merged together. For other levels, - // we will make a concatenating iterator per level. - // TODO(opt): use concatenating iterator for level-0 if there is no overlap - const int space = (c->level() == 0 ? c->inputs_[0].size() + 1 : 2); - Iterator** list = new Iterator*[space]; - int num = 0; - for (int which = 0; which < 2; which++) { - if (!c->inputs_[which].empty()) { - if (c->level() + which == 0) { - const std::vector& files = c->inputs_[which]; - for (size_t i = 0; i < files.size(); i++) { - list[num++] = table_cache_->NewIterator( - options, files[i]->number, files[i]->file_size); - } - } else { - // Create concatenating iterator for the files from this level - list[num++] = NewTwoLevelIterator( - new Version::LevelFileNumIterator(icmp_, &c->inputs_[which]), - &GetFileIterator, table_cache_, options); - } - } - } - assert(num <= space); - Iterator* result = NewMergingIterator(&icmp_, list, num); - delete[] list; - return result; -} - -Compaction* VersionSet::PickCompaction() { - Compaction* c; - int level; - - // We prefer compactions triggered by too much data in a level over - // the compactions triggered by seeks. - const bool size_compaction = (current_->compaction_score_ >= 1); - const bool seek_compaction = (current_->file_to_compact_ != NULL); - if (size_compaction) { - level = current_->compaction_level_; - assert(level >= 0); - assert(level+1 < config::kNumLevels); - c = new Compaction(level); - - // Pick the first file that comes after compact_pointer_[level] - for (size_t i = 0; i < current_->files_[level].size(); i++) { - FileMetaData* f = current_->files_[level][i]; - if (compact_pointer_[level].empty() || - icmp_.Compare(f->largest.Encode(), compact_pointer_[level]) > 0) { - c->inputs_[0].push_back(f); - break; - } - } - if (c->inputs_[0].empty()) { - // Wrap-around to the beginning of the key space - c->inputs_[0].push_back(current_->files_[level][0]); - } - } else if (seek_compaction) { - level = current_->file_to_compact_level_; - c = new Compaction(level); - c->inputs_[0].push_back(current_->file_to_compact_); - } else { - return NULL; - } - - c->input_version_ = current_; - c->input_version_->Ref(); - - // Files in level 0 may overlap each other, so pick up all overlapping ones - if (level == 0) { - InternalKey smallest, largest; - GetRange(c->inputs_[0], &smallest, &largest); - // Note that the next call will discard the file we placed in - // c->inputs_[0] earlier and replace it with an overlapping set - // which will include the picked file. - current_->GetOverlappingInputs(0, &smallest, &largest, &c->inputs_[0]); - assert(!c->inputs_[0].empty()); - } - - SetupOtherInputs(c); - - return c; -} - -void VersionSet::SetupOtherInputs(Compaction* c) { - const int level = c->level(); - InternalKey smallest, largest; - GetRange(c->inputs_[0], &smallest, &largest); - - current_->GetOverlappingInputs(level+1, &smallest, &largest, &c->inputs_[1]); - - // Get entire range covered by compaction - InternalKey all_start, all_limit; - GetRange2(c->inputs_[0], c->inputs_[1], &all_start, &all_limit); - - // See if we can grow the number of inputs in "level" without - // changing the number of "level+1" files we pick up. - if (!c->inputs_[1].empty()) { - std::vector expanded0; - current_->GetOverlappingInputs(level, &all_start, &all_limit, &expanded0); - const int64_t inputs0_size = TotalFileSize(c->inputs_[0]); - const int64_t inputs1_size = TotalFileSize(c->inputs_[1]); - const int64_t expanded0_size = TotalFileSize(expanded0); - if (expanded0.size() > c->inputs_[0].size() && - inputs1_size + expanded0_size < kExpandedCompactionByteSizeLimit) { - InternalKey new_start, new_limit; - GetRange(expanded0, &new_start, &new_limit); - std::vector expanded1; - current_->GetOverlappingInputs(level+1, &new_start, &new_limit, - &expanded1); - if (expanded1.size() == c->inputs_[1].size()) { - Log(options_->info_log, - "Expanding@%d %d+%d (%ld+%ld bytes) to %d+%d (%ld+%ld bytes)\n", - level, - int(c->inputs_[0].size()), - int(c->inputs_[1].size()), - long(inputs0_size), long(inputs1_size), - int(expanded0.size()), - int(expanded1.size()), - long(expanded0_size), long(inputs1_size)); - smallest = new_start; - largest = new_limit; - c->inputs_[0] = expanded0; - c->inputs_[1] = expanded1; - GetRange2(c->inputs_[0], c->inputs_[1], &all_start, &all_limit); - } - } - } - - // Compute the set of grandparent files that overlap this compaction - // (parent == level+1; grandparent == level+2) - if (level + 2 < config::kNumLevels) { - current_->GetOverlappingInputs(level + 2, &all_start, &all_limit, - &c->grandparents_); - } - - if (false) { - Log(options_->info_log, "Compacting %d '%s' .. '%s'", - level, - smallest.DebugString().c_str(), - largest.DebugString().c_str()); - } - - // Update the place where we will do the next compaction for this level. - // We update this immediately instead of waiting for the VersionEdit - // to be applied so that if the compaction fails, we will try a different - // key range next time. - compact_pointer_[level] = largest.Encode().ToString(); - c->edit_.SetCompactPointer(level, largest); -} - -Compaction* VersionSet::CompactRange( - int level, - const InternalKey* begin, - const InternalKey* end) { - std::vector inputs; - current_->GetOverlappingInputs(level, begin, end, &inputs); - if (inputs.empty()) { - return NULL; - } - - // Avoid compacting too much in one shot in case the range is large. - // But we cannot do this for level-0 since level-0 files can overlap - // and we must not pick one file and drop another older file if the - // two files overlap. - if (level > 0) { - const uint64_t limit = MaxFileSizeForLevel(level); - uint64_t total = 0; - for (size_t i = 0; i < inputs.size(); i++) { - uint64_t s = inputs[i]->file_size; - total += s; - if (total >= limit) { - inputs.resize(i + 1); - break; - } - } - } - - Compaction* c = new Compaction(level); - c->input_version_ = current_; - c->input_version_->Ref(); - c->inputs_[0] = inputs; - SetupOtherInputs(c); - return c; -} - -Compaction::Compaction(int level) - : level_(level), - max_output_file_size_(MaxFileSizeForLevel(level)), - input_version_(NULL), - grandparent_index_(0), - seen_key_(false), - overlapped_bytes_(0) { - for (int i = 0; i < config::kNumLevels; i++) { - level_ptrs_[i] = 0; - } -} - -Compaction::~Compaction() { - if (input_version_ != NULL) { - input_version_->Unref(); - } -} - -bool Compaction::IsTrivialMove() const { - // Avoid a move if there is lots of overlapping grandparent data. - // Otherwise, the move could create a parent file that will require - // a very expensive merge later on. - return (num_input_files(0) == 1 && - num_input_files(1) == 0 && - TotalFileSize(grandparents_) <= kMaxGrandParentOverlapBytes); -} - -void Compaction::AddInputDeletions(VersionEdit* edit) { - for (int which = 0; which < 2; which++) { - for (size_t i = 0; i < inputs_[which].size(); i++) { - edit->DeleteFile(level_ + which, inputs_[which][i]->number); - } - } -} - -bool Compaction::IsBaseLevelForKey(const Slice& user_key) { - // Maybe use binary search to find right entry instead of linear search? - const Comparator* user_cmp = input_version_->vset_->icmp_.user_comparator(); - for (int lvl = level_ + 2; lvl < config::kNumLevels; lvl++) { - const std::vector& files = input_version_->files_[lvl]; - for (; level_ptrs_[lvl] < files.size(); ) { - FileMetaData* f = files[level_ptrs_[lvl]]; - if (user_cmp->Compare(user_key, f->largest.user_key()) <= 0) { - // We've advanced far enough - if (user_cmp->Compare(user_key, f->smallest.user_key()) >= 0) { - // Key falls in this file's range, so definitely not base level - return false; - } - break; - } - level_ptrs_[lvl]++; - } - } - return true; -} - -bool Compaction::ShouldStopBefore(const Slice& internal_key) { - // Scan to find earliest grandparent file that contains key. - const InternalKeyComparator* icmp = &input_version_->vset_->icmp_; - while (grandparent_index_ < grandparents_.size() && - icmp->Compare(internal_key, - grandparents_[grandparent_index_]->largest.Encode()) > 0) { - if (seen_key_) { - overlapped_bytes_ += grandparents_[grandparent_index_]->file_size; - } - grandparent_index_++; - } - seen_key_ = true; - - if (overlapped_bytes_ > kMaxGrandParentOverlapBytes) { - // Too much overlap for current output; start new output - overlapped_bytes_ = 0; - return true; - } else { - return false; - } -} - -void Compaction::ReleaseInputs() { - if (input_version_ != NULL) { - input_version_->Unref(); - input_version_ = NULL; - } -} - -} // namespace leveldb diff --git a/src/leveldb/db/version_set.h b/src/leveldb/db/version_set.h deleted file mode 100644 index 8dc14b8e01..0000000000 --- a/src/leveldb/db/version_set.h +++ /dev/null @@ -1,396 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// The representation of a DBImpl consists of a set of Versions. The -// newest version is called "current". Older versions may be kept -// around to provide a consistent view to live iterators. -// -// Each Version keeps track of a set of Table files per level. The -// entire set of versions is maintained in a VersionSet. -// -// Version,VersionSet are thread-compatible, but require external -// synchronization on all accesses. - -#ifndef STORAGE_LEVELDB_DB_VERSION_SET_H_ -#define STORAGE_LEVELDB_DB_VERSION_SET_H_ - -#include -#include -#include -#include "db/dbformat.h" -#include "db/version_edit.h" -#include "port/port.h" -#include "port/thread_annotations.h" - -namespace leveldb { - -namespace log { class Writer; } - -class Compaction; -class Iterator; -class MemTable; -class TableBuilder; -class TableCache; -class Version; -class VersionSet; -class WritableFile; - -// Return the smallest index i such that files[i]->largest >= key. -// Return files.size() if there is no such file. -// REQUIRES: "files" contains a sorted list of non-overlapping files. -extern int FindFile(const InternalKeyComparator& icmp, - const std::vector& files, - const Slice& key); - -// Returns true iff some file in "files" overlaps the user key range -// [*smallest,*largest]. -// smallest==NULL represents a key smaller than all keys in the DB. -// largest==NULL represents a key largest than all keys in the DB. -// REQUIRES: If disjoint_sorted_files, files[] contains disjoint ranges -// in sorted order. -extern bool SomeFileOverlapsRange( - const InternalKeyComparator& icmp, - bool disjoint_sorted_files, - const std::vector& files, - const Slice* smallest_user_key, - const Slice* largest_user_key); - -class Version { - public: - // Append to *iters a sequence of iterators that will - // yield the contents of this Version when merged together. - // REQUIRES: This version has been saved (see VersionSet::SaveTo) - void AddIterators(const ReadOptions&, std::vector* iters); - - // Lookup the value for key. If found, store it in *val and - // return OK. Else return a non-OK status. Fills *stats. - // REQUIRES: lock is not held - struct GetStats { - FileMetaData* seek_file; - int seek_file_level; - }; - Status Get(const ReadOptions&, const LookupKey& key, std::string* val, - GetStats* stats); - - // Adds "stats" into the current state. Returns true if a new - // compaction may need to be triggered, false otherwise. - // REQUIRES: lock is held - bool UpdateStats(const GetStats& stats); - - // Record a sample of bytes read at the specified internal key. - // Samples are taken approximately once every config::kReadBytesPeriod - // bytes. Returns true if a new compaction may need to be triggered. - // REQUIRES: lock is held - bool RecordReadSample(Slice key); - - // Reference count management (so Versions do not disappear out from - // under live iterators) - void Ref(); - void Unref(); - - void GetOverlappingInputs( - int level, - const InternalKey* begin, // NULL means before all keys - const InternalKey* end, // NULL means after all keys - std::vector* inputs); - - // Returns true iff some file in the specified level overlaps - // some part of [*smallest_user_key,*largest_user_key]. - // smallest_user_key==NULL represents a key smaller than all keys in the DB. - // largest_user_key==NULL represents a key largest than all keys in the DB. - bool OverlapInLevel(int level, - const Slice* smallest_user_key, - const Slice* largest_user_key); - - // Return the level at which we should place a new memtable compaction - // result that covers the range [smallest_user_key,largest_user_key]. - int PickLevelForMemTableOutput(const Slice& smallest_user_key, - const Slice& largest_user_key); - - int NumFiles(int level) const { return files_[level].size(); } - - // Return a human readable string that describes this version's contents. - std::string DebugString() const; - - private: - friend class Compaction; - friend class VersionSet; - - class LevelFileNumIterator; - Iterator* NewConcatenatingIterator(const ReadOptions&, int level) const; - - // Call func(arg, level, f) for every file that overlaps user_key in - // order from newest to oldest. If an invocation of func returns - // false, makes no more calls. - // - // REQUIRES: user portion of internal_key == user_key. - void ForEachOverlapping(Slice user_key, Slice internal_key, - void* arg, - bool (*func)(void*, int, FileMetaData*)); - - VersionSet* vset_; // VersionSet to which this Version belongs - Version* next_; // Next version in linked list - Version* prev_; // Previous version in linked list - int refs_; // Number of live refs to this version - - // List of files per level - std::vector files_[config::kNumLevels]; - - // Next file to compact based on seek stats. - FileMetaData* file_to_compact_; - int file_to_compact_level_; - - // Level that should be compacted next and its compaction score. - // Score < 1 means compaction is not strictly needed. These fields - // are initialized by Finalize(). - double compaction_score_; - int compaction_level_; - - explicit Version(VersionSet* vset) - : vset_(vset), next_(this), prev_(this), refs_(0), - file_to_compact_(NULL), - file_to_compact_level_(-1), - compaction_score_(-1), - compaction_level_(-1) { - } - - ~Version(); - - // No copying allowed - Version(const Version&); - void operator=(const Version&); -}; - -class VersionSet { - public: - VersionSet(const std::string& dbname, - const Options* options, - TableCache* table_cache, - const InternalKeyComparator*); - ~VersionSet(); - - // Apply *edit to the current version to form a new descriptor that - // is both saved to persistent state and installed as the new - // current version. Will release *mu while actually writing to the file. - // REQUIRES: *mu is held on entry. - // REQUIRES: no other thread concurrently calls LogAndApply() - Status LogAndApply(VersionEdit* edit, port::Mutex* mu) - EXCLUSIVE_LOCKS_REQUIRED(mu); - - // Recover the last saved descriptor from persistent storage. - Status Recover(); - - // Return the current version. - Version* current() const { return current_; } - - // Return the current manifest file number - uint64_t ManifestFileNumber() const { return manifest_file_number_; } - - // Allocate and return a new file number - uint64_t NewFileNumber() { return next_file_number_++; } - - // Arrange to reuse "file_number" unless a newer file number has - // already been allocated. - // REQUIRES: "file_number" was returned by a call to NewFileNumber(). - void ReuseFileNumber(uint64_t file_number) { - if (next_file_number_ == file_number + 1) { - next_file_number_ = file_number; - } - } - - // Return the number of Table files at the specified level. - int NumLevelFiles(int level) const; - - // Return the combined file size of all files at the specified level. - int64_t NumLevelBytes(int level) const; - - // Return the last sequence number. - uint64_t LastSequence() const { return last_sequence_; } - - // Set the last sequence number to s. - void SetLastSequence(uint64_t s) { - assert(s >= last_sequence_); - last_sequence_ = s; - } - - // Mark the specified file number as used. - void MarkFileNumberUsed(uint64_t number); - - // Return the current log file number. - uint64_t LogNumber() const { return log_number_; } - - // Return the log file number for the log file that is currently - // being compacted, or zero if there is no such log file. - uint64_t PrevLogNumber() const { return prev_log_number_; } - - // Pick level and inputs for a new compaction. - // Returns NULL if there is no compaction to be done. - // Otherwise returns a pointer to a heap-allocated object that - // describes the compaction. Caller should delete the result. - Compaction* PickCompaction(); - - // Return a compaction object for compacting the range [begin,end] in - // the specified level. Returns NULL if there is nothing in that - // level that overlaps the specified range. Caller should delete - // the result. - Compaction* CompactRange( - int level, - const InternalKey* begin, - const InternalKey* end); - - // Return the maximum overlapping data (in bytes) at next level for any - // file at a level >= 1. - int64_t MaxNextLevelOverlappingBytes(); - - // Create an iterator that reads over the compaction inputs for "*c". - // The caller should delete the iterator when no longer needed. - Iterator* MakeInputIterator(Compaction* c); - - // Returns true iff some level needs a compaction. - bool NeedsCompaction() const { - Version* v = current_; - return (v->compaction_score_ >= 1) || (v->file_to_compact_ != NULL); - } - - // Add all files listed in any live version to *live. - // May also mutate some internal state. - void AddLiveFiles(std::set* live); - - // Return the approximate offset in the database of the data for - // "key" as of version "v". - uint64_t ApproximateOffsetOf(Version* v, const InternalKey& key); - - // Return a human-readable short (single-line) summary of the number - // of files per level. Uses *scratch as backing store. - struct LevelSummaryStorage { - char buffer[100]; - }; - const char* LevelSummary(LevelSummaryStorage* scratch) const; - - private: - class Builder; - - friend class Compaction; - friend class Version; - - void Finalize(Version* v); - - void GetRange(const std::vector& inputs, - InternalKey* smallest, - InternalKey* largest); - - void GetRange2(const std::vector& inputs1, - const std::vector& inputs2, - InternalKey* smallest, - InternalKey* largest); - - void SetupOtherInputs(Compaction* c); - - // Save current contents to *log - Status WriteSnapshot(log::Writer* log); - - void AppendVersion(Version* v); - - Env* const env_; - const std::string dbname_; - const Options* const options_; - TableCache* const table_cache_; - const InternalKeyComparator icmp_; - uint64_t next_file_number_; - uint64_t manifest_file_number_; - uint64_t last_sequence_; - uint64_t log_number_; - uint64_t prev_log_number_; // 0 or backing store for memtable being compacted - - // Opened lazily - WritableFile* descriptor_file_; - log::Writer* descriptor_log_; - Version dummy_versions_; // Head of circular doubly-linked list of versions. - Version* current_; // == dummy_versions_.prev_ - - // Per-level key at which the next compaction at that level should start. - // Either an empty string, or a valid InternalKey. - std::string compact_pointer_[config::kNumLevels]; - - // No copying allowed - VersionSet(const VersionSet&); - void operator=(const VersionSet&); -}; - -// A Compaction encapsulates information about a compaction. -class Compaction { - public: - ~Compaction(); - - // Return the level that is being compacted. Inputs from "level" - // and "level+1" will be merged to produce a set of "level+1" files. - int level() const { return level_; } - - // Return the object that holds the edits to the descriptor done - // by this compaction. - VersionEdit* edit() { return &edit_; } - - // "which" must be either 0 or 1 - int num_input_files(int which) const { return inputs_[which].size(); } - - // Return the ith input file at "level()+which" ("which" must be 0 or 1). - FileMetaData* input(int which, int i) const { return inputs_[which][i]; } - - // Maximum size of files to build during this compaction. - uint64_t MaxOutputFileSize() const { return max_output_file_size_; } - - // Is this a trivial compaction that can be implemented by just - // moving a single input file to the next level (no merging or splitting) - bool IsTrivialMove() const; - - // Add all inputs to this compaction as delete operations to *edit. - void AddInputDeletions(VersionEdit* edit); - - // Returns true if the information we have available guarantees that - // the compaction is producing data in "level+1" for which no data exists - // in levels greater than "level+1". - bool IsBaseLevelForKey(const Slice& user_key); - - // Returns true iff we should stop building the current output - // before processing "internal_key". - bool ShouldStopBefore(const Slice& internal_key); - - // Release the input version for the compaction, once the compaction - // is successful. - void ReleaseInputs(); - - private: - friend class Version; - friend class VersionSet; - - explicit Compaction(int level); - - int level_; - uint64_t max_output_file_size_; - Version* input_version_; - VersionEdit edit_; - - // Each compaction reads inputs from "level_" and "level_+1" - std::vector inputs_[2]; // The two sets of inputs - - // State used to check for number of of overlapping grandparent files - // (parent == level_ + 1, grandparent == level_ + 2) - std::vector grandparents_; - size_t grandparent_index_; // Index in grandparent_starts_ - bool seen_key_; // Some output key has been seen - int64_t overlapped_bytes_; // Bytes of overlap between current output - // and grandparent files - - // State for implementing IsBaseLevelForKey - - // level_ptrs_ holds indices into input_version_->levels_: our state - // is that we are positioned at one of the file ranges for each - // higher level than the ones involved in this compaction (i.e. for - // all L >= level_ + 2). - size_t level_ptrs_[config::kNumLevels]; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_VERSION_SET_H_ diff --git a/src/leveldb/db/version_set_test.cc b/src/leveldb/db/version_set_test.cc deleted file mode 100644 index 501e34d133..0000000000 --- a/src/leveldb/db/version_set_test.cc +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/version_set.h" -#include "util/logging.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -class FindFileTest { - public: - std::vector files_; - bool disjoint_sorted_files_; - - FindFileTest() : disjoint_sorted_files_(true) { } - - ~FindFileTest() { - for (int i = 0; i < files_.size(); i++) { - delete files_[i]; - } - } - - void Add(const char* smallest, const char* largest, - SequenceNumber smallest_seq = 100, - SequenceNumber largest_seq = 100) { - FileMetaData* f = new FileMetaData; - f->number = files_.size() + 1; - f->smallest = InternalKey(smallest, smallest_seq, kTypeValue); - f->largest = InternalKey(largest, largest_seq, kTypeValue); - files_.push_back(f); - } - - int Find(const char* key) { - InternalKey target(key, 100, kTypeValue); - InternalKeyComparator cmp(BytewiseComparator()); - return FindFile(cmp, files_, target.Encode()); - } - - bool Overlaps(const char* smallest, const char* largest) { - InternalKeyComparator cmp(BytewiseComparator()); - Slice s(smallest != NULL ? smallest : ""); - Slice l(largest != NULL ? largest : ""); - return SomeFileOverlapsRange(cmp, disjoint_sorted_files_, files_, - (smallest != NULL ? &s : NULL), - (largest != NULL ? &l : NULL)); - } -}; - -TEST(FindFileTest, Empty) { - ASSERT_EQ(0, Find("foo")); - ASSERT_TRUE(! Overlaps("a", "z")); - ASSERT_TRUE(! Overlaps(NULL, "z")); - ASSERT_TRUE(! Overlaps("a", NULL)); - ASSERT_TRUE(! Overlaps(NULL, NULL)); -} - -TEST(FindFileTest, Single) { - Add("p", "q"); - ASSERT_EQ(0, Find("a")); - ASSERT_EQ(0, Find("p")); - ASSERT_EQ(0, Find("p1")); - ASSERT_EQ(0, Find("q")); - ASSERT_EQ(1, Find("q1")); - ASSERT_EQ(1, Find("z")); - - ASSERT_TRUE(! Overlaps("a", "b")); - ASSERT_TRUE(! Overlaps("z1", "z2")); - ASSERT_TRUE(Overlaps("a", "p")); - ASSERT_TRUE(Overlaps("a", "q")); - ASSERT_TRUE(Overlaps("a", "z")); - ASSERT_TRUE(Overlaps("p", "p1")); - ASSERT_TRUE(Overlaps("p", "q")); - ASSERT_TRUE(Overlaps("p", "z")); - ASSERT_TRUE(Overlaps("p1", "p2")); - ASSERT_TRUE(Overlaps("p1", "z")); - ASSERT_TRUE(Overlaps("q", "q")); - ASSERT_TRUE(Overlaps("q", "q1")); - - ASSERT_TRUE(! Overlaps(NULL, "j")); - ASSERT_TRUE(! Overlaps("r", NULL)); - ASSERT_TRUE(Overlaps(NULL, "p")); - ASSERT_TRUE(Overlaps(NULL, "p1")); - ASSERT_TRUE(Overlaps("q", NULL)); - ASSERT_TRUE(Overlaps(NULL, NULL)); -} - - -TEST(FindFileTest, Multiple) { - Add("150", "200"); - Add("200", "250"); - Add("300", "350"); - Add("400", "450"); - ASSERT_EQ(0, Find("100")); - ASSERT_EQ(0, Find("150")); - ASSERT_EQ(0, Find("151")); - ASSERT_EQ(0, Find("199")); - ASSERT_EQ(0, Find("200")); - ASSERT_EQ(1, Find("201")); - ASSERT_EQ(1, Find("249")); - ASSERT_EQ(1, Find("250")); - ASSERT_EQ(2, Find("251")); - ASSERT_EQ(2, Find("299")); - ASSERT_EQ(2, Find("300")); - ASSERT_EQ(2, Find("349")); - ASSERT_EQ(2, Find("350")); - ASSERT_EQ(3, Find("351")); - ASSERT_EQ(3, Find("400")); - ASSERT_EQ(3, Find("450")); - ASSERT_EQ(4, Find("451")); - - ASSERT_TRUE(! Overlaps("100", "149")); - ASSERT_TRUE(! Overlaps("251", "299")); - ASSERT_TRUE(! Overlaps("451", "500")); - ASSERT_TRUE(! Overlaps("351", "399")); - - ASSERT_TRUE(Overlaps("100", "150")); - ASSERT_TRUE(Overlaps("100", "200")); - ASSERT_TRUE(Overlaps("100", "300")); - ASSERT_TRUE(Overlaps("100", "400")); - ASSERT_TRUE(Overlaps("100", "500")); - ASSERT_TRUE(Overlaps("375", "400")); - ASSERT_TRUE(Overlaps("450", "450")); - ASSERT_TRUE(Overlaps("450", "500")); -} - -TEST(FindFileTest, MultipleNullBoundaries) { - Add("150", "200"); - Add("200", "250"); - Add("300", "350"); - Add("400", "450"); - ASSERT_TRUE(! Overlaps(NULL, "149")); - ASSERT_TRUE(! Overlaps("451", NULL)); - ASSERT_TRUE(Overlaps(NULL, NULL)); - ASSERT_TRUE(Overlaps(NULL, "150")); - ASSERT_TRUE(Overlaps(NULL, "199")); - ASSERT_TRUE(Overlaps(NULL, "200")); - ASSERT_TRUE(Overlaps(NULL, "201")); - ASSERT_TRUE(Overlaps(NULL, "400")); - ASSERT_TRUE(Overlaps(NULL, "800")); - ASSERT_TRUE(Overlaps("100", NULL)); - ASSERT_TRUE(Overlaps("200", NULL)); - ASSERT_TRUE(Overlaps("449", NULL)); - ASSERT_TRUE(Overlaps("450", NULL)); -} - -TEST(FindFileTest, OverlapSequenceChecks) { - Add("200", "200", 5000, 3000); - ASSERT_TRUE(! Overlaps("199", "199")); - ASSERT_TRUE(! Overlaps("201", "300")); - ASSERT_TRUE(Overlaps("200", "200")); - ASSERT_TRUE(Overlaps("190", "200")); - ASSERT_TRUE(Overlaps("200", "210")); -} - -TEST(FindFileTest, OverlappingFiles) { - Add("150", "600"); - Add("400", "500"); - disjoint_sorted_files_ = false; - ASSERT_TRUE(! Overlaps("100", "149")); - ASSERT_TRUE(! Overlaps("601", "700")); - ASSERT_TRUE(Overlaps("100", "150")); - ASSERT_TRUE(Overlaps("100", "200")); - ASSERT_TRUE(Overlaps("100", "300")); - ASSERT_TRUE(Overlaps("100", "400")); - ASSERT_TRUE(Overlaps("100", "500")); - ASSERT_TRUE(Overlaps("375", "400")); - ASSERT_TRUE(Overlaps("450", "450")); - ASSERT_TRUE(Overlaps("450", "500")); - ASSERT_TRUE(Overlaps("450", "700")); - ASSERT_TRUE(Overlaps("600", "700")); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/db/write_batch.cc b/src/leveldb/db/write_batch.cc deleted file mode 100644 index 33f4a4257e..0000000000 --- a/src/leveldb/db/write_batch.cc +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// WriteBatch::rep_ := -// sequence: fixed64 -// count: fixed32 -// data: record[count] -// record := -// kTypeValue varstring varstring | -// kTypeDeletion varstring -// varstring := -// len: varint32 -// data: uint8[len] - -#include "leveldb/write_batch.h" - -#include "leveldb/db.h" -#include "db/dbformat.h" -#include "db/memtable.h" -#include "db/write_batch_internal.h" -#include "util/coding.h" - -namespace leveldb { - -// WriteBatch header has an 8-byte sequence number followed by a 4-byte count. -static const size_t kHeader = 12; - -WriteBatch::WriteBatch() { - Clear(); -} - -WriteBatch::~WriteBatch() { } - -WriteBatch::Handler::~Handler() { } - -void WriteBatch::Clear() { - rep_.clear(); - rep_.resize(kHeader); -} - -Status WriteBatch::Iterate(Handler* handler) const { - Slice input(rep_); - if (input.size() < kHeader) { - return Status::Corruption("malformed WriteBatch (too small)"); - } - - input.remove_prefix(kHeader); - Slice key, value; - int found = 0; - while (!input.empty()) { - found++; - char tag = input[0]; - input.remove_prefix(1); - switch (tag) { - case kTypeValue: - if (GetLengthPrefixedSlice(&input, &key) && - GetLengthPrefixedSlice(&input, &value)) { - handler->Put(key, value); - } else { - return Status::Corruption("bad WriteBatch Put"); - } - break; - case kTypeDeletion: - if (GetLengthPrefixedSlice(&input, &key)) { - handler->Delete(key); - } else { - return Status::Corruption("bad WriteBatch Delete"); - } - break; - default: - return Status::Corruption("unknown WriteBatch tag"); - } - } - if (found != WriteBatchInternal::Count(this)) { - return Status::Corruption("WriteBatch has wrong count"); - } else { - return Status::OK(); - } -} - -int WriteBatchInternal::Count(const WriteBatch* b) { - return DecodeFixed32(b->rep_.data() + 8); -} - -void WriteBatchInternal::SetCount(WriteBatch* b, int n) { - EncodeFixed32(&b->rep_[8], n); -} - -SequenceNumber WriteBatchInternal::Sequence(const WriteBatch* b) { - return SequenceNumber(DecodeFixed64(b->rep_.data())); -} - -void WriteBatchInternal::SetSequence(WriteBatch* b, SequenceNumber seq) { - EncodeFixed64(&b->rep_[0], seq); -} - -void WriteBatch::Put(const Slice& key, const Slice& value) { - WriteBatchInternal::SetCount(this, WriteBatchInternal::Count(this) + 1); - rep_.push_back(static_cast(kTypeValue)); - PutLengthPrefixedSlice(&rep_, key); - PutLengthPrefixedSlice(&rep_, value); -} - -void WriteBatch::Delete(const Slice& key) { - WriteBatchInternal::SetCount(this, WriteBatchInternal::Count(this) + 1); - rep_.push_back(static_cast(kTypeDeletion)); - PutLengthPrefixedSlice(&rep_, key); -} - -namespace { -class MemTableInserter : public WriteBatch::Handler { - public: - SequenceNumber sequence_; - MemTable* mem_; - - virtual void Put(const Slice& key, const Slice& value) { - mem_->Add(sequence_, kTypeValue, key, value); - sequence_++; - } - virtual void Delete(const Slice& key) { - mem_->Add(sequence_, kTypeDeletion, key, Slice()); - sequence_++; - } -}; -} // namespace - -Status WriteBatchInternal::InsertInto(const WriteBatch* b, - MemTable* memtable) { - MemTableInserter inserter; - inserter.sequence_ = WriteBatchInternal::Sequence(b); - inserter.mem_ = memtable; - return b->Iterate(&inserter); -} - -void WriteBatchInternal::SetContents(WriteBatch* b, const Slice& contents) { - assert(contents.size() >= kHeader); - b->rep_.assign(contents.data(), contents.size()); -} - -void WriteBatchInternal::Append(WriteBatch* dst, const WriteBatch* src) { - SetCount(dst, Count(dst) + Count(src)); - assert(src->rep_.size() >= kHeader); - dst->rep_.append(src->rep_.data() + kHeader, src->rep_.size() - kHeader); -} - -} // namespace leveldb diff --git a/src/leveldb/db/write_batch_internal.h b/src/leveldb/db/write_batch_internal.h deleted file mode 100644 index 310a3c8912..0000000000 --- a/src/leveldb/db/write_batch_internal.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_ -#define STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_ - -#include "leveldb/write_batch.h" - -namespace leveldb { - -class MemTable; - -// WriteBatchInternal provides static methods for manipulating a -// WriteBatch that we don't want in the public WriteBatch interface. -class WriteBatchInternal { - public: - // Return the number of entries in the batch. - static int Count(const WriteBatch* batch); - - // Set the count for the number of entries in the batch. - static void SetCount(WriteBatch* batch, int n); - - // Return the sequence number for the start of this batch. - static SequenceNumber Sequence(const WriteBatch* batch); - - // Store the specified number as the sequence number for the start of - // this batch. - static void SetSequence(WriteBatch* batch, SequenceNumber seq); - - static Slice Contents(const WriteBatch* batch) { - return Slice(batch->rep_); - } - - static size_t ByteSize(const WriteBatch* batch) { - return batch->rep_.size(); - } - - static void SetContents(WriteBatch* batch, const Slice& contents); - - static Status InsertInto(const WriteBatch* batch, MemTable* memtable); - - static void Append(WriteBatch* dst, const WriteBatch* src); -}; - -} // namespace leveldb - - -#endif // STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_ diff --git a/src/leveldb/db/write_batch_test.cc b/src/leveldb/db/write_batch_test.cc deleted file mode 100644 index 9064e3d85e..0000000000 --- a/src/leveldb/db/write_batch_test.cc +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/db.h" - -#include "db/memtable.h" -#include "db/write_batch_internal.h" -#include "leveldb/env.h" -#include "util/logging.h" -#include "util/testharness.h" - -namespace leveldb { - -static std::string PrintContents(WriteBatch* b) { - InternalKeyComparator cmp(BytewiseComparator()); - MemTable* mem = new MemTable(cmp); - mem->Ref(); - std::string state; - Status s = WriteBatchInternal::InsertInto(b, mem); - int count = 0; - Iterator* iter = mem->NewIterator(); - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - ParsedInternalKey ikey; - ASSERT_TRUE(ParseInternalKey(iter->key(), &ikey)); - switch (ikey.type) { - case kTypeValue: - state.append("Put("); - state.append(ikey.user_key.ToString()); - state.append(", "); - state.append(iter->value().ToString()); - state.append(")"); - count++; - break; - case kTypeDeletion: - state.append("Delete("); - state.append(ikey.user_key.ToString()); - state.append(")"); - count++; - break; - } - state.append("@"); - state.append(NumberToString(ikey.sequence)); - } - delete iter; - if (!s.ok()) { - state.append("ParseError()"); - } else if (count != WriteBatchInternal::Count(b)) { - state.append("CountMismatch()"); - } - mem->Unref(); - return state; -} - -class WriteBatchTest { }; - -TEST(WriteBatchTest, Empty) { - WriteBatch batch; - ASSERT_EQ("", PrintContents(&batch)); - ASSERT_EQ(0, WriteBatchInternal::Count(&batch)); -} - -TEST(WriteBatchTest, Multiple) { - WriteBatch batch; - batch.Put(Slice("foo"), Slice("bar")); - batch.Delete(Slice("box")); - batch.Put(Slice("baz"), Slice("boo")); - WriteBatchInternal::SetSequence(&batch, 100); - ASSERT_EQ(100, WriteBatchInternal::Sequence(&batch)); - ASSERT_EQ(3, WriteBatchInternal::Count(&batch)); - ASSERT_EQ("Put(baz, boo)@102" - "Delete(box)@101" - "Put(foo, bar)@100", - PrintContents(&batch)); -} - -TEST(WriteBatchTest, Corruption) { - WriteBatch batch; - batch.Put(Slice("foo"), Slice("bar")); - batch.Delete(Slice("box")); - WriteBatchInternal::SetSequence(&batch, 200); - Slice contents = WriteBatchInternal::Contents(&batch); - WriteBatchInternal::SetContents(&batch, - Slice(contents.data(),contents.size()-1)); - ASSERT_EQ("Put(foo, bar)@200" - "ParseError()", - PrintContents(&batch)); -} - -TEST(WriteBatchTest, Append) { - WriteBatch b1, b2; - WriteBatchInternal::SetSequence(&b1, 200); - WriteBatchInternal::SetSequence(&b2, 300); - WriteBatchInternal::Append(&b1, &b2); - ASSERT_EQ("", - PrintContents(&b1)); - b2.Put("a", "va"); - WriteBatchInternal::Append(&b1, &b2); - ASSERT_EQ("Put(a, va)@200", - PrintContents(&b1)); - b2.Clear(); - b2.Put("b", "vb"); - WriteBatchInternal::Append(&b1, &b2); - ASSERT_EQ("Put(a, va)@200" - "Put(b, vb)@201", - PrintContents(&b1)); - b2.Delete("foo"); - WriteBatchInternal::Append(&b1, &b2); - ASSERT_EQ("Put(a, va)@200" - "Put(b, vb)@202" - "Put(b, vb)@201" - "Delete(foo)@203", - PrintContents(&b1)); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/doc/bench/db_bench_sqlite3.cc b/src/leveldb/doc/bench/db_bench_sqlite3.cc deleted file mode 100644 index e63aaa8dcc..0000000000 --- a/src/leveldb/doc/bench/db_bench_sqlite3.cc +++ /dev/null @@ -1,718 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include -#include "util/histogram.h" -#include "util/random.h" -#include "util/testutil.h" - -// Comma-separated list of operations to run in the specified order -// Actual benchmarks: -// -// fillseq -- write N values in sequential key order in async mode -// fillseqsync -- write N/100 values in sequential key order in sync mode -// fillseqbatch -- batch write N values in sequential key order in async mode -// fillrandom -- write N values in random key order in async mode -// fillrandsync -- write N/100 values in random key order in sync mode -// fillrandbatch -- batch write N values in sequential key order in async mode -// overwrite -- overwrite N values in random key order in async mode -// fillrand100K -- write N/1000 100K values in random order in async mode -// fillseq100K -- write N/1000 100K values in sequential order in async mode -// readseq -- read N times sequentially -// readrandom -- read N times in random order -// readrand100K -- read N/1000 100K values in sequential order in async mode -static const char* FLAGS_benchmarks = - "fillseq," - "fillseqsync," - "fillseqbatch," - "fillrandom," - "fillrandsync," - "fillrandbatch," - "overwrite," - "overwritebatch," - "readrandom," - "readseq," - "fillrand100K," - "fillseq100K," - "readseq," - "readrand100K," - ; - -// Number of key/values to place in database -static int FLAGS_num = 1000000; - -// Number of read operations to do. If negative, do FLAGS_num reads. -static int FLAGS_reads = -1; - -// Size of each value -static int FLAGS_value_size = 100; - -// Print histogram of operation timings -static bool FLAGS_histogram = false; - -// Arrange to generate values that shrink to this fraction of -// their original size after compression -static double FLAGS_compression_ratio = 0.5; - -// Page size. Default 1 KB. -static int FLAGS_page_size = 1024; - -// Number of pages. -// Default cache size = FLAGS_page_size * FLAGS_num_pages = 4 MB. -static int FLAGS_num_pages = 4096; - -// If true, do not destroy the existing database. If you set this -// flag and also specify a benchmark that wants a fresh database, that -// benchmark will fail. -static bool FLAGS_use_existing_db = false; - -// If true, we allow batch writes to occur -static bool FLAGS_transaction = true; - -// If true, we enable Write-Ahead Logging -static bool FLAGS_WAL_enabled = true; - -// Use the db with the following name. -static const char* FLAGS_db = NULL; - -inline -static void ExecErrorCheck(int status, char *err_msg) { - if (status != SQLITE_OK) { - fprintf(stderr, "SQL error: %s\n", err_msg); - sqlite3_free(err_msg); - exit(1); - } -} - -inline -static void StepErrorCheck(int status) { - if (status != SQLITE_DONE) { - fprintf(stderr, "SQL step error: status = %d\n", status); - exit(1); - } -} - -inline -static void ErrorCheck(int status) { - if (status != SQLITE_OK) { - fprintf(stderr, "sqlite3 error: status = %d\n", status); - exit(1); - } -} - -inline -static void WalCheckpoint(sqlite3* db_) { - // Flush all writes to disk - if (FLAGS_WAL_enabled) { - sqlite3_wal_checkpoint_v2(db_, NULL, SQLITE_CHECKPOINT_FULL, NULL, NULL); - } -} - -namespace leveldb { - -// Helper for quickly generating random data. -namespace { -class RandomGenerator { - private: - std::string data_; - int pos_; - - public: - RandomGenerator() { - // We use a limited amount of data over and over again and ensure - // that it is larger than the compression window (32KB), and also - // large enough to serve all typical value sizes we want to write. - Random rnd(301); - std::string piece; - while (data_.size() < 1048576) { - // Add a short fragment that is as compressible as specified - // by FLAGS_compression_ratio. - test::CompressibleString(&rnd, FLAGS_compression_ratio, 100, &piece); - data_.append(piece); - } - pos_ = 0; - } - - Slice Generate(int len) { - if (pos_ + len > data_.size()) { - pos_ = 0; - assert(len < data_.size()); - } - pos_ += len; - return Slice(data_.data() + pos_ - len, len); - } -}; - -static Slice TrimSpace(Slice s) { - int start = 0; - while (start < s.size() && isspace(s[start])) { - start++; - } - int limit = s.size(); - while (limit > start && isspace(s[limit-1])) { - limit--; - } - return Slice(s.data() + start, limit - start); -} - -} // namespace - -class Benchmark { - private: - sqlite3* db_; - int db_num_; - int num_; - int reads_; - double start_; - double last_op_finish_; - int64_t bytes_; - std::string message_; - Histogram hist_; - RandomGenerator gen_; - Random rand_; - - // State kept for progress messages - int done_; - int next_report_; // When to report next - - void PrintHeader() { - const int kKeySize = 16; - PrintEnvironment(); - fprintf(stdout, "Keys: %d bytes each\n", kKeySize); - fprintf(stdout, "Values: %d bytes each\n", FLAGS_value_size); - fprintf(stdout, "Entries: %d\n", num_); - fprintf(stdout, "RawSize: %.1f MB (estimated)\n", - ((static_cast(kKeySize + FLAGS_value_size) * num_) - / 1048576.0)); - PrintWarnings(); - fprintf(stdout, "------------------------------------------------\n"); - } - - void PrintWarnings() { -#if defined(__GNUC__) && !defined(__OPTIMIZE__) - fprintf(stdout, - "WARNING: Optimization is disabled: benchmarks unnecessarily slow\n" - ); -#endif -#ifndef NDEBUG - fprintf(stdout, - "WARNING: Assertions are enabled; benchmarks unnecessarily slow\n"); -#endif - } - - void PrintEnvironment() { - fprintf(stderr, "SQLite: version %s\n", SQLITE_VERSION); - -#if defined(__linux) - time_t now = time(NULL); - fprintf(stderr, "Date: %s", ctime(&now)); // ctime() adds newline - - FILE* cpuinfo = fopen("/proc/cpuinfo", "r"); - if (cpuinfo != NULL) { - char line[1000]; - int num_cpus = 0; - std::string cpu_type; - std::string cache_size; - while (fgets(line, sizeof(line), cpuinfo) != NULL) { - const char* sep = strchr(line, ':'); - if (sep == NULL) { - continue; - } - Slice key = TrimSpace(Slice(line, sep - 1 - line)); - Slice val = TrimSpace(Slice(sep + 1)); - if (key == "model name") { - ++num_cpus; - cpu_type = val.ToString(); - } else if (key == "cache size") { - cache_size = val.ToString(); - } - } - fclose(cpuinfo); - fprintf(stderr, "CPU: %d * %s\n", num_cpus, cpu_type.c_str()); - fprintf(stderr, "CPUCache: %s\n", cache_size.c_str()); - } -#endif - } - - void Start() { - start_ = Env::Default()->NowMicros() * 1e-6; - bytes_ = 0; - message_.clear(); - last_op_finish_ = start_; - hist_.Clear(); - done_ = 0; - next_report_ = 100; - } - - void FinishedSingleOp() { - if (FLAGS_histogram) { - double now = Env::Default()->NowMicros() * 1e-6; - double micros = (now - last_op_finish_) * 1e6; - hist_.Add(micros); - if (micros > 20000) { - fprintf(stderr, "long op: %.1f micros%30s\r", micros, ""); - fflush(stderr); - } - last_op_finish_ = now; - } - - done_++; - if (done_ >= next_report_) { - if (next_report_ < 1000) next_report_ += 100; - else if (next_report_ < 5000) next_report_ += 500; - else if (next_report_ < 10000) next_report_ += 1000; - else if (next_report_ < 50000) next_report_ += 5000; - else if (next_report_ < 100000) next_report_ += 10000; - else if (next_report_ < 500000) next_report_ += 50000; - else next_report_ += 100000; - fprintf(stderr, "... finished %d ops%30s\r", done_, ""); - fflush(stderr); - } - } - - void Stop(const Slice& name) { - double finish = Env::Default()->NowMicros() * 1e-6; - - // Pretend at least one op was done in case we are running a benchmark - // that does not call FinishedSingleOp(). - if (done_ < 1) done_ = 1; - - if (bytes_ > 0) { - char rate[100]; - snprintf(rate, sizeof(rate), "%6.1f MB/s", - (bytes_ / 1048576.0) / (finish - start_)); - if (!message_.empty()) { - message_ = std::string(rate) + " " + message_; - } else { - message_ = rate; - } - } - - fprintf(stdout, "%-12s : %11.3f micros/op;%s%s\n", - name.ToString().c_str(), - (finish - start_) * 1e6 / done_, - (message_.empty() ? "" : " "), - message_.c_str()); - if (FLAGS_histogram) { - fprintf(stdout, "Microseconds per op:\n%s\n", hist_.ToString().c_str()); - } - fflush(stdout); - } - - public: - enum Order { - SEQUENTIAL, - RANDOM - }; - enum DBState { - FRESH, - EXISTING - }; - - Benchmark() - : db_(NULL), - db_num_(0), - num_(FLAGS_num), - reads_(FLAGS_reads < 0 ? FLAGS_num : FLAGS_reads), - bytes_(0), - rand_(301) { - std::vector files; - std::string test_dir; - Env::Default()->GetTestDirectory(&test_dir); - Env::Default()->GetChildren(test_dir, &files); - if (!FLAGS_use_existing_db) { - for (int i = 0; i < files.size(); i++) { - if (Slice(files[i]).starts_with("dbbench_sqlite3")) { - std::string file_name(test_dir); - file_name += "/"; - file_name += files[i]; - Env::Default()->DeleteFile(file_name.c_str()); - } - } - } - } - - ~Benchmark() { - int status = sqlite3_close(db_); - ErrorCheck(status); - } - - void Run() { - PrintHeader(); - Open(); - - const char* benchmarks = FLAGS_benchmarks; - while (benchmarks != NULL) { - const char* sep = strchr(benchmarks, ','); - Slice name; - if (sep == NULL) { - name = benchmarks; - benchmarks = NULL; - } else { - name = Slice(benchmarks, sep - benchmarks); - benchmarks = sep + 1; - } - - bytes_ = 0; - Start(); - - bool known = true; - bool write_sync = false; - if (name == Slice("fillseq")) { - Write(write_sync, SEQUENTIAL, FRESH, num_, FLAGS_value_size, 1); - WalCheckpoint(db_); - } else if (name == Slice("fillseqbatch")) { - Write(write_sync, SEQUENTIAL, FRESH, num_, FLAGS_value_size, 1000); - WalCheckpoint(db_); - } else if (name == Slice("fillrandom")) { - Write(write_sync, RANDOM, FRESH, num_, FLAGS_value_size, 1); - WalCheckpoint(db_); - } else if (name == Slice("fillrandbatch")) { - Write(write_sync, RANDOM, FRESH, num_, FLAGS_value_size, 1000); - WalCheckpoint(db_); - } else if (name == Slice("overwrite")) { - Write(write_sync, RANDOM, EXISTING, num_, FLAGS_value_size, 1); - WalCheckpoint(db_); - } else if (name == Slice("overwritebatch")) { - Write(write_sync, RANDOM, EXISTING, num_, FLAGS_value_size, 1000); - WalCheckpoint(db_); - } else if (name == Slice("fillrandsync")) { - write_sync = true; - Write(write_sync, RANDOM, FRESH, num_ / 100, FLAGS_value_size, 1); - WalCheckpoint(db_); - } else if (name == Slice("fillseqsync")) { - write_sync = true; - Write(write_sync, SEQUENTIAL, FRESH, num_ / 100, FLAGS_value_size, 1); - WalCheckpoint(db_); - } else if (name == Slice("fillrand100K")) { - Write(write_sync, RANDOM, FRESH, num_ / 1000, 100 * 1000, 1); - WalCheckpoint(db_); - } else if (name == Slice("fillseq100K")) { - Write(write_sync, SEQUENTIAL, FRESH, num_ / 1000, 100 * 1000, 1); - WalCheckpoint(db_); - } else if (name == Slice("readseq")) { - ReadSequential(); - } else if (name == Slice("readrandom")) { - Read(RANDOM, 1); - } else if (name == Slice("readrand100K")) { - int n = reads_; - reads_ /= 1000; - Read(RANDOM, 1); - reads_ = n; - } else { - known = false; - if (name != Slice()) { // No error message for empty name - fprintf(stderr, "unknown benchmark '%s'\n", name.ToString().c_str()); - } - } - if (known) { - Stop(name); - } - } - } - - void Open() { - assert(db_ == NULL); - - int status; - char file_name[100]; - char* err_msg = NULL; - db_num_++; - - // Open database - std::string tmp_dir; - Env::Default()->GetTestDirectory(&tmp_dir); - snprintf(file_name, sizeof(file_name), - "%s/dbbench_sqlite3-%d.db", - tmp_dir.c_str(), - db_num_); - status = sqlite3_open(file_name, &db_); - if (status) { - fprintf(stderr, "open error: %s\n", sqlite3_errmsg(db_)); - exit(1); - } - - // Change SQLite cache size - char cache_size[100]; - snprintf(cache_size, sizeof(cache_size), "PRAGMA cache_size = %d", - FLAGS_num_pages); - status = sqlite3_exec(db_, cache_size, NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - - // FLAGS_page_size is defaulted to 1024 - if (FLAGS_page_size != 1024) { - char page_size[100]; - snprintf(page_size, sizeof(page_size), "PRAGMA page_size = %d", - FLAGS_page_size); - status = sqlite3_exec(db_, page_size, NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - } - - // Change journal mode to WAL if WAL enabled flag is on - if (FLAGS_WAL_enabled) { - std::string WAL_stmt = "PRAGMA journal_mode = WAL"; - - // LevelDB's default cache size is a combined 4 MB - std::string WAL_checkpoint = "PRAGMA wal_autocheckpoint = 4096"; - status = sqlite3_exec(db_, WAL_stmt.c_str(), NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - status = sqlite3_exec(db_, WAL_checkpoint.c_str(), NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - } - - // Change locking mode to exclusive and create tables/index for database - std::string locking_stmt = "PRAGMA locking_mode = EXCLUSIVE"; - std::string create_stmt = - "CREATE TABLE test (key blob, value blob, PRIMARY KEY(key))"; - std::string stmt_array[] = { locking_stmt, create_stmt }; - int stmt_array_length = sizeof(stmt_array) / sizeof(std::string); - for (int i = 0; i < stmt_array_length; i++) { - status = sqlite3_exec(db_, stmt_array[i].c_str(), NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - } - } - - void Write(bool write_sync, Order order, DBState state, - int num_entries, int value_size, int entries_per_batch) { - // Create new database if state == FRESH - if (state == FRESH) { - if (FLAGS_use_existing_db) { - message_ = "skipping (--use_existing_db is true)"; - return; - } - sqlite3_close(db_); - db_ = NULL; - Open(); - Start(); - } - - if (num_entries != num_) { - char msg[100]; - snprintf(msg, sizeof(msg), "(%d ops)", num_entries); - message_ = msg; - } - - char* err_msg = NULL; - int status; - - sqlite3_stmt *replace_stmt, *begin_trans_stmt, *end_trans_stmt; - std::string replace_str = "REPLACE INTO test (key, value) VALUES (?, ?)"; - std::string begin_trans_str = "BEGIN TRANSACTION;"; - std::string end_trans_str = "END TRANSACTION;"; - - // Check for synchronous flag in options - std::string sync_stmt = (write_sync) ? "PRAGMA synchronous = FULL" : - "PRAGMA synchronous = OFF"; - status = sqlite3_exec(db_, sync_stmt.c_str(), NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - - // Preparing sqlite3 statements - status = sqlite3_prepare_v2(db_, replace_str.c_str(), -1, - &replace_stmt, NULL); - ErrorCheck(status); - status = sqlite3_prepare_v2(db_, begin_trans_str.c_str(), -1, - &begin_trans_stmt, NULL); - ErrorCheck(status); - status = sqlite3_prepare_v2(db_, end_trans_str.c_str(), -1, - &end_trans_stmt, NULL); - ErrorCheck(status); - - bool transaction = (entries_per_batch > 1); - for (int i = 0; i < num_entries; i += entries_per_batch) { - // Begin write transaction - if (FLAGS_transaction && transaction) { - status = sqlite3_step(begin_trans_stmt); - StepErrorCheck(status); - status = sqlite3_reset(begin_trans_stmt); - ErrorCheck(status); - } - - // Create and execute SQL statements - for (int j = 0; j < entries_per_batch; j++) { - const char* value = gen_.Generate(value_size).data(); - - // Create values for key-value pair - const int k = (order == SEQUENTIAL) ? i + j : - (rand_.Next() % num_entries); - char key[100]; - snprintf(key, sizeof(key), "%016d", k); - - // Bind KV values into replace_stmt - status = sqlite3_bind_blob(replace_stmt, 1, key, 16, SQLITE_STATIC); - ErrorCheck(status); - status = sqlite3_bind_blob(replace_stmt, 2, value, - value_size, SQLITE_STATIC); - ErrorCheck(status); - - // Execute replace_stmt - bytes_ += value_size + strlen(key); - status = sqlite3_step(replace_stmt); - StepErrorCheck(status); - - // Reset SQLite statement for another use - status = sqlite3_clear_bindings(replace_stmt); - ErrorCheck(status); - status = sqlite3_reset(replace_stmt); - ErrorCheck(status); - - FinishedSingleOp(); - } - - // End write transaction - if (FLAGS_transaction && transaction) { - status = sqlite3_step(end_trans_stmt); - StepErrorCheck(status); - status = sqlite3_reset(end_trans_stmt); - ErrorCheck(status); - } - } - - status = sqlite3_finalize(replace_stmt); - ErrorCheck(status); - status = sqlite3_finalize(begin_trans_stmt); - ErrorCheck(status); - status = sqlite3_finalize(end_trans_stmt); - ErrorCheck(status); - } - - void Read(Order order, int entries_per_batch) { - int status; - sqlite3_stmt *read_stmt, *begin_trans_stmt, *end_trans_stmt; - - std::string read_str = "SELECT * FROM test WHERE key = ?"; - std::string begin_trans_str = "BEGIN TRANSACTION;"; - std::string end_trans_str = "END TRANSACTION;"; - - // Preparing sqlite3 statements - status = sqlite3_prepare_v2(db_, begin_trans_str.c_str(), -1, - &begin_trans_stmt, NULL); - ErrorCheck(status); - status = sqlite3_prepare_v2(db_, end_trans_str.c_str(), -1, - &end_trans_stmt, NULL); - ErrorCheck(status); - status = sqlite3_prepare_v2(db_, read_str.c_str(), -1, &read_stmt, NULL); - ErrorCheck(status); - - bool transaction = (entries_per_batch > 1); - for (int i = 0; i < reads_; i += entries_per_batch) { - // Begin read transaction - if (FLAGS_transaction && transaction) { - status = sqlite3_step(begin_trans_stmt); - StepErrorCheck(status); - status = sqlite3_reset(begin_trans_stmt); - ErrorCheck(status); - } - - // Create and execute SQL statements - for (int j = 0; j < entries_per_batch; j++) { - // Create key value - char key[100]; - int k = (order == SEQUENTIAL) ? i + j : (rand_.Next() % reads_); - snprintf(key, sizeof(key), "%016d", k); - - // Bind key value into read_stmt - status = sqlite3_bind_blob(read_stmt, 1, key, 16, SQLITE_STATIC); - ErrorCheck(status); - - // Execute read statement - while ((status = sqlite3_step(read_stmt)) == SQLITE_ROW) {} - StepErrorCheck(status); - - // Reset SQLite statement for another use - status = sqlite3_clear_bindings(read_stmt); - ErrorCheck(status); - status = sqlite3_reset(read_stmt); - ErrorCheck(status); - FinishedSingleOp(); - } - - // End read transaction - if (FLAGS_transaction && transaction) { - status = sqlite3_step(end_trans_stmt); - StepErrorCheck(status); - status = sqlite3_reset(end_trans_stmt); - ErrorCheck(status); - } - } - - status = sqlite3_finalize(read_stmt); - ErrorCheck(status); - status = sqlite3_finalize(begin_trans_stmt); - ErrorCheck(status); - status = sqlite3_finalize(end_trans_stmt); - ErrorCheck(status); - } - - void ReadSequential() { - int status; - sqlite3_stmt *pStmt; - std::string read_str = "SELECT * FROM test ORDER BY key"; - - status = sqlite3_prepare_v2(db_, read_str.c_str(), -1, &pStmt, NULL); - ErrorCheck(status); - for (int i = 0; i < reads_ && SQLITE_ROW == sqlite3_step(pStmt); i++) { - bytes_ += sqlite3_column_bytes(pStmt, 1) + sqlite3_column_bytes(pStmt, 2); - FinishedSingleOp(); - } - - status = sqlite3_finalize(pStmt); - ErrorCheck(status); - } - -}; - -} // namespace leveldb - -int main(int argc, char** argv) { - std::string default_db_path; - for (int i = 1; i < argc; i++) { - double d; - int n; - char junk; - if (leveldb::Slice(argv[i]).starts_with("--benchmarks=")) { - FLAGS_benchmarks = argv[i] + strlen("--benchmarks="); - } else if (sscanf(argv[i], "--histogram=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_histogram = n; - } else if (sscanf(argv[i], "--compression_ratio=%lf%c", &d, &junk) == 1) { - FLAGS_compression_ratio = d; - } else if (sscanf(argv[i], "--use_existing_db=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_use_existing_db = n; - } else if (sscanf(argv[i], "--num=%d%c", &n, &junk) == 1) { - FLAGS_num = n; - } else if (sscanf(argv[i], "--reads=%d%c", &n, &junk) == 1) { - FLAGS_reads = n; - } else if (sscanf(argv[i], "--value_size=%d%c", &n, &junk) == 1) { - FLAGS_value_size = n; - } else if (leveldb::Slice(argv[i]) == leveldb::Slice("--no_transaction")) { - FLAGS_transaction = false; - } else if (sscanf(argv[i], "--page_size=%d%c", &n, &junk) == 1) { - FLAGS_page_size = n; - } else if (sscanf(argv[i], "--num_pages=%d%c", &n, &junk) == 1) { - FLAGS_num_pages = n; - } else if (sscanf(argv[i], "--WAL_enabled=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_WAL_enabled = n; - } else if (strncmp(argv[i], "--db=", 5) == 0) { - FLAGS_db = argv[i] + 5; - } else { - fprintf(stderr, "Invalid flag '%s'\n", argv[i]); - exit(1); - } - } - - // Choose a location for the test database if none given with --db= - if (FLAGS_db == NULL) { - leveldb::Env::Default()->GetTestDirectory(&default_db_path); - default_db_path += "/dbbench"; - FLAGS_db = default_db_path.c_str(); - } - - leveldb::Benchmark benchmark; - benchmark.Run(); - return 0; -} diff --git a/src/leveldb/doc/bench/db_bench_tree_db.cc b/src/leveldb/doc/bench/db_bench_tree_db.cc deleted file mode 100644 index 4ca381f11f..0000000000 --- a/src/leveldb/doc/bench/db_bench_tree_db.cc +++ /dev/null @@ -1,528 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include -#include "util/histogram.h" -#include "util/random.h" -#include "util/testutil.h" - -// Comma-separated list of operations to run in the specified order -// Actual benchmarks: -// -// fillseq -- write N values in sequential key order in async mode -// fillrandom -- write N values in random key order in async mode -// overwrite -- overwrite N values in random key order in async mode -// fillseqsync -- write N/100 values in sequential key order in sync mode -// fillrandsync -- write N/100 values in random key order in sync mode -// fillrand100K -- write N/1000 100K values in random order in async mode -// fillseq100K -- write N/1000 100K values in seq order in async mode -// readseq -- read N times sequentially -// readseq100K -- read N/1000 100K values in sequential order in async mode -// readrand100K -- read N/1000 100K values in sequential order in async mode -// readrandom -- read N times in random order -static const char* FLAGS_benchmarks = - "fillseq," - "fillseqsync," - "fillrandsync," - "fillrandom," - "overwrite," - "readrandom," - "readseq," - "fillrand100K," - "fillseq100K," - "readseq100K," - "readrand100K," - ; - -// Number of key/values to place in database -static int FLAGS_num = 1000000; - -// Number of read operations to do. If negative, do FLAGS_num reads. -static int FLAGS_reads = -1; - -// Size of each value -static int FLAGS_value_size = 100; - -// Arrange to generate values that shrink to this fraction of -// their original size after compression -static double FLAGS_compression_ratio = 0.5; - -// Print histogram of operation timings -static bool FLAGS_histogram = false; - -// Cache size. Default 4 MB -static int FLAGS_cache_size = 4194304; - -// Page size. Default 1 KB -static int FLAGS_page_size = 1024; - -// If true, do not destroy the existing database. If you set this -// flag and also specify a benchmark that wants a fresh database, that -// benchmark will fail. -static bool FLAGS_use_existing_db = false; - -// Compression flag. If true, compression is on. If false, compression -// is off. -static bool FLAGS_compression = true; - -// Use the db with the following name. -static const char* FLAGS_db = NULL; - -inline -static void DBSynchronize(kyotocabinet::TreeDB* db_) -{ - // Synchronize will flush writes to disk - if (!db_->synchronize()) { - fprintf(stderr, "synchronize error: %s\n", db_->error().name()); - } -} - -namespace leveldb { - -// Helper for quickly generating random data. -namespace { -class RandomGenerator { - private: - std::string data_; - int pos_; - - public: - RandomGenerator() { - // We use a limited amount of data over and over again and ensure - // that it is larger than the compression window (32KB), and also - // large enough to serve all typical value sizes we want to write. - Random rnd(301); - std::string piece; - while (data_.size() < 1048576) { - // Add a short fragment that is as compressible as specified - // by FLAGS_compression_ratio. - test::CompressibleString(&rnd, FLAGS_compression_ratio, 100, &piece); - data_.append(piece); - } - pos_ = 0; - } - - Slice Generate(int len) { - if (pos_ + len > data_.size()) { - pos_ = 0; - assert(len < data_.size()); - } - pos_ += len; - return Slice(data_.data() + pos_ - len, len); - } -}; - -static Slice TrimSpace(Slice s) { - int start = 0; - while (start < s.size() && isspace(s[start])) { - start++; - } - int limit = s.size(); - while (limit > start && isspace(s[limit-1])) { - limit--; - } - return Slice(s.data() + start, limit - start); -} - -} // namespace - -class Benchmark { - private: - kyotocabinet::TreeDB* db_; - int db_num_; - int num_; - int reads_; - double start_; - double last_op_finish_; - int64_t bytes_; - std::string message_; - Histogram hist_; - RandomGenerator gen_; - Random rand_; - kyotocabinet::LZOCompressor comp_; - - // State kept for progress messages - int done_; - int next_report_; // When to report next - - void PrintHeader() { - const int kKeySize = 16; - PrintEnvironment(); - fprintf(stdout, "Keys: %d bytes each\n", kKeySize); - fprintf(stdout, "Values: %d bytes each (%d bytes after compression)\n", - FLAGS_value_size, - static_cast(FLAGS_value_size * FLAGS_compression_ratio + 0.5)); - fprintf(stdout, "Entries: %d\n", num_); - fprintf(stdout, "RawSize: %.1f MB (estimated)\n", - ((static_cast(kKeySize + FLAGS_value_size) * num_) - / 1048576.0)); - fprintf(stdout, "FileSize: %.1f MB (estimated)\n", - (((kKeySize + FLAGS_value_size * FLAGS_compression_ratio) * num_) - / 1048576.0)); - PrintWarnings(); - fprintf(stdout, "------------------------------------------------\n"); - } - - void PrintWarnings() { -#if defined(__GNUC__) && !defined(__OPTIMIZE__) - fprintf(stdout, - "WARNING: Optimization is disabled: benchmarks unnecessarily slow\n" - ); -#endif -#ifndef NDEBUG - fprintf(stdout, - "WARNING: Assertions are enabled; benchmarks unnecessarily slow\n"); -#endif - } - - void PrintEnvironment() { - fprintf(stderr, "Kyoto Cabinet: version %s, lib ver %d, lib rev %d\n", - kyotocabinet::VERSION, kyotocabinet::LIBVER, kyotocabinet::LIBREV); - -#if defined(__linux) - time_t now = time(NULL); - fprintf(stderr, "Date: %s", ctime(&now)); // ctime() adds newline - - FILE* cpuinfo = fopen("/proc/cpuinfo", "r"); - if (cpuinfo != NULL) { - char line[1000]; - int num_cpus = 0; - std::string cpu_type; - std::string cache_size; - while (fgets(line, sizeof(line), cpuinfo) != NULL) { - const char* sep = strchr(line, ':'); - if (sep == NULL) { - continue; - } - Slice key = TrimSpace(Slice(line, sep - 1 - line)); - Slice val = TrimSpace(Slice(sep + 1)); - if (key == "model name") { - ++num_cpus; - cpu_type = val.ToString(); - } else if (key == "cache size") { - cache_size = val.ToString(); - } - } - fclose(cpuinfo); - fprintf(stderr, "CPU: %d * %s\n", num_cpus, cpu_type.c_str()); - fprintf(stderr, "CPUCache: %s\n", cache_size.c_str()); - } -#endif - } - - void Start() { - start_ = Env::Default()->NowMicros() * 1e-6; - bytes_ = 0; - message_.clear(); - last_op_finish_ = start_; - hist_.Clear(); - done_ = 0; - next_report_ = 100; - } - - void FinishedSingleOp() { - if (FLAGS_histogram) { - double now = Env::Default()->NowMicros() * 1e-6; - double micros = (now - last_op_finish_) * 1e6; - hist_.Add(micros); - if (micros > 20000) { - fprintf(stderr, "long op: %.1f micros%30s\r", micros, ""); - fflush(stderr); - } - last_op_finish_ = now; - } - - done_++; - if (done_ >= next_report_) { - if (next_report_ < 1000) next_report_ += 100; - else if (next_report_ < 5000) next_report_ += 500; - else if (next_report_ < 10000) next_report_ += 1000; - else if (next_report_ < 50000) next_report_ += 5000; - else if (next_report_ < 100000) next_report_ += 10000; - else if (next_report_ < 500000) next_report_ += 50000; - else next_report_ += 100000; - fprintf(stderr, "... finished %d ops%30s\r", done_, ""); - fflush(stderr); - } - } - - void Stop(const Slice& name) { - double finish = Env::Default()->NowMicros() * 1e-6; - - // Pretend at least one op was done in case we are running a benchmark - // that does not call FinishedSingleOp(). - if (done_ < 1) done_ = 1; - - if (bytes_ > 0) { - char rate[100]; - snprintf(rate, sizeof(rate), "%6.1f MB/s", - (bytes_ / 1048576.0) / (finish - start_)); - if (!message_.empty()) { - message_ = std::string(rate) + " " + message_; - } else { - message_ = rate; - } - } - - fprintf(stdout, "%-12s : %11.3f micros/op;%s%s\n", - name.ToString().c_str(), - (finish - start_) * 1e6 / done_, - (message_.empty() ? "" : " "), - message_.c_str()); - if (FLAGS_histogram) { - fprintf(stdout, "Microseconds per op:\n%s\n", hist_.ToString().c_str()); - } - fflush(stdout); - } - - public: - enum Order { - SEQUENTIAL, - RANDOM - }; - enum DBState { - FRESH, - EXISTING - }; - - Benchmark() - : db_(NULL), - num_(FLAGS_num), - reads_(FLAGS_reads < 0 ? FLAGS_num : FLAGS_reads), - bytes_(0), - rand_(301) { - std::vector files; - std::string test_dir; - Env::Default()->GetTestDirectory(&test_dir); - Env::Default()->GetChildren(test_dir.c_str(), &files); - if (!FLAGS_use_existing_db) { - for (int i = 0; i < files.size(); i++) { - if (Slice(files[i]).starts_with("dbbench_polyDB")) { - std::string file_name(test_dir); - file_name += "/"; - file_name += files[i]; - Env::Default()->DeleteFile(file_name.c_str()); - } - } - } - } - - ~Benchmark() { - if (!db_->close()) { - fprintf(stderr, "close error: %s\n", db_->error().name()); - } - } - - void Run() { - PrintHeader(); - Open(false); - - const char* benchmarks = FLAGS_benchmarks; - while (benchmarks != NULL) { - const char* sep = strchr(benchmarks, ','); - Slice name; - if (sep == NULL) { - name = benchmarks; - benchmarks = NULL; - } else { - name = Slice(benchmarks, sep - benchmarks); - benchmarks = sep + 1; - } - - Start(); - - bool known = true; - bool write_sync = false; - if (name == Slice("fillseq")) { - Write(write_sync, SEQUENTIAL, FRESH, num_, FLAGS_value_size, 1); - DBSynchronize(db_); - } else if (name == Slice("fillrandom")) { - Write(write_sync, RANDOM, FRESH, num_, FLAGS_value_size, 1); - DBSynchronize(db_); - } else if (name == Slice("overwrite")) { - Write(write_sync, RANDOM, EXISTING, num_, FLAGS_value_size, 1); - DBSynchronize(db_); - } else if (name == Slice("fillrandsync")) { - write_sync = true; - Write(write_sync, RANDOM, FRESH, num_ / 100, FLAGS_value_size, 1); - DBSynchronize(db_); - } else if (name == Slice("fillseqsync")) { - write_sync = true; - Write(write_sync, SEQUENTIAL, FRESH, num_ / 100, FLAGS_value_size, 1); - DBSynchronize(db_); - } else if (name == Slice("fillrand100K")) { - Write(write_sync, RANDOM, FRESH, num_ / 1000, 100 * 1000, 1); - DBSynchronize(db_); - } else if (name == Slice("fillseq100K")) { - Write(write_sync, SEQUENTIAL, FRESH, num_ / 1000, 100 * 1000, 1); - DBSynchronize(db_); - } else if (name == Slice("readseq")) { - ReadSequential(); - } else if (name == Slice("readrandom")) { - ReadRandom(); - } else if (name == Slice("readrand100K")) { - int n = reads_; - reads_ /= 1000; - ReadRandom(); - reads_ = n; - } else if (name == Slice("readseq100K")) { - int n = reads_; - reads_ /= 1000; - ReadSequential(); - reads_ = n; - } else { - known = false; - if (name != Slice()) { // No error message for empty name - fprintf(stderr, "unknown benchmark '%s'\n", name.ToString().c_str()); - } - } - if (known) { - Stop(name); - } - } - } - - private: - void Open(bool sync) { - assert(db_ == NULL); - - // Initialize db_ - db_ = new kyotocabinet::TreeDB(); - char file_name[100]; - db_num_++; - std::string test_dir; - Env::Default()->GetTestDirectory(&test_dir); - snprintf(file_name, sizeof(file_name), - "%s/dbbench_polyDB-%d.kct", - test_dir.c_str(), - db_num_); - - // Create tuning options and open the database - int open_options = kyotocabinet::PolyDB::OWRITER | - kyotocabinet::PolyDB::OCREATE; - int tune_options = kyotocabinet::TreeDB::TSMALL | - kyotocabinet::TreeDB::TLINEAR; - if (FLAGS_compression) { - tune_options |= kyotocabinet::TreeDB::TCOMPRESS; - db_->tune_compressor(&comp_); - } - db_->tune_options(tune_options); - db_->tune_page_cache(FLAGS_cache_size); - db_->tune_page(FLAGS_page_size); - db_->tune_map(256LL<<20); - if (sync) { - open_options |= kyotocabinet::PolyDB::OAUTOSYNC; - } - if (!db_->open(file_name, open_options)) { - fprintf(stderr, "open error: %s\n", db_->error().name()); - } - } - - void Write(bool sync, Order order, DBState state, - int num_entries, int value_size, int entries_per_batch) { - // Create new database if state == FRESH - if (state == FRESH) { - if (FLAGS_use_existing_db) { - message_ = "skipping (--use_existing_db is true)"; - return; - } - delete db_; - db_ = NULL; - Open(sync); - Start(); // Do not count time taken to destroy/open - } - - if (num_entries != num_) { - char msg[100]; - snprintf(msg, sizeof(msg), "(%d ops)", num_entries); - message_ = msg; - } - - // Write to database - for (int i = 0; i < num_entries; i++) - { - const int k = (order == SEQUENTIAL) ? i : (rand_.Next() % num_entries); - char key[100]; - snprintf(key, sizeof(key), "%016d", k); - bytes_ += value_size + strlen(key); - std::string cpp_key = key; - if (!db_->set(cpp_key, gen_.Generate(value_size).ToString())) { - fprintf(stderr, "set error: %s\n", db_->error().name()); - } - FinishedSingleOp(); - } - } - - void ReadSequential() { - kyotocabinet::DB::Cursor* cur = db_->cursor(); - cur->jump(); - std::string ckey, cvalue; - while (cur->get(&ckey, &cvalue, true)) { - bytes_ += ckey.size() + cvalue.size(); - FinishedSingleOp(); - } - delete cur; - } - - void ReadRandom() { - std::string value; - for (int i = 0; i < reads_; i++) { - char key[100]; - const int k = rand_.Next() % reads_; - snprintf(key, sizeof(key), "%016d", k); - db_->get(key, &value); - FinishedSingleOp(); - } - } -}; - -} // namespace leveldb - -int main(int argc, char** argv) { - std::string default_db_path; - for (int i = 1; i < argc; i++) { - double d; - int n; - char junk; - if (leveldb::Slice(argv[i]).starts_with("--benchmarks=")) { - FLAGS_benchmarks = argv[i] + strlen("--benchmarks="); - } else if (sscanf(argv[i], "--compression_ratio=%lf%c", &d, &junk) == 1) { - FLAGS_compression_ratio = d; - } else if (sscanf(argv[i], "--histogram=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_histogram = n; - } else if (sscanf(argv[i], "--num=%d%c", &n, &junk) == 1) { - FLAGS_num = n; - } else if (sscanf(argv[i], "--reads=%d%c", &n, &junk) == 1) { - FLAGS_reads = n; - } else if (sscanf(argv[i], "--value_size=%d%c", &n, &junk) == 1) { - FLAGS_value_size = n; - } else if (sscanf(argv[i], "--cache_size=%d%c", &n, &junk) == 1) { - FLAGS_cache_size = n; - } else if (sscanf(argv[i], "--page_size=%d%c", &n, &junk) == 1) { - FLAGS_page_size = n; - } else if (sscanf(argv[i], "--compression=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_compression = (n == 1) ? true : false; - } else if (strncmp(argv[i], "--db=", 5) == 0) { - FLAGS_db = argv[i] + 5; - } else { - fprintf(stderr, "Invalid flag '%s'\n", argv[i]); - exit(1); - } - } - - // Choose a location for the test database if none given with --db= - if (FLAGS_db == NULL) { - leveldb::Env::Default()->GetTestDirectory(&default_db_path); - default_db_path += "/dbbench"; - FLAGS_db = default_db_path.c_str(); - } - - leveldb::Benchmark benchmark; - benchmark.Run(); - return 0; -} diff --git a/src/leveldb/doc/benchmark.html b/src/leveldb/doc/benchmark.html deleted file mode 100644 index c4639772c1..0000000000 --- a/src/leveldb/doc/benchmark.html +++ /dev/null @@ -1,459 +0,0 @@ - - - -LevelDB Benchmarks - - - - -

LevelDB Benchmarks

-

Google, July 2011

-
- -

In order to test LevelDB's performance, we benchmark it against other well-established database implementations. We compare LevelDB (revision 39) against SQLite3 (version 3.7.6.3) and Kyoto Cabinet's (version 1.2.67) TreeDB (a B+Tree based key-value store). We would like to acknowledge Scott Hess and Mikio Hirabayashi for their suggestions and contributions to the SQLite3 and Kyoto Cabinet benchmarks, respectively.

- -

Benchmarks were all performed on a six-core Intel(R) Xeon(R) CPU X5650 @ 2.67GHz, with 12288 KB of total L3 cache and 12 GB of DDR3 RAM at 1333 MHz. (Note that LevelDB uses at most two CPUs since the benchmarks are single threaded: one to run the benchmark, and one for background compactions.) We ran the benchmarks on two machines (with identical processors), one with an Ext3 file system and one with an Ext4 file system. The machine with the Ext3 file system has a SATA Hitachi HDS721050CLA362 hard drive. The machine with the Ext4 file system has a SATA Samsung HD502HJ hard drive. Both hard drives spin at 7200 RPM and have hard drive write-caching enabled (using `hdparm -W 1 [device]`). The numbers reported below are the median of three measurements.

- -

Benchmark Source Code

-

We wrote benchmark tools for SQLite and Kyoto TreeDB based on LevelDB's db_bench. The code for each of the benchmarks resides here:

- - -

Custom Build Specifications

-
    -
  • LevelDB: LevelDB was compiled with the tcmalloc library and the Snappy compression library (revision 33). Assertions were disabled.
  • -
  • TreeDB: TreeDB was compiled using the LZO compression library (version 2.03). Furthermore, we enabled the TSMALL and TLINEAR options when opening the database in order to reduce the footprint of each record.
  • -
  • SQLite: We tuned SQLite's performance, by setting its locking mode to exclusive. We also enabled SQLite's write-ahead logging.
  • -
- -

1. Baseline Performance

-

This section gives the baseline performance of all the -databases. Following sections show how performance changes as various -parameters are varied. For the baseline:

-
    -
  • Each database is allowed 4 MB of cache memory.
  • -
  • Databases are opened in asynchronous write mode. - (LevelDB's sync option, TreeDB's OAUTOSYNC option, and - SQLite3's synchronous options are all turned off). I.e., - every write is pushed to the operating system, but the - benchmark does not wait for the write to reach the disk.
  • -
  • Keys are 16 bytes each.
  • -
  • Value are 100 bytes each (with enough redundancy so that - a simple compressor shrinks them to 50% of their original - size).
  • -
  • Sequential reads/writes traverse the key space in increasing order.
  • -
  • Random reads/writes traverse the key space in random order.
  • -
- -

A. Sequential Reads

- - - - - - - - - - -
LevelDB4,030,000 ops/sec
 
Kyoto TreeDB1,010,000 ops/sec
 
SQLite3383,000 ops/sec
 
-

B. Random Reads

- - - - - - - - - - -
LevelDB129,000 ops/sec
 
Kyoto TreeDB151,000 ops/sec
 
SQLite3134,000 ops/sec
 
-

C. Sequential Writes

- - - - - - - - - - -
LevelDB779,000 ops/sec
 
Kyoto TreeDB342,000 ops/sec
 
SQLite348,600 ops/sec
 
-

D. Random Writes

- - - - - - - - - - -
LevelDB164,000 ops/sec
 
Kyoto TreeDB88,500 ops/sec
 
SQLite39,860 ops/sec
 
- -

LevelDB outperforms both SQLite3 and TreeDB in sequential and random write operations and sequential read operations. Kyoto Cabinet has the fastest random read operations.

- -

2. Write Performance under Different Configurations

-

A. Large Values

-

For this benchmark, we start with an empty database, and write 100,000 byte values (~50% compressible). To keep the benchmark running time reasonable, we stop after writing 1000 values.

-

Sequential Writes

- - - - - - - - - - -
LevelDB1,100 ops/sec
 
Kyoto TreeDB1,000 ops/sec
 
SQLite31,600 ops/sec
 
-

Random Writes

- - - - - - - - - - -
LevelDB480 ops/sec
 
Kyoto TreeDB1,100 ops/sec
 
SQLite31,600 ops/sec
 
-

LevelDB doesn't perform as well with large values of 100,000 bytes each. This is because LevelDB writes keys and values at least twice: first time to the transaction log, and second time (during a compaction) to a sorted file. -With larger values, LevelDB's per-operation efficiency is swamped by the -cost of extra copies of large values.

-

B. Batch Writes

-

A batch write is a set of writes that are applied atomically to the underlying database. A single batch of N writes may be significantly faster than N individual writes. The following benchmark writes one thousand batches where each batch contains one thousand 100-byte values. TreeDB does not support batch writes and is omitted from this benchmark.

-

Sequential Writes

- - - - - - - - - -
LevelDB840,000 entries/sec
 
(1.08x baseline)
SQLite3124,000 entries/sec
 
(2.55x baseline)
-

Random Writes

- - - - - - - - - -
LevelDB221,000 entries/sec
 
(1.35x baseline)
SQLite322,000 entries/sec
 
(2.23x baseline)
- -

Because of the way LevelDB persistent storage is organized, batches of -random writes are not much slower (only a factor of 4x) than batches -of sequential writes.

- -

C. Synchronous Writes

-

In the following benchmark, we enable the synchronous writing modes -of all of the databases. Since this change significantly slows down the -benchmark, we stop after 10,000 writes. For synchronous write tests, we've -disabled hard drive write-caching (using `hdparm -W 0 [device]`).

-
    -
  • For LevelDB, we set WriteOptions.sync = true.
  • -
  • In TreeDB, we enabled TreeDB's OAUTOSYNC option.
  • -
  • For SQLite3, we set "PRAGMA synchronous = FULL".
  • -
-

Sequential Writes

- - - - - - - - - - - - - -
LevelDB100 ops/sec
 
(0.003x baseline)
Kyoto TreeDB7 ops/sec
 
(0.0004x baseline)
SQLite388 ops/sec
 
(0.002x baseline)
-

Random Writes

- - - - - - - - - - - - - -
LevelDB100 ops/sec
 
(0.015x baseline)
Kyoto TreeDB8 ops/sec
 
(0.001x baseline)
SQLite388 ops/sec
 
(0.009x baseline)
- -

Also see the ext4 performance numbers below -since synchronous writes behave significantly differently -on ext3 and ext4.

- -

D. Turning Compression Off

- -

In the baseline measurements, LevelDB and TreeDB were using -light-weight compression -(Snappy for LevelDB, -and LZO for -TreeDB). SQLite3, by default does not use compression. The -experiments below show what happens when compression is disabled in -all of the databases (the SQLite3 numbers are just a copy of -its baseline measurements):

- -

Sequential Writes

- - - - - - - - - - - - - -
LevelDB594,000 ops/sec
 
(0.76x baseline)
Kyoto TreeDB485,000 ops/sec
 
(1.42x baseline)
SQLite348,600 ops/sec
 
(1.00x baseline)
-

Random Writes

- - - - - - - - - - - - - -
LevelDB135,000 ops/sec
 
(0.82x baseline)
Kyoto TreeDB159,000 ops/sec
 
(1.80x baseline)
SQLite39,860 ops/sec
 
(1.00x baseline)
- -

LevelDB's write performance is better with compression than without -since compression decreases the amount of data that has to be written -to disk. Therefore LevelDB users can leave compression enabled in -most scenarios without having worry about a tradeoff between space -usage and performance. TreeDB's performance on the other hand is -better without compression than with compression. Presumably this is -because TreeDB's compression library (LZO) is more expensive than -LevelDB's compression library (Snappy).

- -

E. Using More Memory

-

We increased the overall cache size for each database to 128 MB. For LevelDB, we partitioned 128 MB into a 120 MB write buffer and 8 MB of cache (up from 2 MB of write buffer and 2 MB of cache). For SQLite3, we kept the page size at 1024 bytes, but increased the number of pages to 131,072 (up from 4096). For TreeDB, we also kept the page size at 1024 bytes, but increased the cache size to 128 MB (up from 4 MB).

-

Sequential Writes

- - - - - - - - - - - - - -
LevelDB812,000 ops/sec
 
(1.04x baseline)
Kyoto TreeDB321,000 ops/sec
 
(0.94x baseline)
SQLite348,500 ops/sec
 
(1.00x baseline)
-

Random Writes

- - - - - - - - - - - - - -
LevelDB355,000 ops/sec
 
(2.16x baseline)
Kyoto TreeDB284,000 ops/sec
 
(3.21x baseline)
SQLite39,670 ops/sec
 
(0.98x baseline)
- -

SQLite's performance does not change substantially when compared to -the baseline, but the random write performance for both LevelDB and -TreeDB increases significantly. LevelDB's performance improves -because a larger write buffer reduces the need to merge sorted files -(since it creates a smaller number of larger sorted files). TreeDB's -performance goes up because the entire database is available in memory -for fast in-place updates.

- -

3. Read Performance under Different Configurations

-

A. Larger Caches

-

We increased the overall memory usage to 128 MB for each database. -For LevelDB, we allocated 8 MB to LevelDB's write buffer and 120 MB -to LevelDB's cache. The other databases don't differentiate between a -write buffer and a cache, so we simply set their cache size to 128 -MB.

-

Sequential Reads

- - - - - - - - - - - - - -
LevelDB5,210,000 ops/sec
 
(1.29x baseline)
Kyoto TreeDB1,070,000 ops/sec
 
(1.06x baseline)
SQLite3609,000 ops/sec
 
(1.59x baseline)
- -

Random Reads

- - - - - - - - - - - - - -
LevelDB190,000 ops/sec
 
(1.47x baseline)
Kyoto TreeDB463,000 ops/sec
 
(3.07x baseline)
SQLite3186,000 ops/sec
 
(1.39x baseline)
- -

As expected, the read performance of all of the databases increases -when the caches are enlarged. In particular, TreeDB seems to make -very effective use of a cache that is large enough to hold the entire -database.

- -

B. No Compression Reads

-

For this benchmark, we populated a database with 1 million entries consisting of 16 byte keys and 100 byte values. We compiled LevelDB and Kyoto Cabinet without compression support, so results that are read out from the database are already uncompressed. We've listed the SQLite3 baseline read performance as a point of comparison.

-

Sequential Reads

- - - - - - - - - - - - - -
LevelDB4,880,000 ops/sec
 
(1.21x baseline)
Kyoto TreeDB1,230,000 ops/sec
 
(3.60x baseline)
SQLite3383,000 ops/sec
 
(1.00x baseline)
-

Random Reads

- - - - - - - - - - - - - -
LevelDB149,000 ops/sec
 
(1.16x baseline)
Kyoto TreeDB175,000 ops/sec
 
(1.16x baseline)
SQLite3134,000 ops/sec
 
(1.00x baseline)
- -

Performance of both LevelDB and TreeDB improves a small amount when -compression is disabled. Note however that under different workloads, -performance may very well be better with compression if it allows more -of the working set to fit in memory.

- -

Note about Ext4 Filesystems

-

The preceding numbers are for an ext3 file system. Synchronous writes are much slower under ext4 (LevelDB drops to ~31 writes / second and TreeDB drops to ~5 writes / second; SQLite3's synchronous writes do not noticeably drop) due to ext4's different handling of fsync / msync calls. Even LevelDB's asynchronous write performance drops somewhat since it spreads its storage across multiple files and issues fsync calls when switching to a new file.

- -

Acknowledgements

-

Jeff Dean and Sanjay Ghemawat wrote LevelDB. Kevin Tseng wrote and compiled these benchmarks. Mikio Hirabayashi, Scott Hess, and Gabor Cselle provided help and advice.

- - diff --git a/src/leveldb/doc/doc.css b/src/leveldb/doc/doc.css deleted file mode 100644 index 700c564e43..0000000000 --- a/src/leveldb/doc/doc.css +++ /dev/null @@ -1,89 +0,0 @@ -body { - margin-left: 0.5in; - margin-right: 0.5in; - background: white; - color: black; -} - -h1 { - margin-left: -0.2in; - font-size: 14pt; -} -h2 { - margin-left: -0in; - font-size: 12pt; -} -h3 { - margin-left: -0in; -} -h4 { - margin-left: -0in; -} -hr { - margin-left: -0in; -} - -/* Definition lists: definition term bold */ -dt { - font-weight: bold; -} - -address { - text-align: center; -} -code,samp,var { - color: blue; -} -kbd { - color: #600000; -} -div.note p { - float: right; - width: 3in; - margin-right: 0%; - padding: 1px; - border: 2px solid #6060a0; - background-color: #fffff0; -} - -ul { - margin-top: -0em; - margin-bottom: -0em; -} - -ol { - margin-top: -0em; - margin-bottom: -0em; -} - -UL.nobullets { - list-style-type: none; - list-style-image: none; - margin-left: -1em; -} - -p { - margin: 1em 0 1em 0; - padding: 0 0 0 0; -} - -pre { - line-height: 1.3em; - padding: 0.4em 0 0.8em 0; - margin: 0 0 0 0; - border: 0 0 0 0; - color: blue; -} - -.datatable { - margin-left: auto; - margin-right: auto; - margin-top: 2em; - margin-bottom: 2em; - border: 1px solid; -} - -.datatable td,th { - padding: 0 0.5em 0 0.5em; - text-align: right; -} diff --git a/src/leveldb/doc/impl.html b/src/leveldb/doc/impl.html deleted file mode 100644 index 6a468be095..0000000000 --- a/src/leveldb/doc/impl.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - -Leveldb file layout and compactions - - - - -

Files

- -The implementation of leveldb is similar in spirit to the -representation of a single - -Bigtable tablet (section 5.3). -However the organization of the files that make up the representation -is somewhat different and is explained below. - -

-Each database is represented by a set of files stored in a directory. -There are several different types of files as documented below: -

-

Log files

-

-A log file (*.log) stores a sequence of recent updates. Each update -is appended to the current log file. When the log file reaches a -pre-determined size (approximately 4MB by default), it is converted -to a sorted table (see below) and a new log file is created for future -updates. -

-A copy of the current log file is kept in an in-memory structure (the -memtable). This copy is consulted on every read so that read -operations reflect all logged updates. -

-

Sorted tables

-

-A sorted table (*.sst) stores a sequence of entries sorted by key. -Each entry is either a value for the key, or a deletion marker for the -key. (Deletion markers are kept around to hide obsolete values -present in older sorted tables). -

-The set of sorted tables are organized into a sequence of levels. The -sorted table generated from a log file is placed in a special young -level (also called level-0). When the number of young files exceeds a -certain threshold (currently four), all of the young files are merged -together with all of the overlapping level-1 files to produce a -sequence of new level-1 files (we create a new level-1 file for every -2MB of data.) -

-Files in the young level may contain overlapping keys. However files -in other levels have distinct non-overlapping key ranges. Consider -level number L where L >= 1. When the combined size of files in -level-L exceeds (10^L) MB (i.e., 10MB for level-1, 100MB for level-2, -...), one file in level-L, and all of the overlapping files in -level-(L+1) are merged to form a set of new files for level-(L+1). -These merges have the effect of gradually migrating new updates from -the young level to the largest level using only bulk reads and writes -(i.e., minimizing expensive seeks). - -

Manifest

-

-A MANIFEST file lists the set of sorted tables that make up each -level, the corresponding key ranges, and other important metadata. -A new MANIFEST file (with a new number embedded in the file name) -is created whenever the database is reopened. The MANIFEST file is -formatted as a log, and changes made to the serving state (as files -are added or removed) are appended to this log. -

-

Current

-

-CURRENT is a simple text file that contains the name of the latest -MANIFEST file. -

-

Info logs

-

-Informational messages are printed to files named LOG and LOG.old. -

-

Others

-

-Other files used for miscellaneous purposes may also be present -(LOCK, *.dbtmp). - -

Level 0

-When the log file grows above a certain size (1MB by default): -
    -
  • Create a brand new memtable and log file and direct future updates here -
  • In the background: -
      -
    • Write the contents of the previous memtable to an sstable -
    • Discard the memtable -
    • Delete the old log file and the old memtable -
    • Add the new sstable to the young (level-0) level. -
    -
- -

Compactions

- -

-When the size of level L exceeds its limit, we compact it in a -background thread. The compaction picks a file from level L and all -overlapping files from the next level L+1. Note that if a level-L -file overlaps only part of a level-(L+1) file, the entire file at -level-(L+1) is used as an input to the compaction and will be -discarded after the compaction. Aside: because level-0 is special -(files in it may overlap each other), we treat compactions from -level-0 to level-1 specially: a level-0 compaction may pick more than -one level-0 file in case some of these files overlap each other. - -

-A compaction merges the contents of the picked files to produce a -sequence of level-(L+1) files. We switch to producing a new -level-(L+1) file after the current output file has reached the target -file size (2MB). We also switch to a new output file when the key -range of the current output file has grown enough to overlap more than -ten level-(L+2) files. This last rule ensures that a later compaction -of a level-(L+1) file will not pick up too much data from level-(L+2). - -

-The old files are discarded and the new files are added to the serving -state. - -

-Compactions for a particular level rotate through the key space. In -more detail, for each level L, we remember the ending key of the last -compaction at level L. The next compaction for level L will pick the -first file that starts after this key (wrapping around to the -beginning of the key space if there is no such file). - -

-Compactions drop overwritten values. They also drop deletion markers -if there are no higher numbered levels that contain a file whose range -overlaps the current key. - -

Timing

- -Level-0 compactions will read up to four 1MB files from level-0, and -at worst all the level-1 files (10MB). I.e., we will read 14MB and -write 14MB. - -

-Other than the special level-0 compactions, we will pick one 2MB file -from level L. In the worst case, this will overlap ~ 12 files from -level L+1 (10 because level-(L+1) is ten times the size of level-L, -and another two at the boundaries since the file ranges at level-L -will usually not be aligned with the file ranges at level-L+1). The -compaction will therefore read 26MB and write 26MB. Assuming a disk -IO rate of 100MB/s (ballpark range for modern drives), the worst -compaction cost will be approximately 0.5 second. - -

-If we throttle the background writing to something small, say 10% of -the full 100MB/s speed, a compaction may take up to 5 seconds. If the -user is writing at 10MB/s, we might build up lots of level-0 files -(~50 to hold the 5*10MB). This may significantly increase the cost of -reads due to the overhead of merging more files together on every -read. - -

-Solution 1: To reduce this problem, we might want to increase the log -switching threshold when the number of level-0 files is large. Though -the downside is that the larger this threshold, the more memory we will -need to hold the corresponding memtable. - -

-Solution 2: We might want to decrease write rate artificially when the -number of level-0 files goes up. - -

-Solution 3: We work on reducing the cost of very wide merges. -Perhaps most of the level-0 files will have their blocks sitting -uncompressed in the cache and we will only need to worry about the -O(N) complexity in the merging iterator. - -

Number of files

- -Instead of always making 2MB files, we could make larger files for -larger levels to reduce the total file count, though at the expense of -more bursty compactions. Alternatively, we could shard the set of -files into multiple directories. - -

-An experiment on an ext3 filesystem on Feb 04, 2011 shows -the following timings to do 100K file opens in directories with -varying number of files: - - - - - -
Files in directoryMicroseconds to open a file
10009
1000010
10000016
-So maybe even the sharding is not necessary on modern filesystems? - -

Recovery

- -
    -
  • Read CURRENT to find name of the latest committed MANIFEST -
  • Read the named MANIFEST file -
  • Clean up stale files -
  • We could open all sstables here, but it is probably better to be lazy... -
  • Convert log chunk to a new level-0 sstable -
  • Start directing new writes to a new log file with recovered sequence# -
- -

Garbage collection of files

- -DeleteObsoleteFiles() is called at the end of every -compaction and at the end of recovery. It finds the names of all -files in the database. It deletes all log files that are not the -current log file. It deletes all table files that are not referenced -from some level and are not the output of an active compaction. - - - diff --git a/src/leveldb/doc/index.html b/src/leveldb/doc/index.html deleted file mode 100644 index 3ed0ed9d9e..0000000000 --- a/src/leveldb/doc/index.html +++ /dev/null @@ -1,549 +0,0 @@ - - - - -Leveldb - - - -

Leveldb

-
Jeff Dean, Sanjay Ghemawat
-

-The leveldb library provides a persistent key value store. Keys and -values are arbitrary byte arrays. The keys are ordered within the key -value store according to a user-specified comparator function. - -

-

Opening A Database

-

-A leveldb database has a name which corresponds to a file system -directory. All of the contents of database are stored in this -directory. The following example shows how to open a database, -creating it if necessary: -

-

-  #include <assert>
-  #include "leveldb/db.h"
-
-  leveldb::DB* db;
-  leveldb::Options options;
-  options.create_if_missing = true;
-  leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
-  assert(status.ok());
-  ...
-
-If you want to raise an error if the database already exists, add -the following line before the leveldb::DB::Open call: -
-  options.error_if_exists = true;
-
-

Status

-

-You may have noticed the leveldb::Status type above. Values of this -type are returned by most functions in leveldb that may encounter an -error. You can check if such a result is ok, and also print an -associated error message: -

-

-   leveldb::Status s = ...;
-   if (!s.ok()) cerr << s.ToString() << endl;
-
-

Closing A Database

-

-When you are done with a database, just delete the database object. -Example: -

-

-  ... open the db as described above ...
-  ... do something with db ...
-  delete db;
-
-

Reads And Writes

-

-The database provides Put, Delete, and Get methods to -modify/query the database. For example, the following code -moves the value stored under key1 to key2. -

-  std::string value;
-  leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
-  if (s.ok()) s = db->Put(leveldb::WriteOptions(), key2, value);
-  if (s.ok()) s = db->Delete(leveldb::WriteOptions(), key1);
-
- -

Atomic Updates

-

-Note that if the process dies after the Put of key2 but before the -delete of key1, the same value may be left stored under multiple keys. -Such problems can be avoided by using the WriteBatch class to -atomically apply a set of updates: -

-

-  #include "leveldb/write_batch.h"
-  ...
-  std::string value;
-  leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
-  if (s.ok()) {
-    leveldb::WriteBatch batch;
-    batch.Delete(key1);
-    batch.Put(key2, value);
-    s = db->Write(leveldb::WriteOptions(), &batch);
-  }
-
-The WriteBatch holds a sequence of edits to be made to the database, -and these edits within the batch are applied in order. Note that we -called Delete before Put so that if key1 is identical to key2, -we do not end up erroneously dropping the value entirely. -

-Apart from its atomicity benefits, WriteBatch may also be used to -speed up bulk updates by placing lots of individual mutations into the -same batch. - -

Synchronous Writes

-By default, each write to leveldb is asynchronous: it -returns after pushing the write from the process into the operating -system. The transfer from operating system memory to the underlying -persistent storage happens asynchronously. The sync flag -can be turned on for a particular write to make the write operation -not return until the data being written has been pushed all the way to -persistent storage. (On Posix systems, this is implemented by calling -either fsync(...) or fdatasync(...) or -msync(..., MS_SYNC) before the write operation returns.) -
-  leveldb::WriteOptions write_options;
-  write_options.sync = true;
-  db->Put(write_options, ...);
-
-Asynchronous writes are often more than a thousand times as fast as -synchronous writes. The downside of asynchronous writes is that a -crash of the machine may cause the last few updates to be lost. Note -that a crash of just the writing process (i.e., not a reboot) will not -cause any loss since even when sync is false, an update -is pushed from the process memory into the operating system before it -is considered done. - -

-Asynchronous writes can often be used safely. For example, when -loading a large amount of data into the database you can handle lost -updates by restarting the bulk load after a crash. A hybrid scheme is -also possible where every Nth write is synchronous, and in the event -of a crash, the bulk load is restarted just after the last synchronous -write finished by the previous run. (The synchronous write can update -a marker that describes where to restart on a crash.) - -

-WriteBatch provides an alternative to asynchronous writes. -Multiple updates may be placed in the same WriteBatch and -applied together using a synchronous write (i.e., -write_options.sync is set to true). The extra cost of -the synchronous write will be amortized across all of the writes in -the batch. - -

-

Concurrency

-

-A database may only be opened by one process at a time. -The leveldb implementation acquires a lock from the -operating system to prevent misuse. Within a single process, the -same leveldb::DB object may be safely shared by multiple -concurrent threads. I.e., different threads may write into or fetch -iterators or call Get on the same database without any -external synchronization (the leveldb implementation will -automatically do the required synchronization). However other objects -(like Iterator and WriteBatch) may require external synchronization. -If two threads share such an object, they must protect access to it -using their own locking protocol. More details are available in -the public header files. -

-

Iteration

-

-The following example demonstrates how to print all key,value pairs -in a database. -

-

-  leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());
-  for (it->SeekToFirst(); it->Valid(); it->Next()) {
-    cout << it->key().ToString() << ": "  << it->value().ToString() << endl;
-  }
-  assert(it->status().ok());  // Check for any errors found during the scan
-  delete it;
-
-The following variation shows how to process just the keys in the -range [start,limit): -

-

-  for (it->Seek(start);
-       it->Valid() && it->key().ToString() < limit;
-       it->Next()) {
-    ...
-  }
-
-You can also process entries in reverse order. (Caveat: reverse -iteration may be somewhat slower than forward iteration.) -

-

-  for (it->SeekToLast(); it->Valid(); it->Prev()) {
-    ...
-  }
-
-

Snapshots

-

-Snapshots provide consistent read-only views over the entire state of -the key-value store. ReadOptions::snapshot may be non-NULL to indicate -that a read should operate on a particular version of the DB state. -If ReadOptions::snapshot is NULL, the read will operate on an -implicit snapshot of the current state. -

-Snapshots are created by the DB::GetSnapshot() method: -

-

-  leveldb::ReadOptions options;
-  options.snapshot = db->GetSnapshot();
-  ... apply some updates to db ...
-  leveldb::Iterator* iter = db->NewIterator(options);
-  ... read using iter to view the state when the snapshot was created ...
-  delete iter;
-  db->ReleaseSnapshot(options.snapshot);
-
-Note that when a snapshot is no longer needed, it should be released -using the DB::ReleaseSnapshot interface. This allows the -implementation to get rid of state that was being maintained just to -support reading as of that snapshot. -

Slice

-

-The return value of the it->key() and it->value() calls above -are instances of the leveldb::Slice type. Slice is a simple -structure that contains a length and a pointer to an external byte -array. Returning a Slice is a cheaper alternative to returning a -std::string since we do not need to copy potentially large keys and -values. In addition, leveldb methods do not return null-terminated -C-style strings since leveldb keys and values are allowed to -contain '\0' bytes. -

-C++ strings and null-terminated C-style strings can be easily converted -to a Slice: -

-

-   leveldb::Slice s1 = "hello";
-
-   std::string str("world");
-   leveldb::Slice s2 = str;
-
-A Slice can be easily converted back to a C++ string: -
-   std::string str = s1.ToString();
-   assert(str == std::string("hello"));
-
-Be careful when using Slices since it is up to the caller to ensure that -the external byte array into which the Slice points remains live while -the Slice is in use. For example, the following is buggy: -

-

-   leveldb::Slice slice;
-   if (...) {
-     std::string str = ...;
-     slice = str;
-   }
-   Use(slice);
-
-When the if statement goes out of scope, str will be destroyed and the -backing storage for slice will disappear. -

-

Comparators

-

-The preceding examples used the default ordering function for key, -which orders bytes lexicographically. You can however supply a custom -comparator when opening a database. For example, suppose each -database key consists of two numbers and we should sort by the first -number, breaking ties by the second number. First, define a proper -subclass of leveldb::Comparator that expresses these rules: -

-

-  class TwoPartComparator : public leveldb::Comparator {
-   public:
-    // Three-way comparison function:
-    //   if a < b: negative result
-    //   if a > b: positive result
-    //   else: zero result
-    int Compare(const leveldb::Slice& a, const leveldb::Slice& b) const {
-      int a1, a2, b1, b2;
-      ParseKey(a, &a1, &a2);
-      ParseKey(b, &b1, &b2);
-      if (a1 < b1) return -1;
-      if (a1 > b1) return +1;
-      if (a2 < b2) return -1;
-      if (a2 > b2) return +1;
-      return 0;
-    }
-
-    // Ignore the following methods for now:
-    const char* Name() const { return "TwoPartComparator"; }
-    void FindShortestSeparator(std::string*, const leveldb::Slice&) const { }
-    void FindShortSuccessor(std::string*) const { }
-  };
-
-Now create a database using this custom comparator: -

-

-  TwoPartComparator cmp;
-  leveldb::DB* db;
-  leveldb::Options options;
-  options.create_if_missing = true;
-  options.comparator = &cmp;
-  leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
-  ...
-
-

Backwards compatibility

-

-The result of the comparator's Name method is attached to the -database when it is created, and is checked on every subsequent -database open. If the name changes, the leveldb::DB::Open call will -fail. Therefore, change the name if and only if the new key format -and comparison function are incompatible with existing databases, and -it is ok to discard the contents of all existing databases. -

-You can however still gradually evolve your key format over time with -a little bit of pre-planning. For example, you could store a version -number at the end of each key (one byte should suffice for most uses). -When you wish to switch to a new key format (e.g., adding an optional -third part to the keys processed by TwoPartComparator), -(a) keep the same comparator name (b) increment the version number -for new keys (c) change the comparator function so it uses the -version numbers found in the keys to decide how to interpret them. -

-

Performance

-

-Performance can be tuned by changing the default values of the -types defined in include/leveldb/options.h. - -

-

Block size

-

-leveldb groups adjacent keys together into the same block and such a -block is the unit of transfer to and from persistent storage. The -default block size is approximately 4096 uncompressed bytes. -Applications that mostly do bulk scans over the contents of the -database may wish to increase this size. Applications that do a lot -of point reads of small values may wish to switch to a smaller block -size if performance measurements indicate an improvement. There isn't -much benefit in using blocks smaller than one kilobyte, or larger than -a few megabytes. Also note that compression will be more effective -with larger block sizes. -

-

Compression

-

-Each block is individually compressed before being written to -persistent storage. Compression is on by default since the default -compression method is very fast, and is automatically disabled for -uncompressible data. In rare cases, applications may want to disable -compression entirely, but should only do so if benchmarks show a -performance improvement: -

-

-  leveldb::Options options;
-  options.compression = leveldb::kNoCompression;
-  ... leveldb::DB::Open(options, name, ...) ....
-
-

Cache

-

-The contents of the database are stored in a set of files in the -filesystem and each file stores a sequence of compressed blocks. If -options.cache is non-NULL, it is used to cache frequently used -uncompressed block contents. -

-

-  #include "leveldb/cache.h"
-
-  leveldb::Options options;
-  options.cache = leveldb::NewLRUCache(100 * 1048576);  // 100MB cache
-  leveldb::DB* db;
-  leveldb::DB::Open(options, name, &db);
-  ... use the db ...
-  delete db
-  delete options.cache;
-
-Note that the cache holds uncompressed data, and therefore it should -be sized according to application level data sizes, without any -reduction from compression. (Caching of compressed blocks is left to -the operating system buffer cache, or any custom Env -implementation provided by the client.) -

-When performing a bulk read, the application may wish to disable -caching so that the data processed by the bulk read does not end up -displacing most of the cached contents. A per-iterator option can be -used to achieve this: -

-

-  leveldb::ReadOptions options;
-  options.fill_cache = false;
-  leveldb::Iterator* it = db->NewIterator(options);
-  for (it->SeekToFirst(); it->Valid(); it->Next()) {
-    ...
-  }
-
-

Key Layout

-

-Note that the unit of disk transfer and caching is a block. Adjacent -keys (according to the database sort order) will usually be placed in -the same block. Therefore the application can improve its performance -by placing keys that are accessed together near each other and placing -infrequently used keys in a separate region of the key space. -

-For example, suppose we are implementing a simple file system on top -of leveldb. The types of entries we might wish to store are: -

-

-   filename -> permission-bits, length, list of file_block_ids
-   file_block_id -> data
-
-We might want to prefix filename keys with one letter (say '/') and the -file_block_id keys with a different letter (say '0') so that scans -over just the metadata do not force us to fetch and cache bulky file -contents. -

-

Filters

-

-Because of the way leveldb data is organized on disk, -a single Get() call may involve multiple reads from disk. -The optional FilterPolicy mechanism can be used to reduce -the number of disk reads substantially. -

-   leveldb::Options options;
-   options.filter_policy = NewBloomFilterPolicy(10);
-   leveldb::DB* db;
-   leveldb::DB::Open(options, "/tmp/testdb", &db);
-   ... use the database ...
-   delete db;
-   delete options.filter_policy;
-
-The preceding code associates a -Bloom filter -based filtering policy with the database. Bloom filter based -filtering relies on keeping some number of bits of data in memory per -key (in this case 10 bits per key since that is the argument we passed -to NewBloomFilterPolicy). This filter will reduce the number of unnecessary -disk reads needed for Get() calls by a factor of -approximately a 100. Increasing the bits per key will lead to a -larger reduction at the cost of more memory usage. We recommend that -applications whose working set does not fit in memory and that do a -lot of random reads set a filter policy. -

-If you are using a custom comparator, you should ensure that the filter -policy you are using is compatible with your comparator. For example, -consider a comparator that ignores trailing spaces when comparing keys. -NewBloomFilterPolicy must not be used with such a comparator. -Instead, the application should provide a custom filter policy that -also ignores trailing spaces. For example: -

-  class CustomFilterPolicy : public leveldb::FilterPolicy {
-   private:
-    FilterPolicy* builtin_policy_;
-   public:
-    CustomFilterPolicy() : builtin_policy_(NewBloomFilterPolicy(10)) { }
-    ~CustomFilterPolicy() { delete builtin_policy_; }
-
-    const char* Name() const { return "IgnoreTrailingSpacesFilter"; }
-
-    void CreateFilter(const Slice* keys, int n, std::string* dst) const {
-      // Use builtin bloom filter code after removing trailing spaces
-      std::vector<Slice> trimmed(n);
-      for (int i = 0; i < n; i++) {
-        trimmed[i] = RemoveTrailingSpaces(keys[i]);
-      }
-      return builtin_policy_->CreateFilter(&trimmed[i], n, dst);
-    }
-
-    bool KeyMayMatch(const Slice& key, const Slice& filter) const {
-      // Use builtin bloom filter code after removing trailing spaces
-      return builtin_policy_->KeyMayMatch(RemoveTrailingSpaces(key), filter);
-    }
-  };
-
-

-Advanced applications may provide a filter policy that does not use -a bloom filter but uses some other mechanism for summarizing a set -of keys. See leveldb/filter_policy.h for detail. -

-

Checksums

-

-leveldb associates checksums with all data it stores in the file system. -There are two separate controls provided over how aggressively these -checksums are verified: -

-

    -
  • ReadOptions::verify_checksums may be set to true to force - checksum verification of all data that is read from the file system on - behalf of a particular read. By default, no such verification is - done. -

    -

  • Options::paranoid_checks may be set to true before opening a - database to make the database implementation raise an error as soon as - it detects an internal corruption. Depending on which portion of the - database has been corrupted, the error may be raised when the database - is opened, or later by another database operation. By default, - paranoid checking is off so that the database can be used even if - parts of its persistent storage have been corrupted. -

    - If a database is corrupted (perhaps it cannot be opened when - paranoid checking is turned on), the leveldb::RepairDB function - may be used to recover as much of the data as possible -

    -

-

Approximate Sizes

-

-The GetApproximateSizes method can used to get the approximate -number of bytes of file system space used by one or more key ranges. -

-

-   leveldb::Range ranges[2];
-   ranges[0] = leveldb::Range("a", "c");
-   ranges[1] = leveldb::Range("x", "z");
-   uint64_t sizes[2];
-   leveldb::Status s = db->GetApproximateSizes(ranges, 2, sizes);
-
-The preceding call will set sizes[0] to the approximate number of -bytes of file system space used by the key range [a..c) and -sizes[1] to the approximate number of bytes used by the key range -[x..z). -

-

Environment

-

-All file operations (and other operating system calls) issued by the -leveldb implementation are routed through a leveldb::Env object. -Sophisticated clients may wish to provide their own Env -implementation to get better control. For example, an application may -introduce artificial delays in the file IO paths to limit the impact -of leveldb on other activities in the system. -

-

-  class SlowEnv : public leveldb::Env {
-    .. implementation of the Env interface ...
-  };
-
-  SlowEnv env;
-  leveldb::Options options;
-  options.env = &env;
-  Status s = leveldb::DB::Open(options, ...);
-
-

Porting

-

-leveldb may be ported to a new platform by providing platform -specific implementations of the types/methods/functions exported by -leveldb/port/port.h. See leveldb/port/port_example.h for more -details. -

-In addition, the new platform may need a new default leveldb::Env -implementation. See leveldb/util/env_posix.h for an example. - -

Other Information

- -

-Details about the leveldb implementation may be found in -the following documents: -

- - - diff --git a/src/leveldb/doc/log_format.txt b/src/leveldb/doc/log_format.txt deleted file mode 100644 index 4cca5ef6ea..0000000000 --- a/src/leveldb/doc/log_format.txt +++ /dev/null @@ -1,75 +0,0 @@ -The log file contents are a sequence of 32KB blocks. The only -exception is that the tail of the file may contain a partial block. - -Each block consists of a sequence of records: - block := record* trailer? - record := - checksum: uint32 // crc32c of type and data[] ; little-endian - length: uint16 // little-endian - type: uint8 // One of FULL, FIRST, MIDDLE, LAST - data: uint8[length] - -A record never starts within the last six bytes of a block (since it -won't fit). Any leftover bytes here form the trailer, which must -consist entirely of zero bytes and must be skipped by readers. - -Aside: if exactly seven bytes are left in the current block, and a new -non-zero length record is added, the writer must emit a FIRST record -(which contains zero bytes of user data) to fill up the trailing seven -bytes of the block and then emit all of the user data in subsequent -blocks. - -More types may be added in the future. Some Readers may skip record -types they do not understand, others may report that some data was -skipped. - -FULL == 1 -FIRST == 2 -MIDDLE == 3 -LAST == 4 - -The FULL record contains the contents of an entire user record. - -FIRST, MIDDLE, LAST are types used for user records that have been -split into multiple fragments (typically because of block boundaries). -FIRST is the type of the first fragment of a user record, LAST is the -type of the last fragment of a user record, and MIDDLE is the type of -all interior fragments of a user record. - -Example: consider a sequence of user records: - A: length 1000 - B: length 97270 - C: length 8000 -A will be stored as a FULL record in the first block. - -B will be split into three fragments: first fragment occupies the rest -of the first block, second fragment occupies the entirety of the -second block, and the third fragment occupies a prefix of the third -block. This will leave six bytes free in the third block, which will -be left empty as the trailer. - -C will be stored as a FULL record in the fourth block. - -=================== - -Some benefits over the recordio format: - -(1) We do not need any heuristics for resyncing - just go to next -block boundary and scan. If there is a corruption, skip to the next -block. As a side-benefit, we do not get confused when part of the -contents of one log file are embedded as a record inside another log -file. - -(2) Splitting at approximate boundaries (e.g., for mapreduce) is -simple: find the next block boundary and skip records until we -hit a FULL or FIRST record. - -(3) We do not need extra buffering for large records. - -Some downsides compared to recordio format: - -(1) No packing of tiny records. This could be fixed by adding a new -record type, so it is a shortcoming of the current implementation, -not necessarily the format. - -(2) No compression. Again, this could be fixed by adding new record types. diff --git a/src/leveldb/doc/table_format.txt b/src/leveldb/doc/table_format.txt deleted file mode 100644 index ca8f9b4460..0000000000 --- a/src/leveldb/doc/table_format.txt +++ /dev/null @@ -1,104 +0,0 @@ -File format -=========== - - - [data block 1] - [data block 2] - ... - [data block N] - [meta block 1] - ... - [meta block K] - [metaindex block] - [index block] - [Footer] (fixed size; starts at file_size - sizeof(Footer)) - - -The file contains internal pointers. Each such pointer is called -a BlockHandle and contains the following information: - offset: varint64 - size: varint64 -See https://developers.google.com/protocol-buffers/docs/encoding#varints -for an explanation of varint64 format. - -(1) The sequence of key/value pairs in the file are stored in sorted -order and partitioned into a sequence of data blocks. These blocks -come one after another at the beginning of the file. Each data block -is formatted according to the code in block_builder.cc, and then -optionally compressed. - -(2) After the data blocks we store a bunch of meta blocks. The -supported meta block types are described below. More meta block types -may be added in the future. Each meta block is again formatted using -block_builder.cc and then optionally compressed. - -(3) A "metaindex" block. It contains one entry for every other meta -block where the key is the name of the meta block and the value is a -BlockHandle pointing to that meta block. - -(4) An "index" block. This block contains one entry per data block, -where the key is a string >= last key in that data block and before -the first key in the successive data block. The value is the -BlockHandle for the data block. - -(6) At the very end of the file is a fixed length footer that contains -the BlockHandle of the metaindex and index blocks as well as a magic number. - metaindex_handle: char[p]; // Block handle for metaindex - index_handle: char[q]; // Block handle for index - padding: char[40-p-q]; // zeroed bytes to make fixed length - // (40==2*BlockHandle::kMaxEncodedLength) - magic: fixed64; // == 0xdb4775248b80fb57 (little-endian) - -"filter" Meta Block -------------------- - -If a "FilterPolicy" was specified when the database was opened, a -filter block is stored in each table. The "metaindex" block contains -an entry that maps from "filter." to the BlockHandle for the filter -block where "" is the string returned by the filter policy's -"Name()" method. - -The filter block stores a sequence of filters, where filter i contains -the output of FilterPolicy::CreateFilter() on all keys that are stored -in a block whose file offset falls within the range - - [ i*base ... (i+1)*base-1 ] - -Currently, "base" is 2KB. So for example, if blocks X and Y start in -the range [ 0KB .. 2KB-1 ], all of the keys in X and Y will be -converted to a filter by calling FilterPolicy::CreateFilter(), and the -resulting filter will be stored as the first filter in the filter -block. - -The filter block is formatted as follows: - - [filter 0] - [filter 1] - [filter 2] - ... - [filter N-1] - - [offset of filter 0] : 4 bytes - [offset of filter 1] : 4 bytes - [offset of filter 2] : 4 bytes - ... - [offset of filter N-1] : 4 bytes - - [offset of beginning of offset array] : 4 bytes - lg(base) : 1 byte - -The offset array at the end of the filter block allows efficient -mapping from a data block offset to the corresponding filter. - -"stats" Meta Block ------------------- - -This meta block contains a bunch of stats. The key is the name -of the statistic. The value contains the statistic. -TODO(postrelease): record following stats. - data size - index size - key size (uncompressed) - value size (uncompressed) - number of entries - number of data blocks diff --git a/src/leveldb/helpers/memenv/memenv.cc b/src/leveldb/helpers/memenv/memenv.cc deleted file mode 100644 index 43ef2e0729..0000000000 --- a/src/leveldb/helpers/memenv/memenv.cc +++ /dev/null @@ -1,385 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "helpers/memenv/memenv.h" - -#include "leveldb/env.h" -#include "leveldb/status.h" -#include "port/port.h" -#include "util/mutexlock.h" -#include -#include -#include -#include - -namespace leveldb { - -namespace { - -class FileState { - public: - // FileStates are reference counted. The initial reference count is zero - // and the caller must call Ref() at least once. - FileState() : refs_(0), size_(0) {} - - // Increase the reference count. - void Ref() { - MutexLock lock(&refs_mutex_); - ++refs_; - } - - // Decrease the reference count. Delete if this is the last reference. - void Unref() { - bool do_delete = false; - - { - MutexLock lock(&refs_mutex_); - --refs_; - assert(refs_ >= 0); - if (refs_ <= 0) { - do_delete = true; - } - } - - if (do_delete) { - delete this; - } - } - - uint64_t Size() const { return size_; } - - Status Read(uint64_t offset, size_t n, Slice* result, char* scratch) const { - if (offset > size_) { - return Status::IOError("Offset greater than file size."); - } - const uint64_t available = size_ - offset; - if (n > available) { - n = static_cast(available); - } - if (n == 0) { - *result = Slice(); - return Status::OK(); - } - - assert(offset / kBlockSize <= SIZE_MAX); - size_t block = static_cast(offset / kBlockSize); - size_t block_offset = offset % kBlockSize; - - if (n <= kBlockSize - block_offset) { - // The requested bytes are all in the first block. - *result = Slice(blocks_[block] + block_offset, n); - return Status::OK(); - } - - size_t bytes_to_copy = n; - char* dst = scratch; - - while (bytes_to_copy > 0) { - size_t avail = kBlockSize - block_offset; - if (avail > bytes_to_copy) { - avail = bytes_to_copy; - } - memcpy(dst, blocks_[block] + block_offset, avail); - - bytes_to_copy -= avail; - dst += avail; - block++; - block_offset = 0; - } - - *result = Slice(scratch, n); - return Status::OK(); - } - - Status Append(const Slice& data) { - const char* src = data.data(); - size_t src_len = data.size(); - - while (src_len > 0) { - size_t avail; - size_t offset = size_ % kBlockSize; - - if (offset != 0) { - // There is some room in the last block. - avail = kBlockSize - offset; - } else { - // No room in the last block; push new one. - blocks_.push_back(new char[kBlockSize]); - avail = kBlockSize; - } - - if (avail > src_len) { - avail = src_len; - } - memcpy(blocks_.back() + offset, src, avail); - src_len -= avail; - src += avail; - size_ += avail; - } - - return Status::OK(); - } - - private: - // Private since only Unref() should be used to delete it. - ~FileState() { - for (std::vector::iterator i = blocks_.begin(); i != blocks_.end(); - ++i) { - delete [] *i; - } - } - - // No copying allowed. - FileState(const FileState&); - void operator=(const FileState&); - - port::Mutex refs_mutex_; - int refs_; // Protected by refs_mutex_; - - // The following fields are not protected by any mutex. They are only mutable - // while the file is being written, and concurrent access is not allowed - // to writable files. - std::vector blocks_; - uint64_t size_; - - enum { kBlockSize = 8 * 1024 }; -}; - -class SequentialFileImpl : public SequentialFile { - public: - explicit SequentialFileImpl(FileState* file) : file_(file), pos_(0) { - file_->Ref(); - } - - ~SequentialFileImpl() { - file_->Unref(); - } - - virtual Status Read(size_t n, Slice* result, char* scratch) { - Status s = file_->Read(pos_, n, result, scratch); - if (s.ok()) { - pos_ += result->size(); - } - return s; - } - - virtual Status Skip(uint64_t n) { - if (pos_ > file_->Size()) { - return Status::IOError("pos_ > file_->Size()"); - } - const uint64_t available = file_->Size() - pos_; - if (n > available) { - n = available; - } - pos_ += n; - return Status::OK(); - } - - private: - FileState* file_; - uint64_t pos_; -}; - -class RandomAccessFileImpl : public RandomAccessFile { - public: - explicit RandomAccessFileImpl(FileState* file) : file_(file) { - file_->Ref(); - } - - ~RandomAccessFileImpl() { - file_->Unref(); - } - - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const { - return file_->Read(offset, n, result, scratch); - } - - private: - FileState* file_; -}; - -class WritableFileImpl : public WritableFile { - public: - WritableFileImpl(FileState* file) : file_(file) { - file_->Ref(); - } - - ~WritableFileImpl() { - file_->Unref(); - } - - virtual Status Append(const Slice& data) { - return file_->Append(data); - } - - virtual Status Close() { return Status::OK(); } - virtual Status Flush() { return Status::OK(); } - virtual Status Sync() { return Status::OK(); } - - private: - FileState* file_; -}; - -class NoOpLogger : public Logger { - public: - virtual void Logv(const char* format, va_list ap) { } -}; - -class InMemoryEnv : public EnvWrapper { - public: - explicit InMemoryEnv(Env* base_env) : EnvWrapper(base_env) { } - - virtual ~InMemoryEnv() { - for (FileSystem::iterator i = file_map_.begin(); i != file_map_.end(); ++i){ - i->second->Unref(); - } - } - - // Partial implementation of the Env interface. - virtual Status NewSequentialFile(const std::string& fname, - SequentialFile** result) { - MutexLock lock(&mutex_); - if (file_map_.find(fname) == file_map_.end()) { - *result = NULL; - return Status::IOError(fname, "File not found"); - } - - *result = new SequentialFileImpl(file_map_[fname]); - return Status::OK(); - } - - virtual Status NewRandomAccessFile(const std::string& fname, - RandomAccessFile** result) { - MutexLock lock(&mutex_); - if (file_map_.find(fname) == file_map_.end()) { - *result = NULL; - return Status::IOError(fname, "File not found"); - } - - *result = new RandomAccessFileImpl(file_map_[fname]); - return Status::OK(); - } - - virtual Status NewWritableFile(const std::string& fname, - WritableFile** result) { - MutexLock lock(&mutex_); - if (file_map_.find(fname) != file_map_.end()) { - DeleteFileInternal(fname); - } - - FileState* file = new FileState(); - file->Ref(); - file_map_[fname] = file; - - *result = new WritableFileImpl(file); - return Status::OK(); - } - - virtual bool FileExists(const std::string& fname) { - MutexLock lock(&mutex_); - return file_map_.find(fname) != file_map_.end(); - } - - virtual Status GetChildren(const std::string& dir, - std::vector* result) { - MutexLock lock(&mutex_); - result->clear(); - - for (FileSystem::iterator i = file_map_.begin(); i != file_map_.end(); ++i){ - const std::string& filename = i->first; - - if (filename.size() >= dir.size() + 1 && filename[dir.size()] == '/' && - Slice(filename).starts_with(Slice(dir))) { - result->push_back(filename.substr(dir.size() + 1)); - } - } - - return Status::OK(); - } - - void DeleteFileInternal(const std::string& fname) { - if (file_map_.find(fname) == file_map_.end()) { - return; - } - - file_map_[fname]->Unref(); - file_map_.erase(fname); - } - - virtual Status DeleteFile(const std::string& fname) { - MutexLock lock(&mutex_); - if (file_map_.find(fname) == file_map_.end()) { - return Status::IOError(fname, "File not found"); - } - - DeleteFileInternal(fname); - return Status::OK(); - } - - virtual Status CreateDir(const std::string& dirname) { - return Status::OK(); - } - - virtual Status DeleteDir(const std::string& dirname) { - return Status::OK(); - } - - virtual Status GetFileSize(const std::string& fname, uint64_t* file_size) { - MutexLock lock(&mutex_); - if (file_map_.find(fname) == file_map_.end()) { - return Status::IOError(fname, "File not found"); - } - - *file_size = file_map_[fname]->Size(); - return Status::OK(); - } - - virtual Status RenameFile(const std::string& src, - const std::string& target) { - MutexLock lock(&mutex_); - if (file_map_.find(src) == file_map_.end()) { - return Status::IOError(src, "File not found"); - } - - DeleteFileInternal(target); - file_map_[target] = file_map_[src]; - file_map_.erase(src); - return Status::OK(); - } - - virtual Status LockFile(const std::string& fname, FileLock** lock) { - *lock = new FileLock; - return Status::OK(); - } - - virtual Status UnlockFile(FileLock* lock) { - delete lock; - return Status::OK(); - } - - virtual Status GetTestDirectory(std::string* path) { - *path = "/test"; - return Status::OK(); - } - - virtual Status NewLogger(const std::string& fname, Logger** result) { - *result = new NoOpLogger; - return Status::OK(); - } - - private: - // Map from filenames to FileState objects, representing a simple file system. - typedef std::map FileSystem; - port::Mutex mutex_; - FileSystem file_map_; // Protected by mutex_. -}; - -} // namespace - -Env* NewMemEnv(Env* base_env) { - return new InMemoryEnv(base_env); -} - -} // namespace leveldb diff --git a/src/leveldb/helpers/memenv/memenv.h b/src/leveldb/helpers/memenv/memenv.h deleted file mode 100644 index 03b88de761..0000000000 --- a/src/leveldb/helpers/memenv/memenv.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_HELPERS_MEMENV_MEMENV_H_ -#define STORAGE_LEVELDB_HELPERS_MEMENV_MEMENV_H_ - -namespace leveldb { - -class Env; - -// Returns a new environment that stores its data in memory and delegates -// all non-file-storage tasks to base_env. The caller must delete the result -// when it is no longer needed. -// *base_env must remain live while the result is in use. -Env* NewMemEnv(Env* base_env); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_HELPERS_MEMENV_MEMENV_H_ diff --git a/src/leveldb/helpers/memenv/memenv_test.cc b/src/leveldb/helpers/memenv/memenv_test.cc deleted file mode 100644 index a44310fed8..0000000000 --- a/src/leveldb/helpers/memenv/memenv_test.cc +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "helpers/memenv/memenv.h" - -#include "db/db_impl.h" -#include "leveldb/db.h" -#include "leveldb/env.h" -#include "util/testharness.h" -#include -#include - -namespace leveldb { - -class MemEnvTest { - public: - Env* env_; - - MemEnvTest() - : env_(NewMemEnv(Env::Default())) { - } - ~MemEnvTest() { - delete env_; - } -}; - -TEST(MemEnvTest, Basics) { - uint64_t file_size; - WritableFile* writable_file; - std::vector children; - - ASSERT_OK(env_->CreateDir("/dir")); - - // Check that the directory is empty. - ASSERT_TRUE(!env_->FileExists("/dir/non_existent")); - ASSERT_TRUE(!env_->GetFileSize("/dir/non_existent", &file_size).ok()); - ASSERT_OK(env_->GetChildren("/dir", &children)); - ASSERT_EQ(0, children.size()); - - // Create a file. - ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); - delete writable_file; - - // Check that the file exists. - ASSERT_TRUE(env_->FileExists("/dir/f")); - ASSERT_OK(env_->GetFileSize("/dir/f", &file_size)); - ASSERT_EQ(0, file_size); - ASSERT_OK(env_->GetChildren("/dir", &children)); - ASSERT_EQ(1, children.size()); - ASSERT_EQ("f", children[0]); - - // Write to the file. - ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); - ASSERT_OK(writable_file->Append("abc")); - delete writable_file; - - // Check for expected size. - ASSERT_OK(env_->GetFileSize("/dir/f", &file_size)); - ASSERT_EQ(3, file_size); - - // Check that renaming works. - ASSERT_TRUE(!env_->RenameFile("/dir/non_existent", "/dir/g").ok()); - ASSERT_OK(env_->RenameFile("/dir/f", "/dir/g")); - ASSERT_TRUE(!env_->FileExists("/dir/f")); - ASSERT_TRUE(env_->FileExists("/dir/g")); - ASSERT_OK(env_->GetFileSize("/dir/g", &file_size)); - ASSERT_EQ(3, file_size); - - // Check that opening non-existent file fails. - SequentialFile* seq_file; - RandomAccessFile* rand_file; - ASSERT_TRUE(!env_->NewSequentialFile("/dir/non_existent", &seq_file).ok()); - ASSERT_TRUE(!seq_file); - ASSERT_TRUE(!env_->NewRandomAccessFile("/dir/non_existent", &rand_file).ok()); - ASSERT_TRUE(!rand_file); - - // Check that deleting works. - ASSERT_TRUE(!env_->DeleteFile("/dir/non_existent").ok()); - ASSERT_OK(env_->DeleteFile("/dir/g")); - ASSERT_TRUE(!env_->FileExists("/dir/g")); - ASSERT_OK(env_->GetChildren("/dir", &children)); - ASSERT_EQ(0, children.size()); - ASSERT_OK(env_->DeleteDir("/dir")); -} - -TEST(MemEnvTest, ReadWrite) { - WritableFile* writable_file; - SequentialFile* seq_file; - RandomAccessFile* rand_file; - Slice result; - char scratch[100]; - - ASSERT_OK(env_->CreateDir("/dir")); - - ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); - ASSERT_OK(writable_file->Append("hello ")); - ASSERT_OK(writable_file->Append("world")); - delete writable_file; - - // Read sequentially. - ASSERT_OK(env_->NewSequentialFile("/dir/f", &seq_file)); - ASSERT_OK(seq_file->Read(5, &result, scratch)); // Read "hello". - ASSERT_EQ(0, result.compare("hello")); - ASSERT_OK(seq_file->Skip(1)); - ASSERT_OK(seq_file->Read(1000, &result, scratch)); // Read "world". - ASSERT_EQ(0, result.compare("world")); - ASSERT_OK(seq_file->Read(1000, &result, scratch)); // Try reading past EOF. - ASSERT_EQ(0, result.size()); - ASSERT_OK(seq_file->Skip(100)); // Try to skip past end of file. - ASSERT_OK(seq_file->Read(1000, &result, scratch)); - ASSERT_EQ(0, result.size()); - delete seq_file; - - // Random reads. - ASSERT_OK(env_->NewRandomAccessFile("/dir/f", &rand_file)); - ASSERT_OK(rand_file->Read(6, 5, &result, scratch)); // Read "world". - ASSERT_EQ(0, result.compare("world")); - ASSERT_OK(rand_file->Read(0, 5, &result, scratch)); // Read "hello". - ASSERT_EQ(0, result.compare("hello")); - ASSERT_OK(rand_file->Read(10, 100, &result, scratch)); // Read "d". - ASSERT_EQ(0, result.compare("d")); - - // Too high offset. - ASSERT_TRUE(!rand_file->Read(1000, 5, &result, scratch).ok()); - delete rand_file; -} - -TEST(MemEnvTest, Locks) { - FileLock* lock; - - // These are no-ops, but we test they return success. - ASSERT_OK(env_->LockFile("some file", &lock)); - ASSERT_OK(env_->UnlockFile(lock)); -} - -TEST(MemEnvTest, Misc) { - std::string test_dir; - ASSERT_OK(env_->GetTestDirectory(&test_dir)); - ASSERT_TRUE(!test_dir.empty()); - - WritableFile* writable_file; - ASSERT_OK(env_->NewWritableFile("/a/b", &writable_file)); - - // These are no-ops, but we test they return success. - ASSERT_OK(writable_file->Sync()); - ASSERT_OK(writable_file->Flush()); - ASSERT_OK(writable_file->Close()); - delete writable_file; -} - -TEST(MemEnvTest, LargeWrite) { - const size_t kWriteSize = 300 * 1024; - char* scratch = new char[kWriteSize * 2]; - - std::string write_data; - for (size_t i = 0; i < kWriteSize; ++i) { - write_data.append(1, static_cast(i)); - } - - WritableFile* writable_file; - ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); - ASSERT_OK(writable_file->Append("foo")); - ASSERT_OK(writable_file->Append(write_data)); - delete writable_file; - - SequentialFile* seq_file; - Slice result; - ASSERT_OK(env_->NewSequentialFile("/dir/f", &seq_file)); - ASSERT_OK(seq_file->Read(3, &result, scratch)); // Read "foo". - ASSERT_EQ(0, result.compare("foo")); - - size_t read = 0; - std::string read_data; - while (read < kWriteSize) { - ASSERT_OK(seq_file->Read(kWriteSize - read, &result, scratch)); - read_data.append(result.data(), result.size()); - read += result.size(); - } - ASSERT_TRUE(write_data == read_data); - delete seq_file; - delete [] scratch; -} - -TEST(MemEnvTest, DBTest) { - Options options; - options.create_if_missing = true; - options.env = env_; - DB* db; - - const Slice keys[] = {Slice("aaa"), Slice("bbb"), Slice("ccc")}; - const Slice vals[] = {Slice("foo"), Slice("bar"), Slice("baz")}; - - ASSERT_OK(DB::Open(options, "/dir/db", &db)); - for (size_t i = 0; i < 3; ++i) { - ASSERT_OK(db->Put(WriteOptions(), keys[i], vals[i])); - } - - for (size_t i = 0; i < 3; ++i) { - std::string res; - ASSERT_OK(db->Get(ReadOptions(), keys[i], &res)); - ASSERT_TRUE(res == vals[i]); - } - - Iterator* iterator = db->NewIterator(ReadOptions()); - iterator->SeekToFirst(); - for (size_t i = 0; i < 3; ++i) { - ASSERT_TRUE(iterator->Valid()); - ASSERT_TRUE(keys[i] == iterator->key()); - ASSERT_TRUE(vals[i] == iterator->value()); - iterator->Next(); - } - ASSERT_TRUE(!iterator->Valid()); - delete iterator; - - DBImpl* dbi = reinterpret_cast(db); - ASSERT_OK(dbi->TEST_CompactMemTable()); - - for (size_t i = 0; i < 3; ++i) { - std::string res; - ASSERT_OK(db->Get(ReadOptions(), keys[i], &res)); - ASSERT_TRUE(res == vals[i]); - } - - delete db; -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/include/leveldb/c.h b/src/leveldb/include/leveldb/c.h deleted file mode 100644 index 1048fe3b86..0000000000 --- a/src/leveldb/include/leveldb/c.h +++ /dev/null @@ -1,290 +0,0 @@ -/* Copyright (c) 2011 The LevelDB Authors. All rights reserved. - Use of this source code is governed by a BSD-style license that can be - found in the LICENSE file. See the AUTHORS file for names of contributors. - - C bindings for leveldb. May be useful as a stable ABI that can be - used by programs that keep leveldb in a shared library, or for - a JNI api. - - Does not support: - . getters for the option types - . custom comparators that implement key shortening - . custom iter, db, env, cache implementations using just the C bindings - - Some conventions: - - (1) We expose just opaque struct pointers and functions to clients. - This allows us to change internal representations without having to - recompile clients. - - (2) For simplicity, there is no equivalent to the Slice type. Instead, - the caller has to pass the pointer and length as separate - arguments. - - (3) Errors are represented by a null-terminated c string. NULL - means no error. All operations that can raise an error are passed - a "char** errptr" as the last argument. One of the following must - be true on entry: - *errptr == NULL - *errptr points to a malloc()ed null-terminated error message - (On Windows, *errptr must have been malloc()-ed by this library.) - On success, a leveldb routine leaves *errptr unchanged. - On failure, leveldb frees the old value of *errptr and - set *errptr to a malloc()ed error message. - - (4) Bools have the type unsigned char (0 == false; rest == true) - - (5) All of the pointer arguments must be non-NULL. -*/ - -#ifndef STORAGE_LEVELDB_INCLUDE_C_H_ -#define STORAGE_LEVELDB_INCLUDE_C_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include - -/* Exported types */ - -typedef struct leveldb_t leveldb_t; -typedef struct leveldb_cache_t leveldb_cache_t; -typedef struct leveldb_comparator_t leveldb_comparator_t; -typedef struct leveldb_env_t leveldb_env_t; -typedef struct leveldb_filelock_t leveldb_filelock_t; -typedef struct leveldb_filterpolicy_t leveldb_filterpolicy_t; -typedef struct leveldb_iterator_t leveldb_iterator_t; -typedef struct leveldb_logger_t leveldb_logger_t; -typedef struct leveldb_options_t leveldb_options_t; -typedef struct leveldb_randomfile_t leveldb_randomfile_t; -typedef struct leveldb_readoptions_t leveldb_readoptions_t; -typedef struct leveldb_seqfile_t leveldb_seqfile_t; -typedef struct leveldb_snapshot_t leveldb_snapshot_t; -typedef struct leveldb_writablefile_t leveldb_writablefile_t; -typedef struct leveldb_writebatch_t leveldb_writebatch_t; -typedef struct leveldb_writeoptions_t leveldb_writeoptions_t; - -/* DB operations */ - -extern leveldb_t* leveldb_open( - const leveldb_options_t* options, - const char* name, - char** errptr); - -extern void leveldb_close(leveldb_t* db); - -extern void leveldb_put( - leveldb_t* db, - const leveldb_writeoptions_t* options, - const char* key, size_t keylen, - const char* val, size_t vallen, - char** errptr); - -extern void leveldb_delete( - leveldb_t* db, - const leveldb_writeoptions_t* options, - const char* key, size_t keylen, - char** errptr); - -extern void leveldb_write( - leveldb_t* db, - const leveldb_writeoptions_t* options, - leveldb_writebatch_t* batch, - char** errptr); - -/* Returns NULL if not found. A malloc()ed array otherwise. - Stores the length of the array in *vallen. */ -extern char* leveldb_get( - leveldb_t* db, - const leveldb_readoptions_t* options, - const char* key, size_t keylen, - size_t* vallen, - char** errptr); - -extern leveldb_iterator_t* leveldb_create_iterator( - leveldb_t* db, - const leveldb_readoptions_t* options); - -extern const leveldb_snapshot_t* leveldb_create_snapshot( - leveldb_t* db); - -extern void leveldb_release_snapshot( - leveldb_t* db, - const leveldb_snapshot_t* snapshot); - -/* Returns NULL if property name is unknown. - Else returns a pointer to a malloc()-ed null-terminated value. */ -extern char* leveldb_property_value( - leveldb_t* db, - const char* propname); - -extern void leveldb_approximate_sizes( - leveldb_t* db, - int num_ranges, - const char* const* range_start_key, const size_t* range_start_key_len, - const char* const* range_limit_key, const size_t* range_limit_key_len, - uint64_t* sizes); - -extern void leveldb_compact_range( - leveldb_t* db, - const char* start_key, size_t start_key_len, - const char* limit_key, size_t limit_key_len); - -/* Management operations */ - -extern void leveldb_destroy_db( - const leveldb_options_t* options, - const char* name, - char** errptr); - -extern void leveldb_repair_db( - const leveldb_options_t* options, - const char* name, - char** errptr); - -/* Iterator */ - -extern void leveldb_iter_destroy(leveldb_iterator_t*); -extern unsigned char leveldb_iter_valid(const leveldb_iterator_t*); -extern void leveldb_iter_seek_to_first(leveldb_iterator_t*); -extern void leveldb_iter_seek_to_last(leveldb_iterator_t*); -extern void leveldb_iter_seek(leveldb_iterator_t*, const char* k, size_t klen); -extern void leveldb_iter_next(leveldb_iterator_t*); -extern void leveldb_iter_prev(leveldb_iterator_t*); -extern const char* leveldb_iter_key(const leveldb_iterator_t*, size_t* klen); -extern const char* leveldb_iter_value(const leveldb_iterator_t*, size_t* vlen); -extern void leveldb_iter_get_error(const leveldb_iterator_t*, char** errptr); - -/* Write batch */ - -extern leveldb_writebatch_t* leveldb_writebatch_create(); -extern void leveldb_writebatch_destroy(leveldb_writebatch_t*); -extern void leveldb_writebatch_clear(leveldb_writebatch_t*); -extern void leveldb_writebatch_put( - leveldb_writebatch_t*, - const char* key, size_t klen, - const char* val, size_t vlen); -extern void leveldb_writebatch_delete( - leveldb_writebatch_t*, - const char* key, size_t klen); -extern void leveldb_writebatch_iterate( - leveldb_writebatch_t*, - void* state, - void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen), - void (*deleted)(void*, const char* k, size_t klen)); - -/* Options */ - -extern leveldb_options_t* leveldb_options_create(); -extern void leveldb_options_destroy(leveldb_options_t*); -extern void leveldb_options_set_comparator( - leveldb_options_t*, - leveldb_comparator_t*); -extern void leveldb_options_set_filter_policy( - leveldb_options_t*, - leveldb_filterpolicy_t*); -extern void leveldb_options_set_create_if_missing( - leveldb_options_t*, unsigned char); -extern void leveldb_options_set_error_if_exists( - leveldb_options_t*, unsigned char); -extern void leveldb_options_set_paranoid_checks( - leveldb_options_t*, unsigned char); -extern void leveldb_options_set_env(leveldb_options_t*, leveldb_env_t*); -extern void leveldb_options_set_info_log(leveldb_options_t*, leveldb_logger_t*); -extern void leveldb_options_set_write_buffer_size(leveldb_options_t*, size_t); -extern void leveldb_options_set_max_open_files(leveldb_options_t*, int); -extern void leveldb_options_set_cache(leveldb_options_t*, leveldb_cache_t*); -extern void leveldb_options_set_block_size(leveldb_options_t*, size_t); -extern void leveldb_options_set_block_restart_interval(leveldb_options_t*, int); - -enum { - leveldb_no_compression = 0, - leveldb_snappy_compression = 1 -}; -extern void leveldb_options_set_compression(leveldb_options_t*, int); - -/* Comparator */ - -extern leveldb_comparator_t* leveldb_comparator_create( - void* state, - void (*destructor)(void*), - int (*compare)( - void*, - const char* a, size_t alen, - const char* b, size_t blen), - const char* (*name)(void*)); -extern void leveldb_comparator_destroy(leveldb_comparator_t*); - -/* Filter policy */ - -extern leveldb_filterpolicy_t* leveldb_filterpolicy_create( - void* state, - void (*destructor)(void*), - char* (*create_filter)( - void*, - const char* const* key_array, const size_t* key_length_array, - int num_keys, - size_t* filter_length), - unsigned char (*key_may_match)( - void*, - const char* key, size_t length, - const char* filter, size_t filter_length), - const char* (*name)(void*)); -extern void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t*); - -extern leveldb_filterpolicy_t* leveldb_filterpolicy_create_bloom( - int bits_per_key); - -/* Read options */ - -extern leveldb_readoptions_t* leveldb_readoptions_create(); -extern void leveldb_readoptions_destroy(leveldb_readoptions_t*); -extern void leveldb_readoptions_set_verify_checksums( - leveldb_readoptions_t*, - unsigned char); -extern void leveldb_readoptions_set_fill_cache( - leveldb_readoptions_t*, unsigned char); -extern void leveldb_readoptions_set_snapshot( - leveldb_readoptions_t*, - const leveldb_snapshot_t*); - -/* Write options */ - -extern leveldb_writeoptions_t* leveldb_writeoptions_create(); -extern void leveldb_writeoptions_destroy(leveldb_writeoptions_t*); -extern void leveldb_writeoptions_set_sync( - leveldb_writeoptions_t*, unsigned char); - -/* Cache */ - -extern leveldb_cache_t* leveldb_cache_create_lru(size_t capacity); -extern void leveldb_cache_destroy(leveldb_cache_t* cache); - -/* Env */ - -extern leveldb_env_t* leveldb_create_default_env(); -extern void leveldb_env_destroy(leveldb_env_t*); - -/* Utility */ - -/* Calls free(ptr). - REQUIRES: ptr was malloc()-ed and returned by one of the routines - in this file. Note that in certain cases (typically on Windows), you - may need to call this routine instead of free(ptr) to dispose of - malloc()-ed memory returned by this library. */ -extern void leveldb_free(void* ptr); - -/* Return the major version number for this release. */ -extern int leveldb_major_version(); - -/* Return the minor version number for this release. */ -extern int leveldb_minor_version(); - -#ifdef __cplusplus -} /* end extern "C" */ -#endif - -#endif /* STORAGE_LEVELDB_INCLUDE_C_H_ */ diff --git a/src/leveldb/include/leveldb/cache.h b/src/leveldb/include/leveldb/cache.h deleted file mode 100644 index 1a201e5e0a..0000000000 --- a/src/leveldb/include/leveldb/cache.h +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A Cache is an interface that maps keys to values. It has internal -// synchronization and may be safely accessed concurrently from -// multiple threads. It may automatically evict entries to make room -// for new entries. Values have a specified charge against the cache -// capacity. For example, a cache where the values are variable -// length strings, may use the length of the string as the charge for -// the string. -// -// A builtin cache implementation with a least-recently-used eviction -// policy is provided. Clients may use their own implementations if -// they want something more sophisticated (like scan-resistance, a -// custom eviction policy, variable cache sizing, etc.) - -#ifndef STORAGE_LEVELDB_INCLUDE_CACHE_H_ -#define STORAGE_LEVELDB_INCLUDE_CACHE_H_ - -#include -#include "leveldb/slice.h" - -namespace leveldb { - -class Cache; - -// Create a new cache with a fixed size capacity. This implementation -// of Cache uses a least-recently-used eviction policy. -extern Cache* NewLRUCache(size_t capacity); - -class Cache { - public: - Cache() { } - - // Destroys all existing entries by calling the "deleter" - // function that was passed to the constructor. - virtual ~Cache(); - - // Opaque handle to an entry stored in the cache. - struct Handle { }; - - // Insert a mapping from key->value into the cache and assign it - // the specified charge against the total cache capacity. - // - // Returns a handle that corresponds to the mapping. The caller - // must call this->Release(handle) when the returned mapping is no - // longer needed. - // - // When the inserted entry is no longer needed, the key and - // value will be passed to "deleter". - virtual Handle* Insert(const Slice& key, void* value, size_t charge, - void (*deleter)(const Slice& key, void* value)) = 0; - - // If the cache has no mapping for "key", returns NULL. - // - // Else return a handle that corresponds to the mapping. The caller - // must call this->Release(handle) when the returned mapping is no - // longer needed. - virtual Handle* Lookup(const Slice& key) = 0; - - // Release a mapping returned by a previous Lookup(). - // REQUIRES: handle must not have been released yet. - // REQUIRES: handle must have been returned by a method on *this. - virtual void Release(Handle* handle) = 0; - - // Return the value encapsulated in a handle returned by a - // successful Lookup(). - // REQUIRES: handle must not have been released yet. - // REQUIRES: handle must have been returned by a method on *this. - virtual void* Value(Handle* handle) = 0; - - // If the cache contains entry for key, erase it. Note that the - // underlying entry will be kept around until all existing handles - // to it have been released. - virtual void Erase(const Slice& key) = 0; - - // Return a new numeric id. May be used by multiple clients who are - // sharing the same cache to partition the key space. Typically the - // client will allocate a new id at startup and prepend the id to - // its cache keys. - virtual uint64_t NewId() = 0; - - private: - void LRU_Remove(Handle* e); - void LRU_Append(Handle* e); - void Unref(Handle* e); - - struct Rep; - Rep* rep_; - - // No copying allowed - Cache(const Cache&); - void operator=(const Cache&); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_CACHE_H_ diff --git a/src/leveldb/include/leveldb/comparator.h b/src/leveldb/include/leveldb/comparator.h deleted file mode 100644 index 556b984c76..0000000000 --- a/src/leveldb/include/leveldb/comparator.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_ -#define STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_ - -#include - -namespace leveldb { - -class Slice; - -// A Comparator object provides a total order across slices that are -// used as keys in an sstable or a database. A Comparator implementation -// must be thread-safe since leveldb may invoke its methods concurrently -// from multiple threads. -class Comparator { - public: - virtual ~Comparator(); - - // Three-way comparison. Returns value: - // < 0 iff "a" < "b", - // == 0 iff "a" == "b", - // > 0 iff "a" > "b" - virtual int Compare(const Slice& a, const Slice& b) const = 0; - - // The name of the comparator. Used to check for comparator - // mismatches (i.e., a DB created with one comparator is - // accessed using a different comparator. - // - // The client of this package should switch to a new name whenever - // the comparator implementation changes in a way that will cause - // the relative ordering of any two keys to change. - // - // Names starting with "leveldb." are reserved and should not be used - // by any clients of this package. - virtual const char* Name() const = 0; - - // Advanced functions: these are used to reduce the space requirements - // for internal data structures like index blocks. - - // If *start < limit, changes *start to a short string in [start,limit). - // Simple comparator implementations may return with *start unchanged, - // i.e., an implementation of this method that does nothing is correct. - virtual void FindShortestSeparator( - std::string* start, - const Slice& limit) const = 0; - - // Changes *key to a short string >= *key. - // Simple comparator implementations may return with *key unchanged, - // i.e., an implementation of this method that does nothing is correct. - virtual void FindShortSuccessor(std::string* key) const = 0; -}; - -// Return a builtin comparator that uses lexicographic byte-wise -// ordering. The result remains the property of this module and -// must not be deleted. -extern const Comparator* BytewiseComparator(); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_ diff --git a/src/leveldb/include/leveldb/db.h b/src/leveldb/include/leveldb/db.h deleted file mode 100644 index 4c169bf22e..0000000000 --- a/src/leveldb/include/leveldb/db.h +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_DB_H_ -#define STORAGE_LEVELDB_INCLUDE_DB_H_ - -#include -#include -#include "leveldb/iterator.h" -#include "leveldb/options.h" - -namespace leveldb { - -// Update Makefile if you change these -static const int kMajorVersion = 1; -static const int kMinorVersion = 18; - -struct Options; -struct ReadOptions; -struct WriteOptions; -class WriteBatch; - -// Abstract handle to particular state of a DB. -// A Snapshot is an immutable object and can therefore be safely -// accessed from multiple threads without any external synchronization. -class Snapshot { - protected: - virtual ~Snapshot(); -}; - -// A range of keys -struct Range { - Slice start; // Included in the range - Slice limit; // Not included in the range - - Range() { } - Range(const Slice& s, const Slice& l) : start(s), limit(l) { } -}; - -// A DB is a persistent ordered map from keys to values. -// A DB is safe for concurrent access from multiple threads without -// any external synchronization. -class DB { - public: - // Open the database with the specified "name". - // Stores a pointer to a heap-allocated database in *dbptr and returns - // OK on success. - // Stores NULL in *dbptr and returns a non-OK status on error. - // Caller should delete *dbptr when it is no longer needed. - static Status Open(const Options& options, - const std::string& name, - DB** dbptr); - - DB() { } - virtual ~DB(); - - // Set the database entry for "key" to "value". Returns OK on success, - // and a non-OK status on error. - // Note: consider setting options.sync = true. - virtual Status Put(const WriteOptions& options, - const Slice& key, - const Slice& value) = 0; - - // Remove the database entry (if any) for "key". Returns OK on - // success, and a non-OK status on error. It is not an error if "key" - // did not exist in the database. - // Note: consider setting options.sync = true. - virtual Status Delete(const WriteOptions& options, const Slice& key) = 0; - - // Apply the specified updates to the database. - // Returns OK on success, non-OK on failure. - // Note: consider setting options.sync = true. - virtual Status Write(const WriteOptions& options, WriteBatch* updates) = 0; - - // If the database contains an entry for "key" store the - // corresponding value in *value and return OK. - // - // If there is no entry for "key" leave *value unchanged and return - // a status for which Status::IsNotFound() returns true. - // - // May return some other Status on an error. - virtual Status Get(const ReadOptions& options, - const Slice& key, std::string* value) = 0; - - // Return a heap-allocated iterator over the contents of the database. - // The result of NewIterator() is initially invalid (caller must - // call one of the Seek methods on the iterator before using it). - // - // Caller should delete the iterator when it is no longer needed. - // The returned iterator should be deleted before this db is deleted. - virtual Iterator* NewIterator(const ReadOptions& options) = 0; - - // Return a handle to the current DB state. Iterators created with - // this handle will all observe a stable snapshot of the current DB - // state. The caller must call ReleaseSnapshot(result) when the - // snapshot is no longer needed. - virtual const Snapshot* GetSnapshot() = 0; - - // Release a previously acquired snapshot. The caller must not - // use "snapshot" after this call. - virtual void ReleaseSnapshot(const Snapshot* snapshot) = 0; - - // DB implementations can export properties about their state - // via this method. If "property" is a valid property understood by this - // DB implementation, fills "*value" with its current value and returns - // true. Otherwise returns false. - // - // - // Valid property names include: - // - // "leveldb.num-files-at-level" - return the number of files at level , - // where is an ASCII representation of a level number (e.g. "0"). - // "leveldb.stats" - returns a multi-line string that describes statistics - // about the internal operation of the DB. - // "leveldb.sstables" - returns a multi-line string that describes all - // of the sstables that make up the db contents. - virtual bool GetProperty(const Slice& property, std::string* value) = 0; - - // For each i in [0,n-1], store in "sizes[i]", the approximate - // file system space used by keys in "[range[i].start .. range[i].limit)". - // - // Note that the returned sizes measure file system space usage, so - // if the user data compresses by a factor of ten, the returned - // sizes will be one-tenth the size of the corresponding user data size. - // - // The results may not include the sizes of recently written data. - virtual void GetApproximateSizes(const Range* range, int n, - uint64_t* sizes) = 0; - - // Compact the underlying storage for the key range [*begin,*end]. - // In particular, deleted and overwritten versions are discarded, - // and the data is rearranged to reduce the cost of operations - // needed to access the data. This operation should typically only - // be invoked by users who understand the underlying implementation. - // - // begin==NULL is treated as a key before all keys in the database. - // end==NULL is treated as a key after all keys in the database. - // Therefore the following call will compact the entire database: - // db->CompactRange(NULL, NULL); - virtual void CompactRange(const Slice* begin, const Slice* end) = 0; - - private: - // No copying allowed - DB(const DB&); - void operator=(const DB&); -}; - -// Destroy the contents of the specified database. -// Be very careful using this method. -Status DestroyDB(const std::string& name, const Options& options); - -// If a DB cannot be opened, you may attempt to call this method to -// resurrect as much of the contents of the database as possible. -// Some data may be lost, so be careful when calling this function -// on a database that contains important information. -Status RepairDB(const std::string& dbname, const Options& options); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_DB_H_ diff --git a/src/leveldb/include/leveldb/dumpfile.h b/src/leveldb/include/leveldb/dumpfile.h deleted file mode 100644 index 3f97fda16b..0000000000 --- a/src/leveldb/include/leveldb/dumpfile.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) 2014 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_DUMPFILE_H_ -#define STORAGE_LEVELDB_INCLUDE_DUMPFILE_H_ - -#include -#include "leveldb/env.h" -#include "leveldb/status.h" - -namespace leveldb { - -// Dump the contents of the file named by fname in text format to -// *dst. Makes a sequence of dst->Append() calls; each call is passed -// the newline-terminated text corresponding to a single item found -// in the file. -// -// Returns a non-OK result if fname does not name a leveldb storage -// file, or if the file cannot be read. -Status DumpFile(Env* env, const std::string& fname, WritableFile* dst); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_DUMPFILE_H_ diff --git a/src/leveldb/include/leveldb/env.h b/src/leveldb/include/leveldb/env.h deleted file mode 100644 index f709514da6..0000000000 --- a/src/leveldb/include/leveldb/env.h +++ /dev/null @@ -1,333 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// An Env is an interface used by the leveldb implementation to access -// operating system functionality like the filesystem etc. Callers -// may wish to provide a custom Env object when opening a database to -// get fine gain control; e.g., to rate limit file system operations. -// -// All Env implementations are safe for concurrent access from -// multiple threads without any external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_ENV_H_ -#define STORAGE_LEVELDB_INCLUDE_ENV_H_ - -#include -#include -#include -#include -#include "leveldb/status.h" - -namespace leveldb { - -class FileLock; -class Logger; -class RandomAccessFile; -class SequentialFile; -class Slice; -class WritableFile; - -class Env { - public: - Env() { } - virtual ~Env(); - - // Return a default environment suitable for the current operating - // system. Sophisticated users may wish to provide their own Env - // implementation instead of relying on this default environment. - // - // The result of Default() belongs to leveldb and must never be deleted. - static Env* Default(); - - // Create a brand new sequentially-readable file with the specified name. - // On success, stores a pointer to the new file in *result and returns OK. - // On failure stores NULL in *result and returns non-OK. If the file does - // not exist, returns a non-OK status. - // - // The returned file will only be accessed by one thread at a time. - virtual Status NewSequentialFile(const std::string& fname, - SequentialFile** result) = 0; - - // Create a brand new random access read-only file with the - // specified name. On success, stores a pointer to the new file in - // *result and returns OK. On failure stores NULL in *result and - // returns non-OK. If the file does not exist, returns a non-OK - // status. - // - // The returned file may be concurrently accessed by multiple threads. - virtual Status NewRandomAccessFile(const std::string& fname, - RandomAccessFile** result) = 0; - - // Create an object that writes to a new file with the specified - // name. Deletes any existing file with the same name and creates a - // new file. On success, stores a pointer to the new file in - // *result and returns OK. On failure stores NULL in *result and - // returns non-OK. - // - // The returned file will only be accessed by one thread at a time. - virtual Status NewWritableFile(const std::string& fname, - WritableFile** result) = 0; - - // Returns true iff the named file exists. - virtual bool FileExists(const std::string& fname) = 0; - - // Store in *result the names of the children of the specified directory. - // The names are relative to "dir". - // Original contents of *results are dropped. - virtual Status GetChildren(const std::string& dir, - std::vector* result) = 0; - - // Delete the named file. - virtual Status DeleteFile(const std::string& fname) = 0; - - // Create the specified directory. - virtual Status CreateDir(const std::string& dirname) = 0; - - // Delete the specified directory. - virtual Status DeleteDir(const std::string& dirname) = 0; - - // Store the size of fname in *file_size. - virtual Status GetFileSize(const std::string& fname, uint64_t* file_size) = 0; - - // Rename file src to target. - virtual Status RenameFile(const std::string& src, - const std::string& target) = 0; - - // Lock the specified file. Used to prevent concurrent access to - // the same db by multiple processes. On failure, stores NULL in - // *lock and returns non-OK. - // - // On success, stores a pointer to the object that represents the - // acquired lock in *lock and returns OK. The caller should call - // UnlockFile(*lock) to release the lock. If the process exits, - // the lock will be automatically released. - // - // If somebody else already holds the lock, finishes immediately - // with a failure. I.e., this call does not wait for existing locks - // to go away. - // - // May create the named file if it does not already exist. - virtual Status LockFile(const std::string& fname, FileLock** lock) = 0; - - // Release the lock acquired by a previous successful call to LockFile. - // REQUIRES: lock was returned by a successful LockFile() call - // REQUIRES: lock has not already been unlocked. - virtual Status UnlockFile(FileLock* lock) = 0; - - // Arrange to run "(*function)(arg)" once in a background thread. - // - // "function" may run in an unspecified thread. Multiple functions - // added to the same Env may run concurrently in different threads. - // I.e., the caller may not assume that background work items are - // serialized. - virtual void Schedule( - void (*function)(void* arg), - void* arg) = 0; - - // Start a new thread, invoking "function(arg)" within the new thread. - // When "function(arg)" returns, the thread will be destroyed. - virtual void StartThread(void (*function)(void* arg), void* arg) = 0; - - // *path is set to a temporary directory that can be used for testing. It may - // or many not have just been created. The directory may or may not differ - // between runs of the same process, but subsequent calls will return the - // same directory. - virtual Status GetTestDirectory(std::string* path) = 0; - - // Create and return a log file for storing informational messages. - virtual Status NewLogger(const std::string& fname, Logger** result) = 0; - - // Returns the number of micro-seconds since some fixed point in time. Only - // useful for computing deltas of time. - virtual uint64_t NowMicros() = 0; - - // Sleep/delay the thread for the prescribed number of micro-seconds. - virtual void SleepForMicroseconds(int micros) = 0; - - private: - // No copying allowed - Env(const Env&); - void operator=(const Env&); -}; - -// A file abstraction for reading sequentially through a file -class SequentialFile { - public: - SequentialFile() { } - virtual ~SequentialFile(); - - // Read up to "n" bytes from the file. "scratch[0..n-1]" may be - // written by this routine. Sets "*result" to the data that was - // read (including if fewer than "n" bytes were successfully read). - // May set "*result" to point at data in "scratch[0..n-1]", so - // "scratch[0..n-1]" must be live when "*result" is used. - // If an error was encountered, returns a non-OK status. - // - // REQUIRES: External synchronization - virtual Status Read(size_t n, Slice* result, char* scratch) = 0; - - // Skip "n" bytes from the file. This is guaranteed to be no - // slower that reading the same data, but may be faster. - // - // If end of file is reached, skipping will stop at the end of the - // file, and Skip will return OK. - // - // REQUIRES: External synchronization - virtual Status Skip(uint64_t n) = 0; - - private: - // No copying allowed - SequentialFile(const SequentialFile&); - void operator=(const SequentialFile&); -}; - -// A file abstraction for randomly reading the contents of a file. -class RandomAccessFile { - public: - RandomAccessFile() { } - virtual ~RandomAccessFile(); - - // Read up to "n" bytes from the file starting at "offset". - // "scratch[0..n-1]" may be written by this routine. Sets "*result" - // to the data that was read (including if fewer than "n" bytes were - // successfully read). May set "*result" to point at data in - // "scratch[0..n-1]", so "scratch[0..n-1]" must be live when - // "*result" is used. If an error was encountered, returns a non-OK - // status. - // - // Safe for concurrent use by multiple threads. - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const = 0; - - private: - // No copying allowed - RandomAccessFile(const RandomAccessFile&); - void operator=(const RandomAccessFile&); -}; - -// A file abstraction for sequential writing. The implementation -// must provide buffering since callers may append small fragments -// at a time to the file. -class WritableFile { - public: - WritableFile() { } - virtual ~WritableFile(); - - virtual Status Append(const Slice& data) = 0; - virtual Status Close() = 0; - virtual Status Flush() = 0; - virtual Status Sync() = 0; - - private: - // No copying allowed - WritableFile(const WritableFile&); - void operator=(const WritableFile&); -}; - -// An interface for writing log messages. -class Logger { - public: - Logger() { } - virtual ~Logger(); - - // Write an entry to the log file with the specified format. - virtual void Logv(const char* format, va_list ap) = 0; - - private: - // No copying allowed - Logger(const Logger&); - void operator=(const Logger&); -}; - - -// Identifies a locked file. -class FileLock { - public: - FileLock() { } - virtual ~FileLock(); - private: - // No copying allowed - FileLock(const FileLock&); - void operator=(const FileLock&); -}; - -// Log the specified data to *info_log if info_log is non-NULL. -extern void Log(Logger* info_log, const char* format, ...) -# if defined(__GNUC__) || defined(__clang__) - __attribute__((__format__ (__printf__, 2, 3))) -# endif - ; - -// A utility routine: write "data" to the named file. -extern Status WriteStringToFile(Env* env, const Slice& data, - const std::string& fname); - -// A utility routine: read contents of named file into *data -extern Status ReadFileToString(Env* env, const std::string& fname, - std::string* data); - -// An implementation of Env that forwards all calls to another Env. -// May be useful to clients who wish to override just part of the -// functionality of another Env. -class EnvWrapper : public Env { - public: - // Initialize an EnvWrapper that delegates all calls to *t - explicit EnvWrapper(Env* t) : target_(t) { } - virtual ~EnvWrapper(); - - // Return the target to which this Env forwards all calls - Env* target() const { return target_; } - - // The following text is boilerplate that forwards all methods to target() - Status NewSequentialFile(const std::string& f, SequentialFile** r) { - return target_->NewSequentialFile(f, r); - } - Status NewRandomAccessFile(const std::string& f, RandomAccessFile** r) { - return target_->NewRandomAccessFile(f, r); - } - Status NewWritableFile(const std::string& f, WritableFile** r) { - return target_->NewWritableFile(f, r); - } - bool FileExists(const std::string& f) { return target_->FileExists(f); } - Status GetChildren(const std::string& dir, std::vector* r) { - return target_->GetChildren(dir, r); - } - Status DeleteFile(const std::string& f) { return target_->DeleteFile(f); } - Status CreateDir(const std::string& d) { return target_->CreateDir(d); } - Status DeleteDir(const std::string& d) { return target_->DeleteDir(d); } - Status GetFileSize(const std::string& f, uint64_t* s) { - return target_->GetFileSize(f, s); - } - Status RenameFile(const std::string& s, const std::string& t) { - return target_->RenameFile(s, t); - } - Status LockFile(const std::string& f, FileLock** l) { - return target_->LockFile(f, l); - } - Status UnlockFile(FileLock* l) { return target_->UnlockFile(l); } - void Schedule(void (*f)(void*), void* a) { - return target_->Schedule(f, a); - } - void StartThread(void (*f)(void*), void* a) { - return target_->StartThread(f, a); - } - virtual Status GetTestDirectory(std::string* path) { - return target_->GetTestDirectory(path); - } - virtual Status NewLogger(const std::string& fname, Logger** result) { - return target_->NewLogger(fname, result); - } - uint64_t NowMicros() { - return target_->NowMicros(); - } - void SleepForMicroseconds(int micros) { - target_->SleepForMicroseconds(micros); - } - private: - Env* target_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_ENV_H_ diff --git a/src/leveldb/include/leveldb/filter_policy.h b/src/leveldb/include/leveldb/filter_policy.h deleted file mode 100644 index 1fba08001f..0000000000 --- a/src/leveldb/include/leveldb/filter_policy.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A database can be configured with a custom FilterPolicy object. -// This object is responsible for creating a small filter from a set -// of keys. These filters are stored in leveldb and are consulted -// automatically by leveldb to decide whether or not to read some -// information from disk. In many cases, a filter can cut down the -// number of disk seeks form a handful to a single disk seek per -// DB::Get() call. -// -// Most people will want to use the builtin bloom filter support (see -// NewBloomFilterPolicy() below). - -#ifndef STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_ -#define STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_ - -#include - -namespace leveldb { - -class Slice; - -class FilterPolicy { - public: - virtual ~FilterPolicy(); - - // Return the name of this policy. Note that if the filter encoding - // changes in an incompatible way, the name returned by this method - // must be changed. Otherwise, old incompatible filters may be - // passed to methods of this type. - virtual const char* Name() const = 0; - - // keys[0,n-1] contains a list of keys (potentially with duplicates) - // that are ordered according to the user supplied comparator. - // Append a filter that summarizes keys[0,n-1] to *dst. - // - // Warning: do not change the initial contents of *dst. Instead, - // append the newly constructed filter to *dst. - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) - const = 0; - - // "filter" contains the data appended by a preceding call to - // CreateFilter() on this class. This method must return true if - // the key was in the list of keys passed to CreateFilter(). - // This method may return true or false if the key was not on the - // list, but it should aim to return false with a high probability. - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const = 0; -}; - -// Return a new filter policy that uses a bloom filter with approximately -// the specified number of bits per key. A good value for bits_per_key -// is 10, which yields a filter with ~ 1% false positive rate. -// -// Callers must delete the result after any database that is using the -// result has been closed. -// -// Note: if you are using a custom comparator that ignores some parts -// of the keys being compared, you must not use NewBloomFilterPolicy() -// and must provide your own FilterPolicy that also ignores the -// corresponding parts of the keys. For example, if the comparator -// ignores trailing spaces, it would be incorrect to use a -// FilterPolicy (like NewBloomFilterPolicy) that does not ignore -// trailing spaces in keys. -extern const FilterPolicy* NewBloomFilterPolicy(int bits_per_key); - -} - -#endif // STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_ diff --git a/src/leveldb/include/leveldb/iterator.h b/src/leveldb/include/leveldb/iterator.h deleted file mode 100644 index 76aced04bd..0000000000 --- a/src/leveldb/include/leveldb/iterator.h +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// An iterator yields a sequence of key/value pairs from a source. -// The following class defines the interface. Multiple implementations -// are provided by this library. In particular, iterators are provided -// to access the contents of a Table or a DB. -// -// Multiple threads can invoke const methods on an Iterator without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same Iterator must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_ITERATOR_H_ -#define STORAGE_LEVELDB_INCLUDE_ITERATOR_H_ - -#include "leveldb/slice.h" -#include "leveldb/status.h" - -namespace leveldb { - -class Iterator { - public: - Iterator(); - virtual ~Iterator(); - - // An iterator is either positioned at a key/value pair, or - // not valid. This method returns true iff the iterator is valid. - virtual bool Valid() const = 0; - - // Position at the first key in the source. The iterator is Valid() - // after this call iff the source is not empty. - virtual void SeekToFirst() = 0; - - // Position at the last key in the source. The iterator is - // Valid() after this call iff the source is not empty. - virtual void SeekToLast() = 0; - - // Position at the first key in the source that at or past target - // The iterator is Valid() after this call iff the source contains - // an entry that comes at or past target. - virtual void Seek(const Slice& target) = 0; - - // Moves to the next entry in the source. After this call, Valid() is - // true iff the iterator was not positioned at the last entry in the source. - // REQUIRES: Valid() - virtual void Next() = 0; - - // Moves to the previous entry in the source. After this call, Valid() is - // true iff the iterator was not positioned at the first entry in source. - // REQUIRES: Valid() - virtual void Prev() = 0; - - // Return the key for the current entry. The underlying storage for - // the returned slice is valid only until the next modification of - // the iterator. - // REQUIRES: Valid() - virtual Slice key() const = 0; - - // Return the value for the current entry. The underlying storage for - // the returned slice is valid only until the next modification of - // the iterator. - // REQUIRES: Valid() - virtual Slice value() const = 0; - - // If an error has occurred, return it. Else return an ok status. - virtual Status status() const = 0; - - // Clients are allowed to register function/arg1/arg2 triples that - // will be invoked when this iterator is destroyed. - // - // Note that unlike all of the preceding methods, this method is - // not abstract and therefore clients should not override it. - typedef void (*CleanupFunction)(void* arg1, void* arg2); - void RegisterCleanup(CleanupFunction function, void* arg1, void* arg2); - - private: - struct Cleanup { - CleanupFunction function; - void* arg1; - void* arg2; - Cleanup* next; - }; - Cleanup cleanup_; - - // No copying allowed - Iterator(const Iterator&); - void operator=(const Iterator&); -}; - -// Return an empty iterator (yields nothing). -extern Iterator* NewEmptyIterator(); - -// Return an empty iterator with the specified status. -extern Iterator* NewErrorIterator(const Status& status); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_ITERATOR_H_ diff --git a/src/leveldb/include/leveldb/options.h b/src/leveldb/include/leveldb/options.h deleted file mode 100644 index 7c9b973454..0000000000 --- a/src/leveldb/include/leveldb/options.h +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_OPTIONS_H_ -#define STORAGE_LEVELDB_INCLUDE_OPTIONS_H_ - -#include - -namespace leveldb { - -class Cache; -class Comparator; -class Env; -class FilterPolicy; -class Logger; -class Snapshot; - -// DB contents are stored in a set of blocks, each of which holds a -// sequence of key,value pairs. Each block may be compressed before -// being stored in a file. The following enum describes which -// compression method (if any) is used to compress a block. -enum CompressionType { - // NOTE: do not change the values of existing entries, as these are - // part of the persistent format on disk. - kNoCompression = 0x0, - kSnappyCompression = 0x1 -}; - -// Options to control the behavior of a database (passed to DB::Open) -struct Options { - // ------------------- - // Parameters that affect behavior - - // Comparator used to define the order of keys in the table. - // Default: a comparator that uses lexicographic byte-wise ordering - // - // REQUIRES: The client must ensure that the comparator supplied - // here has the same name and orders keys *exactly* the same as the - // comparator provided to previous open calls on the same DB. - const Comparator* comparator; - - // If true, the database will be created if it is missing. - // Default: false - bool create_if_missing; - - // If true, an error is raised if the database already exists. - // Default: false - bool error_if_exists; - - // If true, the implementation will do aggressive checking of the - // data it is processing and will stop early if it detects any - // errors. This may have unforeseen ramifications: for example, a - // corruption of one DB entry may cause a large number of entries to - // become unreadable or for the entire DB to become unopenable. - // Default: false - bool paranoid_checks; - - // Use the specified object to interact with the environment, - // e.g. to read/write files, schedule background work, etc. - // Default: Env::Default() - Env* env; - - // Any internal progress/error information generated by the db will - // be written to info_log if it is non-NULL, or to a file stored - // in the same directory as the DB contents if info_log is NULL. - // Default: NULL - Logger* info_log; - - // ------------------- - // Parameters that affect performance - - // Amount of data to build up in memory (backed by an unsorted log - // on disk) before converting to a sorted on-disk file. - // - // Larger values increase performance, especially during bulk loads. - // Up to two write buffers may be held in memory at the same time, - // so you may wish to adjust this parameter to control memory usage. - // Also, a larger write buffer will result in a longer recovery time - // the next time the database is opened. - // - // Default: 4MB - size_t write_buffer_size; - - // Number of open files that can be used by the DB. You may need to - // increase this if your database has a large working set (budget - // one open file per 2MB of working set). - // - // Default: 1000 - int max_open_files; - - // Control over blocks (user data is stored in a set of blocks, and - // a block is the unit of reading from disk). - - // If non-NULL, use the specified cache for blocks. - // If NULL, leveldb will automatically create and use an 8MB internal cache. - // Default: NULL - Cache* block_cache; - - // Approximate size of user data packed per block. Note that the - // block size specified here corresponds to uncompressed data. The - // actual size of the unit read from disk may be smaller if - // compression is enabled. This parameter can be changed dynamically. - // - // Default: 4K - size_t block_size; - - // Number of keys between restart points for delta encoding of keys. - // This parameter can be changed dynamically. Most clients should - // leave this parameter alone. - // - // Default: 16 - int block_restart_interval; - - // Compress blocks using the specified compression algorithm. This - // parameter can be changed dynamically. - // - // Default: kSnappyCompression, which gives lightweight but fast - // compression. - // - // Typical speeds of kSnappyCompression on an Intel(R) Core(TM)2 2.4GHz: - // ~200-500MB/s compression - // ~400-800MB/s decompression - // Note that these speeds are significantly faster than most - // persistent storage speeds, and therefore it is typically never - // worth switching to kNoCompression. Even if the input data is - // incompressible, the kSnappyCompression implementation will - // efficiently detect that and will switch to uncompressed mode. - CompressionType compression; - - // If non-NULL, use the specified filter policy to reduce disk reads. - // Many applications will benefit from passing the result of - // NewBloomFilterPolicy() here. - // - // Default: NULL - const FilterPolicy* filter_policy; - - // Create an Options object with default values for all fields. - Options(); -}; - -// Options that control read operations -struct ReadOptions { - // If true, all data read from underlying storage will be - // verified against corresponding checksums. - // Default: false - bool verify_checksums; - - // Should the data read for this iteration be cached in memory? - // Callers may wish to set this field to false for bulk scans. - // Default: true - bool fill_cache; - - // If "snapshot" is non-NULL, read as of the supplied snapshot - // (which must belong to the DB that is being read and which must - // not have been released). If "snapshot" is NULL, use an implicit - // snapshot of the state at the beginning of this read operation. - // Default: NULL - const Snapshot* snapshot; - - ReadOptions() - : verify_checksums(false), - fill_cache(true), - snapshot(NULL) { - } -}; - -// Options that control write operations -struct WriteOptions { - // If true, the write will be flushed from the operating system - // buffer cache (by calling WritableFile::Sync()) before the write - // is considered complete. If this flag is true, writes will be - // slower. - // - // If this flag is false, and the machine crashes, some recent - // writes may be lost. Note that if it is just the process that - // crashes (i.e., the machine does not reboot), no writes will be - // lost even if sync==false. - // - // In other words, a DB write with sync==false has similar - // crash semantics as the "write()" system call. A DB write - // with sync==true has similar crash semantics to a "write()" - // system call followed by "fsync()". - // - // Default: false - bool sync; - - WriteOptions() - : sync(false) { - } -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_OPTIONS_H_ diff --git a/src/leveldb/include/leveldb/slice.h b/src/leveldb/include/leveldb/slice.h deleted file mode 100644 index bc367986f7..0000000000 --- a/src/leveldb/include/leveldb/slice.h +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Slice is a simple structure containing a pointer into some external -// storage and a size. The user of a Slice must ensure that the slice -// is not used after the corresponding external storage has been -// deallocated. -// -// Multiple threads can invoke const methods on a Slice without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same Slice must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_SLICE_H_ -#define STORAGE_LEVELDB_INCLUDE_SLICE_H_ - -#include -#include -#include -#include - -namespace leveldb { - -class Slice { - public: - // Create an empty slice. - Slice() : data_(""), size_(0) { } - - // Create a slice that refers to d[0,n-1]. - Slice(const char* d, size_t n) : data_(d), size_(n) { } - - // Create a slice that refers to the contents of "s" - Slice(const std::string& s) : data_(s.data()), size_(s.size()) { } - - // Create a slice that refers to s[0,strlen(s)-1] - Slice(const char* s) : data_(s), size_(strlen(s)) { } - - // Return a pointer to the beginning of the referenced data - const char* data() const { return data_; } - - // Return the length (in bytes) of the referenced data - size_t size() const { return size_; } - - // Return true iff the length of the referenced data is zero - bool empty() const { return size_ == 0; } - - // Return the ith byte in the referenced data. - // REQUIRES: n < size() - char operator[](size_t n) const { - assert(n < size()); - return data_[n]; - } - - // Change this slice to refer to an empty array - void clear() { data_ = ""; size_ = 0; } - - // Drop the first "n" bytes from this slice. - void remove_prefix(size_t n) { - assert(n <= size()); - data_ += n; - size_ -= n; - } - - // Return a string that contains the copy of the referenced data. - std::string ToString() const { return std::string(data_, size_); } - - // Three-way comparison. Returns value: - // < 0 iff "*this" < "b", - // == 0 iff "*this" == "b", - // > 0 iff "*this" > "b" - int compare(const Slice& b) const; - - // Return true iff "x" is a prefix of "*this" - bool starts_with(const Slice& x) const { - return ((size_ >= x.size_) && - (memcmp(data_, x.data_, x.size_) == 0)); - } - - private: - const char* data_; - size_t size_; - - // Intentionally copyable -}; - -inline bool operator==(const Slice& x, const Slice& y) { - return ((x.size() == y.size()) && - (memcmp(x.data(), y.data(), x.size()) == 0)); -} - -inline bool operator!=(const Slice& x, const Slice& y) { - return !(x == y); -} - -inline int Slice::compare(const Slice& b) const { - const size_t min_len = (size_ < b.size_) ? size_ : b.size_; - int r = memcmp(data_, b.data_, min_len); - if (r == 0) { - if (size_ < b.size_) r = -1; - else if (size_ > b.size_) r = +1; - } - return r; -} - -} // namespace leveldb - - -#endif // STORAGE_LEVELDB_INCLUDE_SLICE_H_ diff --git a/src/leveldb/include/leveldb/status.h b/src/leveldb/include/leveldb/status.h deleted file mode 100644 index 11dbd4b47e..0000000000 --- a/src/leveldb/include/leveldb/status.h +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A Status encapsulates the result of an operation. It may indicate success, -// or it may indicate an error with an associated error message. -// -// Multiple threads can invoke const methods on a Status without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same Status must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_STATUS_H_ -#define STORAGE_LEVELDB_INCLUDE_STATUS_H_ - -#include -#include "leveldb/slice.h" - -namespace leveldb { - -class Status { - public: - // Create a success status. - Status() : state_(NULL) { } - ~Status() { delete[] state_; } - - // Copy the specified status. - Status(const Status& s); - void operator=(const Status& s); - - // Return a success status. - static Status OK() { return Status(); } - - // Return error status of an appropriate type. - static Status NotFound(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kNotFound, msg, msg2); - } - static Status Corruption(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kCorruption, msg, msg2); - } - static Status NotSupported(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kNotSupported, msg, msg2); - } - static Status InvalidArgument(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kInvalidArgument, msg, msg2); - } - static Status IOError(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kIOError, msg, msg2); - } - - // Returns true iff the status indicates success. - bool ok() const { return (state_ == NULL); } - - // Returns true iff the status indicates a NotFound error. - bool IsNotFound() const { return code() == kNotFound; } - - // Returns true iff the status indicates a Corruption error. - bool IsCorruption() const { return code() == kCorruption; } - - // Returns true iff the status indicates an IOError. - bool IsIOError() const { return code() == kIOError; } - - // Return a string representation of this status suitable for printing. - // Returns the string "OK" for success. - std::string ToString() const; - - private: - // OK status has a NULL state_. Otherwise, state_ is a new[] array - // of the following form: - // state_[0..3] == length of message - // state_[4] == code - // state_[5..] == message - const char* state_; - - enum Code { - kOk = 0, - kNotFound = 1, - kCorruption = 2, - kNotSupported = 3, - kInvalidArgument = 4, - kIOError = 5 - }; - - Code code() const { - return (state_ == NULL) ? kOk : static_cast(state_[4]); - } - - Status(Code code, const Slice& msg, const Slice& msg2); - static const char* CopyState(const char* s); -}; - -inline Status::Status(const Status& s) { - state_ = (s.state_ == NULL) ? NULL : CopyState(s.state_); -} -inline void Status::operator=(const Status& s) { - // The following condition catches both aliasing (when this == &s), - // and the common case where both s and *this are ok. - if (state_ != s.state_) { - delete[] state_; - state_ = (s.state_ == NULL) ? NULL : CopyState(s.state_); - } -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_STATUS_H_ diff --git a/src/leveldb/include/leveldb/table.h b/src/leveldb/include/leveldb/table.h deleted file mode 100644 index a9746c3f5e..0000000000 --- a/src/leveldb/include/leveldb/table.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_TABLE_H_ -#define STORAGE_LEVELDB_INCLUDE_TABLE_H_ - -#include -#include "leveldb/iterator.h" - -namespace leveldb { - -class Block; -class BlockHandle; -class Footer; -struct Options; -class RandomAccessFile; -struct ReadOptions; -class TableCache; - -// A Table is a sorted map from strings to strings. Tables are -// immutable and persistent. A Table may be safely accessed from -// multiple threads without external synchronization. -class Table { - public: - // Attempt to open the table that is stored in bytes [0..file_size) - // of "file", and read the metadata entries necessary to allow - // retrieving data from the table. - // - // If successful, returns ok and sets "*table" to the newly opened - // table. The client should delete "*table" when no longer needed. - // If there was an error while initializing the table, sets "*table" - // to NULL and returns a non-ok status. Does not take ownership of - // "*source", but the client must ensure that "source" remains live - // for the duration of the returned table's lifetime. - // - // *file must remain live while this Table is in use. - static Status Open(const Options& options, - RandomAccessFile* file, - uint64_t file_size, - Table** table); - - ~Table(); - - // Returns a new iterator over the table contents. - // The result of NewIterator() is initially invalid (caller must - // call one of the Seek methods on the iterator before using it). - Iterator* NewIterator(const ReadOptions&) const; - - // Given a key, return an approximate byte offset in the file where - // the data for that key begins (or would begin if the key were - // present in the file). The returned value is in terms of file - // bytes, and so includes effects like compression of the underlying data. - // E.g., the approximate offset of the last key in the table will - // be close to the file length. - uint64_t ApproximateOffsetOf(const Slice& key) const; - - private: - struct Rep; - Rep* rep_; - - explicit Table(Rep* rep) { rep_ = rep; } - static Iterator* BlockReader(void*, const ReadOptions&, const Slice&); - - // Calls (*handle_result)(arg, ...) with the entry found after a call - // to Seek(key). May not make such a call if filter policy says - // that key is not present. - friend class TableCache; - Status InternalGet( - const ReadOptions&, const Slice& key, - void* arg, - void (*handle_result)(void* arg, const Slice& k, const Slice& v)); - - - void ReadMeta(const Footer& footer); - void ReadFilter(const Slice& filter_handle_value); - - // No copying allowed - Table(const Table&); - void operator=(const Table&); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_TABLE_H_ diff --git a/src/leveldb/include/leveldb/table_builder.h b/src/leveldb/include/leveldb/table_builder.h deleted file mode 100644 index 5fd1dc71f1..0000000000 --- a/src/leveldb/include/leveldb/table_builder.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// TableBuilder provides the interface used to build a Table -// (an immutable and sorted map from keys to values). -// -// Multiple threads can invoke const methods on a TableBuilder without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same TableBuilder must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_ -#define STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_ - -#include -#include "leveldb/options.h" -#include "leveldb/status.h" - -namespace leveldb { - -class BlockBuilder; -class BlockHandle; -class WritableFile; - -class TableBuilder { - public: - // Create a builder that will store the contents of the table it is - // building in *file. Does not close the file. It is up to the - // caller to close the file after calling Finish(). - TableBuilder(const Options& options, WritableFile* file); - - // REQUIRES: Either Finish() or Abandon() has been called. - ~TableBuilder(); - - // Change the options used by this builder. Note: only some of the - // option fields can be changed after construction. If a field is - // not allowed to change dynamically and its value in the structure - // passed to the constructor is different from its value in the - // structure passed to this method, this method will return an error - // without changing any fields. - Status ChangeOptions(const Options& options); - - // Add key,value to the table being constructed. - // REQUIRES: key is after any previously added key according to comparator. - // REQUIRES: Finish(), Abandon() have not been called - void Add(const Slice& key, const Slice& value); - - // Advanced operation: flush any buffered key/value pairs to file. - // Can be used to ensure that two adjacent entries never live in - // the same data block. Most clients should not need to use this method. - // REQUIRES: Finish(), Abandon() have not been called - void Flush(); - - // Return non-ok iff some error has been detected. - Status status() const; - - // Finish building the table. Stops using the file passed to the - // constructor after this function returns. - // REQUIRES: Finish(), Abandon() have not been called - Status Finish(); - - // Indicate that the contents of this builder should be abandoned. Stops - // using the file passed to the constructor after this function returns. - // If the caller is not going to call Finish(), it must call Abandon() - // before destroying this builder. - // REQUIRES: Finish(), Abandon() have not been called - void Abandon(); - - // Number of calls to Add() so far. - uint64_t NumEntries() const; - - // Size of the file generated so far. If invoked after a successful - // Finish() call, returns the size of the final generated file. - uint64_t FileSize() const; - - private: - bool ok() const { return status().ok(); } - void WriteBlock(BlockBuilder* block, BlockHandle* handle); - void WriteRawBlock(const Slice& data, CompressionType, BlockHandle* handle); - - struct Rep; - Rep* rep_; - - // No copying allowed - TableBuilder(const TableBuilder&); - void operator=(const TableBuilder&); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_ diff --git a/src/leveldb/include/leveldb/write_batch.h b/src/leveldb/include/leveldb/write_batch.h deleted file mode 100644 index ee9aab68e0..0000000000 --- a/src/leveldb/include/leveldb/write_batch.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// WriteBatch holds a collection of updates to apply atomically to a DB. -// -// The updates are applied in the order in which they are added -// to the WriteBatch. For example, the value of "key" will be "v3" -// after the following batch is written: -// -// batch.Put("key", "v1"); -// batch.Delete("key"); -// batch.Put("key", "v2"); -// batch.Put("key", "v3"); -// -// Multiple threads can invoke const methods on a WriteBatch without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same WriteBatch must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_ -#define STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_ - -#include -#include "leveldb/status.h" - -namespace leveldb { - -class Slice; - -class WriteBatch { - public: - WriteBatch(); - ~WriteBatch(); - - // Store the mapping "key->value" in the database. - void Put(const Slice& key, const Slice& value); - - // If the database contains a mapping for "key", erase it. Else do nothing. - void Delete(const Slice& key); - - // Clear all updates buffered in this batch. - void Clear(); - - // Support for iterating over the contents of a batch. - class Handler { - public: - virtual ~Handler(); - virtual void Put(const Slice& key, const Slice& value) = 0; - virtual void Delete(const Slice& key) = 0; - }; - Status Iterate(Handler* handler) const; - - private: - friend class WriteBatchInternal; - - std::string rep_; // See comment in write_batch.cc for the format of rep_ - - // Intentionally copyable -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_ diff --git a/src/leveldb/issues/issue178_test.cc b/src/leveldb/issues/issue178_test.cc deleted file mode 100644 index 1b1cf8bb28..0000000000 --- a/src/leveldb/issues/issue178_test.cc +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2013 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -// Test for issue 178: a manual compaction causes deleted data to reappear. -#include -#include -#include - -#include "leveldb/db.h" -#include "leveldb/write_batch.h" -#include "util/testharness.h" - -namespace { - -const int kNumKeys = 1100000; - -std::string Key1(int i) { - char buf[100]; - snprintf(buf, sizeof(buf), "my_key_%d", i); - return buf; -} - -std::string Key2(int i) { - return Key1(i) + "_xxx"; -} - -class Issue178 { }; - -TEST(Issue178, Test) { - // Get rid of any state from an old run. - std::string dbpath = leveldb::test::TmpDir() + "/leveldb_cbug_test"; - DestroyDB(dbpath, leveldb::Options()); - - // Open database. Disable compression since it affects the creation - // of layers and the code below is trying to test against a very - // specific scenario. - leveldb::DB* db; - leveldb::Options db_options; - db_options.create_if_missing = true; - db_options.compression = leveldb::kNoCompression; - ASSERT_OK(leveldb::DB::Open(db_options, dbpath, &db)); - - // create first key range - leveldb::WriteBatch batch; - for (size_t i = 0; i < kNumKeys; i++) { - batch.Put(Key1(i), "value for range 1 key"); - } - ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); - - // create second key range - batch.Clear(); - for (size_t i = 0; i < kNumKeys; i++) { - batch.Put(Key2(i), "value for range 2 key"); - } - ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); - - // delete second key range - batch.Clear(); - for (size_t i = 0; i < kNumKeys; i++) { - batch.Delete(Key2(i)); - } - ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); - - // compact database - std::string start_key = Key1(0); - std::string end_key = Key1(kNumKeys - 1); - leveldb::Slice least(start_key.data(), start_key.size()); - leveldb::Slice greatest(end_key.data(), end_key.size()); - - // commenting out the line below causes the example to work correctly - db->CompactRange(&least, &greatest); - - // count the keys - leveldb::Iterator* iter = db->NewIterator(leveldb::ReadOptions()); - size_t num_keys = 0; - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - num_keys++; - } - delete iter; - ASSERT_EQ(kNumKeys, num_keys) << "Bad number of keys"; - - // close database - delete db; - DestroyDB(dbpath, leveldb::Options()); -} - -} // anonymous namespace - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/issues/issue200_test.cc b/src/leveldb/issues/issue200_test.cc deleted file mode 100644 index 1cec79f443..0000000000 --- a/src/leveldb/issues/issue200_test.cc +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2013 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -// Test for issue 200: when iterator switches direction from backward -// to forward, the current key can be yielded unexpectedly if a new -// mutation has been added just before the current key. - -#include "leveldb/db.h" -#include "util/testharness.h" - -namespace leveldb { - -class Issue200 { }; - -TEST(Issue200, Test) { - // Get rid of any state from an old run. - std::string dbpath = test::TmpDir() + "/leveldb_issue200_test"; - DestroyDB(dbpath, Options()); - - DB *db; - Options options; - options.create_if_missing = true; - ASSERT_OK(DB::Open(options, dbpath, &db)); - - WriteOptions write_options; - ASSERT_OK(db->Put(write_options, "1", "b")); - ASSERT_OK(db->Put(write_options, "2", "c")); - ASSERT_OK(db->Put(write_options, "3", "d")); - ASSERT_OK(db->Put(write_options, "4", "e")); - ASSERT_OK(db->Put(write_options, "5", "f")); - - ReadOptions read_options; - Iterator *iter = db->NewIterator(read_options); - - // Add an element that should not be reflected in the iterator. - ASSERT_OK(db->Put(write_options, "25", "cd")); - - iter->Seek("5"); - ASSERT_EQ(iter->key().ToString(), "5"); - iter->Prev(); - ASSERT_EQ(iter->key().ToString(), "4"); - iter->Prev(); - ASSERT_EQ(iter->key().ToString(), "3"); - iter->Next(); - ASSERT_EQ(iter->key().ToString(), "4"); - iter->Next(); - ASSERT_EQ(iter->key().ToString(), "5"); - - delete iter; - delete db; - DestroyDB(dbpath, options); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/port/README b/src/leveldb/port/README deleted file mode 100644 index 422563e25c..0000000000 --- a/src/leveldb/port/README +++ /dev/null @@ -1,10 +0,0 @@ -This directory contains interfaces and implementations that isolate the -rest of the package from platform details. - -Code in the rest of the package includes "port.h" from this directory. -"port.h" in turn includes a platform specific "port_.h" file -that provides the platform specific implementation. - -See port_posix.h for an example of what must be provided in a platform -specific header file. - diff --git a/src/leveldb/port/atomic_pointer.h b/src/leveldb/port/atomic_pointer.h deleted file mode 100644 index 9bf091f757..0000000000 --- a/src/leveldb/port/atomic_pointer.h +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -// AtomicPointer provides storage for a lock-free pointer. -// Platform-dependent implementation of AtomicPointer: -// - If the platform provides a cheap barrier, we use it with raw pointers -// - If is present (on newer versions of gcc, it is), we use -// a -based AtomicPointer. However we prefer the memory -// barrier based version, because at least on a gcc 4.4 32-bit build -// on linux, we have encountered a buggy implementation. -// Also, some implementations are much slower than a memory-barrier -// based implementation (~16ns for based acquire-load vs. ~1ns for -// a barrier based acquire-load). -// This code is based on atomicops-internals-* in Google's perftools: -// http://code.google.com/p/google-perftools/source/browse/#svn%2Ftrunk%2Fsrc%2Fbase - -#ifndef PORT_ATOMIC_POINTER_H_ -#define PORT_ATOMIC_POINTER_H_ - -#include -#ifdef LEVELDB_ATOMIC_PRESENT -#include -#endif -#ifdef OS_WIN -#include -#endif -#ifdef OS_MACOSX -#include -#endif - -#if defined(_M_X64) || defined(__x86_64__) -#define ARCH_CPU_X86_FAMILY 1 -#elif defined(_M_IX86) || defined(__i386__) || defined(__i386) -#define ARCH_CPU_X86_FAMILY 1 -#elif defined(__ARMEL__) -#define ARCH_CPU_ARM_FAMILY 1 -#elif defined(__ppc__) || defined(__powerpc__) || defined(__powerpc64__) -#define ARCH_CPU_PPC_FAMILY 1 -#endif - -namespace leveldb { -namespace port { - -// Define MemoryBarrier() if available -// Windows on x86 -#if defined(OS_WIN) && defined(COMPILER_MSVC) && defined(ARCH_CPU_X86_FAMILY) -// windows.h already provides a MemoryBarrier(void) macro -// http://msdn.microsoft.com/en-us/library/ms684208(v=vs.85).aspx -#define LEVELDB_HAVE_MEMORY_BARRIER - -// Mac OS -#elif defined(OS_MACOSX) -inline void MemoryBarrier() { - OSMemoryBarrier(); -} -#define LEVELDB_HAVE_MEMORY_BARRIER - -// Gcc on x86 -#elif defined(ARCH_CPU_X86_FAMILY) && defined(__GNUC__) -inline void MemoryBarrier() { - // See http://gcc.gnu.org/ml/gcc/2003-04/msg01180.html for a discussion on - // this idiom. Also see http://en.wikipedia.org/wiki/Memory_ordering. - __asm__ __volatile__("" : : : "memory"); -} -#define LEVELDB_HAVE_MEMORY_BARRIER - -// Sun Studio -#elif defined(ARCH_CPU_X86_FAMILY) && defined(__SUNPRO_CC) -inline void MemoryBarrier() { - // See http://gcc.gnu.org/ml/gcc/2003-04/msg01180.html for a discussion on - // this idiom. Also see http://en.wikipedia.org/wiki/Memory_ordering. - asm volatile("" : : : "memory"); -} -#define LEVELDB_HAVE_MEMORY_BARRIER - -// ARM Linux -#elif defined(ARCH_CPU_ARM_FAMILY) && defined(__linux__) -typedef void (*LinuxKernelMemoryBarrierFunc)(void); -// The Linux ARM kernel provides a highly optimized device-specific memory -// barrier function at a fixed memory address that is mapped in every -// user-level process. -// -// This beats using CPU-specific instructions which are, on single-core -// devices, un-necessary and very costly (e.g. ARMv7-A "dmb" takes more -// than 180ns on a Cortex-A8 like the one on a Nexus One). Benchmarking -// shows that the extra function call cost is completely negligible on -// multi-core devices. -// -inline void MemoryBarrier() { - (*(LinuxKernelMemoryBarrierFunc)0xffff0fa0)(); -} -#define LEVELDB_HAVE_MEMORY_BARRIER - -// PPC -#elif defined(ARCH_CPU_PPC_FAMILY) && defined(__GNUC__) -inline void MemoryBarrier() { - // TODO for some powerpc expert: is there a cheaper suitable variant? - // Perhaps by having separate barriers for acquire and release ops. - asm volatile("sync" : : : "memory"); -} -#define LEVELDB_HAVE_MEMORY_BARRIER - -#endif - -// AtomicPointer built using platform-specific MemoryBarrier() -#if defined(LEVELDB_HAVE_MEMORY_BARRIER) -class AtomicPointer { - private: - void* rep_; - public: - AtomicPointer() { } - explicit AtomicPointer(void* p) : rep_(p) {} - inline void* NoBarrier_Load() const { return rep_; } - inline void NoBarrier_Store(void* v) { rep_ = v; } - inline void* Acquire_Load() const { - void* result = rep_; - MemoryBarrier(); - return result; - } - inline void Release_Store(void* v) { - MemoryBarrier(); - rep_ = v; - } -}; - -// AtomicPointer based on -#elif defined(LEVELDB_ATOMIC_PRESENT) -class AtomicPointer { - private: - std::atomic rep_; - public: - AtomicPointer() { } - explicit AtomicPointer(void* v) : rep_(v) { } - inline void* Acquire_Load() const { - return rep_.load(std::memory_order_acquire); - } - inline void Release_Store(void* v) { - rep_.store(v, std::memory_order_release); - } - inline void* NoBarrier_Load() const { - return rep_.load(std::memory_order_relaxed); - } - inline void NoBarrier_Store(void* v) { - rep_.store(v, std::memory_order_relaxed); - } -}; - -// Atomic pointer based on sparc memory barriers -#elif defined(__sparcv9) && defined(__GNUC__) -class AtomicPointer { - private: - void* rep_; - public: - AtomicPointer() { } - explicit AtomicPointer(void* v) : rep_(v) { } - inline void* Acquire_Load() const { - void* val; - __asm__ __volatile__ ( - "ldx [%[rep_]], %[val] \n\t" - "membar #LoadLoad|#LoadStore \n\t" - : [val] "=r" (val) - : [rep_] "r" (&rep_) - : "memory"); - return val; - } - inline void Release_Store(void* v) { - __asm__ __volatile__ ( - "membar #LoadStore|#StoreStore \n\t" - "stx %[v], [%[rep_]] \n\t" - : - : [rep_] "r" (&rep_), [v] "r" (v) - : "memory"); - } - inline void* NoBarrier_Load() const { return rep_; } - inline void NoBarrier_Store(void* v) { rep_ = v; } -}; - -// Atomic pointer based on ia64 acq/rel -#elif defined(__ia64) && defined(__GNUC__) -class AtomicPointer { - private: - void* rep_; - public: - AtomicPointer() { } - explicit AtomicPointer(void* v) : rep_(v) { } - inline void* Acquire_Load() const { - void* val ; - __asm__ __volatile__ ( - "ld8.acq %[val] = [%[rep_]] \n\t" - : [val] "=r" (val) - : [rep_] "r" (&rep_) - : "memory" - ); - return val; - } - inline void Release_Store(void* v) { - __asm__ __volatile__ ( - "st8.rel [%[rep_]] = %[v] \n\t" - : - : [rep_] "r" (&rep_), [v] "r" (v) - : "memory" - ); - } - inline void* NoBarrier_Load() const { return rep_; } - inline void NoBarrier_Store(void* v) { rep_ = v; } -}; - -// We have neither MemoryBarrier(), nor -#else -#error Please implement AtomicPointer for this platform. - -#endif - -#undef LEVELDB_HAVE_MEMORY_BARRIER -#undef ARCH_CPU_X86_FAMILY -#undef ARCH_CPU_ARM_FAMILY -#undef ARCH_CPU_PPC_FAMILY - -} // namespace port -} // namespace leveldb - -#endif // PORT_ATOMIC_POINTER_H_ diff --git a/src/leveldb/port/port.h b/src/leveldb/port/port.h deleted file mode 100644 index 4baafa8e22..0000000000 --- a/src/leveldb/port/port.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_PORT_PORT_H_ -#define STORAGE_LEVELDB_PORT_PORT_H_ - -#include - -// Include the appropriate platform specific file below. If you are -// porting to a new platform, see "port_example.h" for documentation -// of what the new port_.h file must provide. -#if defined(LEVELDB_PLATFORM_POSIX) -# include "port/port_posix.h" -#elif defined(LEVELDB_PLATFORM_CHROMIUM) -# include "port/port_chromium.h" -#elif defined(LEVELDB_PLATFORM_WINDOWS) -# include "port/port_win.h" -#endif - -#endif // STORAGE_LEVELDB_PORT_PORT_H_ diff --git a/src/leveldb/port/port_example.h b/src/leveldb/port/port_example.h deleted file mode 100644 index ab9e489b32..0000000000 --- a/src/leveldb/port/port_example.h +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// This file contains the specification, but not the implementations, -// of the types/operations/etc. that should be defined by a platform -// specific port_.h file. Use this file as a reference for -// how to port this package to a new platform. - -#ifndef STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_ -#define STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_ - -namespace leveldb { -namespace port { - -// TODO(jorlow): Many of these belong more in the environment class rather than -// here. We should try moving them and see if it affects perf. - -// The following boolean constant must be true on a little-endian machine -// and false otherwise. -static const bool kLittleEndian = true /* or some other expression */; - -// ------------------ Threading ------------------- - -// A Mutex represents an exclusive lock. -class Mutex { - public: - Mutex(); - ~Mutex(); - - // Lock the mutex. Waits until other lockers have exited. - // Will deadlock if the mutex is already locked by this thread. - void Lock(); - - // Unlock the mutex. - // REQUIRES: This mutex was locked by this thread. - void Unlock(); - - // Optionally crash if this thread does not hold this mutex. - // The implementation must be fast, especially if NDEBUG is - // defined. The implementation is allowed to skip all checks. - void AssertHeld(); -}; - -class CondVar { - public: - explicit CondVar(Mutex* mu); - ~CondVar(); - - // Atomically release *mu and block on this condition variable until - // either a call to SignalAll(), or a call to Signal() that picks - // this thread to wakeup. - // REQUIRES: this thread holds *mu - void Wait(); - - // If there are some threads waiting, wake up at least one of them. - void Signal(); - - // Wake up all waiting threads. - void SignallAll(); -}; - -// Thread-safe initialization. -// Used as follows: -// static port::OnceType init_control = LEVELDB_ONCE_INIT; -// static void Initializer() { ... do something ...; } -// ... -// port::InitOnce(&init_control, &Initializer); -typedef intptr_t OnceType; -#define LEVELDB_ONCE_INIT 0 -extern void InitOnce(port::OnceType*, void (*initializer)()); - -// A type that holds a pointer that can be read or written atomically -// (i.e., without word-tearing.) -class AtomicPointer { - private: - intptr_t rep_; - public: - // Initialize to arbitrary value - AtomicPointer(); - - // Initialize to hold v - explicit AtomicPointer(void* v) : rep_(v) { } - - // Read and return the stored pointer with the guarantee that no - // later memory access (read or write) by this thread can be - // reordered ahead of this read. - void* Acquire_Load() const; - - // Set v as the stored pointer with the guarantee that no earlier - // memory access (read or write) by this thread can be reordered - // after this store. - void Release_Store(void* v); - - // Read the stored pointer with no ordering guarantees. - void* NoBarrier_Load() const; - - // Set va as the stored pointer with no ordering guarantees. - void NoBarrier_Store(void* v); -}; - -// ------------------ Compression ------------------- - -// Store the snappy compression of "input[0,input_length-1]" in *output. -// Returns false if snappy is not supported by this port. -extern bool Snappy_Compress(const char* input, size_t input_length, - std::string* output); - -// If input[0,input_length-1] looks like a valid snappy compressed -// buffer, store the size of the uncompressed data in *result and -// return true. Else return false. -extern bool Snappy_GetUncompressedLength(const char* input, size_t length, - size_t* result); - -// Attempt to snappy uncompress input[0,input_length-1] into *output. -// Returns true if successful, false if the input is invalid lightweight -// compressed data. -// -// REQUIRES: at least the first "n" bytes of output[] must be writable -// where "n" is the result of a successful call to -// Snappy_GetUncompressedLength. -extern bool Snappy_Uncompress(const char* input_data, size_t input_length, - char* output); - -// ------------------ Miscellaneous ------------------- - -// If heap profiling is not supported, returns false. -// Else repeatedly calls (*func)(arg, data, n) and then returns true. -// The concatenation of all "data[0,n-1]" fragments is the heap profile. -extern bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg); - -} // namespace port -} // namespace leveldb - -#endif // STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_ diff --git a/src/leveldb/port/port_posix.cc b/src/leveldb/port/port_posix.cc deleted file mode 100644 index 5ba127a5b9..0000000000 --- a/src/leveldb/port/port_posix.cc +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "port/port_posix.h" - -#include -#include -#include -#include "util/logging.h" - -namespace leveldb { -namespace port { - -static void PthreadCall(const char* label, int result) { - if (result != 0) { - fprintf(stderr, "pthread %s: %s\n", label, strerror(result)); - abort(); - } -} - -Mutex::Mutex() { PthreadCall("init mutex", pthread_mutex_init(&mu_, NULL)); } - -Mutex::~Mutex() { PthreadCall("destroy mutex", pthread_mutex_destroy(&mu_)); } - -void Mutex::Lock() { PthreadCall("lock", pthread_mutex_lock(&mu_)); } - -void Mutex::Unlock() { PthreadCall("unlock", pthread_mutex_unlock(&mu_)); } - -CondVar::CondVar(Mutex* mu) - : mu_(mu) { - PthreadCall("init cv", pthread_cond_init(&cv_, NULL)); -} - -CondVar::~CondVar() { PthreadCall("destroy cv", pthread_cond_destroy(&cv_)); } - -void CondVar::Wait() { - PthreadCall("wait", pthread_cond_wait(&cv_, &mu_->mu_)); -} - -void CondVar::Signal() { - PthreadCall("signal", pthread_cond_signal(&cv_)); -} - -void CondVar::SignalAll() { - PthreadCall("broadcast", pthread_cond_broadcast(&cv_)); -} - -void InitOnce(OnceType* once, void (*initializer)()) { - PthreadCall("once", pthread_once(once, initializer)); -} - -} // namespace port -} // namespace leveldb diff --git a/src/leveldb/port/port_posix.h b/src/leveldb/port/port_posix.h deleted file mode 100644 index ccca9939d3..0000000000 --- a/src/leveldb/port/port_posix.h +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// See port_example.h for documentation for the following types/functions. - -#ifndef STORAGE_LEVELDB_PORT_PORT_POSIX_H_ -#define STORAGE_LEVELDB_PORT_PORT_POSIX_H_ - -#undef PLATFORM_IS_LITTLE_ENDIAN -#if defined(OS_MACOSX) - #include - #if defined(__DARWIN_LITTLE_ENDIAN) && defined(__DARWIN_BYTE_ORDER) - #define PLATFORM_IS_LITTLE_ENDIAN \ - (__DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN) - #endif -#elif defined(OS_SOLARIS) - #include - #ifdef _LITTLE_ENDIAN - #define PLATFORM_IS_LITTLE_ENDIAN true - #else - #define PLATFORM_IS_LITTLE_ENDIAN false - #endif -#elif defined(OS_FREEBSD) || defined(OS_OPENBSD) ||\ - defined(OS_NETBSD) || defined(OS_DRAGONFLYBSD) - #include - #include - #define PLATFORM_IS_LITTLE_ENDIAN (_BYTE_ORDER == _LITTLE_ENDIAN) -#elif defined(OS_HPUX) - #define PLATFORM_IS_LITTLE_ENDIAN false -#elif defined(OS_ANDROID) - // Due to a bug in the NDK x86 definition, - // _BYTE_ORDER must be used instead of __BYTE_ORDER on Android. - // See http://code.google.com/p/android/issues/detail?id=39824 - #include - #define PLATFORM_IS_LITTLE_ENDIAN (_BYTE_ORDER == _LITTLE_ENDIAN) -#else - #include -#endif - -#include -#ifdef SNAPPY -#include -#endif -#include -#include -#include "port/atomic_pointer.h" - -#ifndef PLATFORM_IS_LITTLE_ENDIAN -#define PLATFORM_IS_LITTLE_ENDIAN (__BYTE_ORDER == __LITTLE_ENDIAN) -#endif - -#if defined(OS_MACOSX) || defined(OS_SOLARIS) || defined(OS_FREEBSD) ||\ - defined(OS_NETBSD) || defined(OS_OPENBSD) || defined(OS_DRAGONFLYBSD) ||\ - defined(OS_ANDROID) || defined(OS_HPUX) || defined(CYGWIN) -// Use fread/fwrite/fflush on platforms without _unlocked variants -#define fread_unlocked fread -#define fwrite_unlocked fwrite -#define fflush_unlocked fflush -#endif - -#if defined(OS_FREEBSD) ||\ - defined(OS_OPENBSD) || defined(OS_DRAGONFLYBSD) -// Use fsync() on platforms without fdatasync() -#define fdatasync fsync -#endif - -#if defined(OS_MACOSX) -#define fdatasync(fd) fcntl(fd, F_FULLFSYNC, 0) -#endif - -#if defined(OS_ANDROID) && __ANDROID_API__ < 9 -// fdatasync() was only introduced in API level 9 on Android. Use fsync() -// when targetting older platforms. -#define fdatasync fsync -#endif - -namespace leveldb { -namespace port { - -static const bool kLittleEndian = PLATFORM_IS_LITTLE_ENDIAN; -#undef PLATFORM_IS_LITTLE_ENDIAN - -class CondVar; - -class Mutex { - public: - Mutex(); - ~Mutex(); - - void Lock(); - void Unlock(); - void AssertHeld() { } - - private: - friend class CondVar; - pthread_mutex_t mu_; - - // No copying - Mutex(const Mutex&); - void operator=(const Mutex&); -}; - -class CondVar { - public: - explicit CondVar(Mutex* mu); - ~CondVar(); - void Wait(); - void Signal(); - void SignalAll(); - private: - pthread_cond_t cv_; - Mutex* mu_; -}; - -typedef pthread_once_t OnceType; -#define LEVELDB_ONCE_INIT PTHREAD_ONCE_INIT -extern void InitOnce(OnceType* once, void (*initializer)()); - -inline bool Snappy_Compress(const char* input, size_t length, - ::std::string* output) { -#ifdef SNAPPY - output->resize(snappy::MaxCompressedLength(length)); - size_t outlen; - snappy::RawCompress(input, length, &(*output)[0], &outlen); - output->resize(outlen); - return true; -#endif - - return false; -} - -inline bool Snappy_GetUncompressedLength(const char* input, size_t length, - size_t* result) { -#ifdef SNAPPY - return snappy::GetUncompressedLength(input, length, result); -#else - return false; -#endif -} - -inline bool Snappy_Uncompress(const char* input, size_t length, - char* output) { -#ifdef SNAPPY - return snappy::RawUncompress(input, length, output); -#else - return false; -#endif -} - -inline bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg) { - return false; -} - -} // namespace port -} // namespace leveldb - -#endif // STORAGE_LEVELDB_PORT_PORT_POSIX_H_ diff --git a/src/leveldb/port/port_win.cc b/src/leveldb/port/port_win.cc deleted file mode 100644 index 1b0f060a19..0000000000 --- a/src/leveldb/port/port_win.cc +++ /dev/null @@ -1,147 +0,0 @@ -// LevelDB Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// See port_example.h for documentation for the following types/functions. - -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the University of California, Berkeley nor the -// names of its contributors may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - -#include "port/port_win.h" - -#include -#include - -namespace leveldb { -namespace port { - -Mutex::Mutex() : - cs_(NULL) { - assert(!cs_); - cs_ = static_cast(new CRITICAL_SECTION()); - ::InitializeCriticalSection(static_cast(cs_)); - assert(cs_); -} - -Mutex::~Mutex() { - assert(cs_); - ::DeleteCriticalSection(static_cast(cs_)); - delete static_cast(cs_); - cs_ = NULL; - assert(!cs_); -} - -void Mutex::Lock() { - assert(cs_); - ::EnterCriticalSection(static_cast(cs_)); -} - -void Mutex::Unlock() { - assert(cs_); - ::LeaveCriticalSection(static_cast(cs_)); -} - -void Mutex::AssertHeld() { - assert(cs_); - assert(1); -} - -CondVar::CondVar(Mutex* mu) : - waiting_(0), - mu_(mu), - sem1_(::CreateSemaphore(NULL, 0, 10000, NULL)), - sem2_(::CreateSemaphore(NULL, 0, 10000, NULL)) { - assert(mu_); -} - -CondVar::~CondVar() { - ::CloseHandle(sem1_); - ::CloseHandle(sem2_); -} - -void CondVar::Wait() { - mu_->AssertHeld(); - - wait_mtx_.Lock(); - ++waiting_; - wait_mtx_.Unlock(); - - mu_->Unlock(); - - // initiate handshake - ::WaitForSingleObject(sem1_, INFINITE); - ::ReleaseSemaphore(sem2_, 1, NULL); - mu_->Lock(); -} - -void CondVar::Signal() { - wait_mtx_.Lock(); - if (waiting_ > 0) { - --waiting_; - - // finalize handshake - ::ReleaseSemaphore(sem1_, 1, NULL); - ::WaitForSingleObject(sem2_, INFINITE); - } - wait_mtx_.Unlock(); -} - -void CondVar::SignalAll() { - wait_mtx_.Lock(); - ::ReleaseSemaphore(sem1_, waiting_, NULL); - while(waiting_ > 0) { - --waiting_; - ::WaitForSingleObject(sem2_, INFINITE); - } - wait_mtx_.Unlock(); -} - -AtomicPointer::AtomicPointer(void* v) { - Release_Store(v); -} - -void InitOnce(OnceType* once, void (*initializer)()) { - once->InitOnce(initializer); -} - -void* AtomicPointer::Acquire_Load() const { - void * p = NULL; - InterlockedExchangePointer(&p, rep_); - return p; -} - -void AtomicPointer::Release_Store(void* v) { - InterlockedExchangePointer(&rep_, v); -} - -void* AtomicPointer::NoBarrier_Load() const { - return rep_; -} - -void AtomicPointer::NoBarrier_Store(void* v) { - rep_ = v; -} - -} -} diff --git a/src/leveldb/port/port_win.h b/src/leveldb/port/port_win.h deleted file mode 100644 index 45bf2f0ea7..0000000000 --- a/src/leveldb/port/port_win.h +++ /dev/null @@ -1,174 +0,0 @@ -// LevelDB Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// See port_example.h for documentation for the following types/functions. - -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the University of California, Berkeley nor the -// names of its contributors may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef STORAGE_LEVELDB_PORT_PORT_WIN_H_ -#define STORAGE_LEVELDB_PORT_PORT_WIN_H_ - -#ifdef _MSC_VER -#define snprintf _snprintf -#define close _close -#define fread_unlocked _fread_nolock -#endif - -#include -#include -#ifdef SNAPPY -#include -#endif - -namespace leveldb { -namespace port { - -// Windows is little endian (for now :p) -static const bool kLittleEndian = true; - -class CondVar; - -class Mutex { - public: - Mutex(); - ~Mutex(); - - void Lock(); - void Unlock(); - void AssertHeld(); - - private: - friend class CondVar; - // critical sections are more efficient than mutexes - // but they are not recursive and can only be used to synchronize threads within the same process - // we use opaque void * to avoid including windows.h in port_win.h - void * cs_; - - // No copying - Mutex(const Mutex&); - void operator=(const Mutex&); -}; - -// the Win32 API offers a dependable condition variable mechanism, but only starting with -// Windows 2008 and Vista -// no matter what we will implement our own condition variable with a semaphore -// implementation as described in a paper written by Andrew D. Birrell in 2003 -class CondVar { - public: - explicit CondVar(Mutex* mu); - ~CondVar(); - void Wait(); - void Signal(); - void SignalAll(); - private: - Mutex* mu_; - - Mutex wait_mtx_; - long waiting_; - - void * sem1_; - void * sem2_; - - -}; - -class OnceType { -public: -// OnceType() : init_(false) {} - OnceType(const OnceType &once) : init_(once.init_) {} - OnceType(bool f) : init_(f) {} - void InitOnce(void (*initializer)()) { - mutex_.Lock(); - if (!init_) { - init_ = true; - initializer(); - } - mutex_.Unlock(); - } - -private: - bool init_; - Mutex mutex_; -}; - -#define LEVELDB_ONCE_INIT false -extern void InitOnce(port::OnceType*, void (*initializer)()); - -// Storage for a lock-free pointer -class AtomicPointer { - private: - void * rep_; - public: - AtomicPointer() : rep_(NULL) { } - explicit AtomicPointer(void* v); - void* Acquire_Load() const; - - void Release_Store(void* v); - - void* NoBarrier_Load() const; - - void NoBarrier_Store(void* v); -}; - -inline bool Snappy_Compress(const char* input, size_t length, - ::std::string* output) { -#ifdef SNAPPY - output->resize(snappy::MaxCompressedLength(length)); - size_t outlen; - snappy::RawCompress(input, length, &(*output)[0], &outlen); - output->resize(outlen); - return true; -#endif - - return false; -} - -inline bool Snappy_GetUncompressedLength(const char* input, size_t length, - size_t* result) { -#ifdef SNAPPY - return snappy::GetUncompressedLength(input, length, result); -#else - return false; -#endif -} - -inline bool Snappy_Uncompress(const char* input, size_t length, - char* output) { -#ifdef SNAPPY - return snappy::RawUncompress(input, length, output); -#else - return false; -#endif -} - -inline bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg) { - return false; -} - -} -} - -#endif // STORAGE_LEVELDB_PORT_PORT_WIN_H_ diff --git a/src/leveldb/port/thread_annotations.h b/src/leveldb/port/thread_annotations.h deleted file mode 100644 index 9470ef587c..0000000000 --- a/src/leveldb/port/thread_annotations.h +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_PORT_THREAD_ANNOTATIONS_H_ -#define STORAGE_LEVELDB_PORT_THREAD_ANNOTATIONS_H_ - -// Some environments provide custom macros to aid in static thread-safety -// analysis. Provide empty definitions of such macros unless they are already -// defined. - -#ifndef EXCLUSIVE_LOCKS_REQUIRED -#define EXCLUSIVE_LOCKS_REQUIRED(...) -#endif - -#ifndef SHARED_LOCKS_REQUIRED -#define SHARED_LOCKS_REQUIRED(...) -#endif - -#ifndef LOCKS_EXCLUDED -#define LOCKS_EXCLUDED(...) -#endif - -#ifndef LOCK_RETURNED -#define LOCK_RETURNED(x) -#endif - -#ifndef LOCKABLE -#define LOCKABLE -#endif - -#ifndef SCOPED_LOCKABLE -#define SCOPED_LOCKABLE -#endif - -#ifndef EXCLUSIVE_LOCK_FUNCTION -#define EXCLUSIVE_LOCK_FUNCTION(...) -#endif - -#ifndef SHARED_LOCK_FUNCTION -#define SHARED_LOCK_FUNCTION(...) -#endif - -#ifndef EXCLUSIVE_TRYLOCK_FUNCTION -#define EXCLUSIVE_TRYLOCK_FUNCTION(...) -#endif - -#ifndef SHARED_TRYLOCK_FUNCTION -#define SHARED_TRYLOCK_FUNCTION(...) -#endif - -#ifndef UNLOCK_FUNCTION -#define UNLOCK_FUNCTION(...) -#endif - -#ifndef NO_THREAD_SAFETY_ANALYSIS -#define NO_THREAD_SAFETY_ANALYSIS -#endif - -#endif // STORAGE_LEVELDB_PORT_THREAD_ANNOTATIONS_H_ diff --git a/src/leveldb/port/win/stdint.h b/src/leveldb/port/win/stdint.h deleted file mode 100644 index 39edd0db13..0000000000 --- a/src/leveldb/port/win/stdint.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -// MSVC didn't ship with this file until the 2010 version. - -#ifndef STORAGE_LEVELDB_PORT_WIN_STDINT_H_ -#define STORAGE_LEVELDB_PORT_WIN_STDINT_H_ - -#if !defined(_MSC_VER) -#error This file should only be included when compiling with MSVC. -#endif - -// Define C99 equivalent types. -typedef signed char int8_t; -typedef signed short int16_t; -typedef signed int int32_t; -typedef signed long long int64_t; -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -typedef unsigned long long uint64_t; - -#endif // STORAGE_LEVELDB_PORT_WIN_STDINT_H_ diff --git a/src/leveldb/table/block.cc b/src/leveldb/table/block.cc deleted file mode 100644 index 43e402c9c0..0000000000 --- a/src/leveldb/table/block.cc +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Decodes the blocks generated by block_builder.cc. - -#include "table/block.h" - -#include -#include -#include "leveldb/comparator.h" -#include "table/format.h" -#include "util/coding.h" -#include "util/logging.h" - -namespace leveldb { - -inline uint32_t Block::NumRestarts() const { - assert(size_ >= sizeof(uint32_t)); - return DecodeFixed32(data_ + size_ - sizeof(uint32_t)); -} - -Block::Block(const BlockContents& contents) - : data_(contents.data.data()), - size_(contents.data.size()), - owned_(contents.heap_allocated) { - if (size_ < sizeof(uint32_t)) { - size_ = 0; // Error marker - } else { - size_t max_restarts_allowed = (size_-sizeof(uint32_t)) / sizeof(uint32_t); - if (NumRestarts() > max_restarts_allowed) { - // The size is too small for NumRestarts() - size_ = 0; - } else { - restart_offset_ = size_ - (1 + NumRestarts()) * sizeof(uint32_t); - } - } -} - -Block::~Block() { - if (owned_) { - delete[] data_; - } -} - -// Helper routine: decode the next block entry starting at "p", -// storing the number of shared key bytes, non_shared key bytes, -// and the length of the value in "*shared", "*non_shared", and -// "*value_length", respectively. Will not dereference past "limit". -// -// If any errors are detected, returns NULL. Otherwise, returns a -// pointer to the key delta (just past the three decoded values). -static inline const char* DecodeEntry(const char* p, const char* limit, - uint32_t* shared, - uint32_t* non_shared, - uint32_t* value_length) { - if (limit - p < 3) return NULL; - *shared = reinterpret_cast(p)[0]; - *non_shared = reinterpret_cast(p)[1]; - *value_length = reinterpret_cast(p)[2]; - if ((*shared | *non_shared | *value_length) < 128) { - // Fast path: all three values are encoded in one byte each - p += 3; - } else { - if ((p = GetVarint32Ptr(p, limit, shared)) == NULL) return NULL; - if ((p = GetVarint32Ptr(p, limit, non_shared)) == NULL) return NULL; - if ((p = GetVarint32Ptr(p, limit, value_length)) == NULL) return NULL; - } - - if (static_cast(limit - p) < (*non_shared + *value_length)) { - return NULL; - } - return p; -} - -class Block::Iter : public Iterator { - private: - const Comparator* const comparator_; - const char* const data_; // underlying block contents - uint32_t const restarts_; // Offset of restart array (list of fixed32) - uint32_t const num_restarts_; // Number of uint32_t entries in restart array - - // current_ is offset in data_ of current entry. >= restarts_ if !Valid - uint32_t current_; - uint32_t restart_index_; // Index of restart block in which current_ falls - std::string key_; - Slice value_; - Status status_; - - inline int Compare(const Slice& a, const Slice& b) const { - return comparator_->Compare(a, b); - } - - // Return the offset in data_ just past the end of the current entry. - inline uint32_t NextEntryOffset() const { - return (value_.data() + value_.size()) - data_; - } - - uint32_t GetRestartPoint(uint32_t index) { - assert(index < num_restarts_); - return DecodeFixed32(data_ + restarts_ + index * sizeof(uint32_t)); - } - - void SeekToRestartPoint(uint32_t index) { - key_.clear(); - restart_index_ = index; - // current_ will be fixed by ParseNextKey(); - - // ParseNextKey() starts at the end of value_, so set value_ accordingly - uint32_t offset = GetRestartPoint(index); - value_ = Slice(data_ + offset, 0); - } - - public: - Iter(const Comparator* comparator, - const char* data, - uint32_t restarts, - uint32_t num_restarts) - : comparator_(comparator), - data_(data), - restarts_(restarts), - num_restarts_(num_restarts), - current_(restarts_), - restart_index_(num_restarts_) { - assert(num_restarts_ > 0); - } - - virtual bool Valid() const { return current_ < restarts_; } - virtual Status status() const { return status_; } - virtual Slice key() const { - assert(Valid()); - return key_; - } - virtual Slice value() const { - assert(Valid()); - return value_; - } - - virtual void Next() { - assert(Valid()); - ParseNextKey(); - } - - virtual void Prev() { - assert(Valid()); - - // Scan backwards to a restart point before current_ - const uint32_t original = current_; - while (GetRestartPoint(restart_index_) >= original) { - if (restart_index_ == 0) { - // No more entries - current_ = restarts_; - restart_index_ = num_restarts_; - return; - } - restart_index_--; - } - - SeekToRestartPoint(restart_index_); - do { - // Loop until end of current entry hits the start of original entry - } while (ParseNextKey() && NextEntryOffset() < original); - } - - virtual void Seek(const Slice& target) { - // Binary search in restart array to find the last restart point - // with a key < target - uint32_t left = 0; - uint32_t right = num_restarts_ - 1; - while (left < right) { - uint32_t mid = (left + right + 1) / 2; - uint32_t region_offset = GetRestartPoint(mid); - uint32_t shared, non_shared, value_length; - const char* key_ptr = DecodeEntry(data_ + region_offset, - data_ + restarts_, - &shared, &non_shared, &value_length); - if (key_ptr == NULL || (shared != 0)) { - CorruptionError(); - return; - } - Slice mid_key(key_ptr, non_shared); - if (Compare(mid_key, target) < 0) { - // Key at "mid" is smaller than "target". Therefore all - // blocks before "mid" are uninteresting. - left = mid; - } else { - // Key at "mid" is >= "target". Therefore all blocks at or - // after "mid" are uninteresting. - right = mid - 1; - } - } - - // Linear search (within restart block) for first key >= target - SeekToRestartPoint(left); - while (true) { - if (!ParseNextKey()) { - return; - } - if (Compare(key_, target) >= 0) { - return; - } - } - } - - virtual void SeekToFirst() { - SeekToRestartPoint(0); - ParseNextKey(); - } - - virtual void SeekToLast() { - SeekToRestartPoint(num_restarts_ - 1); - while (ParseNextKey() && NextEntryOffset() < restarts_) { - // Keep skipping - } - } - - private: - void CorruptionError() { - current_ = restarts_; - restart_index_ = num_restarts_; - status_ = Status::Corruption("bad entry in block"); - key_.clear(); - value_.clear(); - } - - bool ParseNextKey() { - current_ = NextEntryOffset(); - const char* p = data_ + current_; - const char* limit = data_ + restarts_; // Restarts come right after data - if (p >= limit) { - // No more entries to return. Mark as invalid. - current_ = restarts_; - restart_index_ = num_restarts_; - return false; - } - - // Decode next entry - uint32_t shared, non_shared, value_length; - p = DecodeEntry(p, limit, &shared, &non_shared, &value_length); - if (p == NULL || key_.size() < shared) { - CorruptionError(); - return false; - } else { - key_.resize(shared); - key_.append(p, non_shared); - value_ = Slice(p + non_shared, value_length); - while (restart_index_ + 1 < num_restarts_ && - GetRestartPoint(restart_index_ + 1) < current_) { - ++restart_index_; - } - return true; - } - } -}; - -Iterator* Block::NewIterator(const Comparator* cmp) { - if (size_ < sizeof(uint32_t)) { - return NewErrorIterator(Status::Corruption("bad block contents")); - } - const uint32_t num_restarts = NumRestarts(); - if (num_restarts == 0) { - return NewEmptyIterator(); - } else { - return new Iter(cmp, data_, restart_offset_, num_restarts); - } -} - -} // namespace leveldb diff --git a/src/leveldb/table/block.h b/src/leveldb/table/block.h deleted file mode 100644 index 2493eb9f9f..0000000000 --- a/src/leveldb/table/block.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_BLOCK_H_ -#define STORAGE_LEVELDB_TABLE_BLOCK_H_ - -#include -#include -#include "leveldb/iterator.h" - -namespace leveldb { - -struct BlockContents; -class Comparator; - -class Block { - public: - // Initialize the block with the specified contents. - explicit Block(const BlockContents& contents); - - ~Block(); - - size_t size() const { return size_; } - Iterator* NewIterator(const Comparator* comparator); - - private: - uint32_t NumRestarts() const; - - const char* data_; - size_t size_; - uint32_t restart_offset_; // Offset in data_ of restart array - bool owned_; // Block owns data_[] - - // No copying allowed - Block(const Block&); - void operator=(const Block&); - - class Iter; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_BLOCK_H_ diff --git a/src/leveldb/table/block_builder.cc b/src/leveldb/table/block_builder.cc deleted file mode 100644 index db660cd07c..0000000000 --- a/src/leveldb/table/block_builder.cc +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// BlockBuilder generates blocks where keys are prefix-compressed: -// -// When we store a key, we drop the prefix shared with the previous -// string. This helps reduce the space requirement significantly. -// Furthermore, once every K keys, we do not apply the prefix -// compression and store the entire key. We call this a "restart -// point". The tail end of the block stores the offsets of all of the -// restart points, and can be used to do a binary search when looking -// for a particular key. Values are stored as-is (without compression) -// immediately following the corresponding key. -// -// An entry for a particular key-value pair has the form: -// shared_bytes: varint32 -// unshared_bytes: varint32 -// value_length: varint32 -// key_delta: char[unshared_bytes] -// value: char[value_length] -// shared_bytes == 0 for restart points. -// -// The trailer of the block has the form: -// restarts: uint32[num_restarts] -// num_restarts: uint32 -// restarts[i] contains the offset within the block of the ith restart point. - -#include "table/block_builder.h" - -#include -#include -#include "leveldb/comparator.h" -#include "leveldb/table_builder.h" -#include "util/coding.h" - -namespace leveldb { - -BlockBuilder::BlockBuilder(const Options* options) - : options_(options), - restarts_(), - counter_(0), - finished_(false) { - assert(options->block_restart_interval >= 1); - restarts_.push_back(0); // First restart point is at offset 0 -} - -void BlockBuilder::Reset() { - buffer_.clear(); - restarts_.clear(); - restarts_.push_back(0); // First restart point is at offset 0 - counter_ = 0; - finished_ = false; - last_key_.clear(); -} - -size_t BlockBuilder::CurrentSizeEstimate() const { - return (buffer_.size() + // Raw data buffer - restarts_.size() * sizeof(uint32_t) + // Restart array - sizeof(uint32_t)); // Restart array length -} - -Slice BlockBuilder::Finish() { - // Append restart array - for (size_t i = 0; i < restarts_.size(); i++) { - PutFixed32(&buffer_, restarts_[i]); - } - PutFixed32(&buffer_, restarts_.size()); - finished_ = true; - return Slice(buffer_); -} - -void BlockBuilder::Add(const Slice& key, const Slice& value) { - Slice last_key_piece(last_key_); - assert(!finished_); - assert(counter_ <= options_->block_restart_interval); - assert(buffer_.empty() // No values yet? - || options_->comparator->Compare(key, last_key_piece) > 0); - size_t shared = 0; - if (counter_ < options_->block_restart_interval) { - // See how much sharing to do with previous string - const size_t min_length = std::min(last_key_piece.size(), key.size()); - while ((shared < min_length) && (last_key_piece[shared] == key[shared])) { - shared++; - } - } else { - // Restart compression - restarts_.push_back(buffer_.size()); - counter_ = 0; - } - const size_t non_shared = key.size() - shared; - - // Add "" to buffer_ - PutVarint32(&buffer_, shared); - PutVarint32(&buffer_, non_shared); - PutVarint32(&buffer_, value.size()); - - // Add string delta to buffer_ followed by value - buffer_.append(key.data() + shared, non_shared); - buffer_.append(value.data(), value.size()); - - // Update state - last_key_.resize(shared); - last_key_.append(key.data() + shared, non_shared); - assert(Slice(last_key_) == key); - counter_++; -} - -} // namespace leveldb diff --git a/src/leveldb/table/block_builder.h b/src/leveldb/table/block_builder.h deleted file mode 100644 index 4fbcb33972..0000000000 --- a/src/leveldb/table/block_builder.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ -#define STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ - -#include - -#include -#include "leveldb/slice.h" - -namespace leveldb { - -struct Options; - -class BlockBuilder { - public: - explicit BlockBuilder(const Options* options); - - // Reset the contents as if the BlockBuilder was just constructed. - void Reset(); - - // REQUIRES: Finish() has not been called since the last call to Reset(). - // REQUIRES: key is larger than any previously added key - void Add(const Slice& key, const Slice& value); - - // Finish building the block and return a slice that refers to the - // block contents. The returned slice will remain valid for the - // lifetime of this builder or until Reset() is called. - Slice Finish(); - - // Returns an estimate of the current (uncompressed) size of the block - // we are building. - size_t CurrentSizeEstimate() const; - - // Return true iff no entries have been added since the last Reset() - bool empty() const { - return buffer_.empty(); - } - - private: - const Options* options_; - std::string buffer_; // Destination buffer - std::vector restarts_; // Restart points - int counter_; // Number of entries emitted since restart - bool finished_; // Has Finish() been called? - std::string last_key_; - - // No copying allowed - BlockBuilder(const BlockBuilder&); - void operator=(const BlockBuilder&); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ diff --git a/src/leveldb/table/filter_block.cc b/src/leveldb/table/filter_block.cc deleted file mode 100644 index 203e15c8bc..0000000000 --- a/src/leveldb/table/filter_block.cc +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/filter_block.h" - -#include "leveldb/filter_policy.h" -#include "util/coding.h" - -namespace leveldb { - -// See doc/table_format.txt for an explanation of the filter block format. - -// Generate new filter every 2KB of data -static const size_t kFilterBaseLg = 11; -static const size_t kFilterBase = 1 << kFilterBaseLg; - -FilterBlockBuilder::FilterBlockBuilder(const FilterPolicy* policy) - : policy_(policy) { -} - -void FilterBlockBuilder::StartBlock(uint64_t block_offset) { - uint64_t filter_index = (block_offset / kFilterBase); - assert(filter_index >= filter_offsets_.size()); - while (filter_index > filter_offsets_.size()) { - GenerateFilter(); - } -} - -void FilterBlockBuilder::AddKey(const Slice& key) { - Slice k = key; - start_.push_back(keys_.size()); - keys_.append(k.data(), k.size()); -} - -Slice FilterBlockBuilder::Finish() { - if (!start_.empty()) { - GenerateFilter(); - } - - // Append array of per-filter offsets - const uint32_t array_offset = result_.size(); - for (size_t i = 0; i < filter_offsets_.size(); i++) { - PutFixed32(&result_, filter_offsets_[i]); - } - - PutFixed32(&result_, array_offset); - result_.push_back(kFilterBaseLg); // Save encoding parameter in result - return Slice(result_); -} - -void FilterBlockBuilder::GenerateFilter() { - const size_t num_keys = start_.size(); - if (num_keys == 0) { - // Fast path if there are no keys for this filter - filter_offsets_.push_back(result_.size()); - return; - } - - // Make list of keys from flattened key structure - start_.push_back(keys_.size()); // Simplify length computation - tmp_keys_.resize(num_keys); - for (size_t i = 0; i < num_keys; i++) { - const char* base = keys_.data() + start_[i]; - size_t length = start_[i+1] - start_[i]; - tmp_keys_[i] = Slice(base, length); - } - - // Generate filter for current set of keys and append to result_. - filter_offsets_.push_back(result_.size()); - policy_->CreateFilter(&tmp_keys_[0], num_keys, &result_); - - tmp_keys_.clear(); - keys_.clear(); - start_.clear(); -} - -FilterBlockReader::FilterBlockReader(const FilterPolicy* policy, - const Slice& contents) - : policy_(policy), - data_(NULL), - offset_(NULL), - num_(0), - base_lg_(0) { - size_t n = contents.size(); - if (n < 5) return; // 1 byte for base_lg_ and 4 for start of offset array - base_lg_ = contents[n-1]; - uint32_t last_word = DecodeFixed32(contents.data() + n - 5); - if (last_word > n - 5) return; - data_ = contents.data(); - offset_ = data_ + last_word; - num_ = (n - 5 - last_word) / 4; -} - -bool FilterBlockReader::KeyMayMatch(uint64_t block_offset, const Slice& key) { - uint64_t index = block_offset >> base_lg_; - if (index < num_) { - uint32_t start = DecodeFixed32(offset_ + index*4); - uint32_t limit = DecodeFixed32(offset_ + index*4 + 4); - if (start <= limit && limit <= (offset_ - data_)) { - Slice filter = Slice(data_ + start, limit - start); - return policy_->KeyMayMatch(key, filter); - } else if (start == limit) { - // Empty filters do not match any keys - return false; - } - } - return true; // Errors are treated as potential matches -} - -} diff --git a/src/leveldb/table/filter_block.h b/src/leveldb/table/filter_block.h deleted file mode 100644 index c67d010bd1..0000000000 --- a/src/leveldb/table/filter_block.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A filter block is stored near the end of a Table file. It contains -// filters (e.g., bloom filters) for all data blocks in the table combined -// into a single filter block. - -#ifndef STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_ -#define STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_ - -#include -#include -#include -#include -#include "leveldb/slice.h" -#include "util/hash.h" - -namespace leveldb { - -class FilterPolicy; - -// A FilterBlockBuilder is used to construct all of the filters for a -// particular Table. It generates a single string which is stored as -// a special block in the Table. -// -// The sequence of calls to FilterBlockBuilder must match the regexp: -// (StartBlock AddKey*)* Finish -class FilterBlockBuilder { - public: - explicit FilterBlockBuilder(const FilterPolicy*); - - void StartBlock(uint64_t block_offset); - void AddKey(const Slice& key); - Slice Finish(); - - private: - void GenerateFilter(); - - const FilterPolicy* policy_; - std::string keys_; // Flattened key contents - std::vector start_; // Starting index in keys_ of each key - std::string result_; // Filter data computed so far - std::vector tmp_keys_; // policy_->CreateFilter() argument - std::vector filter_offsets_; - - // No copying allowed - FilterBlockBuilder(const FilterBlockBuilder&); - void operator=(const FilterBlockBuilder&); -}; - -class FilterBlockReader { - public: - // REQUIRES: "contents" and *policy must stay live while *this is live. - FilterBlockReader(const FilterPolicy* policy, const Slice& contents); - bool KeyMayMatch(uint64_t block_offset, const Slice& key); - - private: - const FilterPolicy* policy_; - const char* data_; // Pointer to filter data (at block-start) - const char* offset_; // Pointer to beginning of offset array (at block-end) - size_t num_; // Number of entries in offset array - size_t base_lg_; // Encoding parameter (see kFilterBaseLg in .cc file) -}; - -} - -#endif // STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_ diff --git a/src/leveldb/table/filter_block_test.cc b/src/leveldb/table/filter_block_test.cc deleted file mode 100644 index 8c4a4741f2..0000000000 --- a/src/leveldb/table/filter_block_test.cc +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/filter_block.h" - -#include "leveldb/filter_policy.h" -#include "util/coding.h" -#include "util/hash.h" -#include "util/logging.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -// For testing: emit an array with one hash value per key -class TestHashFilter : public FilterPolicy { - public: - virtual const char* Name() const { - return "TestHashFilter"; - } - - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const { - for (int i = 0; i < n; i++) { - uint32_t h = Hash(keys[i].data(), keys[i].size(), 1); - PutFixed32(dst, h); - } - } - - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const { - uint32_t h = Hash(key.data(), key.size(), 1); - for (size_t i = 0; i + 4 <= filter.size(); i += 4) { - if (h == DecodeFixed32(filter.data() + i)) { - return true; - } - } - return false; - } -}; - -class FilterBlockTest { - public: - TestHashFilter policy_; -}; - -TEST(FilterBlockTest, EmptyBuilder) { - FilterBlockBuilder builder(&policy_); - Slice block = builder.Finish(); - ASSERT_EQ("\\x00\\x00\\x00\\x00\\x0b", EscapeString(block)); - FilterBlockReader reader(&policy_, block); - ASSERT_TRUE(reader.KeyMayMatch(0, "foo")); - ASSERT_TRUE(reader.KeyMayMatch(100000, "foo")); -} - -TEST(FilterBlockTest, SingleChunk) { - FilterBlockBuilder builder(&policy_); - builder.StartBlock(100); - builder.AddKey("foo"); - builder.AddKey("bar"); - builder.AddKey("box"); - builder.StartBlock(200); - builder.AddKey("box"); - builder.StartBlock(300); - builder.AddKey("hello"); - Slice block = builder.Finish(); - FilterBlockReader reader(&policy_, block); - ASSERT_TRUE(reader.KeyMayMatch(100, "foo")); - ASSERT_TRUE(reader.KeyMayMatch(100, "bar")); - ASSERT_TRUE(reader.KeyMayMatch(100, "box")); - ASSERT_TRUE(reader.KeyMayMatch(100, "hello")); - ASSERT_TRUE(reader.KeyMayMatch(100, "foo")); - ASSERT_TRUE(! reader.KeyMayMatch(100, "missing")); - ASSERT_TRUE(! reader.KeyMayMatch(100, "other")); -} - -TEST(FilterBlockTest, MultiChunk) { - FilterBlockBuilder builder(&policy_); - - // First filter - builder.StartBlock(0); - builder.AddKey("foo"); - builder.StartBlock(2000); - builder.AddKey("bar"); - - // Second filter - builder.StartBlock(3100); - builder.AddKey("box"); - - // Third filter is empty - - // Last filter - builder.StartBlock(9000); - builder.AddKey("box"); - builder.AddKey("hello"); - - Slice block = builder.Finish(); - FilterBlockReader reader(&policy_, block); - - // Check first filter - ASSERT_TRUE(reader.KeyMayMatch(0, "foo")); - ASSERT_TRUE(reader.KeyMayMatch(2000, "bar")); - ASSERT_TRUE(! reader.KeyMayMatch(0, "box")); - ASSERT_TRUE(! reader.KeyMayMatch(0, "hello")); - - // Check second filter - ASSERT_TRUE(reader.KeyMayMatch(3100, "box")); - ASSERT_TRUE(! reader.KeyMayMatch(3100, "foo")); - ASSERT_TRUE(! reader.KeyMayMatch(3100, "bar")); - ASSERT_TRUE(! reader.KeyMayMatch(3100, "hello")); - - // Check third filter (empty) - ASSERT_TRUE(! reader.KeyMayMatch(4100, "foo")); - ASSERT_TRUE(! reader.KeyMayMatch(4100, "bar")); - ASSERT_TRUE(! reader.KeyMayMatch(4100, "box")); - ASSERT_TRUE(! reader.KeyMayMatch(4100, "hello")); - - // Check last filter - ASSERT_TRUE(reader.KeyMayMatch(9000, "box")); - ASSERT_TRUE(reader.KeyMayMatch(9000, "hello")); - ASSERT_TRUE(! reader.KeyMayMatch(9000, "foo")); - ASSERT_TRUE(! reader.KeyMayMatch(9000, "bar")); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/table/format.cc b/src/leveldb/table/format.cc deleted file mode 100644 index aa63144c9e..0000000000 --- a/src/leveldb/table/format.cc +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/format.h" - -#include "leveldb/env.h" -#include "port/port.h" -#include "table/block.h" -#include "util/coding.h" -#include "util/crc32c.h" - -namespace leveldb { - -void BlockHandle::EncodeTo(std::string* dst) const { - // Sanity check that all fields have been set - assert(offset_ != ~static_cast(0)); - assert(size_ != ~static_cast(0)); - PutVarint64(dst, offset_); - PutVarint64(dst, size_); -} - -Status BlockHandle::DecodeFrom(Slice* input) { - if (GetVarint64(input, &offset_) && - GetVarint64(input, &size_)) { - return Status::OK(); - } else { - return Status::Corruption("bad block handle"); - } -} - -void Footer::EncodeTo(std::string* dst) const { -#ifndef NDEBUG - const size_t original_size = dst->size(); -#endif - metaindex_handle_.EncodeTo(dst); - index_handle_.EncodeTo(dst); - dst->resize(2 * BlockHandle::kMaxEncodedLength); // Padding - PutFixed32(dst, static_cast(kTableMagicNumber & 0xffffffffu)); - PutFixed32(dst, static_cast(kTableMagicNumber >> 32)); - assert(dst->size() == original_size + kEncodedLength); -} - -Status Footer::DecodeFrom(Slice* input) { - const char* magic_ptr = input->data() + kEncodedLength - 8; - const uint32_t magic_lo = DecodeFixed32(magic_ptr); - const uint32_t magic_hi = DecodeFixed32(magic_ptr + 4); - const uint64_t magic = ((static_cast(magic_hi) << 32) | - (static_cast(magic_lo))); - if (magic != kTableMagicNumber) { - return Status::Corruption("not an sstable (bad magic number)"); - } - - Status result = metaindex_handle_.DecodeFrom(input); - if (result.ok()) { - result = index_handle_.DecodeFrom(input); - } - if (result.ok()) { - // We skip over any leftover data (just padding for now) in "input" - const char* end = magic_ptr + 8; - *input = Slice(end, input->data() + input->size() - end); - } - return result; -} - -Status ReadBlock(RandomAccessFile* file, - const ReadOptions& options, - const BlockHandle& handle, - BlockContents* result) { - result->data = Slice(); - result->cachable = false; - result->heap_allocated = false; - - // Read the block contents as well as the type/crc footer. - // See table_builder.cc for the code that built this structure. - size_t n = static_cast(handle.size()); - char* buf = new char[n + kBlockTrailerSize]; - Slice contents; - Status s = file->Read(handle.offset(), n + kBlockTrailerSize, &contents, buf); - if (!s.ok()) { - delete[] buf; - return s; - } - if (contents.size() != n + kBlockTrailerSize) { - delete[] buf; - return Status::Corruption("truncated block read"); - } - - // Check the crc of the type and the block contents - const char* data = contents.data(); // Pointer to where Read put the data - if (options.verify_checksums) { - const uint32_t crc = crc32c::Unmask(DecodeFixed32(data + n + 1)); - const uint32_t actual = crc32c::Value(data, n + 1); - if (actual != crc) { - delete[] buf; - s = Status::Corruption("block checksum mismatch"); - return s; - } - } - - switch (data[n]) { - case kNoCompression: - if (data != buf) { - // File implementation gave us pointer to some other data. - // Use it directly under the assumption that it will be live - // while the file is open. - delete[] buf; - result->data = Slice(data, n); - result->heap_allocated = false; - result->cachable = false; // Do not double-cache - } else { - result->data = Slice(buf, n); - result->heap_allocated = true; - result->cachable = true; - } - - // Ok - break; - case kSnappyCompression: { - size_t ulength = 0; - if (!port::Snappy_GetUncompressedLength(data, n, &ulength)) { - delete[] buf; - return Status::Corruption("corrupted compressed block contents"); - } - char* ubuf = new char[ulength]; - if (!port::Snappy_Uncompress(data, n, ubuf)) { - delete[] buf; - delete[] ubuf; - return Status::Corruption("corrupted compressed block contents"); - } - delete[] buf; - result->data = Slice(ubuf, ulength); - result->heap_allocated = true; - result->cachable = true; - break; - } - default: - delete[] buf; - return Status::Corruption("bad block type"); - } - - return Status::OK(); -} - -} // namespace leveldb diff --git a/src/leveldb/table/format.h b/src/leveldb/table/format.h deleted file mode 100644 index 6c0b80c017..0000000000 --- a/src/leveldb/table/format.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_FORMAT_H_ -#define STORAGE_LEVELDB_TABLE_FORMAT_H_ - -#include -#include -#include "leveldb/slice.h" -#include "leveldb/status.h" -#include "leveldb/table_builder.h" - -namespace leveldb { - -class Block; -class RandomAccessFile; -struct ReadOptions; - -// BlockHandle is a pointer to the extent of a file that stores a data -// block or a meta block. -class BlockHandle { - public: - BlockHandle(); - - // The offset of the block in the file. - uint64_t offset() const { return offset_; } - void set_offset(uint64_t offset) { offset_ = offset; } - - // The size of the stored block - uint64_t size() const { return size_; } - void set_size(uint64_t size) { size_ = size; } - - void EncodeTo(std::string* dst) const; - Status DecodeFrom(Slice* input); - - // Maximum encoding length of a BlockHandle - enum { kMaxEncodedLength = 10 + 10 }; - - private: - uint64_t offset_; - uint64_t size_; -}; - -// Footer encapsulates the fixed information stored at the tail -// end of every table file. -class Footer { - public: - Footer() { } - - // The block handle for the metaindex block of the table - const BlockHandle& metaindex_handle() const { return metaindex_handle_; } - void set_metaindex_handle(const BlockHandle& h) { metaindex_handle_ = h; } - - // The block handle for the index block of the table - const BlockHandle& index_handle() const { - return index_handle_; - } - void set_index_handle(const BlockHandle& h) { - index_handle_ = h; - } - - void EncodeTo(std::string* dst) const; - Status DecodeFrom(Slice* input); - - // Encoded length of a Footer. Note that the serialization of a - // Footer will always occupy exactly this many bytes. It consists - // of two block handles and a magic number. - enum { - kEncodedLength = 2*BlockHandle::kMaxEncodedLength + 8 - }; - - private: - BlockHandle metaindex_handle_; - BlockHandle index_handle_; -}; - -// kTableMagicNumber was picked by running -// echo http://code.google.com/p/leveldb/ | sha1sum -// and taking the leading 64 bits. -static const uint64_t kTableMagicNumber = 0xdb4775248b80fb57ull; - -// 1-byte type + 32-bit crc -static const size_t kBlockTrailerSize = 5; - -struct BlockContents { - Slice data; // Actual contents of data - bool cachable; // True iff data can be cached - bool heap_allocated; // True iff caller should delete[] data.data() -}; - -// Read the block identified by "handle" from "file". On failure -// return non-OK. On success fill *result and return OK. -extern Status ReadBlock(RandomAccessFile* file, - const ReadOptions& options, - const BlockHandle& handle, - BlockContents* result); - -// Implementation details follow. Clients should ignore, - -inline BlockHandle::BlockHandle() - : offset_(~static_cast(0)), - size_(~static_cast(0)) { -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_FORMAT_H_ diff --git a/src/leveldb/table/iterator.cc b/src/leveldb/table/iterator.cc deleted file mode 100644 index 3d1c87fdec..0000000000 --- a/src/leveldb/table/iterator.cc +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/iterator.h" - -namespace leveldb { - -Iterator::Iterator() { - cleanup_.function = NULL; - cleanup_.next = NULL; -} - -Iterator::~Iterator() { - if (cleanup_.function != NULL) { - (*cleanup_.function)(cleanup_.arg1, cleanup_.arg2); - for (Cleanup* c = cleanup_.next; c != NULL; ) { - (*c->function)(c->arg1, c->arg2); - Cleanup* next = c->next; - delete c; - c = next; - } - } -} - -void Iterator::RegisterCleanup(CleanupFunction func, void* arg1, void* arg2) { - assert(func != NULL); - Cleanup* c; - if (cleanup_.function == NULL) { - c = &cleanup_; - } else { - c = new Cleanup; - c->next = cleanup_.next; - cleanup_.next = c; - } - c->function = func; - c->arg1 = arg1; - c->arg2 = arg2; -} - -namespace { -class EmptyIterator : public Iterator { - public: - EmptyIterator(const Status& s) : status_(s) { } - virtual bool Valid() const { return false; } - virtual void Seek(const Slice& target) { } - virtual void SeekToFirst() { } - virtual void SeekToLast() { } - virtual void Next() { assert(false); } - virtual void Prev() { assert(false); } - Slice key() const { assert(false); return Slice(); } - Slice value() const { assert(false); return Slice(); } - virtual Status status() const { return status_; } - private: - Status status_; -}; -} // namespace - -Iterator* NewEmptyIterator() { - return new EmptyIterator(Status::OK()); -} - -Iterator* NewErrorIterator(const Status& status) { - return new EmptyIterator(status); -} - -} // namespace leveldb diff --git a/src/leveldb/table/iterator_wrapper.h b/src/leveldb/table/iterator_wrapper.h deleted file mode 100644 index 9e16b3dbed..0000000000 --- a/src/leveldb/table/iterator_wrapper.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_ -#define STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_ - -namespace leveldb { - -// A internal wrapper class with an interface similar to Iterator that -// caches the valid() and key() results for an underlying iterator. -// This can help avoid virtual function calls and also gives better -// cache locality. -class IteratorWrapper { - public: - IteratorWrapper(): iter_(NULL), valid_(false) { } - explicit IteratorWrapper(Iterator* iter): iter_(NULL) { - Set(iter); - } - ~IteratorWrapper() { delete iter_; } - Iterator* iter() const { return iter_; } - - // Takes ownership of "iter" and will delete it when destroyed, or - // when Set() is invoked again. - void Set(Iterator* iter) { - delete iter_; - iter_ = iter; - if (iter_ == NULL) { - valid_ = false; - } else { - Update(); - } - } - - - // Iterator interface methods - bool Valid() const { return valid_; } - Slice key() const { assert(Valid()); return key_; } - Slice value() const { assert(Valid()); return iter_->value(); } - // Methods below require iter() != NULL - Status status() const { assert(iter_); return iter_->status(); } - void Next() { assert(iter_); iter_->Next(); Update(); } - void Prev() { assert(iter_); iter_->Prev(); Update(); } - void Seek(const Slice& k) { assert(iter_); iter_->Seek(k); Update(); } - void SeekToFirst() { assert(iter_); iter_->SeekToFirst(); Update(); } - void SeekToLast() { assert(iter_); iter_->SeekToLast(); Update(); } - - private: - void Update() { - valid_ = iter_->Valid(); - if (valid_) { - key_ = iter_->key(); - } - } - - Iterator* iter_; - bool valid_; - Slice key_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_ diff --git a/src/leveldb/table/merger.cc b/src/leveldb/table/merger.cc deleted file mode 100644 index 2dde4dc21f..0000000000 --- a/src/leveldb/table/merger.cc +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/merger.h" - -#include "leveldb/comparator.h" -#include "leveldb/iterator.h" -#include "table/iterator_wrapper.h" - -namespace leveldb { - -namespace { -class MergingIterator : public Iterator { - public: - MergingIterator(const Comparator* comparator, Iterator** children, int n) - : comparator_(comparator), - children_(new IteratorWrapper[n]), - n_(n), - current_(NULL), - direction_(kForward) { - for (int i = 0; i < n; i++) { - children_[i].Set(children[i]); - } - } - - virtual ~MergingIterator() { - delete[] children_; - } - - virtual bool Valid() const { - return (current_ != NULL); - } - - virtual void SeekToFirst() { - for (int i = 0; i < n_; i++) { - children_[i].SeekToFirst(); - } - FindSmallest(); - direction_ = kForward; - } - - virtual void SeekToLast() { - for (int i = 0; i < n_; i++) { - children_[i].SeekToLast(); - } - FindLargest(); - direction_ = kReverse; - } - - virtual void Seek(const Slice& target) { - for (int i = 0; i < n_; i++) { - children_[i].Seek(target); - } - FindSmallest(); - direction_ = kForward; - } - - virtual void Next() { - assert(Valid()); - - // Ensure that all children are positioned after key(). - // If we are moving in the forward direction, it is already - // true for all of the non-current_ children since current_ is - // the smallest child and key() == current_->key(). Otherwise, - // we explicitly position the non-current_ children. - if (direction_ != kForward) { - for (int i = 0; i < n_; i++) { - IteratorWrapper* child = &children_[i]; - if (child != current_) { - child->Seek(key()); - if (child->Valid() && - comparator_->Compare(key(), child->key()) == 0) { - child->Next(); - } - } - } - direction_ = kForward; - } - - current_->Next(); - FindSmallest(); - } - - virtual void Prev() { - assert(Valid()); - - // Ensure that all children are positioned before key(). - // If we are moving in the reverse direction, it is already - // true for all of the non-current_ children since current_ is - // the largest child and key() == current_->key(). Otherwise, - // we explicitly position the non-current_ children. - if (direction_ != kReverse) { - for (int i = 0; i < n_; i++) { - IteratorWrapper* child = &children_[i]; - if (child != current_) { - child->Seek(key()); - if (child->Valid()) { - // Child is at first entry >= key(). Step back one to be < key() - child->Prev(); - } else { - // Child has no entries >= key(). Position at last entry. - child->SeekToLast(); - } - } - } - direction_ = kReverse; - } - - current_->Prev(); - FindLargest(); - } - - virtual Slice key() const { - assert(Valid()); - return current_->key(); - } - - virtual Slice value() const { - assert(Valid()); - return current_->value(); - } - - virtual Status status() const { - Status status; - for (int i = 0; i < n_; i++) { - status = children_[i].status(); - if (!status.ok()) { - break; - } - } - return status; - } - - private: - void FindSmallest(); - void FindLargest(); - - // We might want to use a heap in case there are lots of children. - // For now we use a simple array since we expect a very small number - // of children in leveldb. - const Comparator* comparator_; - IteratorWrapper* children_; - int n_; - IteratorWrapper* current_; - - // Which direction is the iterator moving? - enum Direction { - kForward, - kReverse - }; - Direction direction_; -}; - -void MergingIterator::FindSmallest() { - IteratorWrapper* smallest = NULL; - for (int i = 0; i < n_; i++) { - IteratorWrapper* child = &children_[i]; - if (child->Valid()) { - if (smallest == NULL) { - smallest = child; - } else if (comparator_->Compare(child->key(), smallest->key()) < 0) { - smallest = child; - } - } - } - current_ = smallest; -} - -void MergingIterator::FindLargest() { - IteratorWrapper* largest = NULL; - for (int i = n_-1; i >= 0; i--) { - IteratorWrapper* child = &children_[i]; - if (child->Valid()) { - if (largest == NULL) { - largest = child; - } else if (comparator_->Compare(child->key(), largest->key()) > 0) { - largest = child; - } - } - } - current_ = largest; -} -} // namespace - -Iterator* NewMergingIterator(const Comparator* cmp, Iterator** list, int n) { - assert(n >= 0); - if (n == 0) { - return NewEmptyIterator(); - } else if (n == 1) { - return list[0]; - } else { - return new MergingIterator(cmp, list, n); - } -} - -} // namespace leveldb diff --git a/src/leveldb/table/merger.h b/src/leveldb/table/merger.h deleted file mode 100644 index 91ddd80faa..0000000000 --- a/src/leveldb/table/merger.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_MERGER_H_ -#define STORAGE_LEVELDB_TABLE_MERGER_H_ - -namespace leveldb { - -class Comparator; -class Iterator; - -// Return an iterator that provided the union of the data in -// children[0,n-1]. Takes ownership of the child iterators and -// will delete them when the result iterator is deleted. -// -// The result does no duplicate suppression. I.e., if a particular -// key is present in K child iterators, it will be yielded K times. -// -// REQUIRES: n >= 0 -extern Iterator* NewMergingIterator( - const Comparator* comparator, Iterator** children, int n); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_MERGER_H_ diff --git a/src/leveldb/table/table.cc b/src/leveldb/table/table.cc deleted file mode 100644 index dff8a82590..0000000000 --- a/src/leveldb/table/table.cc +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/table.h" - -#include "leveldb/cache.h" -#include "leveldb/comparator.h" -#include "leveldb/env.h" -#include "leveldb/filter_policy.h" -#include "leveldb/options.h" -#include "table/block.h" -#include "table/filter_block.h" -#include "table/format.h" -#include "table/two_level_iterator.h" -#include "util/coding.h" - -namespace leveldb { - -struct Table::Rep { - ~Rep() { - delete filter; - delete [] filter_data; - delete index_block; - } - - Options options; - Status status; - RandomAccessFile* file; - uint64_t cache_id; - FilterBlockReader* filter; - const char* filter_data; - - BlockHandle metaindex_handle; // Handle to metaindex_block: saved from footer - Block* index_block; -}; - -Status Table::Open(const Options& options, - RandomAccessFile* file, - uint64_t size, - Table** table) { - *table = NULL; - if (size < Footer::kEncodedLength) { - return Status::Corruption("file is too short to be an sstable"); - } - - char footer_space[Footer::kEncodedLength]; - Slice footer_input; - Status s = file->Read(size - Footer::kEncodedLength, Footer::kEncodedLength, - &footer_input, footer_space); - if (!s.ok()) return s; - - Footer footer; - s = footer.DecodeFrom(&footer_input); - if (!s.ok()) return s; - - // Read the index block - BlockContents contents; - Block* index_block = NULL; - if (s.ok()) { - ReadOptions opt; - if (options.paranoid_checks) { - opt.verify_checksums = true; - } - s = ReadBlock(file, opt, footer.index_handle(), &contents); - if (s.ok()) { - index_block = new Block(contents); - } - } - - if (s.ok()) { - // We've successfully read the footer and the index block: we're - // ready to serve requests. - Rep* rep = new Table::Rep; - rep->options = options; - rep->file = file; - rep->metaindex_handle = footer.metaindex_handle(); - rep->index_block = index_block; - rep->cache_id = (options.block_cache ? options.block_cache->NewId() : 0); - rep->filter_data = NULL; - rep->filter = NULL; - *table = new Table(rep); - (*table)->ReadMeta(footer); - } else { - if (index_block) delete index_block; - } - - return s; -} - -void Table::ReadMeta(const Footer& footer) { - if (rep_->options.filter_policy == NULL) { - return; // Do not need any metadata - } - - // TODO(sanjay): Skip this if footer.metaindex_handle() size indicates - // it is an empty block. - ReadOptions opt; - if (rep_->options.paranoid_checks) { - opt.verify_checksums = true; - } - BlockContents contents; - if (!ReadBlock(rep_->file, opt, footer.metaindex_handle(), &contents).ok()) { - // Do not propagate errors since meta info is not needed for operation - return; - } - Block* meta = new Block(contents); - - Iterator* iter = meta->NewIterator(BytewiseComparator()); - std::string key = "filter."; - key.append(rep_->options.filter_policy->Name()); - iter->Seek(key); - if (iter->Valid() && iter->key() == Slice(key)) { - ReadFilter(iter->value()); - } - delete iter; - delete meta; -} - -void Table::ReadFilter(const Slice& filter_handle_value) { - Slice v = filter_handle_value; - BlockHandle filter_handle; - if (!filter_handle.DecodeFrom(&v).ok()) { - return; - } - - // We might want to unify with ReadBlock() if we start - // requiring checksum verification in Table::Open. - ReadOptions opt; - if (rep_->options.paranoid_checks) { - opt.verify_checksums = true; - } - BlockContents block; - if (!ReadBlock(rep_->file, opt, filter_handle, &block).ok()) { - return; - } - if (block.heap_allocated) { - rep_->filter_data = block.data.data(); // Will need to delete later - } - rep_->filter = new FilterBlockReader(rep_->options.filter_policy, block.data); -} - -Table::~Table() { - delete rep_; -} - -static void DeleteBlock(void* arg, void* ignored) { - delete reinterpret_cast(arg); -} - -static void DeleteCachedBlock(const Slice& key, void* value) { - Block* block = reinterpret_cast(value); - delete block; -} - -static void ReleaseBlock(void* arg, void* h) { - Cache* cache = reinterpret_cast(arg); - Cache::Handle* handle = reinterpret_cast(h); - cache->Release(handle); -} - -// Convert an index iterator value (i.e., an encoded BlockHandle) -// into an iterator over the contents of the corresponding block. -Iterator* Table::BlockReader(void* arg, - const ReadOptions& options, - const Slice& index_value) { - Table* table = reinterpret_cast(arg); - Cache* block_cache = table->rep_->options.block_cache; - Block* block = NULL; - Cache::Handle* cache_handle = NULL; - - BlockHandle handle; - Slice input = index_value; - Status s = handle.DecodeFrom(&input); - // We intentionally allow extra stuff in index_value so that we - // can add more features in the future. - - if (s.ok()) { - BlockContents contents; - if (block_cache != NULL) { - char cache_key_buffer[16]; - EncodeFixed64(cache_key_buffer, table->rep_->cache_id); - EncodeFixed64(cache_key_buffer+8, handle.offset()); - Slice key(cache_key_buffer, sizeof(cache_key_buffer)); - cache_handle = block_cache->Lookup(key); - if (cache_handle != NULL) { - block = reinterpret_cast(block_cache->Value(cache_handle)); - } else { - s = ReadBlock(table->rep_->file, options, handle, &contents); - if (s.ok()) { - block = new Block(contents); - if (contents.cachable && options.fill_cache) { - cache_handle = block_cache->Insert( - key, block, block->size(), &DeleteCachedBlock); - } - } - } - } else { - s = ReadBlock(table->rep_->file, options, handle, &contents); - if (s.ok()) { - block = new Block(contents); - } - } - } - - Iterator* iter; - if (block != NULL) { - iter = block->NewIterator(table->rep_->options.comparator); - if (cache_handle == NULL) { - iter->RegisterCleanup(&DeleteBlock, block, NULL); - } else { - iter->RegisterCleanup(&ReleaseBlock, block_cache, cache_handle); - } - } else { - iter = NewErrorIterator(s); - } - return iter; -} - -Iterator* Table::NewIterator(const ReadOptions& options) const { - return NewTwoLevelIterator( - rep_->index_block->NewIterator(rep_->options.comparator), - &Table::BlockReader, const_cast(this), options); -} - -Status Table::InternalGet(const ReadOptions& options, const Slice& k, - void* arg, - void (*saver)(void*, const Slice&, const Slice&)) { - Status s; - Iterator* iiter = rep_->index_block->NewIterator(rep_->options.comparator); - iiter->Seek(k); - if (iiter->Valid()) { - Slice handle_value = iiter->value(); - FilterBlockReader* filter = rep_->filter; - BlockHandle handle; - if (filter != NULL && - handle.DecodeFrom(&handle_value).ok() && - !filter->KeyMayMatch(handle.offset(), k)) { - // Not found - } else { - Iterator* block_iter = BlockReader(this, options, iiter->value()); - block_iter->Seek(k); - if (block_iter->Valid()) { - (*saver)(arg, block_iter->key(), block_iter->value()); - } - s = block_iter->status(); - delete block_iter; - } - } - if (s.ok()) { - s = iiter->status(); - } - delete iiter; - return s; -} - - -uint64_t Table::ApproximateOffsetOf(const Slice& key) const { - Iterator* index_iter = - rep_->index_block->NewIterator(rep_->options.comparator); - index_iter->Seek(key); - uint64_t result; - if (index_iter->Valid()) { - BlockHandle handle; - Slice input = index_iter->value(); - Status s = handle.DecodeFrom(&input); - if (s.ok()) { - result = handle.offset(); - } else { - // Strange: we can't decode the block handle in the index block. - // We'll just return the offset of the metaindex block, which is - // close to the whole file size for this case. - result = rep_->metaindex_handle.offset(); - } - } else { - // key is past the last key in the file. Approximate the offset - // by returning the offset of the metaindex block (which is - // right near the end of the file). - result = rep_->metaindex_handle.offset(); - } - delete index_iter; - return result; -} - -} // namespace leveldb diff --git a/src/leveldb/table/table_builder.cc b/src/leveldb/table/table_builder.cc deleted file mode 100644 index 62002c84f2..0000000000 --- a/src/leveldb/table/table_builder.cc +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/table_builder.h" - -#include -#include "leveldb/comparator.h" -#include "leveldb/env.h" -#include "leveldb/filter_policy.h" -#include "leveldb/options.h" -#include "table/block_builder.h" -#include "table/filter_block.h" -#include "table/format.h" -#include "util/coding.h" -#include "util/crc32c.h" - -namespace leveldb { - -struct TableBuilder::Rep { - Options options; - Options index_block_options; - WritableFile* file; - uint64_t offset; - Status status; - BlockBuilder data_block; - BlockBuilder index_block; - std::string last_key; - int64_t num_entries; - bool closed; // Either Finish() or Abandon() has been called. - FilterBlockBuilder* filter_block; - - // We do not emit the index entry for a block until we have seen the - // first key for the next data block. This allows us to use shorter - // keys in the index block. For example, consider a block boundary - // between the keys "the quick brown fox" and "the who". We can use - // "the r" as the key for the index block entry since it is >= all - // entries in the first block and < all entries in subsequent - // blocks. - // - // Invariant: r->pending_index_entry is true only if data_block is empty. - bool pending_index_entry; - BlockHandle pending_handle; // Handle to add to index block - - std::string compressed_output; - - Rep(const Options& opt, WritableFile* f) - : options(opt), - index_block_options(opt), - file(f), - offset(0), - data_block(&options), - index_block(&index_block_options), - num_entries(0), - closed(false), - filter_block(opt.filter_policy == NULL ? NULL - : new FilterBlockBuilder(opt.filter_policy)), - pending_index_entry(false) { - index_block_options.block_restart_interval = 1; - } -}; - -TableBuilder::TableBuilder(const Options& options, WritableFile* file) - : rep_(new Rep(options, file)) { - if (rep_->filter_block != NULL) { - rep_->filter_block->StartBlock(0); - } -} - -TableBuilder::~TableBuilder() { - assert(rep_->closed); // Catch errors where caller forgot to call Finish() - delete rep_->filter_block; - delete rep_; -} - -Status TableBuilder::ChangeOptions(const Options& options) { - // Note: if more fields are added to Options, update - // this function to catch changes that should not be allowed to - // change in the middle of building a Table. - if (options.comparator != rep_->options.comparator) { - return Status::InvalidArgument("changing comparator while building table"); - } - - // Note that any live BlockBuilders point to rep_->options and therefore - // will automatically pick up the updated options. - rep_->options = options; - rep_->index_block_options = options; - rep_->index_block_options.block_restart_interval = 1; - return Status::OK(); -} - -void TableBuilder::Add(const Slice& key, const Slice& value) { - Rep* r = rep_; - assert(!r->closed); - if (!ok()) return; - if (r->num_entries > 0) { - assert(r->options.comparator->Compare(key, Slice(r->last_key)) > 0); - } - - if (r->pending_index_entry) { - assert(r->data_block.empty()); - r->options.comparator->FindShortestSeparator(&r->last_key, key); - std::string handle_encoding; - r->pending_handle.EncodeTo(&handle_encoding); - r->index_block.Add(r->last_key, Slice(handle_encoding)); - r->pending_index_entry = false; - } - - if (r->filter_block != NULL) { - r->filter_block->AddKey(key); - } - - r->last_key.assign(key.data(), key.size()); - r->num_entries++; - r->data_block.Add(key, value); - - const size_t estimated_block_size = r->data_block.CurrentSizeEstimate(); - if (estimated_block_size >= r->options.block_size) { - Flush(); - } -} - -void TableBuilder::Flush() { - Rep* r = rep_; - assert(!r->closed); - if (!ok()) return; - if (r->data_block.empty()) return; - assert(!r->pending_index_entry); - WriteBlock(&r->data_block, &r->pending_handle); - if (ok()) { - r->pending_index_entry = true; - r->status = r->file->Flush(); - } - if (r->filter_block != NULL) { - r->filter_block->StartBlock(r->offset); - } -} - -void TableBuilder::WriteBlock(BlockBuilder* block, BlockHandle* handle) { - // File format contains a sequence of blocks where each block has: - // block_data: uint8[n] - // type: uint8 - // crc: uint32 - assert(ok()); - Rep* r = rep_; - Slice raw = block->Finish(); - - Slice block_contents; - CompressionType type = r->options.compression; - // TODO(postrelease): Support more compression options: zlib? - switch (type) { - case kNoCompression: - block_contents = raw; - break; - - case kSnappyCompression: { - std::string* compressed = &r->compressed_output; - if (port::Snappy_Compress(raw.data(), raw.size(), compressed) && - compressed->size() < raw.size() - (raw.size() / 8u)) { - block_contents = *compressed; - } else { - // Snappy not supported, or compressed less than 12.5%, so just - // store uncompressed form - block_contents = raw; - type = kNoCompression; - } - break; - } - } - WriteRawBlock(block_contents, type, handle); - r->compressed_output.clear(); - block->Reset(); -} - -void TableBuilder::WriteRawBlock(const Slice& block_contents, - CompressionType type, - BlockHandle* handle) { - Rep* r = rep_; - handle->set_offset(r->offset); - handle->set_size(block_contents.size()); - r->status = r->file->Append(block_contents); - if (r->status.ok()) { - char trailer[kBlockTrailerSize]; - trailer[0] = type; - uint32_t crc = crc32c::Value(block_contents.data(), block_contents.size()); - crc = crc32c::Extend(crc, trailer, 1); // Extend crc to cover block type - EncodeFixed32(trailer+1, crc32c::Mask(crc)); - r->status = r->file->Append(Slice(trailer, kBlockTrailerSize)); - if (r->status.ok()) { - r->offset += block_contents.size() + kBlockTrailerSize; - } - } -} - -Status TableBuilder::status() const { - return rep_->status; -} - -Status TableBuilder::Finish() { - Rep* r = rep_; - Flush(); - assert(!r->closed); - r->closed = true; - - BlockHandle filter_block_handle, metaindex_block_handle, index_block_handle; - - // Write filter block - if (ok() && r->filter_block != NULL) { - WriteRawBlock(r->filter_block->Finish(), kNoCompression, - &filter_block_handle); - } - - // Write metaindex block - if (ok()) { - BlockBuilder meta_index_block(&r->options); - if (r->filter_block != NULL) { - // Add mapping from "filter.Name" to location of filter data - std::string key = "filter."; - key.append(r->options.filter_policy->Name()); - std::string handle_encoding; - filter_block_handle.EncodeTo(&handle_encoding); - meta_index_block.Add(key, handle_encoding); - } - - // TODO(postrelease): Add stats and other meta blocks - WriteBlock(&meta_index_block, &metaindex_block_handle); - } - - // Write index block - if (ok()) { - if (r->pending_index_entry) { - r->options.comparator->FindShortSuccessor(&r->last_key); - std::string handle_encoding; - r->pending_handle.EncodeTo(&handle_encoding); - r->index_block.Add(r->last_key, Slice(handle_encoding)); - r->pending_index_entry = false; - } - WriteBlock(&r->index_block, &index_block_handle); - } - - // Write footer - if (ok()) { - Footer footer; - footer.set_metaindex_handle(metaindex_block_handle); - footer.set_index_handle(index_block_handle); - std::string footer_encoding; - footer.EncodeTo(&footer_encoding); - r->status = r->file->Append(footer_encoding); - if (r->status.ok()) { - r->offset += footer_encoding.size(); - } - } - return r->status; -} - -void TableBuilder::Abandon() { - Rep* r = rep_; - assert(!r->closed); - r->closed = true; -} - -uint64_t TableBuilder::NumEntries() const { - return rep_->num_entries; -} - -uint64_t TableBuilder::FileSize() const { - return rep_->offset; -} - -} // namespace leveldb diff --git a/src/leveldb/table/table_test.cc b/src/leveldb/table/table_test.cc deleted file mode 100644 index c723bf84cf..0000000000 --- a/src/leveldb/table/table_test.cc +++ /dev/null @@ -1,868 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/table.h" - -#include -#include -#include "db/dbformat.h" -#include "db/memtable.h" -#include "db/write_batch_internal.h" -#include "leveldb/db.h" -#include "leveldb/env.h" -#include "leveldb/iterator.h" -#include "leveldb/table_builder.h" -#include "table/block.h" -#include "table/block_builder.h" -#include "table/format.h" -#include "util/random.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -// Return reverse of "key". -// Used to test non-lexicographic comparators. -static std::string Reverse(const Slice& key) { - std::string str(key.ToString()); - std::string rev(""); - for (std::string::reverse_iterator rit = str.rbegin(); - rit != str.rend(); ++rit) { - rev.push_back(*rit); - } - return rev; -} - -namespace { -class ReverseKeyComparator : public Comparator { - public: - virtual const char* Name() const { - return "leveldb.ReverseBytewiseComparator"; - } - - virtual int Compare(const Slice& a, const Slice& b) const { - return BytewiseComparator()->Compare(Reverse(a), Reverse(b)); - } - - virtual void FindShortestSeparator( - std::string* start, - const Slice& limit) const { - std::string s = Reverse(*start); - std::string l = Reverse(limit); - BytewiseComparator()->FindShortestSeparator(&s, l); - *start = Reverse(s); - } - - virtual void FindShortSuccessor(std::string* key) const { - std::string s = Reverse(*key); - BytewiseComparator()->FindShortSuccessor(&s); - *key = Reverse(s); - } -}; -} // namespace -static ReverseKeyComparator reverse_key_comparator; - -static void Increment(const Comparator* cmp, std::string* key) { - if (cmp == BytewiseComparator()) { - key->push_back('\0'); - } else { - assert(cmp == &reverse_key_comparator); - std::string rev = Reverse(*key); - rev.push_back('\0'); - *key = Reverse(rev); - } -} - -// An STL comparator that uses a Comparator -namespace { -struct STLLessThan { - const Comparator* cmp; - - STLLessThan() : cmp(BytewiseComparator()) { } - STLLessThan(const Comparator* c) : cmp(c) { } - bool operator()(const std::string& a, const std::string& b) const { - return cmp->Compare(Slice(a), Slice(b)) < 0; - } -}; -} // namespace - -class StringSink: public WritableFile { - public: - ~StringSink() { } - - const std::string& contents() const { return contents_; } - - virtual Status Close() { return Status::OK(); } - virtual Status Flush() { return Status::OK(); } - virtual Status Sync() { return Status::OK(); } - - virtual Status Append(const Slice& data) { - contents_.append(data.data(), data.size()); - return Status::OK(); - } - - private: - std::string contents_; -}; - - -class StringSource: public RandomAccessFile { - public: - StringSource(const Slice& contents) - : contents_(contents.data(), contents.size()) { - } - - virtual ~StringSource() { } - - uint64_t Size() const { return contents_.size(); } - - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const { - if (offset > contents_.size()) { - return Status::InvalidArgument("invalid Read offset"); - } - if (offset + n > contents_.size()) { - n = contents_.size() - offset; - } - memcpy(scratch, &contents_[offset], n); - *result = Slice(scratch, n); - return Status::OK(); - } - - private: - std::string contents_; -}; - -typedef std::map KVMap; - -// Helper class for tests to unify the interface between -// BlockBuilder/TableBuilder and Block/Table. -class Constructor { - public: - explicit Constructor(const Comparator* cmp) : data_(STLLessThan(cmp)) { } - virtual ~Constructor() { } - - void Add(const std::string& key, const Slice& value) { - data_[key] = value.ToString(); - } - - // Finish constructing the data structure with all the keys that have - // been added so far. Returns the keys in sorted order in "*keys" - // and stores the key/value pairs in "*kvmap" - void Finish(const Options& options, - std::vector* keys, - KVMap* kvmap) { - *kvmap = data_; - keys->clear(); - for (KVMap::const_iterator it = data_.begin(); - it != data_.end(); - ++it) { - keys->push_back(it->first); - } - data_.clear(); - Status s = FinishImpl(options, *kvmap); - ASSERT_TRUE(s.ok()) << s.ToString(); - } - - // Construct the data structure from the data in "data" - virtual Status FinishImpl(const Options& options, const KVMap& data) = 0; - - virtual Iterator* NewIterator() const = 0; - - virtual const KVMap& data() { return data_; } - - virtual DB* db() const { return NULL; } // Overridden in DBConstructor - - private: - KVMap data_; -}; - -class BlockConstructor: public Constructor { - public: - explicit BlockConstructor(const Comparator* cmp) - : Constructor(cmp), - comparator_(cmp), - block_(NULL) { } - ~BlockConstructor() { - delete block_; - } - virtual Status FinishImpl(const Options& options, const KVMap& data) { - delete block_; - block_ = NULL; - BlockBuilder builder(&options); - - for (KVMap::const_iterator it = data.begin(); - it != data.end(); - ++it) { - builder.Add(it->first, it->second); - } - // Open the block - data_ = builder.Finish().ToString(); - BlockContents contents; - contents.data = data_; - contents.cachable = false; - contents.heap_allocated = false; - block_ = new Block(contents); - return Status::OK(); - } - virtual Iterator* NewIterator() const { - return block_->NewIterator(comparator_); - } - - private: - const Comparator* comparator_; - std::string data_; - Block* block_; - - BlockConstructor(); -}; - -class TableConstructor: public Constructor { - public: - TableConstructor(const Comparator* cmp) - : Constructor(cmp), - source_(NULL), table_(NULL) { - } - ~TableConstructor() { - Reset(); - } - virtual Status FinishImpl(const Options& options, const KVMap& data) { - Reset(); - StringSink sink; - TableBuilder builder(options, &sink); - - for (KVMap::const_iterator it = data.begin(); - it != data.end(); - ++it) { - builder.Add(it->first, it->second); - ASSERT_TRUE(builder.status().ok()); - } - Status s = builder.Finish(); - ASSERT_TRUE(s.ok()) << s.ToString(); - - ASSERT_EQ(sink.contents().size(), builder.FileSize()); - - // Open the table - source_ = new StringSource(sink.contents()); - Options table_options; - table_options.comparator = options.comparator; - return Table::Open(table_options, source_, sink.contents().size(), &table_); - } - - virtual Iterator* NewIterator() const { - return table_->NewIterator(ReadOptions()); - } - - uint64_t ApproximateOffsetOf(const Slice& key) const { - return table_->ApproximateOffsetOf(key); - } - - private: - void Reset() { - delete table_; - delete source_; - table_ = NULL; - source_ = NULL; - } - - StringSource* source_; - Table* table_; - - TableConstructor(); -}; - -// A helper class that converts internal format keys into user keys -class KeyConvertingIterator: public Iterator { - public: - explicit KeyConvertingIterator(Iterator* iter) : iter_(iter) { } - virtual ~KeyConvertingIterator() { delete iter_; } - virtual bool Valid() const { return iter_->Valid(); } - virtual void Seek(const Slice& target) { - ParsedInternalKey ikey(target, kMaxSequenceNumber, kTypeValue); - std::string encoded; - AppendInternalKey(&encoded, ikey); - iter_->Seek(encoded); - } - virtual void SeekToFirst() { iter_->SeekToFirst(); } - virtual void SeekToLast() { iter_->SeekToLast(); } - virtual void Next() { iter_->Next(); } - virtual void Prev() { iter_->Prev(); } - - virtual Slice key() const { - assert(Valid()); - ParsedInternalKey key; - if (!ParseInternalKey(iter_->key(), &key)) { - status_ = Status::Corruption("malformed internal key"); - return Slice("corrupted key"); - } - return key.user_key; - } - - virtual Slice value() const { return iter_->value(); } - virtual Status status() const { - return status_.ok() ? iter_->status() : status_; - } - - private: - mutable Status status_; - Iterator* iter_; - - // No copying allowed - KeyConvertingIterator(const KeyConvertingIterator&); - void operator=(const KeyConvertingIterator&); -}; - -class MemTableConstructor: public Constructor { - public: - explicit MemTableConstructor(const Comparator* cmp) - : Constructor(cmp), - internal_comparator_(cmp) { - memtable_ = new MemTable(internal_comparator_); - memtable_->Ref(); - } - ~MemTableConstructor() { - memtable_->Unref(); - } - virtual Status FinishImpl(const Options& options, const KVMap& data) { - memtable_->Unref(); - memtable_ = new MemTable(internal_comparator_); - memtable_->Ref(); - int seq = 1; - for (KVMap::const_iterator it = data.begin(); - it != data.end(); - ++it) { - memtable_->Add(seq, kTypeValue, it->first, it->second); - seq++; - } - return Status::OK(); - } - virtual Iterator* NewIterator() const { - return new KeyConvertingIterator(memtable_->NewIterator()); - } - - private: - InternalKeyComparator internal_comparator_; - MemTable* memtable_; -}; - -class DBConstructor: public Constructor { - public: - explicit DBConstructor(const Comparator* cmp) - : Constructor(cmp), - comparator_(cmp) { - db_ = NULL; - NewDB(); - } - ~DBConstructor() { - delete db_; - } - virtual Status FinishImpl(const Options& options, const KVMap& data) { - delete db_; - db_ = NULL; - NewDB(); - for (KVMap::const_iterator it = data.begin(); - it != data.end(); - ++it) { - WriteBatch batch; - batch.Put(it->first, it->second); - ASSERT_TRUE(db_->Write(WriteOptions(), &batch).ok()); - } - return Status::OK(); - } - virtual Iterator* NewIterator() const { - return db_->NewIterator(ReadOptions()); - } - - virtual DB* db() const { return db_; } - - private: - void NewDB() { - std::string name = test::TmpDir() + "/table_testdb"; - - Options options; - options.comparator = comparator_; - Status status = DestroyDB(name, options); - ASSERT_TRUE(status.ok()) << status.ToString(); - - options.create_if_missing = true; - options.error_if_exists = true; - options.write_buffer_size = 10000; // Something small to force merging - status = DB::Open(options, name, &db_); - ASSERT_TRUE(status.ok()) << status.ToString(); - } - - const Comparator* comparator_; - DB* db_; -}; - -enum TestType { - TABLE_TEST, - BLOCK_TEST, - MEMTABLE_TEST, - DB_TEST -}; - -struct TestArgs { - TestType type; - bool reverse_compare; - int restart_interval; -}; - -static const TestArgs kTestArgList[] = { - { TABLE_TEST, false, 16 }, - { TABLE_TEST, false, 1 }, - { TABLE_TEST, false, 1024 }, - { TABLE_TEST, true, 16 }, - { TABLE_TEST, true, 1 }, - { TABLE_TEST, true, 1024 }, - - { BLOCK_TEST, false, 16 }, - { BLOCK_TEST, false, 1 }, - { BLOCK_TEST, false, 1024 }, - { BLOCK_TEST, true, 16 }, - { BLOCK_TEST, true, 1 }, - { BLOCK_TEST, true, 1024 }, - - // Restart interval does not matter for memtables - { MEMTABLE_TEST, false, 16 }, - { MEMTABLE_TEST, true, 16 }, - - // Do not bother with restart interval variations for DB - { DB_TEST, false, 16 }, - { DB_TEST, true, 16 }, -}; -static const int kNumTestArgs = sizeof(kTestArgList) / sizeof(kTestArgList[0]); - -class Harness { - public: - Harness() : constructor_(NULL) { } - - void Init(const TestArgs& args) { - delete constructor_; - constructor_ = NULL; - options_ = Options(); - - options_.block_restart_interval = args.restart_interval; - // Use shorter block size for tests to exercise block boundary - // conditions more. - options_.block_size = 256; - if (args.reverse_compare) { - options_.comparator = &reverse_key_comparator; - } - switch (args.type) { - case TABLE_TEST: - constructor_ = new TableConstructor(options_.comparator); - break; - case BLOCK_TEST: - constructor_ = new BlockConstructor(options_.comparator); - break; - case MEMTABLE_TEST: - constructor_ = new MemTableConstructor(options_.comparator); - break; - case DB_TEST: - constructor_ = new DBConstructor(options_.comparator); - break; - } - } - - ~Harness() { - delete constructor_; - } - - void Add(const std::string& key, const std::string& value) { - constructor_->Add(key, value); - } - - void Test(Random* rnd) { - std::vector keys; - KVMap data; - constructor_->Finish(options_, &keys, &data); - - TestForwardScan(keys, data); - TestBackwardScan(keys, data); - TestRandomAccess(rnd, keys, data); - } - - void TestForwardScan(const std::vector& keys, - const KVMap& data) { - Iterator* iter = constructor_->NewIterator(); - ASSERT_TRUE(!iter->Valid()); - iter->SeekToFirst(); - for (KVMap::const_iterator model_iter = data.begin(); - model_iter != data.end(); - ++model_iter) { - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - iter->Next(); - } - ASSERT_TRUE(!iter->Valid()); - delete iter; - } - - void TestBackwardScan(const std::vector& keys, - const KVMap& data) { - Iterator* iter = constructor_->NewIterator(); - ASSERT_TRUE(!iter->Valid()); - iter->SeekToLast(); - for (KVMap::const_reverse_iterator model_iter = data.rbegin(); - model_iter != data.rend(); - ++model_iter) { - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - iter->Prev(); - } - ASSERT_TRUE(!iter->Valid()); - delete iter; - } - - void TestRandomAccess(Random* rnd, - const std::vector& keys, - const KVMap& data) { - static const bool kVerbose = false; - Iterator* iter = constructor_->NewIterator(); - ASSERT_TRUE(!iter->Valid()); - KVMap::const_iterator model_iter = data.begin(); - if (kVerbose) fprintf(stderr, "---\n"); - for (int i = 0; i < 200; i++) { - const int toss = rnd->Uniform(5); - switch (toss) { - case 0: { - if (iter->Valid()) { - if (kVerbose) fprintf(stderr, "Next\n"); - iter->Next(); - ++model_iter; - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - } - break; - } - - case 1: { - if (kVerbose) fprintf(stderr, "SeekToFirst\n"); - iter->SeekToFirst(); - model_iter = data.begin(); - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - break; - } - - case 2: { - std::string key = PickRandomKey(rnd, keys); - model_iter = data.lower_bound(key); - if (kVerbose) fprintf(stderr, "Seek '%s'\n", - EscapeString(key).c_str()); - iter->Seek(Slice(key)); - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - break; - } - - case 3: { - if (iter->Valid()) { - if (kVerbose) fprintf(stderr, "Prev\n"); - iter->Prev(); - if (model_iter == data.begin()) { - model_iter = data.end(); // Wrap around to invalid value - } else { - --model_iter; - } - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - } - break; - } - - case 4: { - if (kVerbose) fprintf(stderr, "SeekToLast\n"); - iter->SeekToLast(); - if (keys.empty()) { - model_iter = data.end(); - } else { - std::string last = data.rbegin()->first; - model_iter = data.lower_bound(last); - } - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - break; - } - } - } - delete iter; - } - - std::string ToString(const KVMap& data, const KVMap::const_iterator& it) { - if (it == data.end()) { - return "END"; - } else { - return "'" + it->first + "->" + it->second + "'"; - } - } - - std::string ToString(const KVMap& data, - const KVMap::const_reverse_iterator& it) { - if (it == data.rend()) { - return "END"; - } else { - return "'" + it->first + "->" + it->second + "'"; - } - } - - std::string ToString(const Iterator* it) { - if (!it->Valid()) { - return "END"; - } else { - return "'" + it->key().ToString() + "->" + it->value().ToString() + "'"; - } - } - - std::string PickRandomKey(Random* rnd, const std::vector& keys) { - if (keys.empty()) { - return "foo"; - } else { - const int index = rnd->Uniform(keys.size()); - std::string result = keys[index]; - switch (rnd->Uniform(3)) { - case 0: - // Return an existing key - break; - case 1: { - // Attempt to return something smaller than an existing key - if (result.size() > 0 && result[result.size()-1] > '\0') { - result[result.size()-1]--; - } - break; - } - case 2: { - // Return something larger than an existing key - Increment(options_.comparator, &result); - break; - } - } - return result; - } - } - - // Returns NULL if not running against a DB - DB* db() const { return constructor_->db(); } - - private: - Options options_; - Constructor* constructor_; -}; - -// Test empty table/block. -TEST(Harness, Empty) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 1); - Test(&rnd); - } -} - -// Special test for a block with no restart entries. The C++ leveldb -// code never generates such blocks, but the Java version of leveldb -// seems to. -TEST(Harness, ZeroRestartPointsInBlock) { - char data[sizeof(uint32_t)]; - memset(data, 0, sizeof(data)); - BlockContents contents; - contents.data = Slice(data, sizeof(data)); - contents.cachable = false; - contents.heap_allocated = false; - Block block(contents); - Iterator* iter = block.NewIterator(BytewiseComparator()); - iter->SeekToFirst(); - ASSERT_TRUE(!iter->Valid()); - iter->SeekToLast(); - ASSERT_TRUE(!iter->Valid()); - iter->Seek("foo"); - ASSERT_TRUE(!iter->Valid()); - delete iter; -} - -// Test the empty key -TEST(Harness, SimpleEmptyKey) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 1); - Add("", "v"); - Test(&rnd); - } -} - -TEST(Harness, SimpleSingle) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 2); - Add("abc", "v"); - Test(&rnd); - } -} - -TEST(Harness, SimpleMulti) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 3); - Add("abc", "v"); - Add("abcd", "v"); - Add("ac", "v2"); - Test(&rnd); - } -} - -TEST(Harness, SimpleSpecialKey) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 4); - Add("\xff\xff", "v3"); - Test(&rnd); - } -} - -TEST(Harness, Randomized) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 5); - for (int num_entries = 0; num_entries < 2000; - num_entries += (num_entries < 50 ? 1 : 200)) { - if ((num_entries % 10) == 0) { - fprintf(stderr, "case %d of %d: num_entries = %d\n", - (i + 1), int(kNumTestArgs), num_entries); - } - for (int e = 0; e < num_entries; e++) { - std::string v; - Add(test::RandomKey(&rnd, rnd.Skewed(4)), - test::RandomString(&rnd, rnd.Skewed(5), &v).ToString()); - } - Test(&rnd); - } - } -} - -TEST(Harness, RandomizedLongDB) { - Random rnd(test::RandomSeed()); - TestArgs args = { DB_TEST, false, 16 }; - Init(args); - int num_entries = 100000; - for (int e = 0; e < num_entries; e++) { - std::string v; - Add(test::RandomKey(&rnd, rnd.Skewed(4)), - test::RandomString(&rnd, rnd.Skewed(5), &v).ToString()); - } - Test(&rnd); - - // We must have created enough data to force merging - int files = 0; - for (int level = 0; level < config::kNumLevels; level++) { - std::string value; - char name[100]; - snprintf(name, sizeof(name), "leveldb.num-files-at-level%d", level); - ASSERT_TRUE(db()->GetProperty(name, &value)); - files += atoi(value.c_str()); - } - ASSERT_GT(files, 0); -} - -class MemTableTest { }; - -TEST(MemTableTest, Simple) { - InternalKeyComparator cmp(BytewiseComparator()); - MemTable* memtable = new MemTable(cmp); - memtable->Ref(); - WriteBatch batch; - WriteBatchInternal::SetSequence(&batch, 100); - batch.Put(std::string("k1"), std::string("v1")); - batch.Put(std::string("k2"), std::string("v2")); - batch.Put(std::string("k3"), std::string("v3")); - batch.Put(std::string("largekey"), std::string("vlarge")); - ASSERT_TRUE(WriteBatchInternal::InsertInto(&batch, memtable).ok()); - - Iterator* iter = memtable->NewIterator(); - iter->SeekToFirst(); - while (iter->Valid()) { - fprintf(stderr, "key: '%s' -> '%s'\n", - iter->key().ToString().c_str(), - iter->value().ToString().c_str()); - iter->Next(); - } - - delete iter; - memtable->Unref(); -} - -static bool Between(uint64_t val, uint64_t low, uint64_t high) { - bool result = (val >= low) && (val <= high); - if (!result) { - fprintf(stderr, "Value %llu is not in range [%llu, %llu]\n", - (unsigned long long)(val), - (unsigned long long)(low), - (unsigned long long)(high)); - } - return result; -} - -class TableTest { }; - -TEST(TableTest, ApproximateOffsetOfPlain) { - TableConstructor c(BytewiseComparator()); - c.Add("k01", "hello"); - c.Add("k02", "hello2"); - c.Add("k03", std::string(10000, 'x')); - c.Add("k04", std::string(200000, 'x')); - c.Add("k05", std::string(300000, 'x')); - c.Add("k06", "hello3"); - c.Add("k07", std::string(100000, 'x')); - std::vector keys; - KVMap kvmap; - Options options; - options.block_size = 1024; - options.compression = kNoCompression; - c.Finish(options, &keys, &kvmap); - - ASSERT_TRUE(Between(c.ApproximateOffsetOf("abc"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k01"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k01a"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k02"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), 10000, 11000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04a"), 210000, 211000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k05"), 210000, 211000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k06"), 510000, 511000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k07"), 510000, 511000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("xyz"), 610000, 612000)); - -} - -static bool SnappyCompressionSupported() { - std::string out; - Slice in = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - return port::Snappy_Compress(in.data(), in.size(), &out); -} - -TEST(TableTest, ApproximateOffsetOfCompressed) { - if (!SnappyCompressionSupported()) { - fprintf(stderr, "skipping compression tests\n"); - return; - } - - Random rnd(301); - TableConstructor c(BytewiseComparator()); - std::string tmp; - c.Add("k01", "hello"); - c.Add("k02", test::CompressibleString(&rnd, 0.25, 10000, &tmp)); - c.Add("k03", "hello3"); - c.Add("k04", test::CompressibleString(&rnd, 0.25, 10000, &tmp)); - std::vector keys; - KVMap kvmap; - Options options; - options.block_size = 1024; - options.compression = kSnappyCompression; - c.Finish(options, &keys, &kvmap); - - ASSERT_TRUE(Between(c.ApproximateOffsetOf("abc"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k01"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k02"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), 2000, 3000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), 2000, 3000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("xyz"), 4000, 6000)); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/table/two_level_iterator.cc b/src/leveldb/table/two_level_iterator.cc deleted file mode 100644 index 7822ebab9c..0000000000 --- a/src/leveldb/table/two_level_iterator.cc +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/two_level_iterator.h" - -#include "leveldb/table.h" -#include "table/block.h" -#include "table/format.h" -#include "table/iterator_wrapper.h" - -namespace leveldb { - -namespace { - -typedef Iterator* (*BlockFunction)(void*, const ReadOptions&, const Slice&); - -class TwoLevelIterator: public Iterator { - public: - TwoLevelIterator( - Iterator* index_iter, - BlockFunction block_function, - void* arg, - const ReadOptions& options); - - virtual ~TwoLevelIterator(); - - virtual void Seek(const Slice& target); - virtual void SeekToFirst(); - virtual void SeekToLast(); - virtual void Next(); - virtual void Prev(); - - virtual bool Valid() const { - return data_iter_.Valid(); - } - virtual Slice key() const { - assert(Valid()); - return data_iter_.key(); - } - virtual Slice value() const { - assert(Valid()); - return data_iter_.value(); - } - virtual Status status() const { - // It'd be nice if status() returned a const Status& instead of a Status - if (!index_iter_.status().ok()) { - return index_iter_.status(); - } else if (data_iter_.iter() != NULL && !data_iter_.status().ok()) { - return data_iter_.status(); - } else { - return status_; - } - } - - private: - void SaveError(const Status& s) { - if (status_.ok() && !s.ok()) status_ = s; - } - void SkipEmptyDataBlocksForward(); - void SkipEmptyDataBlocksBackward(); - void SetDataIterator(Iterator* data_iter); - void InitDataBlock(); - - BlockFunction block_function_; - void* arg_; - const ReadOptions options_; - Status status_; - IteratorWrapper index_iter_; - IteratorWrapper data_iter_; // May be NULL - // If data_iter_ is non-NULL, then "data_block_handle_" holds the - // "index_value" passed to block_function_ to create the data_iter_. - std::string data_block_handle_; -}; - -TwoLevelIterator::TwoLevelIterator( - Iterator* index_iter, - BlockFunction block_function, - void* arg, - const ReadOptions& options) - : block_function_(block_function), - arg_(arg), - options_(options), - index_iter_(index_iter), - data_iter_(NULL) { -} - -TwoLevelIterator::~TwoLevelIterator() { -} - -void TwoLevelIterator::Seek(const Slice& target) { - index_iter_.Seek(target); - InitDataBlock(); - if (data_iter_.iter() != NULL) data_iter_.Seek(target); - SkipEmptyDataBlocksForward(); -} - -void TwoLevelIterator::SeekToFirst() { - index_iter_.SeekToFirst(); - InitDataBlock(); - if (data_iter_.iter() != NULL) data_iter_.SeekToFirst(); - SkipEmptyDataBlocksForward(); -} - -void TwoLevelIterator::SeekToLast() { - index_iter_.SeekToLast(); - InitDataBlock(); - if (data_iter_.iter() != NULL) data_iter_.SeekToLast(); - SkipEmptyDataBlocksBackward(); -} - -void TwoLevelIterator::Next() { - assert(Valid()); - data_iter_.Next(); - SkipEmptyDataBlocksForward(); -} - -void TwoLevelIterator::Prev() { - assert(Valid()); - data_iter_.Prev(); - SkipEmptyDataBlocksBackward(); -} - - -void TwoLevelIterator::SkipEmptyDataBlocksForward() { - while (data_iter_.iter() == NULL || !data_iter_.Valid()) { - // Move to next block - if (!index_iter_.Valid()) { - SetDataIterator(NULL); - return; - } - index_iter_.Next(); - InitDataBlock(); - if (data_iter_.iter() != NULL) data_iter_.SeekToFirst(); - } -} - -void TwoLevelIterator::SkipEmptyDataBlocksBackward() { - while (data_iter_.iter() == NULL || !data_iter_.Valid()) { - // Move to next block - if (!index_iter_.Valid()) { - SetDataIterator(NULL); - return; - } - index_iter_.Prev(); - InitDataBlock(); - if (data_iter_.iter() != NULL) data_iter_.SeekToLast(); - } -} - -void TwoLevelIterator::SetDataIterator(Iterator* data_iter) { - if (data_iter_.iter() != NULL) SaveError(data_iter_.status()); - data_iter_.Set(data_iter); -} - -void TwoLevelIterator::InitDataBlock() { - if (!index_iter_.Valid()) { - SetDataIterator(NULL); - } else { - Slice handle = index_iter_.value(); - if (data_iter_.iter() != NULL && handle.compare(data_block_handle_) == 0) { - // data_iter_ is already constructed with this iterator, so - // no need to change anything - } else { - Iterator* iter = (*block_function_)(arg_, options_, handle); - data_block_handle_.assign(handle.data(), handle.size()); - SetDataIterator(iter); - } - } -} - -} // namespace - -Iterator* NewTwoLevelIterator( - Iterator* index_iter, - BlockFunction block_function, - void* arg, - const ReadOptions& options) { - return new TwoLevelIterator(index_iter, block_function, arg, options); -} - -} // namespace leveldb diff --git a/src/leveldb/table/two_level_iterator.h b/src/leveldb/table/two_level_iterator.h deleted file mode 100644 index 629ca34525..0000000000 --- a/src/leveldb/table/two_level_iterator.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_ -#define STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_ - -#include "leveldb/iterator.h" - -namespace leveldb { - -struct ReadOptions; - -// Return a new two level iterator. A two-level iterator contains an -// index iterator whose values point to a sequence of blocks where -// each block is itself a sequence of key,value pairs. The returned -// two-level iterator yields the concatenation of all key/value pairs -// in the sequence of blocks. Takes ownership of "index_iter" and -// will delete it when no longer needed. -// -// Uses a supplied function to convert an index_iter value into -// an iterator over the contents of the corresponding block. -extern Iterator* NewTwoLevelIterator( - Iterator* index_iter, - Iterator* (*block_function)( - void* arg, - const ReadOptions& options, - const Slice& index_value), - void* arg, - const ReadOptions& options); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_ diff --git a/src/leveldb/util/arena.cc b/src/leveldb/util/arena.cc deleted file mode 100644 index 9367f71492..0000000000 --- a/src/leveldb/util/arena.cc +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/arena.h" -#include - -namespace leveldb { - -static const int kBlockSize = 4096; - -Arena::Arena() { - blocks_memory_ = 0; - alloc_ptr_ = NULL; // First allocation will allocate a block - alloc_bytes_remaining_ = 0; -} - -Arena::~Arena() { - for (size_t i = 0; i < blocks_.size(); i++) { - delete[] blocks_[i]; - } -} - -char* Arena::AllocateFallback(size_t bytes) { - if (bytes > kBlockSize / 4) { - // Object is more than a quarter of our block size. Allocate it separately - // to avoid wasting too much space in leftover bytes. - char* result = AllocateNewBlock(bytes); - return result; - } - - // We waste the remaining space in the current block. - alloc_ptr_ = AllocateNewBlock(kBlockSize); - alloc_bytes_remaining_ = kBlockSize; - - char* result = alloc_ptr_; - alloc_ptr_ += bytes; - alloc_bytes_remaining_ -= bytes; - return result; -} - -char* Arena::AllocateAligned(size_t bytes) { - const int align = (sizeof(void*) > 8) ? sizeof(void*) : 8; - assert((align & (align-1)) == 0); // Pointer size should be a power of 2 - size_t current_mod = reinterpret_cast(alloc_ptr_) & (align-1); - size_t slop = (current_mod == 0 ? 0 : align - current_mod); - size_t needed = bytes + slop; - char* result; - if (needed <= alloc_bytes_remaining_) { - result = alloc_ptr_ + slop; - alloc_ptr_ += needed; - alloc_bytes_remaining_ -= needed; - } else { - // AllocateFallback always returned aligned memory - result = AllocateFallback(bytes); - } - assert((reinterpret_cast(result) & (align-1)) == 0); - return result; -} - -char* Arena::AllocateNewBlock(size_t block_bytes) { - char* result = new char[block_bytes]; - blocks_memory_ += block_bytes; - blocks_.push_back(result); - return result; -} - -} // namespace leveldb diff --git a/src/leveldb/util/arena.h b/src/leveldb/util/arena.h deleted file mode 100644 index 73bbf1cb9b..0000000000 --- a/src/leveldb/util/arena.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_ARENA_H_ -#define STORAGE_LEVELDB_UTIL_ARENA_H_ - -#include -#include -#include -#include - -namespace leveldb { - -class Arena { - public: - Arena(); - ~Arena(); - - // Return a pointer to a newly allocated memory block of "bytes" bytes. - char* Allocate(size_t bytes); - - // Allocate memory with the normal alignment guarantees provided by malloc - char* AllocateAligned(size_t bytes); - - // Returns an estimate of the total memory usage of data allocated - // by the arena (including space allocated but not yet used for user - // allocations). - size_t MemoryUsage() const { - return blocks_memory_ + blocks_.capacity() * sizeof(char*); - } - - private: - char* AllocateFallback(size_t bytes); - char* AllocateNewBlock(size_t block_bytes); - - // Allocation state - char* alloc_ptr_; - size_t alloc_bytes_remaining_; - - // Array of new[] allocated memory blocks - std::vector blocks_; - - // Bytes of memory in blocks allocated so far - size_t blocks_memory_; - - // No copying allowed - Arena(const Arena&); - void operator=(const Arena&); -}; - -inline char* Arena::Allocate(size_t bytes) { - // The semantics of what to return are a bit messy if we allow - // 0-byte allocations, so we disallow them here (we don't need - // them for our internal use). - assert(bytes > 0); - if (bytes <= alloc_bytes_remaining_) { - char* result = alloc_ptr_; - alloc_ptr_ += bytes; - alloc_bytes_remaining_ -= bytes; - return result; - } - return AllocateFallback(bytes); -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_ARENA_H_ diff --git a/src/leveldb/util/arena_test.cc b/src/leveldb/util/arena_test.cc deleted file mode 100644 index 58e870ec44..0000000000 --- a/src/leveldb/util/arena_test.cc +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/arena.h" - -#include "util/random.h" -#include "util/testharness.h" - -namespace leveldb { - -class ArenaTest { }; - -TEST(ArenaTest, Empty) { - Arena arena; -} - -TEST(ArenaTest, Simple) { - std::vector > allocated; - Arena arena; - const int N = 100000; - size_t bytes = 0; - Random rnd(301); - for (int i = 0; i < N; i++) { - size_t s; - if (i % (N / 10) == 0) { - s = i; - } else { - s = rnd.OneIn(4000) ? rnd.Uniform(6000) : - (rnd.OneIn(10) ? rnd.Uniform(100) : rnd.Uniform(20)); - } - if (s == 0) { - // Our arena disallows size 0 allocations. - s = 1; - } - char* r; - if (rnd.OneIn(10)) { - r = arena.AllocateAligned(s); - } else { - r = arena.Allocate(s); - } - - for (size_t b = 0; b < s; b++) { - // Fill the "i"th allocation with a known bit pattern - r[b] = i % 256; - } - bytes += s; - allocated.push_back(std::make_pair(s, r)); - ASSERT_GE(arena.MemoryUsage(), bytes); - if (i > N/10) { - ASSERT_LE(arena.MemoryUsage(), bytes * 1.10); - } - } - for (size_t i = 0; i < allocated.size(); i++) { - size_t num_bytes = allocated[i].first; - const char* p = allocated[i].second; - for (size_t b = 0; b < num_bytes; b++) { - // Check the "i"th allocation for the known bit pattern - ASSERT_EQ(int(p[b]) & 0xff, i % 256); - } - } -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/util/bloom.cc b/src/leveldb/util/bloom.cc deleted file mode 100644 index a27a2ace28..0000000000 --- a/src/leveldb/util/bloom.cc +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/filter_policy.h" - -#include "leveldb/slice.h" -#include "util/hash.h" - -namespace leveldb { - -namespace { -static uint32_t BloomHash(const Slice& key) { - return Hash(key.data(), key.size(), 0xbc9f1d34); -} - -class BloomFilterPolicy : public FilterPolicy { - private: - size_t bits_per_key_; - size_t k_; - - public: - explicit BloomFilterPolicy(int bits_per_key) - : bits_per_key_(bits_per_key) { - // We intentionally round down to reduce probing cost a little bit - k_ = static_cast(bits_per_key * 0.69); // 0.69 =~ ln(2) - if (k_ < 1) k_ = 1; - if (k_ > 30) k_ = 30; - } - - virtual const char* Name() const { - return "leveldb.BuiltinBloomFilter2"; - } - - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const { - // Compute bloom filter size (in both bits and bytes) - size_t bits = n * bits_per_key_; - - // For small n, we can see a very high false positive rate. Fix it - // by enforcing a minimum bloom filter length. - if (bits < 64) bits = 64; - - size_t bytes = (bits + 7) / 8; - bits = bytes * 8; - - const size_t init_size = dst->size(); - dst->resize(init_size + bytes, 0); - dst->push_back(static_cast(k_)); // Remember # of probes in filter - char* array = &(*dst)[init_size]; - for (size_t i = 0; i < n; i++) { - // Use double-hashing to generate a sequence of hash values. - // See analysis in [Kirsch,Mitzenmacher 2006]. - uint32_t h = BloomHash(keys[i]); - const uint32_t delta = (h >> 17) | (h << 15); // Rotate right 17 bits - for (size_t j = 0; j < k_; j++) { - const uint32_t bitpos = h % bits; - array[bitpos/8] |= (1 << (bitpos % 8)); - h += delta; - } - } - } - - virtual bool KeyMayMatch(const Slice& key, const Slice& bloom_filter) const { - const size_t len = bloom_filter.size(); - if (len < 2) return false; - - const char* array = bloom_filter.data(); - const size_t bits = (len - 1) * 8; - - // Use the encoded k so that we can read filters generated by - // bloom filters created using different parameters. - const size_t k = array[len-1]; - if (k > 30) { - // Reserved for potentially new encodings for short bloom filters. - // Consider it a match. - return true; - } - - uint32_t h = BloomHash(key); - const uint32_t delta = (h >> 17) | (h << 15); // Rotate right 17 bits - for (size_t j = 0; j < k; j++) { - const uint32_t bitpos = h % bits; - if ((array[bitpos/8] & (1 << (bitpos % 8))) == 0) return false; - h += delta; - } - return true; - } -}; -} - -const FilterPolicy* NewBloomFilterPolicy(int bits_per_key) { - return new BloomFilterPolicy(bits_per_key); -} - -} // namespace leveldb diff --git a/src/leveldb/util/bloom_test.cc b/src/leveldb/util/bloom_test.cc deleted file mode 100644 index 77fb1b3159..0000000000 --- a/src/leveldb/util/bloom_test.cc +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/filter_policy.h" - -#include "util/coding.h" -#include "util/logging.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -static const int kVerbose = 1; - -static Slice Key(int i, char* buffer) { - EncodeFixed32(buffer, i); - return Slice(buffer, sizeof(uint32_t)); -} - -class BloomTest { - private: - const FilterPolicy* policy_; - std::string filter_; - std::vector keys_; - - public: - BloomTest() : policy_(NewBloomFilterPolicy(10)) { } - - ~BloomTest() { - delete policy_; - } - - void Reset() { - keys_.clear(); - filter_.clear(); - } - - void Add(const Slice& s) { - keys_.push_back(s.ToString()); - } - - void Build() { - std::vector key_slices; - for (size_t i = 0; i < keys_.size(); i++) { - key_slices.push_back(Slice(keys_[i])); - } - filter_.clear(); - policy_->CreateFilter(&key_slices[0], key_slices.size(), &filter_); - keys_.clear(); - if (kVerbose >= 2) DumpFilter(); - } - - size_t FilterSize() const { - return filter_.size(); - } - - void DumpFilter() { - fprintf(stderr, "F("); - for (size_t i = 0; i+1 < filter_.size(); i++) { - const unsigned int c = static_cast(filter_[i]); - for (int j = 0; j < 8; j++) { - fprintf(stderr, "%c", (c & (1 <KeyMayMatch(s, filter_); - } - - double FalsePositiveRate() { - char buffer[sizeof(int)]; - int result = 0; - for (int i = 0; i < 10000; i++) { - if (Matches(Key(i + 1000000000, buffer))) { - result++; - } - } - return result / 10000.0; - } -}; - -TEST(BloomTest, EmptyFilter) { - ASSERT_TRUE(! Matches("hello")); - ASSERT_TRUE(! Matches("world")); -} - -TEST(BloomTest, Small) { - Add("hello"); - Add("world"); - ASSERT_TRUE(Matches("hello")); - ASSERT_TRUE(Matches("world")); - ASSERT_TRUE(! Matches("x")); - ASSERT_TRUE(! Matches("foo")); -} - -static int NextLength(int length) { - if (length < 10) { - length += 1; - } else if (length < 100) { - length += 10; - } else if (length < 1000) { - length += 100; - } else { - length += 1000; - } - return length; -} - -TEST(BloomTest, VaryingLengths) { - char buffer[sizeof(int)]; - - // Count number of filters that significantly exceed the false positive rate - int mediocre_filters = 0; - int good_filters = 0; - - for (int length = 1; length <= 10000; length = NextLength(length)) { - Reset(); - for (int i = 0; i < length; i++) { - Add(Key(i, buffer)); - } - Build(); - - ASSERT_LE(FilterSize(), static_cast((length * 10 / 8) + 40)) - << length; - - // All added keys must match - for (int i = 0; i < length; i++) { - ASSERT_TRUE(Matches(Key(i, buffer))) - << "Length " << length << "; key " << i; - } - - // Check false positive rate - double rate = FalsePositiveRate(); - if (kVerbose >= 1) { - fprintf(stderr, "False positives: %5.2f%% @ length = %6d ; bytes = %6d\n", - rate*100.0, length, static_cast(FilterSize())); - } - ASSERT_LE(rate, 0.02); // Must not be over 2% - if (rate > 0.0125) mediocre_filters++; // Allowed, but not too often - else good_filters++; - } - if (kVerbose >= 1) { - fprintf(stderr, "Filters: %d good, %d mediocre\n", - good_filters, mediocre_filters); - } - ASSERT_LE(mediocre_filters, good_filters/5); -} - -// Different bits-per-byte - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/util/cache.cc b/src/leveldb/util/cache.cc deleted file mode 100644 index 8b197bc02a..0000000000 --- a/src/leveldb/util/cache.cc +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include - -#include "leveldb/cache.h" -#include "port/port.h" -#include "util/hash.h" -#include "util/mutexlock.h" - -namespace leveldb { - -Cache::~Cache() { -} - -namespace { - -// LRU cache implementation - -// An entry is a variable length heap-allocated structure. Entries -// are kept in a circular doubly linked list ordered by access time. -struct LRUHandle { - void* value; - void (*deleter)(const Slice&, void* value); - LRUHandle* next_hash; - LRUHandle* next; - LRUHandle* prev; - size_t charge; // TODO(opt): Only allow uint32_t? - size_t key_length; - uint32_t refs; - uint32_t hash; // Hash of key(); used for fast sharding and comparisons - char key_data[1]; // Beginning of key - - Slice key() const { - // For cheaper lookups, we allow a temporary Handle object - // to store a pointer to a key in "value". - if (next == this) { - return *(reinterpret_cast(value)); - } else { - return Slice(key_data, key_length); - } - } -}; - -// We provide our own simple hash table since it removes a whole bunch -// of porting hacks and is also faster than some of the built-in hash -// table implementations in some of the compiler/runtime combinations -// we have tested. E.g., readrandom speeds up by ~5% over the g++ -// 4.4.3's builtin hashtable. -class HandleTable { - public: - HandleTable() : length_(0), elems_(0), list_(NULL) { Resize(); } - ~HandleTable() { delete[] list_; } - - LRUHandle* Lookup(const Slice& key, uint32_t hash) { - return *FindPointer(key, hash); - } - - LRUHandle* Insert(LRUHandle* h) { - LRUHandle** ptr = FindPointer(h->key(), h->hash); - LRUHandle* old = *ptr; - h->next_hash = (old == NULL ? NULL : old->next_hash); - *ptr = h; - if (old == NULL) { - ++elems_; - if (elems_ > length_) { - // Since each cache entry is fairly large, we aim for a small - // average linked list length (<= 1). - Resize(); - } - } - return old; - } - - LRUHandle* Remove(const Slice& key, uint32_t hash) { - LRUHandle** ptr = FindPointer(key, hash); - LRUHandle* result = *ptr; - if (result != NULL) { - *ptr = result->next_hash; - --elems_; - } - return result; - } - - private: - // The table consists of an array of buckets where each bucket is - // a linked list of cache entries that hash into the bucket. - uint32_t length_; - uint32_t elems_; - LRUHandle** list_; - - // Return a pointer to slot that points to a cache entry that - // matches key/hash. If there is no such cache entry, return a - // pointer to the trailing slot in the corresponding linked list. - LRUHandle** FindPointer(const Slice& key, uint32_t hash) { - LRUHandle** ptr = &list_[hash & (length_ - 1)]; - while (*ptr != NULL && - ((*ptr)->hash != hash || key != (*ptr)->key())) { - ptr = &(*ptr)->next_hash; - } - return ptr; - } - - void Resize() { - uint32_t new_length = 4; - while (new_length < elems_) { - new_length *= 2; - } - LRUHandle** new_list = new LRUHandle*[new_length]; - memset(new_list, 0, sizeof(new_list[0]) * new_length); - uint32_t count = 0; - for (uint32_t i = 0; i < length_; i++) { - LRUHandle* h = list_[i]; - while (h != NULL) { - LRUHandle* next = h->next_hash; - uint32_t hash = h->hash; - LRUHandle** ptr = &new_list[hash & (new_length - 1)]; - h->next_hash = *ptr; - *ptr = h; - h = next; - count++; - } - } - assert(elems_ == count); - delete[] list_; - list_ = new_list; - length_ = new_length; - } -}; - -// A single shard of sharded cache. -class LRUCache { - public: - LRUCache(); - ~LRUCache(); - - // Separate from constructor so caller can easily make an array of LRUCache - void SetCapacity(size_t capacity) { capacity_ = capacity; } - - // Like Cache methods, but with an extra "hash" parameter. - Cache::Handle* Insert(const Slice& key, uint32_t hash, - void* value, size_t charge, - void (*deleter)(const Slice& key, void* value)); - Cache::Handle* Lookup(const Slice& key, uint32_t hash); - void Release(Cache::Handle* handle); - void Erase(const Slice& key, uint32_t hash); - - private: - void LRU_Remove(LRUHandle* e); - void LRU_Append(LRUHandle* e); - void Unref(LRUHandle* e); - - // Initialized before use. - size_t capacity_; - - // mutex_ protects the following state. - port::Mutex mutex_; - size_t usage_; - - // Dummy head of LRU list. - // lru.prev is newest entry, lru.next is oldest entry. - LRUHandle lru_; - - HandleTable table_; -}; - -LRUCache::LRUCache() - : usage_(0) { - // Make empty circular linked list - lru_.next = &lru_; - lru_.prev = &lru_; -} - -LRUCache::~LRUCache() { - for (LRUHandle* e = lru_.next; e != &lru_; ) { - LRUHandle* next = e->next; - assert(e->refs == 1); // Error if caller has an unreleased handle - Unref(e); - e = next; - } -} - -void LRUCache::Unref(LRUHandle* e) { - assert(e->refs > 0); - e->refs--; - if (e->refs <= 0) { - usage_ -= e->charge; - (*e->deleter)(e->key(), e->value); - free(e); - } -} - -void LRUCache::LRU_Remove(LRUHandle* e) { - e->next->prev = e->prev; - e->prev->next = e->next; -} - -void LRUCache::LRU_Append(LRUHandle* e) { - // Make "e" newest entry by inserting just before lru_ - e->next = &lru_; - e->prev = lru_.prev; - e->prev->next = e; - e->next->prev = e; -} - -Cache::Handle* LRUCache::Lookup(const Slice& key, uint32_t hash) { - MutexLock l(&mutex_); - LRUHandle* e = table_.Lookup(key, hash); - if (e != NULL) { - e->refs++; - LRU_Remove(e); - LRU_Append(e); - } - return reinterpret_cast(e); -} - -void LRUCache::Release(Cache::Handle* handle) { - MutexLock l(&mutex_); - Unref(reinterpret_cast(handle)); -} - -Cache::Handle* LRUCache::Insert( - const Slice& key, uint32_t hash, void* value, size_t charge, - void (*deleter)(const Slice& key, void* value)) { - MutexLock l(&mutex_); - - LRUHandle* e = reinterpret_cast( - malloc(sizeof(LRUHandle)-1 + key.size())); - e->value = value; - e->deleter = deleter; - e->charge = charge; - e->key_length = key.size(); - e->hash = hash; - e->refs = 2; // One from LRUCache, one for the returned handle - memcpy(e->key_data, key.data(), key.size()); - LRU_Append(e); - usage_ += charge; - - LRUHandle* old = table_.Insert(e); - if (old != NULL) { - LRU_Remove(old); - Unref(old); - } - - while (usage_ > capacity_ && lru_.next != &lru_) { - LRUHandle* old = lru_.next; - LRU_Remove(old); - table_.Remove(old->key(), old->hash); - Unref(old); - } - - return reinterpret_cast(e); -} - -void LRUCache::Erase(const Slice& key, uint32_t hash) { - MutexLock l(&mutex_); - LRUHandle* e = table_.Remove(key, hash); - if (e != NULL) { - LRU_Remove(e); - Unref(e); - } -} - -static const int kNumShardBits = 4; -static const int kNumShards = 1 << kNumShardBits; - -class ShardedLRUCache : public Cache { - private: - LRUCache shard_[kNumShards]; - port::Mutex id_mutex_; - uint64_t last_id_; - - static inline uint32_t HashSlice(const Slice& s) { - return Hash(s.data(), s.size(), 0); - } - - static uint32_t Shard(uint32_t hash) { - return hash >> (32 - kNumShardBits); - } - - public: - explicit ShardedLRUCache(size_t capacity) - : last_id_(0) { - const size_t per_shard = (capacity + (kNumShards - 1)) / kNumShards; - for (int s = 0; s < kNumShards; s++) { - shard_[s].SetCapacity(per_shard); - } - } - virtual ~ShardedLRUCache() { } - virtual Handle* Insert(const Slice& key, void* value, size_t charge, - void (*deleter)(const Slice& key, void* value)) { - const uint32_t hash = HashSlice(key); - return shard_[Shard(hash)].Insert(key, hash, value, charge, deleter); - } - virtual Handle* Lookup(const Slice& key) { - const uint32_t hash = HashSlice(key); - return shard_[Shard(hash)].Lookup(key, hash); - } - virtual void Release(Handle* handle) { - LRUHandle* h = reinterpret_cast(handle); - shard_[Shard(h->hash)].Release(handle); - } - virtual void Erase(const Slice& key) { - const uint32_t hash = HashSlice(key); - shard_[Shard(hash)].Erase(key, hash); - } - virtual void* Value(Handle* handle) { - return reinterpret_cast(handle)->value; - } - virtual uint64_t NewId() { - MutexLock l(&id_mutex_); - return ++(last_id_); - } -}; - -} // end anonymous namespace - -Cache* NewLRUCache(size_t capacity) { - return new ShardedLRUCache(capacity); -} - -} // namespace leveldb diff --git a/src/leveldb/util/cache_test.cc b/src/leveldb/util/cache_test.cc deleted file mode 100644 index 43716715a8..0000000000 --- a/src/leveldb/util/cache_test.cc +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/cache.h" - -#include -#include "util/coding.h" -#include "util/testharness.h" - -namespace leveldb { - -// Conversions between numeric keys/values and the types expected by Cache. -static std::string EncodeKey(int k) { - std::string result; - PutFixed32(&result, k); - return result; -} -static int DecodeKey(const Slice& k) { - assert(k.size() == 4); - return DecodeFixed32(k.data()); -} -static void* EncodeValue(uintptr_t v) { return reinterpret_cast(v); } -static int DecodeValue(void* v) { return reinterpret_cast(v); } - -class CacheTest { - public: - static CacheTest* current_; - - static void Deleter(const Slice& key, void* v) { - current_->deleted_keys_.push_back(DecodeKey(key)); - current_->deleted_values_.push_back(DecodeValue(v)); - } - - static const int kCacheSize = 1000; - std::vector deleted_keys_; - std::vector deleted_values_; - Cache* cache_; - - CacheTest() : cache_(NewLRUCache(kCacheSize)) { - current_ = this; - } - - ~CacheTest() { - delete cache_; - } - - int Lookup(int key) { - Cache::Handle* handle = cache_->Lookup(EncodeKey(key)); - const int r = (handle == NULL) ? -1 : DecodeValue(cache_->Value(handle)); - if (handle != NULL) { - cache_->Release(handle); - } - return r; - } - - void Insert(int key, int value, int charge = 1) { - cache_->Release(cache_->Insert(EncodeKey(key), EncodeValue(value), charge, - &CacheTest::Deleter)); - } - - void Erase(int key) { - cache_->Erase(EncodeKey(key)); - } -}; -CacheTest* CacheTest::current_; - -TEST(CacheTest, HitAndMiss) { - ASSERT_EQ(-1, Lookup(100)); - - Insert(100, 101); - ASSERT_EQ(101, Lookup(100)); - ASSERT_EQ(-1, Lookup(200)); - ASSERT_EQ(-1, Lookup(300)); - - Insert(200, 201); - ASSERT_EQ(101, Lookup(100)); - ASSERT_EQ(201, Lookup(200)); - ASSERT_EQ(-1, Lookup(300)); - - Insert(100, 102); - ASSERT_EQ(102, Lookup(100)); - ASSERT_EQ(201, Lookup(200)); - ASSERT_EQ(-1, Lookup(300)); - - ASSERT_EQ(1, deleted_keys_.size()); - ASSERT_EQ(100, deleted_keys_[0]); - ASSERT_EQ(101, deleted_values_[0]); -} - -TEST(CacheTest, Erase) { - Erase(200); - ASSERT_EQ(0, deleted_keys_.size()); - - Insert(100, 101); - Insert(200, 201); - Erase(100); - ASSERT_EQ(-1, Lookup(100)); - ASSERT_EQ(201, Lookup(200)); - ASSERT_EQ(1, deleted_keys_.size()); - ASSERT_EQ(100, deleted_keys_[0]); - ASSERT_EQ(101, deleted_values_[0]); - - Erase(100); - ASSERT_EQ(-1, Lookup(100)); - ASSERT_EQ(201, Lookup(200)); - ASSERT_EQ(1, deleted_keys_.size()); -} - -TEST(CacheTest, EntriesArePinned) { - Insert(100, 101); - Cache::Handle* h1 = cache_->Lookup(EncodeKey(100)); - ASSERT_EQ(101, DecodeValue(cache_->Value(h1))); - - Insert(100, 102); - Cache::Handle* h2 = cache_->Lookup(EncodeKey(100)); - ASSERT_EQ(102, DecodeValue(cache_->Value(h2))); - ASSERT_EQ(0, deleted_keys_.size()); - - cache_->Release(h1); - ASSERT_EQ(1, deleted_keys_.size()); - ASSERT_EQ(100, deleted_keys_[0]); - ASSERT_EQ(101, deleted_values_[0]); - - Erase(100); - ASSERT_EQ(-1, Lookup(100)); - ASSERT_EQ(1, deleted_keys_.size()); - - cache_->Release(h2); - ASSERT_EQ(2, deleted_keys_.size()); - ASSERT_EQ(100, deleted_keys_[1]); - ASSERT_EQ(102, deleted_values_[1]); -} - -TEST(CacheTest, EvictionPolicy) { - Insert(100, 101); - Insert(200, 201); - - // Frequently used entry must be kept around - for (int i = 0; i < kCacheSize + 100; i++) { - Insert(1000+i, 2000+i); - ASSERT_EQ(2000+i, Lookup(1000+i)); - ASSERT_EQ(101, Lookup(100)); - } - ASSERT_EQ(101, Lookup(100)); - ASSERT_EQ(-1, Lookup(200)); -} - -TEST(CacheTest, HeavyEntries) { - // Add a bunch of light and heavy entries and then count the combined - // size of items still in the cache, which must be approximately the - // same as the total capacity. - const int kLight = 1; - const int kHeavy = 10; - int added = 0; - int index = 0; - while (added < 2*kCacheSize) { - const int weight = (index & 1) ? kLight : kHeavy; - Insert(index, 1000+index, weight); - added += weight; - index++; - } - - int cached_weight = 0; - for (int i = 0; i < index; i++) { - const int weight = (i & 1 ? kLight : kHeavy); - int r = Lookup(i); - if (r >= 0) { - cached_weight += weight; - ASSERT_EQ(1000+i, r); - } - } - ASSERT_LE(cached_weight, kCacheSize + kCacheSize/10); -} - -TEST(CacheTest, NewId) { - uint64_t a = cache_->NewId(); - uint64_t b = cache_->NewId(); - ASSERT_NE(a, b); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/util/coding.cc b/src/leveldb/util/coding.cc deleted file mode 100644 index 21e3186d5d..0000000000 --- a/src/leveldb/util/coding.cc +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/coding.h" - -namespace leveldb { - -void EncodeFixed32(char* buf, uint32_t value) { - if (port::kLittleEndian) { - memcpy(buf, &value, sizeof(value)); - } else { - buf[0] = value & 0xff; - buf[1] = (value >> 8) & 0xff; - buf[2] = (value >> 16) & 0xff; - buf[3] = (value >> 24) & 0xff; - } -} - -void EncodeFixed64(char* buf, uint64_t value) { - if (port::kLittleEndian) { - memcpy(buf, &value, sizeof(value)); - } else { - buf[0] = value & 0xff; - buf[1] = (value >> 8) & 0xff; - buf[2] = (value >> 16) & 0xff; - buf[3] = (value >> 24) & 0xff; - buf[4] = (value >> 32) & 0xff; - buf[5] = (value >> 40) & 0xff; - buf[6] = (value >> 48) & 0xff; - buf[7] = (value >> 56) & 0xff; - } -} - -void PutFixed32(std::string* dst, uint32_t value) { - char buf[sizeof(value)]; - EncodeFixed32(buf, value); - dst->append(buf, sizeof(buf)); -} - -void PutFixed64(std::string* dst, uint64_t value) { - char buf[sizeof(value)]; - EncodeFixed64(buf, value); - dst->append(buf, sizeof(buf)); -} - -char* EncodeVarint32(char* dst, uint32_t v) { - // Operate on characters as unsigneds - unsigned char* ptr = reinterpret_cast(dst); - static const int B = 128; - if (v < (1<<7)) { - *(ptr++) = v; - } else if (v < (1<<14)) { - *(ptr++) = v | B; - *(ptr++) = v>>7; - } else if (v < (1<<21)) { - *(ptr++) = v | B; - *(ptr++) = (v>>7) | B; - *(ptr++) = v>>14; - } else if (v < (1<<28)) { - *(ptr++) = v | B; - *(ptr++) = (v>>7) | B; - *(ptr++) = (v>>14) | B; - *(ptr++) = v>>21; - } else { - *(ptr++) = v | B; - *(ptr++) = (v>>7) | B; - *(ptr++) = (v>>14) | B; - *(ptr++) = (v>>21) | B; - *(ptr++) = v>>28; - } - return reinterpret_cast(ptr); -} - -void PutVarint32(std::string* dst, uint32_t v) { - char buf[5]; - char* ptr = EncodeVarint32(buf, v); - dst->append(buf, ptr - buf); -} - -char* EncodeVarint64(char* dst, uint64_t v) { - static const int B = 128; - unsigned char* ptr = reinterpret_cast(dst); - while (v >= B) { - *(ptr++) = (v & (B-1)) | B; - v >>= 7; - } - *(ptr++) = static_cast(v); - return reinterpret_cast(ptr); -} - -void PutVarint64(std::string* dst, uint64_t v) { - char buf[10]; - char* ptr = EncodeVarint64(buf, v); - dst->append(buf, ptr - buf); -} - -void PutLengthPrefixedSlice(std::string* dst, const Slice& value) { - PutVarint32(dst, value.size()); - dst->append(value.data(), value.size()); -} - -int VarintLength(uint64_t v) { - int len = 1; - while (v >= 128) { - v >>= 7; - len++; - } - return len; -} - -const char* GetVarint32PtrFallback(const char* p, - const char* limit, - uint32_t* value) { - uint32_t result = 0; - for (uint32_t shift = 0; shift <= 28 && p < limit; shift += 7) { - uint32_t byte = *(reinterpret_cast(p)); - p++; - if (byte & 128) { - // More bytes are present - result |= ((byte & 127) << shift); - } else { - result |= (byte << shift); - *value = result; - return reinterpret_cast(p); - } - } - return NULL; -} - -bool GetVarint32(Slice* input, uint32_t* value) { - const char* p = input->data(); - const char* limit = p + input->size(); - const char* q = GetVarint32Ptr(p, limit, value); - if (q == NULL) { - return false; - } else { - *input = Slice(q, limit - q); - return true; - } -} - -const char* GetVarint64Ptr(const char* p, const char* limit, uint64_t* value) { - uint64_t result = 0; - for (uint32_t shift = 0; shift <= 63 && p < limit; shift += 7) { - uint64_t byte = *(reinterpret_cast(p)); - p++; - if (byte & 128) { - // More bytes are present - result |= ((byte & 127) << shift); - } else { - result |= (byte << shift); - *value = result; - return reinterpret_cast(p); - } - } - return NULL; -} - -bool GetVarint64(Slice* input, uint64_t* value) { - const char* p = input->data(); - const char* limit = p + input->size(); - const char* q = GetVarint64Ptr(p, limit, value); - if (q == NULL) { - return false; - } else { - *input = Slice(q, limit - q); - return true; - } -} - -const char* GetLengthPrefixedSlice(const char* p, const char* limit, - Slice* result) { - uint32_t len; - p = GetVarint32Ptr(p, limit, &len); - if (p == NULL) return NULL; - if (p + len > limit) return NULL; - *result = Slice(p, len); - return p + len; -} - -bool GetLengthPrefixedSlice(Slice* input, Slice* result) { - uint32_t len; - if (GetVarint32(input, &len) && - input->size() >= len) { - *result = Slice(input->data(), len); - input->remove_prefix(len); - return true; - } else { - return false; - } -} - -} // namespace leveldb diff --git a/src/leveldb/util/coding.h b/src/leveldb/util/coding.h deleted file mode 100644 index 3993c4a755..0000000000 --- a/src/leveldb/util/coding.h +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Endian-neutral encoding: -// * Fixed-length numbers are encoded with least-significant byte first -// * In addition we support variable length "varint" encoding -// * Strings are encoded prefixed by their length in varint format - -#ifndef STORAGE_LEVELDB_UTIL_CODING_H_ -#define STORAGE_LEVELDB_UTIL_CODING_H_ - -#include -#include -#include -#include "leveldb/slice.h" -#include "port/port.h" - -namespace leveldb { - -// Standard Put... routines append to a string -extern void PutFixed32(std::string* dst, uint32_t value); -extern void PutFixed64(std::string* dst, uint64_t value); -extern void PutVarint32(std::string* dst, uint32_t value); -extern void PutVarint64(std::string* dst, uint64_t value); -extern void PutLengthPrefixedSlice(std::string* dst, const Slice& value); - -// Standard Get... routines parse a value from the beginning of a Slice -// and advance the slice past the parsed value. -extern bool GetVarint32(Slice* input, uint32_t* value); -extern bool GetVarint64(Slice* input, uint64_t* value); -extern bool GetLengthPrefixedSlice(Slice* input, Slice* result); - -// Pointer-based variants of GetVarint... These either store a value -// in *v and return a pointer just past the parsed value, or return -// NULL on error. These routines only look at bytes in the range -// [p..limit-1] -extern const char* GetVarint32Ptr(const char* p,const char* limit, uint32_t* v); -extern const char* GetVarint64Ptr(const char* p,const char* limit, uint64_t* v); - -// Returns the length of the varint32 or varint64 encoding of "v" -extern int VarintLength(uint64_t v); - -// Lower-level versions of Put... that write directly into a character buffer -// REQUIRES: dst has enough space for the value being written -extern void EncodeFixed32(char* dst, uint32_t value); -extern void EncodeFixed64(char* dst, uint64_t value); - -// Lower-level versions of Put... that write directly into a character buffer -// and return a pointer just past the last byte written. -// REQUIRES: dst has enough space for the value being written -extern char* EncodeVarint32(char* dst, uint32_t value); -extern char* EncodeVarint64(char* dst, uint64_t value); - -// Lower-level versions of Get... that read directly from a character buffer -// without any bounds checking. - -inline uint32_t DecodeFixed32(const char* ptr) { - if (port::kLittleEndian) { - // Load the raw bytes - uint32_t result; - memcpy(&result, ptr, sizeof(result)); // gcc optimizes this to a plain load - return result; - } else { - return ((static_cast(static_cast(ptr[0]))) - | (static_cast(static_cast(ptr[1])) << 8) - | (static_cast(static_cast(ptr[2])) << 16) - | (static_cast(static_cast(ptr[3])) << 24)); - } -} - -inline uint64_t DecodeFixed64(const char* ptr) { - if (port::kLittleEndian) { - // Load the raw bytes - uint64_t result; - memcpy(&result, ptr, sizeof(result)); // gcc optimizes this to a plain load - return result; - } else { - uint64_t lo = DecodeFixed32(ptr); - uint64_t hi = DecodeFixed32(ptr + 4); - return (hi << 32) | lo; - } -} - -// Internal routine for use by fallback path of GetVarint32Ptr -extern const char* GetVarint32PtrFallback(const char* p, - const char* limit, - uint32_t* value); -inline const char* GetVarint32Ptr(const char* p, - const char* limit, - uint32_t* value) { - if (p < limit) { - uint32_t result = *(reinterpret_cast(p)); - if ((result & 128) == 0) { - *value = result; - return p + 1; - } - } - return GetVarint32PtrFallback(p, limit, value); -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_CODING_H_ diff --git a/src/leveldb/util/coding_test.cc b/src/leveldb/util/coding_test.cc deleted file mode 100644 index 521541ea61..0000000000 --- a/src/leveldb/util/coding_test.cc +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/coding.h" - -#include "util/testharness.h" - -namespace leveldb { - -class Coding { }; - -TEST(Coding, Fixed32) { - std::string s; - for (uint32_t v = 0; v < 100000; v++) { - PutFixed32(&s, v); - } - - const char* p = s.data(); - for (uint32_t v = 0; v < 100000; v++) { - uint32_t actual = DecodeFixed32(p); - ASSERT_EQ(v, actual); - p += sizeof(uint32_t); - } -} - -TEST(Coding, Fixed64) { - std::string s; - for (int power = 0; power <= 63; power++) { - uint64_t v = static_cast(1) << power; - PutFixed64(&s, v - 1); - PutFixed64(&s, v + 0); - PutFixed64(&s, v + 1); - } - - const char* p = s.data(); - for (int power = 0; power <= 63; power++) { - uint64_t v = static_cast(1) << power; - uint64_t actual; - actual = DecodeFixed64(p); - ASSERT_EQ(v-1, actual); - p += sizeof(uint64_t); - - actual = DecodeFixed64(p); - ASSERT_EQ(v+0, actual); - p += sizeof(uint64_t); - - actual = DecodeFixed64(p); - ASSERT_EQ(v+1, actual); - p += sizeof(uint64_t); - } -} - -// Test that encoding routines generate little-endian encodings -TEST(Coding, EncodingOutput) { - std::string dst; - PutFixed32(&dst, 0x04030201); - ASSERT_EQ(4, dst.size()); - ASSERT_EQ(0x01, static_cast(dst[0])); - ASSERT_EQ(0x02, static_cast(dst[1])); - ASSERT_EQ(0x03, static_cast(dst[2])); - ASSERT_EQ(0x04, static_cast(dst[3])); - - dst.clear(); - PutFixed64(&dst, 0x0807060504030201ull); - ASSERT_EQ(8, dst.size()); - ASSERT_EQ(0x01, static_cast(dst[0])); - ASSERT_EQ(0x02, static_cast(dst[1])); - ASSERT_EQ(0x03, static_cast(dst[2])); - ASSERT_EQ(0x04, static_cast(dst[3])); - ASSERT_EQ(0x05, static_cast(dst[4])); - ASSERT_EQ(0x06, static_cast(dst[5])); - ASSERT_EQ(0x07, static_cast(dst[6])); - ASSERT_EQ(0x08, static_cast(dst[7])); -} - -TEST(Coding, Varint32) { - std::string s; - for (uint32_t i = 0; i < (32 * 32); i++) { - uint32_t v = (i / 32) << (i % 32); - PutVarint32(&s, v); - } - - const char* p = s.data(); - const char* limit = p + s.size(); - for (uint32_t i = 0; i < (32 * 32); i++) { - uint32_t expected = (i / 32) << (i % 32); - uint32_t actual; - const char* start = p; - p = GetVarint32Ptr(p, limit, &actual); - ASSERT_TRUE(p != NULL); - ASSERT_EQ(expected, actual); - ASSERT_EQ(VarintLength(actual), p - start); - } - ASSERT_EQ(p, s.data() + s.size()); -} - -TEST(Coding, Varint64) { - // Construct the list of values to check - std::vector values; - // Some special values - values.push_back(0); - values.push_back(100); - values.push_back(~static_cast(0)); - values.push_back(~static_cast(0) - 1); - for (uint32_t k = 0; k < 64; k++) { - // Test values near powers of two - const uint64_t power = 1ull << k; - values.push_back(power); - values.push_back(power-1); - values.push_back(power+1); - } - - std::string s; - for (size_t i = 0; i < values.size(); i++) { - PutVarint64(&s, values[i]); - } - - const char* p = s.data(); - const char* limit = p + s.size(); - for (size_t i = 0; i < values.size(); i++) { - ASSERT_TRUE(p < limit); - uint64_t actual; - const char* start = p; - p = GetVarint64Ptr(p, limit, &actual); - ASSERT_TRUE(p != NULL); - ASSERT_EQ(values[i], actual); - ASSERT_EQ(VarintLength(actual), p - start); - } - ASSERT_EQ(p, limit); - -} - -TEST(Coding, Varint32Overflow) { - uint32_t result; - std::string input("\x81\x82\x83\x84\x85\x11"); - ASSERT_TRUE(GetVarint32Ptr(input.data(), input.data() + input.size(), &result) - == NULL); -} - -TEST(Coding, Varint32Truncation) { - uint32_t large_value = (1u << 31) + 100; - std::string s; - PutVarint32(&s, large_value); - uint32_t result; - for (size_t len = 0; len < s.size() - 1; len++) { - ASSERT_TRUE(GetVarint32Ptr(s.data(), s.data() + len, &result) == NULL); - } - ASSERT_TRUE(GetVarint32Ptr(s.data(), s.data() + s.size(), &result) != NULL); - ASSERT_EQ(large_value, result); -} - -TEST(Coding, Varint64Overflow) { - uint64_t result; - std::string input("\x81\x82\x83\x84\x85\x81\x82\x83\x84\x85\x11"); - ASSERT_TRUE(GetVarint64Ptr(input.data(), input.data() + input.size(), &result) - == NULL); -} - -TEST(Coding, Varint64Truncation) { - uint64_t large_value = (1ull << 63) + 100ull; - std::string s; - PutVarint64(&s, large_value); - uint64_t result; - for (size_t len = 0; len < s.size() - 1; len++) { - ASSERT_TRUE(GetVarint64Ptr(s.data(), s.data() + len, &result) == NULL); - } - ASSERT_TRUE(GetVarint64Ptr(s.data(), s.data() + s.size(), &result) != NULL); - ASSERT_EQ(large_value, result); -} - -TEST(Coding, Strings) { - std::string s; - PutLengthPrefixedSlice(&s, Slice("")); - PutLengthPrefixedSlice(&s, Slice("foo")); - PutLengthPrefixedSlice(&s, Slice("bar")); - PutLengthPrefixedSlice(&s, Slice(std::string(200, 'x'))); - - Slice input(s); - Slice v; - ASSERT_TRUE(GetLengthPrefixedSlice(&input, &v)); - ASSERT_EQ("", v.ToString()); - ASSERT_TRUE(GetLengthPrefixedSlice(&input, &v)); - ASSERT_EQ("foo", v.ToString()); - ASSERT_TRUE(GetLengthPrefixedSlice(&input, &v)); - ASSERT_EQ("bar", v.ToString()); - ASSERT_TRUE(GetLengthPrefixedSlice(&input, &v)); - ASSERT_EQ(std::string(200, 'x'), v.ToString()); - ASSERT_EQ("", input.ToString()); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/util/comparator.cc b/src/leveldb/util/comparator.cc deleted file mode 100644 index 4b7b5724ef..0000000000 --- a/src/leveldb/util/comparator.cc +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include "leveldb/comparator.h" -#include "leveldb/slice.h" -#include "port/port.h" -#include "util/logging.h" - -namespace leveldb { - -Comparator::~Comparator() { } - -namespace { -class BytewiseComparatorImpl : public Comparator { - public: - BytewiseComparatorImpl() { } - - virtual const char* Name() const { - return "leveldb.BytewiseComparator"; - } - - virtual int Compare(const Slice& a, const Slice& b) const { - return a.compare(b); - } - - virtual void FindShortestSeparator( - std::string* start, - const Slice& limit) const { - // Find length of common prefix - size_t min_length = std::min(start->size(), limit.size()); - size_t diff_index = 0; - while ((diff_index < min_length) && - ((*start)[diff_index] == limit[diff_index])) { - diff_index++; - } - - if (diff_index >= min_length) { - // Do not shorten if one string is a prefix of the other - } else { - uint8_t diff_byte = static_cast((*start)[diff_index]); - if (diff_byte < static_cast(0xff) && - diff_byte + 1 < static_cast(limit[diff_index])) { - (*start)[diff_index]++; - start->resize(diff_index + 1); - assert(Compare(*start, limit) < 0); - } - } - } - - virtual void FindShortSuccessor(std::string* key) const { - // Find first character that can be incremented - size_t n = key->size(); - for (size_t i = 0; i < n; i++) { - const uint8_t byte = (*key)[i]; - if (byte != static_cast(0xff)) { - (*key)[i] = byte + 1; - key->resize(i+1); - return; - } - } - // *key is a run of 0xffs. Leave it alone. - } -}; -} // namespace - -static port::OnceType once = LEVELDB_ONCE_INIT; -static const Comparator* bytewise; - -static void InitModule() { - bytewise = new BytewiseComparatorImpl; -} - -const Comparator* BytewiseComparator() { - port::InitOnce(&once, InitModule); - return bytewise; -} - -} // namespace leveldb diff --git a/src/leveldb/util/crc32c.cc b/src/leveldb/util/crc32c.cc deleted file mode 100644 index 6db9e77077..0000000000 --- a/src/leveldb/util/crc32c.cc +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A portable implementation of crc32c, optimized to handle -// four bytes at a time. - -#include "util/crc32c.h" - -#include -#include "util/coding.h" - -namespace leveldb { -namespace crc32c { - -static const uint32_t table0_[256] = { - 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, - 0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb, - 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, - 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, - 0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b, - 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384, - 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, - 0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b, - 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, - 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, - 0xaa64d611, 0x580f5512, 0x4b5fa6e6, 0xb93425e5, - 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, - 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, - 0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a, - 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, - 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, - 0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48, - 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957, - 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, - 0x0c38d26c, 0xfe53516f, 0xed03a29b, 0x1f682198, - 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, - 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, - 0xdbfc821c, 0x2997011f, 0x3ac7f2eb, 0xc8ac71e8, - 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, - 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, - 0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789, - 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, - 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, - 0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9, - 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6, - 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, - 0x3cdb9bdd, 0xceb018de, 0xdde0eb2a, 0x2f8b6829, - 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, - 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, - 0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043, - 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, - 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, - 0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc, - 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, - 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, - 0xa24bb5a6, 0x502036a5, 0x4370c551, 0xb11b4652, - 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d, - 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, - 0xef087a76, 0x1d63f975, 0x0e330a81, 0xfc588982, - 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, - 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, - 0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2, - 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, - 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, - 0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f, - 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, - 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, - 0xd3d3e1ab, 0x21b862a8, 0x32e8915c, 0xc083125f, - 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, - 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, - 0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f, - 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, - 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, - 0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321, - 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e, - 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, - 0x34f4f86a, 0xc69f7b69, 0xd5cf889d, 0x27a40b9e, - 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, - 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351 -}; -static const uint32_t table1_[256] = { - 0x00000000, 0x13a29877, 0x274530ee, 0x34e7a899, - 0x4e8a61dc, 0x5d28f9ab, 0x69cf5132, 0x7a6dc945, - 0x9d14c3b8, 0x8eb65bcf, 0xba51f356, 0xa9f36b21, - 0xd39ea264, 0xc03c3a13, 0xf4db928a, 0xe7790afd, - 0x3fc5f181, 0x2c6769f6, 0x1880c16f, 0x0b225918, - 0x714f905d, 0x62ed082a, 0x560aa0b3, 0x45a838c4, - 0xa2d13239, 0xb173aa4e, 0x859402d7, 0x96369aa0, - 0xec5b53e5, 0xfff9cb92, 0xcb1e630b, 0xd8bcfb7c, - 0x7f8be302, 0x6c297b75, 0x58ced3ec, 0x4b6c4b9b, - 0x310182de, 0x22a31aa9, 0x1644b230, 0x05e62a47, - 0xe29f20ba, 0xf13db8cd, 0xc5da1054, 0xd6788823, - 0xac154166, 0xbfb7d911, 0x8b507188, 0x98f2e9ff, - 0x404e1283, 0x53ec8af4, 0x670b226d, 0x74a9ba1a, - 0x0ec4735f, 0x1d66eb28, 0x298143b1, 0x3a23dbc6, - 0xdd5ad13b, 0xcef8494c, 0xfa1fe1d5, 0xe9bd79a2, - 0x93d0b0e7, 0x80722890, 0xb4958009, 0xa737187e, - 0xff17c604, 0xecb55e73, 0xd852f6ea, 0xcbf06e9d, - 0xb19da7d8, 0xa23f3faf, 0x96d89736, 0x857a0f41, - 0x620305bc, 0x71a19dcb, 0x45463552, 0x56e4ad25, - 0x2c896460, 0x3f2bfc17, 0x0bcc548e, 0x186eccf9, - 0xc0d23785, 0xd370aff2, 0xe797076b, 0xf4359f1c, - 0x8e585659, 0x9dface2e, 0xa91d66b7, 0xbabffec0, - 0x5dc6f43d, 0x4e646c4a, 0x7a83c4d3, 0x69215ca4, - 0x134c95e1, 0x00ee0d96, 0x3409a50f, 0x27ab3d78, - 0x809c2506, 0x933ebd71, 0xa7d915e8, 0xb47b8d9f, - 0xce1644da, 0xddb4dcad, 0xe9537434, 0xfaf1ec43, - 0x1d88e6be, 0x0e2a7ec9, 0x3acdd650, 0x296f4e27, - 0x53028762, 0x40a01f15, 0x7447b78c, 0x67e52ffb, - 0xbf59d487, 0xacfb4cf0, 0x981ce469, 0x8bbe7c1e, - 0xf1d3b55b, 0xe2712d2c, 0xd69685b5, 0xc5341dc2, - 0x224d173f, 0x31ef8f48, 0x050827d1, 0x16aabfa6, - 0x6cc776e3, 0x7f65ee94, 0x4b82460d, 0x5820de7a, - 0xfbc3faf9, 0xe861628e, 0xdc86ca17, 0xcf245260, - 0xb5499b25, 0xa6eb0352, 0x920cabcb, 0x81ae33bc, - 0x66d73941, 0x7575a136, 0x419209af, 0x523091d8, - 0x285d589d, 0x3bffc0ea, 0x0f186873, 0x1cbaf004, - 0xc4060b78, 0xd7a4930f, 0xe3433b96, 0xf0e1a3e1, - 0x8a8c6aa4, 0x992ef2d3, 0xadc95a4a, 0xbe6bc23d, - 0x5912c8c0, 0x4ab050b7, 0x7e57f82e, 0x6df56059, - 0x1798a91c, 0x043a316b, 0x30dd99f2, 0x237f0185, - 0x844819fb, 0x97ea818c, 0xa30d2915, 0xb0afb162, - 0xcac27827, 0xd960e050, 0xed8748c9, 0xfe25d0be, - 0x195cda43, 0x0afe4234, 0x3e19eaad, 0x2dbb72da, - 0x57d6bb9f, 0x447423e8, 0x70938b71, 0x63311306, - 0xbb8de87a, 0xa82f700d, 0x9cc8d894, 0x8f6a40e3, - 0xf50789a6, 0xe6a511d1, 0xd242b948, 0xc1e0213f, - 0x26992bc2, 0x353bb3b5, 0x01dc1b2c, 0x127e835b, - 0x68134a1e, 0x7bb1d269, 0x4f567af0, 0x5cf4e287, - 0x04d43cfd, 0x1776a48a, 0x23910c13, 0x30339464, - 0x4a5e5d21, 0x59fcc556, 0x6d1b6dcf, 0x7eb9f5b8, - 0x99c0ff45, 0x8a626732, 0xbe85cfab, 0xad2757dc, - 0xd74a9e99, 0xc4e806ee, 0xf00fae77, 0xe3ad3600, - 0x3b11cd7c, 0x28b3550b, 0x1c54fd92, 0x0ff665e5, - 0x759baca0, 0x663934d7, 0x52de9c4e, 0x417c0439, - 0xa6050ec4, 0xb5a796b3, 0x81403e2a, 0x92e2a65d, - 0xe88f6f18, 0xfb2df76f, 0xcfca5ff6, 0xdc68c781, - 0x7b5fdfff, 0x68fd4788, 0x5c1aef11, 0x4fb87766, - 0x35d5be23, 0x26772654, 0x12908ecd, 0x013216ba, - 0xe64b1c47, 0xf5e98430, 0xc10e2ca9, 0xd2acb4de, - 0xa8c17d9b, 0xbb63e5ec, 0x8f844d75, 0x9c26d502, - 0x449a2e7e, 0x5738b609, 0x63df1e90, 0x707d86e7, - 0x0a104fa2, 0x19b2d7d5, 0x2d557f4c, 0x3ef7e73b, - 0xd98eedc6, 0xca2c75b1, 0xfecbdd28, 0xed69455f, - 0x97048c1a, 0x84a6146d, 0xb041bcf4, 0xa3e32483 -}; -static const uint32_t table2_[256] = { - 0x00000000, 0xa541927e, 0x4f6f520d, 0xea2ec073, - 0x9edea41a, 0x3b9f3664, 0xd1b1f617, 0x74f06469, - 0x38513ec5, 0x9d10acbb, 0x773e6cc8, 0xd27ffeb6, - 0xa68f9adf, 0x03ce08a1, 0xe9e0c8d2, 0x4ca15aac, - 0x70a27d8a, 0xd5e3eff4, 0x3fcd2f87, 0x9a8cbdf9, - 0xee7cd990, 0x4b3d4bee, 0xa1138b9d, 0x045219e3, - 0x48f3434f, 0xedb2d131, 0x079c1142, 0xa2dd833c, - 0xd62de755, 0x736c752b, 0x9942b558, 0x3c032726, - 0xe144fb14, 0x4405696a, 0xae2ba919, 0x0b6a3b67, - 0x7f9a5f0e, 0xdadbcd70, 0x30f50d03, 0x95b49f7d, - 0xd915c5d1, 0x7c5457af, 0x967a97dc, 0x333b05a2, - 0x47cb61cb, 0xe28af3b5, 0x08a433c6, 0xade5a1b8, - 0x91e6869e, 0x34a714e0, 0xde89d493, 0x7bc846ed, - 0x0f382284, 0xaa79b0fa, 0x40577089, 0xe516e2f7, - 0xa9b7b85b, 0x0cf62a25, 0xe6d8ea56, 0x43997828, - 0x37691c41, 0x92288e3f, 0x78064e4c, 0xdd47dc32, - 0xc76580d9, 0x622412a7, 0x880ad2d4, 0x2d4b40aa, - 0x59bb24c3, 0xfcfab6bd, 0x16d476ce, 0xb395e4b0, - 0xff34be1c, 0x5a752c62, 0xb05bec11, 0x151a7e6f, - 0x61ea1a06, 0xc4ab8878, 0x2e85480b, 0x8bc4da75, - 0xb7c7fd53, 0x12866f2d, 0xf8a8af5e, 0x5de93d20, - 0x29195949, 0x8c58cb37, 0x66760b44, 0xc337993a, - 0x8f96c396, 0x2ad751e8, 0xc0f9919b, 0x65b803e5, - 0x1148678c, 0xb409f5f2, 0x5e273581, 0xfb66a7ff, - 0x26217bcd, 0x8360e9b3, 0x694e29c0, 0xcc0fbbbe, - 0xb8ffdfd7, 0x1dbe4da9, 0xf7908dda, 0x52d11fa4, - 0x1e704508, 0xbb31d776, 0x511f1705, 0xf45e857b, - 0x80aee112, 0x25ef736c, 0xcfc1b31f, 0x6a802161, - 0x56830647, 0xf3c29439, 0x19ec544a, 0xbcadc634, - 0xc85da25d, 0x6d1c3023, 0x8732f050, 0x2273622e, - 0x6ed23882, 0xcb93aafc, 0x21bd6a8f, 0x84fcf8f1, - 0xf00c9c98, 0x554d0ee6, 0xbf63ce95, 0x1a225ceb, - 0x8b277743, 0x2e66e53d, 0xc448254e, 0x6109b730, - 0x15f9d359, 0xb0b84127, 0x5a968154, 0xffd7132a, - 0xb3764986, 0x1637dbf8, 0xfc191b8b, 0x595889f5, - 0x2da8ed9c, 0x88e97fe2, 0x62c7bf91, 0xc7862def, - 0xfb850ac9, 0x5ec498b7, 0xb4ea58c4, 0x11abcaba, - 0x655baed3, 0xc01a3cad, 0x2a34fcde, 0x8f756ea0, - 0xc3d4340c, 0x6695a672, 0x8cbb6601, 0x29faf47f, - 0x5d0a9016, 0xf84b0268, 0x1265c21b, 0xb7245065, - 0x6a638c57, 0xcf221e29, 0x250cde5a, 0x804d4c24, - 0xf4bd284d, 0x51fcba33, 0xbbd27a40, 0x1e93e83e, - 0x5232b292, 0xf77320ec, 0x1d5de09f, 0xb81c72e1, - 0xccec1688, 0x69ad84f6, 0x83834485, 0x26c2d6fb, - 0x1ac1f1dd, 0xbf8063a3, 0x55aea3d0, 0xf0ef31ae, - 0x841f55c7, 0x215ec7b9, 0xcb7007ca, 0x6e3195b4, - 0x2290cf18, 0x87d15d66, 0x6dff9d15, 0xc8be0f6b, - 0xbc4e6b02, 0x190ff97c, 0xf321390f, 0x5660ab71, - 0x4c42f79a, 0xe90365e4, 0x032da597, 0xa66c37e9, - 0xd29c5380, 0x77ddc1fe, 0x9df3018d, 0x38b293f3, - 0x7413c95f, 0xd1525b21, 0x3b7c9b52, 0x9e3d092c, - 0xeacd6d45, 0x4f8cff3b, 0xa5a23f48, 0x00e3ad36, - 0x3ce08a10, 0x99a1186e, 0x738fd81d, 0xd6ce4a63, - 0xa23e2e0a, 0x077fbc74, 0xed517c07, 0x4810ee79, - 0x04b1b4d5, 0xa1f026ab, 0x4bdee6d8, 0xee9f74a6, - 0x9a6f10cf, 0x3f2e82b1, 0xd50042c2, 0x7041d0bc, - 0xad060c8e, 0x08479ef0, 0xe2695e83, 0x4728ccfd, - 0x33d8a894, 0x96993aea, 0x7cb7fa99, 0xd9f668e7, - 0x9557324b, 0x3016a035, 0xda386046, 0x7f79f238, - 0x0b899651, 0xaec8042f, 0x44e6c45c, 0xe1a75622, - 0xdda47104, 0x78e5e37a, 0x92cb2309, 0x378ab177, - 0x437ad51e, 0xe63b4760, 0x0c158713, 0xa954156d, - 0xe5f54fc1, 0x40b4ddbf, 0xaa9a1dcc, 0x0fdb8fb2, - 0x7b2bebdb, 0xde6a79a5, 0x3444b9d6, 0x91052ba8 -}; -static const uint32_t table3_[256] = { - 0x00000000, 0xdd45aab8, 0xbf672381, 0x62228939, - 0x7b2231f3, 0xa6679b4b, 0xc4451272, 0x1900b8ca, - 0xf64463e6, 0x2b01c95e, 0x49234067, 0x9466eadf, - 0x8d665215, 0x5023f8ad, 0x32017194, 0xef44db2c, - 0xe964b13d, 0x34211b85, 0x560392bc, 0x8b463804, - 0x924680ce, 0x4f032a76, 0x2d21a34f, 0xf06409f7, - 0x1f20d2db, 0xc2657863, 0xa047f15a, 0x7d025be2, - 0x6402e328, 0xb9474990, 0xdb65c0a9, 0x06206a11, - 0xd725148b, 0x0a60be33, 0x6842370a, 0xb5079db2, - 0xac072578, 0x71428fc0, 0x136006f9, 0xce25ac41, - 0x2161776d, 0xfc24ddd5, 0x9e0654ec, 0x4343fe54, - 0x5a43469e, 0x8706ec26, 0xe524651f, 0x3861cfa7, - 0x3e41a5b6, 0xe3040f0e, 0x81268637, 0x5c632c8f, - 0x45639445, 0x98263efd, 0xfa04b7c4, 0x27411d7c, - 0xc805c650, 0x15406ce8, 0x7762e5d1, 0xaa274f69, - 0xb327f7a3, 0x6e625d1b, 0x0c40d422, 0xd1057e9a, - 0xaba65fe7, 0x76e3f55f, 0x14c17c66, 0xc984d6de, - 0xd0846e14, 0x0dc1c4ac, 0x6fe34d95, 0xb2a6e72d, - 0x5de23c01, 0x80a796b9, 0xe2851f80, 0x3fc0b538, - 0x26c00df2, 0xfb85a74a, 0x99a72e73, 0x44e284cb, - 0x42c2eeda, 0x9f874462, 0xfda5cd5b, 0x20e067e3, - 0x39e0df29, 0xe4a57591, 0x8687fca8, 0x5bc25610, - 0xb4868d3c, 0x69c32784, 0x0be1aebd, 0xd6a40405, - 0xcfa4bccf, 0x12e11677, 0x70c39f4e, 0xad8635f6, - 0x7c834b6c, 0xa1c6e1d4, 0xc3e468ed, 0x1ea1c255, - 0x07a17a9f, 0xdae4d027, 0xb8c6591e, 0x6583f3a6, - 0x8ac7288a, 0x57828232, 0x35a00b0b, 0xe8e5a1b3, - 0xf1e51979, 0x2ca0b3c1, 0x4e823af8, 0x93c79040, - 0x95e7fa51, 0x48a250e9, 0x2a80d9d0, 0xf7c57368, - 0xeec5cba2, 0x3380611a, 0x51a2e823, 0x8ce7429b, - 0x63a399b7, 0xbee6330f, 0xdcc4ba36, 0x0181108e, - 0x1881a844, 0xc5c402fc, 0xa7e68bc5, 0x7aa3217d, - 0x52a0c93f, 0x8fe56387, 0xedc7eabe, 0x30824006, - 0x2982f8cc, 0xf4c75274, 0x96e5db4d, 0x4ba071f5, - 0xa4e4aad9, 0x79a10061, 0x1b838958, 0xc6c623e0, - 0xdfc69b2a, 0x02833192, 0x60a1b8ab, 0xbde41213, - 0xbbc47802, 0x6681d2ba, 0x04a35b83, 0xd9e6f13b, - 0xc0e649f1, 0x1da3e349, 0x7f816a70, 0xa2c4c0c8, - 0x4d801be4, 0x90c5b15c, 0xf2e73865, 0x2fa292dd, - 0x36a22a17, 0xebe780af, 0x89c50996, 0x5480a32e, - 0x8585ddb4, 0x58c0770c, 0x3ae2fe35, 0xe7a7548d, - 0xfea7ec47, 0x23e246ff, 0x41c0cfc6, 0x9c85657e, - 0x73c1be52, 0xae8414ea, 0xcca69dd3, 0x11e3376b, - 0x08e38fa1, 0xd5a62519, 0xb784ac20, 0x6ac10698, - 0x6ce16c89, 0xb1a4c631, 0xd3864f08, 0x0ec3e5b0, - 0x17c35d7a, 0xca86f7c2, 0xa8a47efb, 0x75e1d443, - 0x9aa50f6f, 0x47e0a5d7, 0x25c22cee, 0xf8878656, - 0xe1873e9c, 0x3cc29424, 0x5ee01d1d, 0x83a5b7a5, - 0xf90696d8, 0x24433c60, 0x4661b559, 0x9b241fe1, - 0x8224a72b, 0x5f610d93, 0x3d4384aa, 0xe0062e12, - 0x0f42f53e, 0xd2075f86, 0xb025d6bf, 0x6d607c07, - 0x7460c4cd, 0xa9256e75, 0xcb07e74c, 0x16424df4, - 0x106227e5, 0xcd278d5d, 0xaf050464, 0x7240aedc, - 0x6b401616, 0xb605bcae, 0xd4273597, 0x09629f2f, - 0xe6264403, 0x3b63eebb, 0x59416782, 0x8404cd3a, - 0x9d0475f0, 0x4041df48, 0x22635671, 0xff26fcc9, - 0x2e238253, 0xf36628eb, 0x9144a1d2, 0x4c010b6a, - 0x5501b3a0, 0x88441918, 0xea669021, 0x37233a99, - 0xd867e1b5, 0x05224b0d, 0x6700c234, 0xba45688c, - 0xa345d046, 0x7e007afe, 0x1c22f3c7, 0xc167597f, - 0xc747336e, 0x1a0299d6, 0x782010ef, 0xa565ba57, - 0xbc65029d, 0x6120a825, 0x0302211c, 0xde478ba4, - 0x31035088, 0xec46fa30, 0x8e647309, 0x5321d9b1, - 0x4a21617b, 0x9764cbc3, 0xf54642fa, 0x2803e842 -}; - -// Used to fetch a naturally-aligned 32-bit word in little endian byte-order -static inline uint32_t LE_LOAD32(const uint8_t *p) { - return DecodeFixed32(reinterpret_cast(p)); -} - -uint32_t Extend(uint32_t crc, const char* buf, size_t size) { - const uint8_t *p = reinterpret_cast(buf); - const uint8_t *e = p + size; - uint32_t l = crc ^ 0xffffffffu; - -#define STEP1 do { \ - int c = (l & 0xff) ^ *p++; \ - l = table0_[c] ^ (l >> 8); \ -} while (0) -#define STEP4 do { \ - uint32_t c = l ^ LE_LOAD32(p); \ - p += 4; \ - l = table3_[c & 0xff] ^ \ - table2_[(c >> 8) & 0xff] ^ \ - table1_[(c >> 16) & 0xff] ^ \ - table0_[c >> 24]; \ -} while (0) - - // Point x at first 4-byte aligned byte in string. This might be - // just past the end of the string. - const uintptr_t pval = reinterpret_cast(p); - const uint8_t* x = reinterpret_cast(((pval + 3) >> 2) << 2); - if (x <= e) { - // Process bytes until finished or p is 4-byte aligned - while (p != x) { - STEP1; - } - } - // Process bytes 16 at a time - while ((e-p) >= 16) { - STEP4; STEP4; STEP4; STEP4; - } - // Process bytes 4 at a time - while ((e-p) >= 4) { - STEP4; - } - // Process the last few bytes - while (p != e) { - STEP1; - } -#undef STEP4 -#undef STEP1 - return l ^ 0xffffffffu; -} - -} // namespace crc32c -} // namespace leveldb diff --git a/src/leveldb/util/crc32c.h b/src/leveldb/util/crc32c.h deleted file mode 100644 index 1d7e5c075d..0000000000 --- a/src/leveldb/util/crc32c.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_CRC32C_H_ -#define STORAGE_LEVELDB_UTIL_CRC32C_H_ - -#include -#include - -namespace leveldb { -namespace crc32c { - -// Return the crc32c of concat(A, data[0,n-1]) where init_crc is the -// crc32c of some string A. Extend() is often used to maintain the -// crc32c of a stream of data. -extern uint32_t Extend(uint32_t init_crc, const char* data, size_t n); - -// Return the crc32c of data[0,n-1] -inline uint32_t Value(const char* data, size_t n) { - return Extend(0, data, n); -} - -static const uint32_t kMaskDelta = 0xa282ead8ul; - -// Return a masked representation of crc. -// -// Motivation: it is problematic to compute the CRC of a string that -// contains embedded CRCs. Therefore we recommend that CRCs stored -// somewhere (e.g., in files) should be masked before being stored. -inline uint32_t Mask(uint32_t crc) { - // Rotate right by 15 bits and add a constant. - return ((crc >> 15) | (crc << 17)) + kMaskDelta; -} - -// Return the crc whose masked representation is masked_crc. -inline uint32_t Unmask(uint32_t masked_crc) { - uint32_t rot = masked_crc - kMaskDelta; - return ((rot >> 17) | (rot << 15)); -} - -} // namespace crc32c -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_CRC32C_H_ diff --git a/src/leveldb/util/crc32c_test.cc b/src/leveldb/util/crc32c_test.cc deleted file mode 100644 index 4b957ee120..0000000000 --- a/src/leveldb/util/crc32c_test.cc +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/crc32c.h" -#include "util/testharness.h" - -namespace leveldb { -namespace crc32c { - -class CRC { }; - -TEST(CRC, StandardResults) { - // From rfc3720 section B.4. - char buf[32]; - - memset(buf, 0, sizeof(buf)); - ASSERT_EQ(0x8a9136aa, Value(buf, sizeof(buf))); - - memset(buf, 0xff, sizeof(buf)); - ASSERT_EQ(0x62a8ab43, Value(buf, sizeof(buf))); - - for (int i = 0; i < 32; i++) { - buf[i] = i; - } - ASSERT_EQ(0x46dd794e, Value(buf, sizeof(buf))); - - for (int i = 0; i < 32; i++) { - buf[i] = 31 - i; - } - ASSERT_EQ(0x113fdb5c, Value(buf, sizeof(buf))); - - unsigned char data[48] = { - 0x01, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x00, 0x18, - 0x28, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; - ASSERT_EQ(0xd9963a56, Value(reinterpret_cast(data), sizeof(data))); -} - -TEST(CRC, Values) { - ASSERT_NE(Value("a", 1), Value("foo", 3)); -} - -TEST(CRC, Extend) { - ASSERT_EQ(Value("hello world", 11), - Extend(Value("hello ", 6), "world", 5)); -} - -TEST(CRC, Mask) { - uint32_t crc = Value("foo", 3); - ASSERT_NE(crc, Mask(crc)); - ASSERT_NE(crc, Mask(Mask(crc))); - ASSERT_EQ(crc, Unmask(Mask(crc))); - ASSERT_EQ(crc, Unmask(Unmask(Mask(Mask(crc))))); -} - -} // namespace crc32c -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/util/env.cc b/src/leveldb/util/env.cc deleted file mode 100644 index c2600e964a..0000000000 --- a/src/leveldb/util/env.cc +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/env.h" - -namespace leveldb { - -Env::~Env() { -} - -SequentialFile::~SequentialFile() { -} - -RandomAccessFile::~RandomAccessFile() { -} - -WritableFile::~WritableFile() { -} - -Logger::~Logger() { -} - -FileLock::~FileLock() { -} - -void Log(Logger* info_log, const char* format, ...) { - if (info_log != NULL) { - va_list ap; - va_start(ap, format); - info_log->Logv(format, ap); - va_end(ap); - } -} - -static Status DoWriteStringToFile(Env* env, const Slice& data, - const std::string& fname, - bool should_sync) { - WritableFile* file; - Status s = env->NewWritableFile(fname, &file); - if (!s.ok()) { - return s; - } - s = file->Append(data); - if (s.ok() && should_sync) { - s = file->Sync(); - } - if (s.ok()) { - s = file->Close(); - } - delete file; // Will auto-close if we did not close above - if (!s.ok()) { - env->DeleteFile(fname); - } - return s; -} - -Status WriteStringToFile(Env* env, const Slice& data, - const std::string& fname) { - return DoWriteStringToFile(env, data, fname, false); -} - -Status WriteStringToFileSync(Env* env, const Slice& data, - const std::string& fname) { - return DoWriteStringToFile(env, data, fname, true); -} - -Status ReadFileToString(Env* env, const std::string& fname, std::string* data) { - data->clear(); - SequentialFile* file; - Status s = env->NewSequentialFile(fname, &file); - if (!s.ok()) { - return s; - } - static const int kBufferSize = 8192; - char* space = new char[kBufferSize]; - while (true) { - Slice fragment; - s = file->Read(kBufferSize, &fragment, space); - if (!s.ok()) { - break; - } - data->append(fragment.data(), fragment.size()); - if (fragment.empty()) { - break; - } - } - delete[] space; - delete file; - return s; -} - -EnvWrapper::~EnvWrapper() { -} - -} // namespace leveldb diff --git a/src/leveldb/util/env_posix.cc b/src/leveldb/util/env_posix.cc deleted file mode 100644 index ba2667864a..0000000000 --- a/src/leveldb/util/env_posix.cc +++ /dev/null @@ -1,608 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -#if !defined(LEVELDB_PLATFORM_WINDOWS) - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "leveldb/env.h" -#include "leveldb/slice.h" -#include "port/port.h" -#include "util/logging.h" -#include "util/mutexlock.h" -#include "util/posix_logger.h" - -namespace leveldb { - -namespace { - -static Status IOError(const std::string& context, int err_number) { - return Status::IOError(context, strerror(err_number)); -} - -class PosixSequentialFile: public SequentialFile { - private: - std::string filename_; - FILE* file_; - - public: - PosixSequentialFile(const std::string& fname, FILE* f) - : filename_(fname), file_(f) { } - virtual ~PosixSequentialFile() { fclose(file_); } - - virtual Status Read(size_t n, Slice* result, char* scratch) { - Status s; - size_t r = fread_unlocked(scratch, 1, n, file_); - *result = Slice(scratch, r); - if (r < n) { - if (feof(file_)) { - // We leave status as ok if we hit the end of the file - } else { - // A partial read with an error: return a non-ok status - s = IOError(filename_, errno); - } - } - return s; - } - - virtual Status Skip(uint64_t n) { - if (fseek(file_, n, SEEK_CUR)) { - return IOError(filename_, errno); - } - return Status::OK(); - } -}; - -// pread() based random-access -class PosixRandomAccessFile: public RandomAccessFile { - private: - std::string filename_; - int fd_; - - public: - PosixRandomAccessFile(const std::string& fname, int fd) - : filename_(fname), fd_(fd) { } - virtual ~PosixRandomAccessFile() { close(fd_); } - - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const { - Status s; - ssize_t r = pread(fd_, scratch, n, static_cast(offset)); - *result = Slice(scratch, (r < 0) ? 0 : r); - if (r < 0) { - // An error: return a non-ok status - s = IOError(filename_, errno); - } - return s; - } -}; - -// Helper class to limit mmap file usage so that we do not end up -// running out virtual memory or running into kernel performance -// problems for very large databases. -class MmapLimiter { - public: - // Up to 1000 mmaps for 64-bit binaries; none for smaller pointer sizes. - MmapLimiter() { - SetAllowed(sizeof(void*) >= 8 ? 1000 : 0); - } - - // If another mmap slot is available, acquire it and return true. - // Else return false. - bool Acquire() { - if (GetAllowed() <= 0) { - return false; - } - MutexLock l(&mu_); - intptr_t x = GetAllowed(); - if (x <= 0) { - return false; - } else { - SetAllowed(x - 1); - return true; - } - } - - // Release a slot acquired by a previous call to Acquire() that returned true. - void Release() { - MutexLock l(&mu_); - SetAllowed(GetAllowed() + 1); - } - - private: - port::Mutex mu_; - port::AtomicPointer allowed_; - - intptr_t GetAllowed() const { - return reinterpret_cast(allowed_.Acquire_Load()); - } - - // REQUIRES: mu_ must be held - void SetAllowed(intptr_t v) { - allowed_.Release_Store(reinterpret_cast(v)); - } - - MmapLimiter(const MmapLimiter&); - void operator=(const MmapLimiter&); -}; - -// mmap() based random-access -class PosixMmapReadableFile: public RandomAccessFile { - private: - std::string filename_; - void* mmapped_region_; - size_t length_; - MmapLimiter* limiter_; - - public: - // base[0,length-1] contains the mmapped contents of the file. - PosixMmapReadableFile(const std::string& fname, void* base, size_t length, - MmapLimiter* limiter) - : filename_(fname), mmapped_region_(base), length_(length), - limiter_(limiter) { - } - - virtual ~PosixMmapReadableFile() { - munmap(mmapped_region_, length_); - limiter_->Release(); - } - - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const { - Status s; - if (offset + n > length_) { - *result = Slice(); - s = IOError(filename_, EINVAL); - } else { - *result = Slice(reinterpret_cast(mmapped_region_) + offset, n); - } - return s; - } -}; - -class PosixWritableFile : public WritableFile { - private: - std::string filename_; - FILE* file_; - - public: - PosixWritableFile(const std::string& fname, FILE* f) - : filename_(fname), file_(f) { } - - ~PosixWritableFile() { - if (file_ != NULL) { - // Ignoring any potential errors - fclose(file_); - } - } - - virtual Status Append(const Slice& data) { - size_t r = fwrite_unlocked(data.data(), 1, data.size(), file_); - if (r != data.size()) { - return IOError(filename_, errno); - } - return Status::OK(); - } - - virtual Status Close() { - Status result; - if (fclose(file_) != 0) { - result = IOError(filename_, errno); - } - file_ = NULL; - return result; - } - - virtual Status Flush() { - if (fflush_unlocked(file_) != 0) { - return IOError(filename_, errno); - } - return Status::OK(); - } - - Status SyncDirIfManifest() { - const char* f = filename_.c_str(); - const char* sep = strrchr(f, '/'); - Slice basename; - std::string dir; - if (sep == NULL) { - dir = "."; - basename = f; - } else { - dir = std::string(f, sep - f); - basename = sep + 1; - } - Status s; - if (basename.starts_with("MANIFEST")) { - int fd = open(dir.c_str(), O_RDONLY); - if (fd < 0) { - s = IOError(dir, errno); - } else { - if (fsync(fd) < 0) { - s = IOError(dir, errno); - } - close(fd); - } - } - return s; - } - - virtual Status Sync() { - // Ensure new files referred to by the manifest are in the filesystem. - Status s = SyncDirIfManifest(); - if (!s.ok()) { - return s; - } - if (fflush_unlocked(file_) != 0 || - fdatasync(fileno(file_)) != 0) { - s = Status::IOError(filename_, strerror(errno)); - } - return s; - } -}; - -static int LockOrUnlock(int fd, bool lock) { - errno = 0; - struct flock f; - memset(&f, 0, sizeof(f)); - f.l_type = (lock ? F_WRLCK : F_UNLCK); - f.l_whence = SEEK_SET; - f.l_start = 0; - f.l_len = 0; // Lock/unlock entire file - return fcntl(fd, F_SETLK, &f); -} - -class PosixFileLock : public FileLock { - public: - int fd_; - std::string name_; -}; - -// Set of locked files. We keep a separate set instead of just -// relying on fcntrl(F_SETLK) since fcntl(F_SETLK) does not provide -// any protection against multiple uses from the same process. -class PosixLockTable { - private: - port::Mutex mu_; - std::set locked_files_; - public: - bool Insert(const std::string& fname) { - MutexLock l(&mu_); - return locked_files_.insert(fname).second; - } - void Remove(const std::string& fname) { - MutexLock l(&mu_); - locked_files_.erase(fname); - } -}; - -class PosixEnv : public Env { - public: - PosixEnv(); - virtual ~PosixEnv() { - char msg[] = "Destroying Env::Default()\n"; - fwrite(msg, 1, sizeof(msg), stderr); - abort(); - } - - virtual Status NewSequentialFile(const std::string& fname, - SequentialFile** result) { - FILE* f = fopen(fname.c_str(), "r"); - if (f == NULL) { - *result = NULL; - return IOError(fname, errno); - } else { - *result = new PosixSequentialFile(fname, f); - return Status::OK(); - } - } - - virtual Status NewRandomAccessFile(const std::string& fname, - RandomAccessFile** result) { - *result = NULL; - Status s; - int fd = open(fname.c_str(), O_RDONLY); - if (fd < 0) { - s = IOError(fname, errno); - } else if (mmap_limit_.Acquire()) { - uint64_t size; - s = GetFileSize(fname, &size); - if (s.ok()) { - void* base = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); - if (base != MAP_FAILED) { - *result = new PosixMmapReadableFile(fname, base, size, &mmap_limit_); - } else { - s = IOError(fname, errno); - } - } - close(fd); - if (!s.ok()) { - mmap_limit_.Release(); - } - } else { - *result = new PosixRandomAccessFile(fname, fd); - } - return s; - } - - virtual Status NewWritableFile(const std::string& fname, - WritableFile** result) { - Status s; - FILE* f = fopen(fname.c_str(), "w"); - if (f == NULL) { - *result = NULL; - s = IOError(fname, errno); - } else { - *result = new PosixWritableFile(fname, f); - } - return s; - } - - virtual bool FileExists(const std::string& fname) { - return access(fname.c_str(), F_OK) == 0; - } - - virtual Status GetChildren(const std::string& dir, - std::vector* result) { - result->clear(); - DIR* d = opendir(dir.c_str()); - if (d == NULL) { - return IOError(dir, errno); - } - struct dirent* entry; - while ((entry = readdir(d)) != NULL) { - result->push_back(entry->d_name); - } - closedir(d); - return Status::OK(); - } - - virtual Status DeleteFile(const std::string& fname) { - Status result; - if (unlink(fname.c_str()) != 0) { - result = IOError(fname, errno); - } - return result; - } - - virtual Status CreateDir(const std::string& name) { - Status result; - if (mkdir(name.c_str(), 0755) != 0) { - result = IOError(name, errno); - } - return result; - } - - virtual Status DeleteDir(const std::string& name) { - Status result; - if (rmdir(name.c_str()) != 0) { - result = IOError(name, errno); - } - return result; - } - - virtual Status GetFileSize(const std::string& fname, uint64_t* size) { - Status s; - struct stat sbuf; - if (stat(fname.c_str(), &sbuf) != 0) { - *size = 0; - s = IOError(fname, errno); - } else { - *size = sbuf.st_size; - } - return s; - } - - virtual Status RenameFile(const std::string& src, const std::string& target) { - Status result; - if (rename(src.c_str(), target.c_str()) != 0) { - result = IOError(src, errno); - } - return result; - } - - virtual Status LockFile(const std::string& fname, FileLock** lock) { - *lock = NULL; - Status result; - int fd = open(fname.c_str(), O_RDWR | O_CREAT, 0644); - if (fd < 0) { - result = IOError(fname, errno); - } else if (!locks_.Insert(fname)) { - close(fd); - result = Status::IOError("lock " + fname, "already held by process"); - } else if (LockOrUnlock(fd, true) == -1) { - result = IOError("lock " + fname, errno); - close(fd); - locks_.Remove(fname); - } else { - PosixFileLock* my_lock = new PosixFileLock; - my_lock->fd_ = fd; - my_lock->name_ = fname; - *lock = my_lock; - } - return result; - } - - virtual Status UnlockFile(FileLock* lock) { - PosixFileLock* my_lock = reinterpret_cast(lock); - Status result; - if (LockOrUnlock(my_lock->fd_, false) == -1) { - result = IOError("unlock", errno); - } - locks_.Remove(my_lock->name_); - close(my_lock->fd_); - delete my_lock; - return result; - } - - virtual void Schedule(void (*function)(void*), void* arg); - - virtual void StartThread(void (*function)(void* arg), void* arg); - - virtual Status GetTestDirectory(std::string* result) { - const char* env = getenv("TEST_TMPDIR"); - if (env && env[0] != '\0') { - *result = env; - } else { - char buf[100]; - snprintf(buf, sizeof(buf), "/tmp/leveldbtest-%d", int(geteuid())); - *result = buf; - } - // Directory may already exist - CreateDir(*result); - return Status::OK(); - } - - static uint64_t gettid() { - pthread_t tid = pthread_self(); - uint64_t thread_id = 0; - memcpy(&thread_id, &tid, std::min(sizeof(thread_id), sizeof(tid))); - return thread_id; - } - - virtual Status NewLogger(const std::string& fname, Logger** result) { - FILE* f = fopen(fname.c_str(), "w"); - if (f == NULL) { - *result = NULL; - return IOError(fname, errno); - } else { - *result = new PosixLogger(f, &PosixEnv::gettid); - return Status::OK(); - } - } - - virtual uint64_t NowMicros() { - struct timeval tv; - gettimeofday(&tv, NULL); - return static_cast(tv.tv_sec) * 1000000 + tv.tv_usec; - } - - virtual void SleepForMicroseconds(int micros) { - usleep(micros); - } - - private: - void PthreadCall(const char* label, int result) { - if (result != 0) { - fprintf(stderr, "pthread %s: %s\n", label, strerror(result)); - abort(); - } - } - - // BGThread() is the body of the background thread - void BGThread(); - static void* BGThreadWrapper(void* arg) { - reinterpret_cast(arg)->BGThread(); - return NULL; - } - - pthread_mutex_t mu_; - pthread_cond_t bgsignal_; - pthread_t bgthread_; - bool started_bgthread_; - - // Entry per Schedule() call - struct BGItem { void* arg; void (*function)(void*); }; - typedef std::deque BGQueue; - BGQueue queue_; - - PosixLockTable locks_; - MmapLimiter mmap_limit_; -}; - -PosixEnv::PosixEnv() : started_bgthread_(false) { - PthreadCall("mutex_init", pthread_mutex_init(&mu_, NULL)); - PthreadCall("cvar_init", pthread_cond_init(&bgsignal_, NULL)); -} - -void PosixEnv::Schedule(void (*function)(void*), void* arg) { - PthreadCall("lock", pthread_mutex_lock(&mu_)); - - // Start background thread if necessary - if (!started_bgthread_) { - started_bgthread_ = true; - PthreadCall( - "create thread", - pthread_create(&bgthread_, NULL, &PosixEnv::BGThreadWrapper, this)); - } - - // If the queue is currently empty, the background thread may currently be - // waiting. - if (queue_.empty()) { - PthreadCall("signal", pthread_cond_signal(&bgsignal_)); - } - - // Add to priority queue - queue_.push_back(BGItem()); - queue_.back().function = function; - queue_.back().arg = arg; - - PthreadCall("unlock", pthread_mutex_unlock(&mu_)); -} - -void PosixEnv::BGThread() { - while (true) { - // Wait until there is an item that is ready to run - PthreadCall("lock", pthread_mutex_lock(&mu_)); - while (queue_.empty()) { - PthreadCall("wait", pthread_cond_wait(&bgsignal_, &mu_)); - } - - void (*function)(void*) = queue_.front().function; - void* arg = queue_.front().arg; - queue_.pop_front(); - - PthreadCall("unlock", pthread_mutex_unlock(&mu_)); - (*function)(arg); - } -} - -namespace { -struct StartThreadState { - void (*user_function)(void*); - void* arg; -}; -} -static void* StartThreadWrapper(void* arg) { - StartThreadState* state = reinterpret_cast(arg); - state->user_function(state->arg); - delete state; - return NULL; -} - -void PosixEnv::StartThread(void (*function)(void* arg), void* arg) { - pthread_t t; - StartThreadState* state = new StartThreadState; - state->user_function = function; - state->arg = arg; - PthreadCall("start thread", - pthread_create(&t, NULL, &StartThreadWrapper, state)); -} - -} // namespace - -static pthread_once_t once = PTHREAD_ONCE_INIT; -static Env* default_env; -static void InitDefaultEnv() { default_env = new PosixEnv; } - -Env* Env::Default() { - pthread_once(&once, InitDefaultEnv); - return default_env; -} - -} // namespace leveldb - -#endif diff --git a/src/leveldb/util/env_test.cc b/src/leveldb/util/env_test.cc deleted file mode 100644 index b72cb44384..0000000000 --- a/src/leveldb/util/env_test.cc +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/env.h" - -#include "port/port.h" -#include "util/testharness.h" - -namespace leveldb { - -static const int kDelayMicros = 100000; - -class EnvPosixTest { - private: - port::Mutex mu_; - std::string events_; - - public: - Env* env_; - EnvPosixTest() : env_(Env::Default()) { } -}; - -static void SetBool(void* ptr) { - reinterpret_cast(ptr)->NoBarrier_Store(ptr); -} - -TEST(EnvPosixTest, RunImmediately) { - port::AtomicPointer called (NULL); - env_->Schedule(&SetBool, &called); - Env::Default()->SleepForMicroseconds(kDelayMicros); - ASSERT_TRUE(called.NoBarrier_Load() != NULL); -} - -TEST(EnvPosixTest, RunMany) { - port::AtomicPointer last_id (NULL); - - struct CB { - port::AtomicPointer* last_id_ptr; // Pointer to shared slot - uintptr_t id; // Order# for the execution of this callback - - CB(port::AtomicPointer* p, int i) : last_id_ptr(p), id(i) { } - - static void Run(void* v) { - CB* cb = reinterpret_cast(v); - void* cur = cb->last_id_ptr->NoBarrier_Load(); - ASSERT_EQ(cb->id-1, reinterpret_cast(cur)); - cb->last_id_ptr->Release_Store(reinterpret_cast(cb->id)); - } - }; - - // Schedule in different order than start time - CB cb1(&last_id, 1); - CB cb2(&last_id, 2); - CB cb3(&last_id, 3); - CB cb4(&last_id, 4); - env_->Schedule(&CB::Run, &cb1); - env_->Schedule(&CB::Run, &cb2); - env_->Schedule(&CB::Run, &cb3); - env_->Schedule(&CB::Run, &cb4); - - Env::Default()->SleepForMicroseconds(kDelayMicros); - void* cur = last_id.Acquire_Load(); - ASSERT_EQ(4, reinterpret_cast(cur)); -} - -struct State { - port::Mutex mu; - int val; - int num_running; -}; - -static void ThreadBody(void* arg) { - State* s = reinterpret_cast(arg); - s->mu.Lock(); - s->val += 1; - s->num_running -= 1; - s->mu.Unlock(); -} - -TEST(EnvPosixTest, StartThread) { - State state; - state.val = 0; - state.num_running = 3; - for (int i = 0; i < 3; i++) { - env_->StartThread(&ThreadBody, &state); - } - while (true) { - state.mu.Lock(); - int num = state.num_running; - state.mu.Unlock(); - if (num == 0) { - break; - } - Env::Default()->SleepForMicroseconds(kDelayMicros); - } - ASSERT_EQ(state.val, 3); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/util/env_win.cc b/src/leveldb/util/env_win.cc deleted file mode 100644 index e11a96b791..0000000000 --- a/src/leveldb/util/env_win.cc +++ /dev/null @@ -1,873 +0,0 @@ -// This file contains source that originates from: -// http://code.google.com/p/leveldbwin/source/browse/trunk/win32_impl_src/env_win32.h -// http://code.google.com/p/leveldbwin/source/browse/trunk/win32_impl_src/port_win32.cc -// Those files dont' have any explict license headers but the -// project (http://code.google.com/p/leveldbwin/) lists the 'New BSD License' -// as the license. -#if defined(LEVELDB_PLATFORM_WINDOWS) -#include - - -#include "leveldb/env.h" - -#include "port/port.h" -#include "leveldb/slice.h" -#include "util/logging.h" - -#include -#include -#include -#include -#include -#include -#include - -#ifdef max -#undef max -#endif - -#ifndef va_copy -#define va_copy(d,s) ((d) = (s)) -#endif - -#if defined DeleteFile -#undef DeleteFile -#endif - -//Declarations -namespace leveldb -{ - -namespace Win32 -{ - -#define DISALLOW_COPY_AND_ASSIGN(TypeName) \ - TypeName(const TypeName&); \ - void operator=(const TypeName&) - -std::string GetCurrentDir(); -std::wstring GetCurrentDirW(); - -static const std::string CurrentDir = GetCurrentDir(); -static const std::wstring CurrentDirW = GetCurrentDirW(); - -std::string& ModifyPath(std::string& path); -std::wstring& ModifyPath(std::wstring& path); - -std::string GetLastErrSz(); -std::wstring GetLastErrSzW(); - -size_t GetPageSize(); - -typedef void (*ScheduleProc)(void*) ; - -struct WorkItemWrapper -{ - WorkItemWrapper(ScheduleProc proc_,void* content_); - ScheduleProc proc; - void* pContent; -}; - -DWORD WINAPI WorkItemWrapperProc(LPVOID pContent); - -class Win32SequentialFile : public SequentialFile -{ -public: - friend class Win32Env; - virtual ~Win32SequentialFile(); - virtual Status Read(size_t n, Slice* result, char* scratch); - virtual Status Skip(uint64_t n); - BOOL isEnable(); -private: - BOOL _Init(); - void _CleanUp(); - Win32SequentialFile(const std::string& fname); - std::string _filename; - ::HANDLE _hFile; - DISALLOW_COPY_AND_ASSIGN(Win32SequentialFile); -}; - -class Win32RandomAccessFile : public RandomAccessFile -{ -public: - friend class Win32Env; - virtual ~Win32RandomAccessFile(); - virtual Status Read(uint64_t offset, size_t n, Slice* result,char* scratch) const; - BOOL isEnable(); -private: - BOOL _Init(LPCWSTR path); - void _CleanUp(); - Win32RandomAccessFile(const std::string& fname); - HANDLE _hFile; - const std::string _filename; - DISALLOW_COPY_AND_ASSIGN(Win32RandomAccessFile); -}; - -class Win32WritableFile : public WritableFile -{ -public: - Win32WritableFile(const std::string& fname); - ~Win32WritableFile(); - - virtual Status Append(const Slice& data); - virtual Status Close(); - virtual Status Flush(); - virtual Status Sync(); - BOOL isEnable(); -private: - std::string filename_; - ::HANDLE _hFile; -}; - -class Win32FileLock : public FileLock -{ -public: - friend class Win32Env; - virtual ~Win32FileLock(); - BOOL isEnable(); -private: - BOOL _Init(LPCWSTR path); - void _CleanUp(); - Win32FileLock(const std::string& fname); - HANDLE _hFile; - std::string _filename; - DISALLOW_COPY_AND_ASSIGN(Win32FileLock); -}; - -class Win32Logger : public Logger -{ -public: - friend class Win32Env; - virtual ~Win32Logger(); - virtual void Logv(const char* format, va_list ap); -private: - explicit Win32Logger(WritableFile* pFile); - WritableFile* _pFileProxy; - DISALLOW_COPY_AND_ASSIGN(Win32Logger); -}; - -class Win32Env : public Env -{ -public: - Win32Env(); - virtual ~Win32Env(); - virtual Status NewSequentialFile(const std::string& fname, - SequentialFile** result); - - virtual Status NewRandomAccessFile(const std::string& fname, - RandomAccessFile** result); - virtual Status NewWritableFile(const std::string& fname, - WritableFile** result); - - virtual bool FileExists(const std::string& fname); - - virtual Status GetChildren(const std::string& dir, - std::vector* result); - - virtual Status DeleteFile(const std::string& fname); - - virtual Status CreateDir(const std::string& dirname); - - virtual Status DeleteDir(const std::string& dirname); - - virtual Status GetFileSize(const std::string& fname, uint64_t* file_size); - - virtual Status RenameFile(const std::string& src, - const std::string& target); - - virtual Status LockFile(const std::string& fname, FileLock** lock); - - virtual Status UnlockFile(FileLock* lock); - - virtual void Schedule( - void (*function)(void* arg), - void* arg); - - virtual void StartThread(void (*function)(void* arg), void* arg); - - virtual Status GetTestDirectory(std::string* path); - - //virtual void Logv(WritableFile* log, const char* format, va_list ap); - - virtual Status NewLogger(const std::string& fname, Logger** result); - - virtual uint64_t NowMicros(); - - virtual void SleepForMicroseconds(int micros); -}; - -void ToWidePath(const std::string& value, std::wstring& target) { - wchar_t buffer[MAX_PATH]; - MultiByteToWideChar(CP_ACP, 0, value.c_str(), -1, buffer, MAX_PATH); - target = buffer; -} - -void ToNarrowPath(const std::wstring& value, std::string& target) { - char buffer[MAX_PATH]; - WideCharToMultiByte(CP_ACP, 0, value.c_str(), -1, buffer, MAX_PATH, NULL, NULL); - target = buffer; -} - -std::string GetCurrentDir() -{ - CHAR path[MAX_PATH]; - ::GetModuleFileNameA(::GetModuleHandleA(NULL),path,MAX_PATH); - *strrchr(path,'\\') = 0; - return std::string(path); -} - -std::wstring GetCurrentDirW() -{ - WCHAR path[MAX_PATH]; - ::GetModuleFileNameW(::GetModuleHandleW(NULL),path,MAX_PATH); - *wcsrchr(path,L'\\') = 0; - return std::wstring(path); -} - -std::string& ModifyPath(std::string& path) -{ - if(path[0] == '/' || path[0] == '\\'){ - path = CurrentDir + path; - } - std::replace(path.begin(),path.end(),'/','\\'); - - return path; -} - -std::wstring& ModifyPath(std::wstring& path) -{ - if(path[0] == L'/' || path[0] == L'\\'){ - path = CurrentDirW + path; - } - std::replace(path.begin(),path.end(),L'/',L'\\'); - return path; -} - -std::string GetLastErrSz() -{ - LPWSTR lpMsgBuf; - FormatMessageW( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - GetLastError(), - 0, // Default language - (LPWSTR) &lpMsgBuf, - 0, - NULL - ); - std::string Err; - ToNarrowPath(lpMsgBuf, Err); - LocalFree( lpMsgBuf ); - return Err; -} - -std::wstring GetLastErrSzW() -{ - LPVOID lpMsgBuf; - FormatMessageW( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - GetLastError(), - 0, // Default language - (LPWSTR) &lpMsgBuf, - 0, - NULL - ); - std::wstring Err = (LPCWSTR)lpMsgBuf; - LocalFree(lpMsgBuf); - return Err; -} - -WorkItemWrapper::WorkItemWrapper( ScheduleProc proc_,void* content_ ) : - proc(proc_),pContent(content_) -{ - -} - -DWORD WINAPI WorkItemWrapperProc(LPVOID pContent) -{ - WorkItemWrapper* item = static_cast(pContent); - ScheduleProc TempProc = item->proc; - void* arg = item->pContent; - delete item; - TempProc(arg); - return 0; -} - -size_t GetPageSize() -{ - SYSTEM_INFO si; - GetSystemInfo(&si); - return std::max(si.dwPageSize,si.dwAllocationGranularity); -} - -const size_t g_PageSize = GetPageSize(); - - -Win32SequentialFile::Win32SequentialFile( const std::string& fname ) : - _filename(fname),_hFile(NULL) -{ - _Init(); -} - -Win32SequentialFile::~Win32SequentialFile() -{ - _CleanUp(); -} - -Status Win32SequentialFile::Read( size_t n, Slice* result, char* scratch ) -{ - Status sRet; - DWORD hasRead = 0; - if(_hFile && ReadFile(_hFile,scratch,n,&hasRead,NULL) ){ - *result = Slice(scratch,hasRead); - } else { - sRet = Status::IOError(_filename, Win32::GetLastErrSz() ); - } - return sRet; -} - -Status Win32SequentialFile::Skip( uint64_t n ) -{ - Status sRet; - LARGE_INTEGER Move,NowPointer; - Move.QuadPart = n; - if(!SetFilePointerEx(_hFile,Move,&NowPointer,FILE_CURRENT)){ - sRet = Status::IOError(_filename,Win32::GetLastErrSz()); - } - return sRet; -} - -BOOL Win32SequentialFile::isEnable() -{ - return _hFile ? TRUE : FALSE; -} - -BOOL Win32SequentialFile::_Init() -{ - std::wstring path; - ToWidePath(_filename, path); - _hFile = CreateFileW(path.c_str(), - GENERIC_READ, - FILE_SHARE_READ, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - return _hFile ? TRUE : FALSE; -} - -void Win32SequentialFile::_CleanUp() -{ - if(_hFile){ - CloseHandle(_hFile); - _hFile = NULL; - } -} - -Win32RandomAccessFile::Win32RandomAccessFile( const std::string& fname ) : - _filename(fname),_hFile(NULL) -{ - std::wstring path; - ToWidePath(fname, path); - _Init( path.c_str() ); -} - -Win32RandomAccessFile::~Win32RandomAccessFile() -{ - _CleanUp(); -} - -Status Win32RandomAccessFile::Read(uint64_t offset,size_t n,Slice* result,char* scratch) const -{ - Status sRet; - OVERLAPPED ol = {0}; - ZeroMemory(&ol,sizeof(ol)); - ol.Offset = (DWORD)offset; - ol.OffsetHigh = (DWORD)(offset >> 32); - DWORD hasRead = 0; - if(!ReadFile(_hFile,scratch,n,&hasRead,&ol)) - sRet = Status::IOError(_filename,Win32::GetLastErrSz()); - else - *result = Slice(scratch,hasRead); - return sRet; -} - -BOOL Win32RandomAccessFile::_Init( LPCWSTR path ) -{ - BOOL bRet = FALSE; - if(!_hFile) - _hFile = ::CreateFileW(path,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,NULL); - if(!_hFile || _hFile == INVALID_HANDLE_VALUE ) - _hFile = NULL; - else - bRet = TRUE; - return bRet; -} - -BOOL Win32RandomAccessFile::isEnable() -{ - return _hFile ? TRUE : FALSE; -} - -void Win32RandomAccessFile::_CleanUp() -{ - if(_hFile){ - ::CloseHandle(_hFile); - _hFile = NULL; - } -} - -Win32WritableFile::Win32WritableFile(const std::string& fname) - : filename_(fname) -{ - std::wstring path; - ToWidePath(fname, path); - DWORD Flag = PathFileExistsW(path.c_str()) ? OPEN_EXISTING : CREATE_ALWAYS; - _hFile = CreateFileW(path.c_str(), - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE, - NULL, - Flag, - FILE_ATTRIBUTE_NORMAL, - NULL); - // CreateFileW returns INVALID_HANDLE_VALUE in case of error, always check isEnable() before use -} - -Win32WritableFile::~Win32WritableFile() -{ - if (_hFile != INVALID_HANDLE_VALUE) - Close(); -} - -Status Win32WritableFile::Append(const Slice& data) -{ - DWORD r = 0; - if (!WriteFile(_hFile, data.data(), data.size(), &r, NULL) || r != data.size()) { - return Status::IOError("Win32WritableFile.Append::WriteFile: "+filename_, Win32::GetLastErrSz()); - } - return Status::OK(); -} - -Status Win32WritableFile::Close() -{ - if (!CloseHandle(_hFile)) { - return Status::IOError("Win32WritableFile.Close::CloseHandle: "+filename_, Win32::GetLastErrSz()); - } - _hFile = INVALID_HANDLE_VALUE; - return Status::OK(); -} - -Status Win32WritableFile::Flush() -{ - // Nothing to do here, there are no application-side buffers - return Status::OK(); -} - -Status Win32WritableFile::Sync() -{ - if (!FlushFileBuffers(_hFile)) { - return Status::IOError("Win32WritableFile.Sync::FlushFileBuffers "+filename_, Win32::GetLastErrSz()); - } - return Status::OK(); -} - -BOOL Win32WritableFile::isEnable() -{ - return _hFile != INVALID_HANDLE_VALUE; -} - -Win32FileLock::Win32FileLock( const std::string& fname ) : - _hFile(NULL),_filename(fname) -{ - std::wstring path; - ToWidePath(fname, path); - _Init(path.c_str()); -} - -Win32FileLock::~Win32FileLock() -{ - _CleanUp(); -} - -BOOL Win32FileLock::_Init( LPCWSTR path ) -{ - BOOL bRet = FALSE; - if(!_hFile) - _hFile = ::CreateFileW(path,0,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); - if(!_hFile || _hFile == INVALID_HANDLE_VALUE ){ - _hFile = NULL; - } - else - bRet = TRUE; - return bRet; -} - -void Win32FileLock::_CleanUp() -{ - ::CloseHandle(_hFile); - _hFile = NULL; -} - -BOOL Win32FileLock::isEnable() -{ - return _hFile ? TRUE : FALSE; -} - -Win32Logger::Win32Logger(WritableFile* pFile) : _pFileProxy(pFile) -{ - assert(_pFileProxy); -} - -Win32Logger::~Win32Logger() -{ - if(_pFileProxy) - delete _pFileProxy; -} - -void Win32Logger::Logv( const char* format, va_list ap ) -{ - uint64_t thread_id = ::GetCurrentThreadId(); - - // We try twice: the first time with a fixed-size stack allocated buffer, - // and the second time with a much larger dynamically allocated buffer. - char buffer[500]; - for (int iter = 0; iter < 2; iter++) { - char* base; - int bufsize; - if (iter == 0) { - bufsize = sizeof(buffer); - base = buffer; - } else { - bufsize = 30000; - base = new char[bufsize]; - } - char* p = base; - char* limit = base + bufsize; - - SYSTEMTIME st; - GetLocalTime(&st); - p += snprintf(p, limit - p, - "%04d/%02d/%02d-%02d:%02d:%02d.%06d %llx ", - int(st.wYear), - int(st.wMonth), - int(st.wDay), - int(st.wHour), - int(st.wMinute), - int(st.wMinute), - int(st.wMilliseconds), - static_cast(thread_id)); - - // Print the message - if (p < limit) { - va_list backup_ap; - va_copy(backup_ap, ap); - p += vsnprintf(p, limit - p, format, backup_ap); - va_end(backup_ap); - } - - // Truncate to available space if necessary - if (p >= limit) { - if (iter == 0) { - continue; // Try again with larger buffer - } else { - p = limit - 1; - } - } - - // Add newline if necessary - if (p == base || p[-1] != '\n') { - *p++ = '\n'; - } - - assert(p <= limit); - DWORD hasWritten = 0; - if(_pFileProxy){ - _pFileProxy->Append(Slice(base, p - base)); - _pFileProxy->Flush(); - } - if (base != buffer) { - delete[] base; - } - break; - } -} - -bool Win32Env::FileExists(const std::string& fname) -{ - std::string path = fname; - std::wstring wpath; - ToWidePath(ModifyPath(path), wpath); - return ::PathFileExistsW(wpath.c_str()) ? true : false; -} - -Status Win32Env::GetChildren(const std::string& dir, std::vector* result) -{ - Status sRet; - ::WIN32_FIND_DATAW wfd; - std::string path = dir; - ModifyPath(path); - path += "\\*.*"; - std::wstring wpath; - ToWidePath(path, wpath); - - ::HANDLE hFind = ::FindFirstFileW(wpath.c_str() ,&wfd); - if(hFind && hFind != INVALID_HANDLE_VALUE){ - BOOL hasNext = TRUE; - std::string child; - while(hasNext){ - ToNarrowPath(wfd.cFileName, child); - if(child != ".." && child != ".") { - result->push_back(child); - } - hasNext = ::FindNextFileW(hFind,&wfd); - } - ::FindClose(hFind); - } - else - sRet = Status::IOError(dir,"Could not get children."); - return sRet; -} - -void Win32Env::SleepForMicroseconds( int micros ) -{ - ::Sleep((micros + 999) /1000); -} - - -Status Win32Env::DeleteFile( const std::string& fname ) -{ - Status sRet; - std::string path = fname; - std::wstring wpath; - ToWidePath(ModifyPath(path), wpath); - - if(!::DeleteFileW(wpath.c_str())) { - sRet = Status::IOError(path, "Could not delete file."); - } - return sRet; -} - -Status Win32Env::GetFileSize( const std::string& fname, uint64_t* file_size ) -{ - Status sRet; - std::string path = fname; - std::wstring wpath; - ToWidePath(ModifyPath(path), wpath); - - HANDLE file = ::CreateFileW(wpath.c_str(), - GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); - LARGE_INTEGER li; - if(::GetFileSizeEx(file,&li)){ - *file_size = (uint64_t)li.QuadPart; - }else - sRet = Status::IOError(path,"Could not get the file size."); - CloseHandle(file); - return sRet; -} - -Status Win32Env::RenameFile( const std::string& src, const std::string& target ) -{ - Status sRet; - std::string src_path = src; - std::wstring wsrc_path; - ToWidePath(ModifyPath(src_path), wsrc_path); - std::string target_path = target; - std::wstring wtarget_path; - ToWidePath(ModifyPath(target_path), wtarget_path); - - if(!MoveFileW(wsrc_path.c_str(), wtarget_path.c_str() ) ){ - DWORD err = GetLastError(); - if(err == 0x000000b7){ - if(!::DeleteFileW(wtarget_path.c_str() ) ) - sRet = Status::IOError(src, "Could not rename file."); - else if(!::MoveFileW(wsrc_path.c_str(), - wtarget_path.c_str() ) ) - sRet = Status::IOError(src, "Could not rename file."); - } - } - return sRet; -} - -Status Win32Env::LockFile( const std::string& fname, FileLock** lock ) -{ - Status sRet; - std::string path = fname; - ModifyPath(path); - Win32FileLock* _lock = new Win32FileLock(path); - if(!_lock->isEnable()){ - delete _lock; - *lock = NULL; - sRet = Status::IOError(path, "Could not lock file."); - } - else - *lock = _lock; - return sRet; -} - -Status Win32Env::UnlockFile( FileLock* lock ) -{ - Status sRet; - delete lock; - return sRet; -} - -void Win32Env::Schedule( void (*function)(void* arg), void* arg ) -{ - QueueUserWorkItem(Win32::WorkItemWrapperProc, - new Win32::WorkItemWrapper(function,arg), - WT_EXECUTEDEFAULT); -} - -void Win32Env::StartThread( void (*function)(void* arg), void* arg ) -{ - ::_beginthread(function,0,arg); -} - -Status Win32Env::GetTestDirectory( std::string* path ) -{ - Status sRet; - WCHAR TempPath[MAX_PATH]; - ::GetTempPathW(MAX_PATH,TempPath); - ToNarrowPath(TempPath, *path); - path->append("leveldb\\test\\"); - ModifyPath(*path); - return sRet; -} - -uint64_t Win32Env::NowMicros() -{ -#ifndef USE_VISTA_API -#define GetTickCount64 GetTickCount -#endif - return (uint64_t)(GetTickCount64()*1000); -} - -static Status CreateDirInner( const std::string& dirname ) -{ - Status sRet; - DWORD attr = ::GetFileAttributes(dirname.c_str()); - if (attr == INVALID_FILE_ATTRIBUTES) { // doesn't exist: - std::size_t slash = dirname.find_last_of("\\"); - if (slash != std::string::npos){ - sRet = CreateDirInner(dirname.substr(0, slash)); - if (!sRet.ok()) return sRet; - } - BOOL result = ::CreateDirectory(dirname.c_str(), NULL); - if (result == FALSE) { - sRet = Status::IOError(dirname, "Could not create directory."); - return sRet; - } - } - return sRet; -} - -Status Win32Env::CreateDir( const std::string& dirname ) -{ - std::string path = dirname; - if(path[path.length() - 1] != '\\'){ - path += '\\'; - } - ModifyPath(path); - - return CreateDirInner(path); -} - -Status Win32Env::DeleteDir( const std::string& dirname ) -{ - Status sRet; - std::wstring path; - ToWidePath(dirname, path); - ModifyPath(path); - if(!::RemoveDirectoryW( path.c_str() ) ){ - sRet = Status::IOError(dirname, "Could not delete directory."); - } - return sRet; -} - -Status Win32Env::NewSequentialFile( const std::string& fname, SequentialFile** result ) -{ - Status sRet; - std::string path = fname; - ModifyPath(path); - Win32SequentialFile* pFile = new Win32SequentialFile(path); - if(pFile->isEnable()){ - *result = pFile; - }else { - delete pFile; - sRet = Status::IOError(path, Win32::GetLastErrSz()); - } - return sRet; -} - -Status Win32Env::NewRandomAccessFile( const std::string& fname, RandomAccessFile** result ) -{ - Status sRet; - std::string path = fname; - Win32RandomAccessFile* pFile = new Win32RandomAccessFile(ModifyPath(path)); - if(!pFile->isEnable()){ - delete pFile; - *result = NULL; - sRet = Status::IOError(path, Win32::GetLastErrSz()); - }else - *result = pFile; - return sRet; -} - -Status Win32Env::NewLogger( const std::string& fname, Logger** result ) -{ - Status sRet; - std::string path = fname; - Win32WritableFile* pMapFile = new Win32WritableFile(ModifyPath(path)); - if(!pMapFile->isEnable()){ - delete pMapFile; - *result = NULL; - sRet = Status::IOError(path,"could not create a logger."); - }else - *result = new Win32Logger(pMapFile); - return sRet; -} - -Status Win32Env::NewWritableFile( const std::string& fname, WritableFile** result ) -{ - Status sRet; - std::string path = fname; - Win32WritableFile* pFile = new Win32WritableFile(ModifyPath(path)); - if(!pFile->isEnable()){ - *result = NULL; - sRet = Status::IOError(fname,Win32::GetLastErrSz()); - }else - *result = pFile; - return sRet; -} - -Win32Env::Win32Env() -{ - -} - -Win32Env::~Win32Env() -{ - -} - - -} // Win32 namespace - -static port::OnceType once = LEVELDB_ONCE_INIT; -static Env* default_env; -static void InitDefaultEnv() { default_env = new Win32::Win32Env(); } - -Env* Env::Default() { - port::InitOnce(&once, InitDefaultEnv); - return default_env; -} - -} // namespace leveldb - -#endif // defined(LEVELDB_PLATFORM_WINDOWS) diff --git a/src/leveldb/util/filter_policy.cc b/src/leveldb/util/filter_policy.cc deleted file mode 100644 index 7b045c8c91..0000000000 --- a/src/leveldb/util/filter_policy.cc +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/filter_policy.h" - -namespace leveldb { - -FilterPolicy::~FilterPolicy() { } - -} // namespace leveldb diff --git a/src/leveldb/util/hash.cc b/src/leveldb/util/hash.cc deleted file mode 100644 index ed439ce7a2..0000000000 --- a/src/leveldb/util/hash.cc +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include "util/coding.h" -#include "util/hash.h" - -// The FALLTHROUGH_INTENDED macro can be used to annotate implicit fall-through -// between switch labels. The real definition should be provided externally. -// This one is a fallback version for unsupported compilers. -#ifndef FALLTHROUGH_INTENDED -#define FALLTHROUGH_INTENDED do { } while (0) -#endif - -namespace leveldb { - -uint32_t Hash(const char* data, size_t n, uint32_t seed) { - // Similar to murmur hash - const uint32_t m = 0xc6a4a793; - const uint32_t r = 24; - const char* limit = data + n; - uint32_t h = seed ^ (n * m); - - // Pick up four bytes at a time - while (data + 4 <= limit) { - uint32_t w = DecodeFixed32(data); - data += 4; - h += w; - h *= m; - h ^= (h >> 16); - } - - // Pick up remaining bytes - switch (limit - data) { - case 3: - h += static_cast(data[2]) << 16; - FALLTHROUGH_INTENDED; - case 2: - h += static_cast(data[1]) << 8; - FALLTHROUGH_INTENDED; - case 1: - h += static_cast(data[0]); - h *= m; - h ^= (h >> r); - break; - } - return h; -} - - -} // namespace leveldb diff --git a/src/leveldb/util/hash.h b/src/leveldb/util/hash.h deleted file mode 100644 index 8889d56be8..0000000000 --- a/src/leveldb/util/hash.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Simple hash function used for internal data structures - -#ifndef STORAGE_LEVELDB_UTIL_HASH_H_ -#define STORAGE_LEVELDB_UTIL_HASH_H_ - -#include -#include - -namespace leveldb { - -extern uint32_t Hash(const char* data, size_t n, uint32_t seed); - -} - -#endif // STORAGE_LEVELDB_UTIL_HASH_H_ diff --git a/src/leveldb/util/hash_test.cc b/src/leveldb/util/hash_test.cc deleted file mode 100644 index eaa1c92c23..0000000000 --- a/src/leveldb/util/hash_test.cc +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/hash.h" -#include "util/testharness.h" - -namespace leveldb { - -class HASH { }; - -TEST(HASH, SignedUnsignedIssue) { - const unsigned char data1[1] = {0x62}; - const unsigned char data2[2] = {0xc3, 0x97}; - const unsigned char data3[3] = {0xe2, 0x99, 0xa5}; - const unsigned char data4[4] = {0xe1, 0x80, 0xb9, 0x32}; - const unsigned char data5[48] = { - 0x01, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x00, 0x18, - 0x28, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; - - ASSERT_EQ(Hash(0, 0, 0xbc9f1d34), 0xbc9f1d34); - ASSERT_EQ( - Hash(reinterpret_cast(data1), sizeof(data1), 0xbc9f1d34), - 0xef1345c4); - ASSERT_EQ( - Hash(reinterpret_cast(data2), sizeof(data2), 0xbc9f1d34), - 0x5b663814); - ASSERT_EQ( - Hash(reinterpret_cast(data3), sizeof(data3), 0xbc9f1d34), - 0x323c078f); - ASSERT_EQ( - Hash(reinterpret_cast(data4), sizeof(data4), 0xbc9f1d34), - 0xed21633a); - ASSERT_EQ( - Hash(reinterpret_cast(data5), sizeof(data5), 0x12345678), - 0xf333dabb); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/src/leveldb/util/histogram.cc b/src/leveldb/util/histogram.cc deleted file mode 100644 index bb95f583ea..0000000000 --- a/src/leveldb/util/histogram.cc +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include "port/port.h" -#include "util/histogram.h" - -namespace leveldb { - -const double Histogram::kBucketLimit[kNumBuckets] = { - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 25, 30, 35, 40, 45, - 50, 60, 70, 80, 90, 100, 120, 140, 160, 180, 200, 250, 300, 350, 400, 450, - 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, - 3500, 4000, 4500, 5000, 6000, 7000, 8000, 9000, 10000, 12000, 14000, - 16000, 18000, 20000, 25000, 30000, 35000, 40000, 45000, 50000, 60000, - 70000, 80000, 90000, 100000, 120000, 140000, 160000, 180000, 200000, - 250000, 300000, 350000, 400000, 450000, 500000, 600000, 700000, 800000, - 900000, 1000000, 1200000, 1400000, 1600000, 1800000, 2000000, 2500000, - 3000000, 3500000, 4000000, 4500000, 5000000, 6000000, 7000000, 8000000, - 9000000, 10000000, 12000000, 14000000, 16000000, 18000000, 20000000, - 25000000, 30000000, 35000000, 40000000, 45000000, 50000000, 60000000, - 70000000, 80000000, 90000000, 100000000, 120000000, 140000000, 160000000, - 180000000, 200000000, 250000000, 300000000, 350000000, 400000000, - 450000000, 500000000, 600000000, 700000000, 800000000, 900000000, - 1000000000, 1200000000, 1400000000, 1600000000, 1800000000, 2000000000, - 2500000000.0, 3000000000.0, 3500000000.0, 4000000000.0, 4500000000.0, - 5000000000.0, 6000000000.0, 7000000000.0, 8000000000.0, 9000000000.0, - 1e200, -}; - -void Histogram::Clear() { - min_ = kBucketLimit[kNumBuckets-1]; - max_ = 0; - num_ = 0; - sum_ = 0; - sum_squares_ = 0; - for (int i = 0; i < kNumBuckets; i++) { - buckets_[i] = 0; - } -} - -void Histogram::Add(double value) { - // Linear search is fast enough for our usage in db_bench - int b = 0; - while (b < kNumBuckets - 1 && kBucketLimit[b] <= value) { - b++; - } - buckets_[b] += 1.0; - if (min_ > value) min_ = value; - if (max_ < value) max_ = value; - num_++; - sum_ += value; - sum_squares_ += (value * value); -} - -void Histogram::Merge(const Histogram& other) { - if (other.min_ < min_) min_ = other.min_; - if (other.max_ > max_) max_ = other.max_; - num_ += other.num_; - sum_ += other.sum_; - sum_squares_ += other.sum_squares_; - for (int b = 0; b < kNumBuckets; b++) { - buckets_[b] += other.buckets_[b]; - } -} - -double Histogram::Median() const { - return Percentile(50.0); -} - -double Histogram::Percentile(double p) const { - double threshold = num_ * (p / 100.0); - double sum = 0; - for (int b = 0; b < kNumBuckets; b++) { - sum += buckets_[b]; - if (sum >= threshold) { - // Scale linearly within this bucket - double left_point = (b == 0) ? 0 : kBucketLimit[b-1]; - double right_point = kBucketLimit[b]; - double left_sum = sum - buckets_[b]; - double right_sum = sum; - double pos = (threshold - left_sum) / (right_sum - left_sum); - double r = left_point + (right_point - left_point) * pos; - if (r < min_) r = min_; - if (r > max_) r = max_; - return r; - } - } - return max_; -} - -double Histogram::Average() const { - if (num_ == 0.0) return 0; - return sum_ / num_; -} - -double Histogram::StandardDeviation() const { - if (num_ == 0.0) return 0; - double variance = (sum_squares_ * num_ - sum_ * sum_) / (num_ * num_); - return sqrt(variance); -} - -std::string Histogram::ToString() const { - std::string r; - char buf[200]; - snprintf(buf, sizeof(buf), - "Count: %.0f Average: %.4f StdDev: %.2f\n", - num_, Average(), StandardDeviation()); - r.append(buf); - snprintf(buf, sizeof(buf), - "Min: %.4f Median: %.4f Max: %.4f\n", - (num_ == 0.0 ? 0.0 : min_), Median(), max_); - r.append(buf); - r.append("------------------------------------------------------\n"); - const double mult = 100.0 / num_; - double sum = 0; - for (int b = 0; b < kNumBuckets; b++) { - if (buckets_[b] <= 0.0) continue; - sum += buckets_[b]; - snprintf(buf, sizeof(buf), - "[ %7.0f, %7.0f ) %7.0f %7.3f%% %7.3f%% ", - ((b == 0) ? 0.0 : kBucketLimit[b-1]), // left - kBucketLimit[b], // right - buckets_[b], // count - mult * buckets_[b], // percentage - mult * sum); // cumulative percentage - r.append(buf); - - // Add hash marks based on percentage; 20 marks for 100%. - int marks = static_cast(20*(buckets_[b] / num_) + 0.5); - r.append(marks, '#'); - r.push_back('\n'); - } - return r; -} - -} // namespace leveldb diff --git a/src/leveldb/util/histogram.h b/src/leveldb/util/histogram.h deleted file mode 100644 index 1ef9f3c8ab..0000000000 --- a/src/leveldb/util/histogram.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_HISTOGRAM_H_ -#define STORAGE_LEVELDB_UTIL_HISTOGRAM_H_ - -#include - -namespace leveldb { - -class Histogram { - public: - Histogram() { } - ~Histogram() { } - - void Clear(); - void Add(double value); - void Merge(const Histogram& other); - - std::string ToString() const; - - private: - double min_; - double max_; - double num_; - double sum_; - double sum_squares_; - - enum { kNumBuckets = 154 }; - static const double kBucketLimit[kNumBuckets]; - double buckets_[kNumBuckets]; - - double Median() const; - double Percentile(double p) const; - double Average() const; - double StandardDeviation() const; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_HISTOGRAM_H_ diff --git a/src/leveldb/util/logging.cc b/src/leveldb/util/logging.cc deleted file mode 100644 index ca6b324403..0000000000 --- a/src/leveldb/util/logging.cc +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/logging.h" - -#include -#include -#include -#include -#include "leveldb/env.h" -#include "leveldb/slice.h" - -namespace leveldb { - -void AppendNumberTo(std::string* str, uint64_t num) { - char buf[30]; - snprintf(buf, sizeof(buf), "%llu", (unsigned long long) num); - str->append(buf); -} - -void AppendEscapedStringTo(std::string* str, const Slice& value) { - for (size_t i = 0; i < value.size(); i++) { - char c = value[i]; - if (c >= ' ' && c <= '~') { - str->push_back(c); - } else { - char buf[10]; - snprintf(buf, sizeof(buf), "\\x%02x", - static_cast(c) & 0xff); - str->append(buf); - } - } -} - -std::string NumberToString(uint64_t num) { - std::string r; - AppendNumberTo(&r, num); - return r; -} - -std::string EscapeString(const Slice& value) { - std::string r; - AppendEscapedStringTo(&r, value); - return r; -} - -bool ConsumeDecimalNumber(Slice* in, uint64_t* val) { - uint64_t v = 0; - int digits = 0; - while (!in->empty()) { - char c = (*in)[0]; - if (c >= '0' && c <= '9') { - ++digits; - const int delta = (c - '0'); - static const uint64_t kMaxUint64 = ~static_cast(0); - if (v > kMaxUint64/10 || - (v == kMaxUint64/10 && delta > kMaxUint64%10)) { - // Overflow - return false; - } - v = (v * 10) + delta; - in->remove_prefix(1); - } else { - break; - } - } - *val = v; - return (digits > 0); -} - -} // namespace leveldb diff --git a/src/leveldb/util/logging.h b/src/leveldb/util/logging.h deleted file mode 100644 index 1b450d2480..0000000000 --- a/src/leveldb/util/logging.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Must not be included from any .h files to avoid polluting the namespace -// with macros. - -#ifndef STORAGE_LEVELDB_UTIL_LOGGING_H_ -#define STORAGE_LEVELDB_UTIL_LOGGING_H_ - -#include -#include -#include -#include "port/port.h" - -namespace leveldb { - -class Slice; -class WritableFile; - -// Append a human-readable printout of "num" to *str -extern void AppendNumberTo(std::string* str, uint64_t num); - -// Append a human-readable printout of "value" to *str. -// Escapes any non-printable characters found in "value". -extern void AppendEscapedStringTo(std::string* str, const Slice& value); - -// Return a human-readable printout of "num" -extern std::string NumberToString(uint64_t num); - -// Return a human-readable version of "value". -// Escapes any non-printable characters found in "value". -extern std::string EscapeString(const Slice& value); - -// Parse a human-readable number from "*in" into *value. On success, -// advances "*in" past the consumed number and sets "*val" to the -// numeric value. Otherwise, returns false and leaves *in in an -// unspecified state. -extern bool ConsumeDecimalNumber(Slice* in, uint64_t* val); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_LOGGING_H_ diff --git a/src/leveldb/util/mutexlock.h b/src/leveldb/util/mutexlock.h deleted file mode 100644 index 1ff5a9efa1..0000000000 --- a/src/leveldb/util/mutexlock.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_ -#define STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_ - -#include "port/port.h" -#include "port/thread_annotations.h" - -namespace leveldb { - -// Helper class that locks a mutex on construction and unlocks the mutex when -// the destructor of the MutexLock object is invoked. -// -// Typical usage: -// -// void MyClass::MyMethod() { -// MutexLock l(&mu_); // mu_ is an instance variable -// ... some complex code, possibly with multiple return paths ... -// } - -class SCOPED_LOCKABLE MutexLock { - public: - explicit MutexLock(port::Mutex *mu) EXCLUSIVE_LOCK_FUNCTION(mu) - : mu_(mu) { - this->mu_->Lock(); - } - ~MutexLock() UNLOCK_FUNCTION() { this->mu_->Unlock(); } - - private: - port::Mutex *const mu_; - // No copying allowed - MutexLock(const MutexLock&); - void operator=(const MutexLock&); -}; - -} // namespace leveldb - - -#endif // STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_ diff --git a/src/leveldb/util/options.cc b/src/leveldb/util/options.cc deleted file mode 100644 index 76af5b9302..0000000000 --- a/src/leveldb/util/options.cc +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/options.h" - -#include "leveldb/comparator.h" -#include "leveldb/env.h" - -namespace leveldb { - -Options::Options() - : comparator(BytewiseComparator()), - create_if_missing(false), - error_if_exists(false), - paranoid_checks(false), - env(Env::Default()), - info_log(NULL), - write_buffer_size(4<<20), - max_open_files(1000), - block_cache(NULL), - block_size(4096), - block_restart_interval(16), - compression(kSnappyCompression), - filter_policy(NULL) { -} - - -} // namespace leveldb diff --git a/src/leveldb/util/posix_logger.h b/src/leveldb/util/posix_logger.h deleted file mode 100644 index c063c2b7cb..0000000000 --- a/src/leveldb/util/posix_logger.h +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Logger implementation that can be shared by all environments -// where enough Posix functionality is available. - -#ifndef STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_ -#define STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_ - -#include -#include -#include -#include -#include "leveldb/env.h" - -namespace leveldb { - -class PosixLogger : public Logger { - private: - FILE* file_; - uint64_t (*gettid_)(); // Return the thread id for the current thread - public: - PosixLogger(FILE* f, uint64_t (*gettid)()) : file_(f), gettid_(gettid) { } - virtual ~PosixLogger() { - fclose(file_); - } - virtual void Logv(const char* format, va_list ap) { - const uint64_t thread_id = (*gettid_)(); - - // We try twice: the first time with a fixed-size stack allocated buffer, - // and the second time with a much larger dynamically allocated buffer. - char buffer[500]; - for (int iter = 0; iter < 2; iter++) { - char* base; - int bufsize; - if (iter == 0) { - bufsize = sizeof(buffer); - base = buffer; - } else { - bufsize = 30000; - base = new char[bufsize]; - } - char* p = base; - char* limit = base + bufsize; - - struct timeval now_tv; - gettimeofday(&now_tv, NULL); - const time_t seconds = now_tv.tv_sec; - struct tm t; - localtime_r(&seconds, &t); - p += snprintf(p, limit - p, - "%04d/%02d/%02d-%02d:%02d:%02d.%06d %llx ", - t.tm_year + 1900, - t.tm_mon + 1, - t.tm_mday, - t.tm_hour, - t.tm_min, - t.tm_sec, - static_cast(now_tv.tv_usec), - static_cast(thread_id)); - - // Print the message - if (p < limit) { - va_list backup_ap; - va_copy(backup_ap, ap); - p += vsnprintf(p, limit - p, format, backup_ap); - va_end(backup_ap); - } - - // Truncate to available space if necessary - if (p >= limit) { - if (iter == 0) { - continue; // Try again with larger buffer - } else { - p = limit - 1; - } - } - - // Add newline if necessary - if (p == base || p[-1] != '\n') { - *p++ = '\n'; - } - - assert(p <= limit); - fwrite(base, 1, p - base, file_); - fflush(file_); - if (base != buffer) { - delete[] base; - } - break; - } - } -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_ diff --git a/src/leveldb/util/random.h b/src/leveldb/util/random.h deleted file mode 100644 index ddd51b1c7b..0000000000 --- a/src/leveldb/util/random.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_RANDOM_H_ -#define STORAGE_LEVELDB_UTIL_RANDOM_H_ - -#include - -namespace leveldb { - -// A very simple random number generator. Not especially good at -// generating truly random bits, but good enough for our needs in this -// package. -class Random { - private: - uint32_t seed_; - public: - explicit Random(uint32_t s) : seed_(s & 0x7fffffffu) { - // Avoid bad seeds. - if (seed_ == 0 || seed_ == 2147483647L) { - seed_ = 1; - } - } - uint32_t Next() { - static const uint32_t M = 2147483647L; // 2^31-1 - static const uint64_t A = 16807; // bits 14, 8, 7, 5, 2, 1, 0 - // We are computing - // seed_ = (seed_ * A) % M, where M = 2^31-1 - // - // seed_ must not be zero or M, or else all subsequent computed values - // will be zero or M respectively. For all other values, seed_ will end - // up cycling through every number in [1,M-1] - uint64_t product = seed_ * A; - - // Compute (product % M) using the fact that ((x << 31) % M) == x. - seed_ = static_cast((product >> 31) + (product & M)); - // The first reduction may overflow by 1 bit, so we may need to - // repeat. mod == M is not possible; using > allows the faster - // sign-bit-based test. - if (seed_ > M) { - seed_ -= M; - } - return seed_; - } - // Returns a uniformly distributed value in the range [0..n-1] - // REQUIRES: n > 0 - uint32_t Uniform(int n) { return Next() % n; } - - // Randomly returns true ~"1/n" of the time, and false otherwise. - // REQUIRES: n > 0 - bool OneIn(int n) { return (Next() % n) == 0; } - - // Skewed: pick "base" uniformly from range [0,max_log] and then - // return "base" random bits. The effect is to pick a number in the - // range [0,2^max_log-1] with exponential bias towards smaller numbers. - uint32_t Skewed(int max_log) { - return Uniform(1 << Uniform(max_log + 1)); - } -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_RANDOM_H_ diff --git a/src/leveldb/util/status.cc b/src/leveldb/util/status.cc deleted file mode 100644 index a44f35b314..0000000000 --- a/src/leveldb/util/status.cc +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include "port/port.h" -#include "leveldb/status.h" - -namespace leveldb { - -const char* Status::CopyState(const char* state) { - uint32_t size; - memcpy(&size, state, sizeof(size)); - char* result = new char[size + 5]; - memcpy(result, state, size + 5); - return result; -} - -Status::Status(Code code, const Slice& msg, const Slice& msg2) { - assert(code != kOk); - const uint32_t len1 = msg.size(); - const uint32_t len2 = msg2.size(); - const uint32_t size = len1 + (len2 ? (2 + len2) : 0); - char* result = new char[size + 5]; - memcpy(result, &size, sizeof(size)); - result[4] = static_cast(code); - memcpy(result + 5, msg.data(), len1); - if (len2) { - result[5 + len1] = ':'; - result[6 + len1] = ' '; - memcpy(result + 7 + len1, msg2.data(), len2); - } - state_ = result; -} - -std::string Status::ToString() const { - if (state_ == NULL) { - return "OK"; - } else { - char tmp[30]; - const char* type; - switch (code()) { - case kOk: - type = "OK"; - break; - case kNotFound: - type = "NotFound: "; - break; - case kCorruption: - type = "Corruption: "; - break; - case kNotSupported: - type = "Not implemented: "; - break; - case kInvalidArgument: - type = "Invalid argument: "; - break; - case kIOError: - type = "IO error: "; - break; - default: - snprintf(tmp, sizeof(tmp), "Unknown code(%d): ", - static_cast(code())); - type = tmp; - break; - } - std::string result(type); - uint32_t length; - memcpy(&length, state_, sizeof(length)); - result.append(state_ + 5, length); - return result; - } -} - -} // namespace leveldb diff --git a/src/leveldb/util/testharness.cc b/src/leveldb/util/testharness.cc deleted file mode 100644 index 402fab34d7..0000000000 --- a/src/leveldb/util/testharness.cc +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/testharness.h" - -#include -#include -#include -#include - -namespace leveldb { -namespace test { - -namespace { -struct Test { - const char* base; - const char* name; - void (*func)(); -}; -std::vector* tests; -} - -bool RegisterTest(const char* base, const char* name, void (*func)()) { - if (tests == NULL) { - tests = new std::vector; - } - Test t; - t.base = base; - t.name = name; - t.func = func; - tests->push_back(t); - return true; -} - -int RunAllTests() { - const char* matcher = getenv("LEVELDB_TESTS"); - - int num = 0; - if (tests != NULL) { - for (size_t i = 0; i < tests->size(); i++) { - const Test& t = (*tests)[i]; - if (matcher != NULL) { - std::string name = t.base; - name.push_back('.'); - name.append(t.name); - if (strstr(name.c_str(), matcher) == NULL) { - continue; - } - } - fprintf(stderr, "==== Test %s.%s\n", t.base, t.name); - (*t.func)(); - ++num; - } - } - fprintf(stderr, "==== PASSED %d tests\n", num); - return 0; -} - -std::string TmpDir() { - std::string dir; - Status s = Env::Default()->GetTestDirectory(&dir); - ASSERT_TRUE(s.ok()) << s.ToString(); - return dir; -} - -int RandomSeed() { - const char* env = getenv("TEST_RANDOM_SEED"); - int result = (env != NULL ? atoi(env) : 301); - if (result <= 0) { - result = 301; - } - return result; -} - -} // namespace test -} // namespace leveldb diff --git a/src/leveldb/util/testharness.h b/src/leveldb/util/testharness.h deleted file mode 100644 index da4fe68bb4..0000000000 --- a/src/leveldb/util/testharness.h +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_TESTHARNESS_H_ -#define STORAGE_LEVELDB_UTIL_TESTHARNESS_H_ - -#include -#include -#include -#include "leveldb/env.h" -#include "leveldb/slice.h" -#include "util/random.h" - -namespace leveldb { -namespace test { - -// Run some of the tests registered by the TEST() macro. If the -// environment variable "LEVELDB_TESTS" is not set, runs all tests. -// Otherwise, runs only the tests whose name contains the value of -// "LEVELDB_TESTS" as a substring. E.g., suppose the tests are: -// TEST(Foo, Hello) { ... } -// TEST(Foo, World) { ... } -// LEVELDB_TESTS=Hello will run the first test -// LEVELDB_TESTS=o will run both tests -// LEVELDB_TESTS=Junk will run no tests -// -// Returns 0 if all tests pass. -// Dies or returns a non-zero value if some test fails. -extern int RunAllTests(); - -// Return the directory to use for temporary storage. -extern std::string TmpDir(); - -// Return a randomization seed for this run. Typically returns the -// same number on repeated invocations of this binary, but automated -// runs may be able to vary the seed. -extern int RandomSeed(); - -// An instance of Tester is allocated to hold temporary state during -// the execution of an assertion. -class Tester { - private: - bool ok_; - const char* fname_; - int line_; - std::stringstream ss_; - - public: - Tester(const char* f, int l) - : ok_(true), fname_(f), line_(l) { - } - - ~Tester() { - if (!ok_) { - fprintf(stderr, "%s:%d:%s\n", fname_, line_, ss_.str().c_str()); - exit(1); - } - } - - Tester& Is(bool b, const char* msg) { - if (!b) { - ss_ << " Assertion failure " << msg; - ok_ = false; - } - return *this; - } - - Tester& IsOk(const Status& s) { - if (!s.ok()) { - ss_ << " " << s.ToString(); - ok_ = false; - } - return *this; - } - -#define BINARY_OP(name,op) \ - template \ - Tester& name(const X& x, const Y& y) { \ - if (! (x op y)) { \ - ss_ << " failed: " << x << (" " #op " ") << y; \ - ok_ = false; \ - } \ - return *this; \ - } - - BINARY_OP(IsEq, ==) - BINARY_OP(IsNe, !=) - BINARY_OP(IsGe, >=) - BINARY_OP(IsGt, >) - BINARY_OP(IsLe, <=) - BINARY_OP(IsLt, <) -#undef BINARY_OP - - // Attach the specified value to the error message if an error has occurred - template - Tester& operator<<(const V& value) { - if (!ok_) { - ss_ << " " << value; - } - return *this; - } -}; - -#define ASSERT_TRUE(c) ::leveldb::test::Tester(__FILE__, __LINE__).Is((c), #c) -#define ASSERT_OK(s) ::leveldb::test::Tester(__FILE__, __LINE__).IsOk((s)) -#define ASSERT_EQ(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsEq((a),(b)) -#define ASSERT_NE(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsNe((a),(b)) -#define ASSERT_GE(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsGe((a),(b)) -#define ASSERT_GT(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsGt((a),(b)) -#define ASSERT_LE(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsLe((a),(b)) -#define ASSERT_LT(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsLt((a),(b)) - -#define TCONCAT(a,b) TCONCAT1(a,b) -#define TCONCAT1(a,b) a##b - -#define TEST(base,name) \ -class TCONCAT(_Test_,name) : public base { \ - public: \ - void _Run(); \ - static void _RunIt() { \ - TCONCAT(_Test_,name) t; \ - t._Run(); \ - } \ -}; \ -bool TCONCAT(_Test_ignored_,name) = \ - ::leveldb::test::RegisterTest(#base, #name, &TCONCAT(_Test_,name)::_RunIt); \ -void TCONCAT(_Test_,name)::_Run() - -// Register the specified test. Typically not used directly, but -// invoked via the macro expansion of TEST. -extern bool RegisterTest(const char* base, const char* name, void (*func)()); - - -} // namespace test -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_TESTHARNESS_H_ diff --git a/src/leveldb/util/testutil.cc b/src/leveldb/util/testutil.cc deleted file mode 100644 index bee56bf75f..0000000000 --- a/src/leveldb/util/testutil.cc +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/testutil.h" - -#include "util/random.h" - -namespace leveldb { -namespace test { - -Slice RandomString(Random* rnd, int len, std::string* dst) { - dst->resize(len); - for (int i = 0; i < len; i++) { - (*dst)[i] = static_cast(' ' + rnd->Uniform(95)); // ' ' .. '~' - } - return Slice(*dst); -} - -std::string RandomKey(Random* rnd, int len) { - // Make sure to generate a wide variety of characters so we - // test the boundary conditions for short-key optimizations. - static const char kTestChars[] = { - '\0', '\1', 'a', 'b', 'c', 'd', 'e', '\xfd', '\xfe', '\xff' - }; - std::string result; - for (int i = 0; i < len; i++) { - result += kTestChars[rnd->Uniform(sizeof(kTestChars))]; - } - return result; -} - - -extern Slice CompressibleString(Random* rnd, double compressed_fraction, - size_t len, std::string* dst) { - int raw = static_cast(len * compressed_fraction); - if (raw < 1) raw = 1; - std::string raw_data; - RandomString(rnd, raw, &raw_data); - - // Duplicate the random data until we have filled "len" bytes - dst->clear(); - while (dst->size() < len) { - dst->append(raw_data); - } - dst->resize(len); - return Slice(*dst); -} - -} // namespace test -} // namespace leveldb diff --git a/src/leveldb/util/testutil.h b/src/leveldb/util/testutil.h deleted file mode 100644 index adad3fc1ea..0000000000 --- a/src/leveldb/util/testutil.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_TESTUTIL_H_ -#define STORAGE_LEVELDB_UTIL_TESTUTIL_H_ - -#include "leveldb/env.h" -#include "leveldb/slice.h" -#include "util/random.h" - -namespace leveldb { -namespace test { - -// Store in *dst a random string of length "len" and return a Slice that -// references the generated data. -extern Slice RandomString(Random* rnd, int len, std::string* dst); - -// Return a random key with the specified length that may contain interesting -// characters (e.g. \x00, \xff, etc.). -extern std::string RandomKey(Random* rnd, int len); - -// Store in *dst a string of length "len" that will compress to -// "N*compressed_fraction" bytes and return a Slice that references -// the generated data. -extern Slice CompressibleString(Random* rnd, double compressed_fraction, - size_t len, std::string* dst); - -// A wrapper that allows injection of errors. -class ErrorEnv : public EnvWrapper { - public: - bool writable_file_error_; - int num_writable_file_errors_; - - ErrorEnv() : EnvWrapper(Env::Default()), - writable_file_error_(false), - num_writable_file_errors_(0) { } - - virtual Status NewWritableFile(const std::string& fname, - WritableFile** result) { - if (writable_file_error_) { - ++num_writable_file_errors_; - *result = NULL; - return Status::IOError(fname, "fake error"); - } - return target()->NewWritableFile(fname, result); - } -}; - -} // namespace test -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_TESTUTIL_H_ diff --git a/src/lz4/CMakeLists.txt b/src/lz4/CMakeLists.txt new file mode 100644 index 0000000000..61a0378e7b --- /dev/null +++ b/src/lz4/CMakeLists.txt @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2019 SpectreCoin Developers +# SPDX-License-Identifier: MIT + +target_sources(aliaswallet_lib + PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/lz4.h + + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/lz4.c + ) diff --git a/src/main.cpp b/src/main.cpp index fdbdf99432..ee1eb6199f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,21 +1,24 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT #include #include #include +#include #include "alert.h" #include "checkpoints.h" -#include "db.h" -#include "txdb.h" -#include "net.h" -#include "init.h" -#include "ui_interface.h" -#include "kernel.h" -#include "smessage.h" +#include "wallet/db.h" +#include "wallet/txdb.h" +#include "net/net.h" +#include "init/init.h" +#include "interface.h" +#include "pos/kernel.h" using namespace std; @@ -31,17 +34,17 @@ CCriticalSection cs_main; CTxMemPool mempool; +CChain chainActive; std::map mapBlockIndex; std::map mapBlockThinIndex; std::set > setStakeSeen; -unsigned int nStakeMinAge = 8 * 60 * 60; // 8 hours +unsigned int nStakeMinAge = 8 * 60 * 60; // 8 hour unsigned int nModifierInterval = 10 * 60; // time to elapse before new modifier is computed -int nCoinbaseMaturity = 120; -int nStakeMinConfirmations = 450; +int nCoinbaseMaturity = 100; // 100 blocks depth for newly generated PoW coins CBlockIndex* pindexGenesisBlock = NULL; CBlockThinIndex* pindexGenesisBlockThin = NULL; @@ -64,7 +67,10 @@ CMedianFilter cPeerBlockCounts(5, 0); // Amount of blocks that other nodes std::map mapOrphanBlockThins; +bool fStaleAnonCache = true; +int nMaxAnonBlockCache = 1000; std::map mapAnonOutputStats; // display only, not 100% accurate, height could become inaccurate due to undos +std::map> mapAnonBlockStats; std::multimap mapOrphanBlockThinsByPrev; @@ -84,10 +90,10 @@ std::vector vIncomingMerkleBlocks; // blocks with txns att // Constant stuff for coinbase transactions we create: CScript COINBASE_FLAGS; -const string strMessageMagic = "ShadowCoin Signed Message:\n"; +const string strMessageMagic = "Alias Signed Message:\n"; // Settings -int64_t nTransactionFee = MIN_TX_FEE; +int64_t nTransactionFee = nMinTxFee; int64_t nReserveBalance = 0; int64_t nMinimumInputValue = 0; @@ -146,20 +152,19 @@ void SyncWithWallets(const CTransaction& tx, const CBlock* pblock, bool fUpdate, if (!fConnect) { // ppcoin: wallets need to refund inputs when disconnecting coinstake - if (tx.IsCoinStake()) + if (tx.nVersion == ANON_TXN_VERSION) + { + BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) + pwallet->UndoAnonTransaction(tx, nullptr, !pwallet->IsFromMe(tx)); // don't erase owned tx + } + else if (tx.IsCoinStake()) { BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) { if (pwallet->IsFromMe(tx)) pwallet->DisableTransaction(tx); }; - }; - - if (tx.nVersion == ANON_TXN_VERSION) - { - BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) - pwallet->UndoAnonTransaction(tx); - }; + } return; }; @@ -564,11 +569,11 @@ bool CTransaction::IsStandard() const { if (txin.IsAnonInput()) { - int nRingSize = txin.ExtractRingSize(); + uint32_t nRingSize = (uint32_t)txin.ExtractRingSize(); + auto [nMinRingSize, nMaxRingSize] = GetRingSizeMinMax(nTime); if (nVersion != ANON_TXN_VERSION - || nRingSize < 1 - || nRingSize > (Params().IsProtocolV3(pindexBest->nHeight) ? (int)MAX_RING_SIZE : (int)MAX_RING_SIZE_OLD) + || nRingSize < nMinRingSize || nRingSize > nMaxRingSize || txin.scriptSig.size() > sizeof(COutPoint) + 2 + (33 + 32 + 32) * nRingSize) { LogPrintf("IsStandard() anon txin failed.\n"); @@ -846,7 +851,7 @@ bool CTransaction::CheckTransaction() const if (nVersion == ANON_TXN_VERSION) { - // -- Check for duplicate anon outputs + // -- Check for duplicate anon outputs and max anon output size // NOTE: is this necessary, duplicate coins would not be spendable anyway? set vAnonOutPubkeys; CPubKey pkTest; @@ -855,6 +860,9 @@ bool CTransaction::CheckTransaction() const if (!txout.IsAnonOutput()) continue; + if (Params().IsForkV3(nTime) && txout.nValue > nMaxAnonOutput) + return DoS(100, error("CTransaction::CheckTransaction() : txout.nValue of anon output higher than nMaxAnonOutput")); + const CScript &s = txout.scriptPubKey; pkTest = CPubKey(&s[2+1], 33); if (vAnonOutPubkeys.count(pkTest)) @@ -881,18 +889,12 @@ bool CTransaction::CheckTransaction() const int64_t CTransaction::GetMinFee(unsigned int nBlockSize, enum GetMinFee_mode mode, unsigned int nBytes) const { - // Base fee is either MIN_TX_FEE or MIN_RELAY_TX_FEE for standard txns, and MIN_TX_FEE_ANON for anon txns - - // -- force GMF_ANON if anon txn - if (nVersion == ANON_TXN_VERSION) - mode = GMF_ANON; - + // Base fee is either MIN_TX_FEE or MIN_RELAY_TX_FEE for standard txns int64_t nBaseFee; switch (mode) { - case GMF_RELAY: nBaseFee = MIN_RELAY_TX_FEE; break; - case GMF_ANON: nBaseFee = MIN_TX_FEE_ANON; break; - default: nBaseFee = MIN_TX_FEE; break; + case GMF_RELAY: nBaseFee = nMinRelayTxFee; break; + default: nBaseFee = nMinTxFee; break; }; unsigned int nNewBlockSize = nBlockSize + nBytes; @@ -907,7 +909,7 @@ int64_t CTransaction::GetMinFee(unsigned int nBlockSize, enum GetMinFee_mode mod }; // Raise the price as the block approaches full - if (mode != GMF_ANON && nBlockSize != 1 && nNewBlockSize >= MAX_BLOCK_SIZE_GEN/2) + if (nBlockSize != 1 && nNewBlockSize >= MAX_BLOCK_SIZE_GEN/2) { if (nNewBlockSize >= MAX_BLOCK_SIZE_GEN) return MAX_MONEY; @@ -1002,8 +1004,6 @@ bool AcceptToMemoryPool(CTxMemPool &pool, CTransaction &tx, CTxDB &txdb, bool *p }; nFees += nSumAnon; - - feeMode = GMF_ANON; }; @@ -1027,7 +1027,7 @@ bool AcceptToMemoryPool(CTxMemPool &pool, CTransaction &tx, CTxDB &txdb, bool *p // Continuously rate-limit free transactions // This mitigates 'penny-flooding' -- sending thousands of free transactions just to // be annoying or make others' transactions take longer to confirm. - if (nFees < MIN_RELAY_TX_FEE) + if (nFees < nMinRelayTxFee) { static CCriticalSection csFreeLimiter; static double dFreeCount; @@ -1124,12 +1124,12 @@ int CTxIndex::GetDepthInMainChainFromIndex() const } // Return transaction in tx, and if it was found inside a block, its hash is placed in hashBlock -bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock) +bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock, bool includemempool) { { - LOCK(cs_main); - if (mempool.lookup(hash, tx)) + if(includemempool && mempool.lookup(hash, tx)) return true; + CTxDB txdb("r"); CTxIndex txindex; if (tx.ReadFromDisk(txdb, COutPoint(hash, 0), txindex)) @@ -1143,6 +1143,7 @@ bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock) return false; } + bool GetTransactionBlockHash(const uint256 &hash, uint256 &hashBlock) { { @@ -1248,7 +1249,7 @@ void static InvalidHeaderChainFound(CBlockThinIndex* pindexNew) { nBestInvalidTrust = pindexNew->nChainTrust; //CTxDB().WriteBestInvalidTrust(CBigNum(nBestInvalidTrust)); - uiInterface.NotifyBlocksChanged(); + // uiInterface.NotifyBlocksChanged(); }; uint256 nBestInvalidBlockTrust = pindexNew->nChainTrust - pindexNew->pprev->nChainTrust; @@ -1531,8 +1532,8 @@ bool CBlockThin::AddToBlockThinIndex(unsigned int nFile, unsigned int nBlockPos, }; }; - - uiInterface.NotifyBlocksChanged(); + BlockChangedEvent blockChangedEvent = {nBestHeight, GetNumBlocksOfPeers(), IsInitialBlockDownload(), pindexBestHeader->GetBlockTime()}; + uiInterface.NotifyBlocksChanged(blockChangedEvent); return true; } @@ -1851,6 +1852,7 @@ const COrphanBlock* AddOrphanBlock(const CBlock* pblock) orphan->hashBlock = pblock->GetHash(); orphan->hashPrev = pblock->hashPrevBlock; orphan->stake = pblock->GetProofOfStake(); + orphan->nTime = pblock->nTime; nOrphanBlocksSize += orphan->vchBlock.size(); mapOrphanBlocks.insert(make_pair(pblock->GetHash(), orphan)); mapOrphanBlocksByPrev.insert(make_pair(orphan->hashPrev, orphan)); @@ -1861,9 +1863,39 @@ const COrphanBlock* AddOrphanBlock(const CBlock* pblock) return orphan; } -// Remove a random orphan block (which does not have any dependent orphans). +// Remove a random orphan block (which does not have any dependent orphans). Remove all due checkpoint obsolete orphans. void static PruneOrphanBlocks() { + const CBlockIndex* pcheckpoint = Checkpoints::AutoSelectSyncCheckpoint(); + for (auto it = mapOrphanBlocks.begin(); it != mapOrphanBlocks.end(); ++it) + { + // Block is obsolete due to checkpoint, delete all predecessors. + if (it->second->nTime < pcheckpoint->nTime) + { + map::iterator it2 = mapOrphanBlocks.find(it->second->hashPrev); + while (it2 != mapOrphanBlocks.end()) + { + if (fDebug) + LogPrintf("PruneOrphanBlocks: Delete obsolete orphan %s with time %d (checkpoint time %d)\n", it2->second->hashBlock.GetHex(), it2->second->nTime, pcheckpoint->nTime); + + uint256 hashPrev = it2->second->hashPrev; + for(auto itPrev = mapOrphanBlocksByPrev.find(hashPrev); itPrev != mapOrphanBlocksByPrev.end(); ++itPrev) + { + if(itPrev->second == it2->second) + { + itPrev = mapOrphanBlocksByPrev.erase(itPrev); + break; + } + } + setStakeSeenOrphan.erase(it2->second->stake); + nOrphanBlocksSize -= it2->second->vchBlock.size(); + delete it2->second; + mapOrphanBlocks.erase(it2); + it2 = mapOrphanBlocks.find(hashPrev); + } + } + } + size_t nMaxOrphanBlocksSize = GetArg("-maxorphanblocksmib", DEFAULT_MAX_ORPHAN_BLOCKS) * ((size_t) 1 << 20); while (nOrphanBlocksSize > nMaxOrphanBlocksSize) { @@ -1889,7 +1921,7 @@ void static PruneOrphanBlocks() } } -static const int64_t nTargetTimespan = 16 * 60; // 16 mins +static const int64_t nTargetTimespan = 24 * 60 * 60; // 24 hours // ppcoin: find last block index up to pindex @@ -1922,7 +1954,7 @@ unsigned int GetNextTargetRequired(const CBlockIndex* pindexLast, bool fProofOfS if (pindexPrevPrev->pprev == NULL) return bnTargetLimit.GetCompact(); // second block - int64_t nTargetSpacing = GetTargetSpacing(pindexLast->nHeight); + int64_t nTargetSpacing = GetTargetSpacing(pindexLast->nHeight, pindexLast->GetBlockTime()); int64_t nActualSpacing = pindexPrev->GetBlockTime() - pindexPrevPrev->GetBlockTime(); if (nActualSpacing < 0) nActualSpacing = nTargetSpacing; @@ -1962,7 +1994,7 @@ unsigned int GetNextTargetRequiredThin(const CBlockThinIndex* pindexLast, bool f if (pindexPrevPrev->pprev == NULL) return bnTargetLimit.GetCompact(); // second block - int64_t nTargetSpacing = GetTargetSpacing(pindexLast->nHeight); + int64_t nTargetSpacing = GetTargetSpacing(pindexLast->nHeight, pindexLast->GetBlockTime()); int64_t nActualSpacing = pindexPrev->GetBlockTime() - pindexPrevPrev->GetBlockTime(); if (nActualSpacing < 0) nActualSpacing = nTargetSpacing; @@ -2029,7 +2061,7 @@ void static InvalidChainFound(CBlockIndex* pindexNew) { nBestInvalidTrust = pindexNew->nChainTrust; CTxDB().WriteBestInvalidTrust(CBigNum(nBestInvalidTrust)); - uiInterface.NotifyBlocksChanged(); + // uiInterface.NotifyBlocksChanged(); }; uint256 nBestInvalidBlockTrust = pindexNew->nChainTrust - pindexNew->pprev->nChainTrust; @@ -2044,6 +2076,8 @@ void static InvalidChainFound(CBlockIndex* pindexNew) CBigNum(pindexBest->nChainTrust).ToString().c_str(), nBestBlockTrust.Get64(), DateTimeStrFormat("%x %H:%M:%S", pindexBest->GetBlockTime()).c_str()); + + pwalletMain->CacheAnonStats(nBestHeight); } @@ -2079,6 +2113,9 @@ bool CTransaction::DisconnectInputs(CTxDB& txdb) { BOOST_FOREACH(const CTxIn& txin, vin) { + if (txin.IsAnonInput()) + continue; + COutPoint prevout = txin.prevout; // Get prev txindex from disk @@ -2190,13 +2227,18 @@ bool CTransaction::FetchInputs(CTxDB& txdb, const map& mapTes return true; } -static bool CheckAnonInputAB(CTxDB &txdb, const CTxIn &txin, int i, int nRingSize, std::vector &vchImage, uint256 &preimage, int64_t &nCoinValue) +bool CTransaction::CheckAnonInputAB(CTxDB &txdb, const CTxIn &txin, int i, int nRingSize, const std::vector &vchImage, int64_t &nCoinValue) const { const CScript &s = txin.scriptSig; + if (s.size() != 2 + EC_SECRET_SIZE + (EC_SECRET_SIZE + EC_COMPRESSED_SIZE) * nRingSize) + { + LogPrintf("CheckAnonInputAB(): Error input %d scriptSig size does not match for ringsize %d.\n", i, nRingSize); + return false; + } + CPubKey pkRingCoin; CAnonOutput ao; - CTxIndex txindex; ec_point pSigC; pSigC.resize(EC_SECRET_SIZE); @@ -2222,15 +2264,28 @@ static bool CheckAnonInputAB(CTxDB &txdb, const CTxIn &txin, int i, int nRingSiz return false; }; + int minBlockHeight = ao.fCoinStake || IsAnonCoinStake() ? Params().GetAnonStakeMinConfirmations() : MIN_ANON_SPEND_DEPTH; if (ao.nBlockHeight == 0 - || nBestHeight - ao.nBlockHeight < MIN_ANON_SPEND_DEPTH) + || nBestHeight - ao.nBlockHeight + 1 < minBlockHeight) // ao confirmed in last block has depth of 1 { - LogPrintf("CheckAnonInputsAB(): Error input %d, element %d depth < MIN_ANON_SPEND_DEPTH.\n", i, ri); + LogPrintf("CheckAnonInputsAB(): Error input %d, element %d depth < %d (nBestHeight:%d ao.nBlockHeight:%d ao.fCoinstake:%s).\n", + i, ri, minBlockHeight, nBestHeight, ao.nBlockHeight, ao.fCoinStake); return false; }; + + if (Params().IsForkV3(nTime) && nCoinValue <= nMaxAnonOutput && ao.nCompromised > 0) + { + LogPrintf("CheckAnonInputsAB(): Error input %d, element %d is compromised.\n", i, ri); + return false; + } + + int nCompromisedHeight = mapAnonOutputStats[nCoinValue].nCompromisedHeight; + if (nCompromisedHeight != 0 && nCompromisedHeight - MIN_ANON_SPEND_DEPTH >= ao.nBlockHeight) + LogPrintf("CheckAnonInputsAB(): Warn tx %s, input %d, element %d does use a mixin which is compromised by ALL SPENT (ao.nValue:%d, ao.nBlockHeight:%d, nCompromisedHeight:%d).\n", + GetHash().ToString(), i, ri, ao.nValue, ao.nBlockHeight, nCompromisedHeight); }; - if (verifyRingSignatureAB(vchImage, preimage, nRingSize, pPubkeys, pSigC, pSigS) != 0) + if (verifyRingSignatureAB(vchImage, nRingSize, pPubkeys, pSigC, pSigS) != 0) { LogPrintf("CheckAnonInputsAB(): Error input %d verifyRingSignatureAB() failed.\n", i); return false; @@ -2297,11 +2352,11 @@ bool CTransaction::CheckAnonInputs(CTxDB& txdb, int64_t& nSumValue, bool& fInval }; int64_t nCoinValue = -1; - int nRingSize = txin.ExtractRingSize(); - if (nRingSize < 1 - ||nRingSize > (Params().IsProtocolV3(pindexBest->nHeight) ? (int)MAX_RING_SIZE : (int)MAX_RING_SIZE_OLD)) + uint32_t nRingSize = (uint32_t)txin.ExtractRingSize(); + auto [nMinRingSize, nMaxRingSize] = GetRingSizeMinMax(nTime); + if (nRingSize < nMinRingSize || nRingSize > nMaxRingSize) { - LogPrintf("CheckAnonInputs(): Error input %d ringsize %d not in range [%d, %d].\n", i, nRingSize, MIN_RING_SIZE, MAX_RING_SIZE); + LogPrintf("CheckAnonInputs(): Error input %d ringsize %d not in range [%d, %d].\n", i, nRingSize, nMinRingSize, nMaxRingSize); fInvalid = true; return false; }; @@ -2309,60 +2364,60 @@ bool CTransaction::CheckAnonInputs(CTxDB& txdb, int64_t& nSumValue, bool& fInval if (nRingSize > 1 && s.size() == 2 + EC_SECRET_SIZE + (EC_SECRET_SIZE + EC_COMPRESSED_SIZE) * nRingSize) { // ringsig AB - if (!CheckAnonInputAB(txdb, txin, i, nRingSize, vchImage, preimage, nCoinValue)) + if (!CheckAnonInputAB(txdb, txin, i, nRingSize, vchImage, nCoinValue)) { fInvalid = true; return false; }; - - nSumValue += nCoinValue; - continue; - }; - - if (s.size() < 2 + (EC_COMPRESSED_SIZE + EC_SECRET_SIZE + EC_SECRET_SIZE) * nRingSize) - { - LogPrintf("CheckAnonInputs(): Error input %d scriptSig too small.\n", i); - fInvalid = true; return false; - }; - - - CPubKey pkRingCoin; - CAnonOutput ao; - CTxIndex txindex; - const unsigned char* pPubkeys = &s[2]; - const unsigned char* pSigc = &s[2 + EC_COMPRESSED_SIZE * nRingSize]; - const unsigned char* pSigr = &s[2 + (EC_COMPRESSED_SIZE + EC_SECRET_SIZE) * nRingSize]; - for (int ri = 0; ri < nRingSize; ++ri) + } + else { - pkRingCoin = CPubKey(&pPubkeys[ri * EC_COMPRESSED_SIZE], EC_COMPRESSED_SIZE); - if (!txdb.ReadAnonOutput(pkRingCoin, ao)) + if (s.size() < 2 + (EC_COMPRESSED_SIZE + EC_SECRET_SIZE + EC_SECRET_SIZE) * nRingSize) { - LogPrintf("CheckAnonInputs(): Error input %d, element %d AnonOutput %s not found.\n", i, ri, HexStr(pkRingCoin).c_str()); + LogPrintf("CheckAnonInputs(): Error input %d scriptSig too small.\n", i); fInvalid = true; return false; }; - if (nCoinValue == -1) - { - nCoinValue = ao.nValue; - } else - if (nCoinValue != ao.nValue) + + CPubKey pkRingCoin; + CAnonOutput ao; + const unsigned char* pPubkeys = &s[2]; + const unsigned char* pSigc = &s[2 + EC_COMPRESSED_SIZE * nRingSize]; + const unsigned char* pSigr = &s[2 + (EC_COMPRESSED_SIZE + EC_SECRET_SIZE) * nRingSize]; + for (int ri = 0; ri < nRingSize; ++ri) { - LogPrintf("CheckAnonInputs(): Error input %d, element %d ring amount mismatch %d, %d.\n", i, ri, nCoinValue, ao.nValue); - fInvalid = true; return false; + pkRingCoin = CPubKey(&pPubkeys[ri * EC_COMPRESSED_SIZE], EC_COMPRESSED_SIZE); + if (!txdb.ReadAnonOutput(pkRingCoin, ao)) + { + LogPrintf("CheckAnonInputs(): Error input %d, element %d AnonOutput %s not found.\n", i, ri, HexStr(pkRingCoin).c_str()); + fInvalid = true; return false; + }; + + if (nCoinValue == -1) + { + nCoinValue = ao.nValue; + } else + if (nCoinValue != ao.nValue) + { + LogPrintf("CheckAnonInputs(): Error input %d, element %d ring amount mismatch %d, %d.\n", i, ri, nCoinValue, ao.nValue); + fInvalid = true; return false; + }; + + int minBlockHeight = ao.fCoinStake || IsAnonCoinStake() ? Params().GetAnonStakeMinConfirmations() : MIN_ANON_SPEND_DEPTH; + if (ao.nBlockHeight == 0 + || nBestHeight - ao.nBlockHeight + 1 < minBlockHeight) // ao confirmed in last block has depth of 1 + { + LogPrintf("CheckAnonInputs(): Error input %d, element %d depth < %d (nBestHeight:%d ao.nBlockHeight:%d ao.fCoinstake:%d).\n", + i, ri, minBlockHeight, nBestHeight, ao.nBlockHeight, ao.fCoinStake); + fInvalid = true; return false; + }; }; - if (ao.nBlockHeight == 0 - || nBestHeight - ao.nBlockHeight < MIN_ANON_SPEND_DEPTH) + if (verifyRingSignature(vchImage, preimage, nRingSize, pPubkeys, pSigc, pSigr) != 0) { - LogPrintf("CheckAnonInputs(): Error input %d, element %d depth < MIN_ANON_SPEND_DEPTH.\n", i, ri); + LogPrintf("CheckAnonInputs(): Error input %d verifyRingSignature() failed.\n", i); fInvalid = true; return false; }; - }; - - if (verifyRingSignature(vchImage, preimage, nRingSize, pPubkeys, pSigc, pSigr) != 0) - { - LogPrintf("CheckAnonInputs(): Error input %d verifyRingSignature() failed.\n", i); - fInvalid = true; return false; - }; + } nSumValue += nCoinValue; }; @@ -2444,20 +2499,20 @@ bool CTransaction::ConnectInputs(CTxDB& txdb, MapPrevTx inputs, map= txPrev.vout.size() || prevout.n >= txindex.vSpent.size()) return DoS(100, error("ConnectInputs() : %s prevout.n out of range %d %u %u prev tx %s\n%s", GetHash().ToString(), prevout.n, txPrev.vout.size(), txindex.vSpent.size(), prevout.hash.ToString(), txPrev.ToString())); - // If prev is coinbase or coinstake, check that it's matured - if (txPrev.IsCoinBase() || txPrev.IsCoinStake()) - { - int nSpendDepth; - if (IsConfirmedInNPrevBlocks(txindex, pindexBlock, nCoinbaseMaturity, nSpendDepth)) - return error("ConnectInputs() : tried to spend %s at depth %d", txPrev.IsCoinBase() ? "coinbase" : "coinstake", nSpendDepth); - } - // ppcoin: check transaction timestamp if (txPrev.nTime > nTime) return DoS(100, error("ConnectInputs() : transaction timestamp earlier than input transaction")); if (Params().IsProtocolV3(pindexBlock->nHeight)) { + // If prev is coinbase or coinstake, check that it's matured + if (txPrev.IsCoinBase() || txPrev.IsCoinStake()) + { + int nSpendDepth; + if (IsConfirmedInNPrevBlocks(txindex, pindexBlock, Params().GetStakeMinConfirmations(nTime) -1 , nSpendDepth)) + return error("ConnectInputs() : tried to spend %s at depth %d", txPrev.IsCoinBase() ? "coinbase" : "coinstake", nSpendDepth + 1); + } + if (txPrev.vout[prevout.n].IsEmpty()) return DoS(1, error("ConnectInputs() : special marker is not spendable")); } @@ -2532,8 +2587,9 @@ bool CTransaction::ConnectInputs(CTxDB& txdb, MapPrevTx inputs, mapRemoveAnonStats(txdb, pindex->nHeight)) + return error("DiconnectBlock() : RemoveAnonStats failed."); + return true; } +void static validateAnonCache(int nBlockHeight) +{ + // -- validate cache against persisted data + std::list lOutputCounts; + if (pwalletMain->CountAllAnonOutputs(lOutputCounts, nBlockHeight) != 0) + { + LogPrintf("RemoveAnonStats(%d) Error: CountAllAnonOutputs() failed.\n", nBlockHeight); + }; + for (const auto & anonOutputStat : lOutputCounts) + { + if (mapAnonOutputStats[anonOutputStat.nValue].nExists != anonOutputStat.nExists) + LogPrintf("ConnectBlock(%d) [%d] Cache Stale: nExists cache %d <> %d persisted.\n", + nBestHeight, anonOutputStat.nValue, mapAnonOutputStats[anonOutputStat.nValue].nExists, anonOutputStat.nExists); + if (mapAnonOutputStats[anonOutputStat.nValue].nSpends != anonOutputStat.nSpends) + LogPrintf("ConnectBlock(%d) [%d] Cache Stale: nSpends cache %d <> %d persisted.\n", + nBestHeight, anonOutputStat.nValue, mapAnonOutputStats[anonOutputStat.nValue].nSpends, anonOutputStat.nSpends); + if (mapAnonOutputStats[anonOutputStat.nValue].nMature != anonOutputStat.nMature) + LogPrintf("ConnectBlock(%d) [%d] Cache Stale: nMature cache %d <> %d persisted.\n", + nBestHeight, anonOutputStat.nValue, mapAnonOutputStats[anonOutputStat.nValue].nMature, anonOutputStat.nMature); + if (mapAnonOutputStats[anonOutputStat.nValue].nMixins != anonOutputStat.nMixins) + LogPrintf("ConnectBlock(%d) [%d] Cache Stale: nMixins cache %d <> %d persisted.\n", + nBestHeight, anonOutputStat.nValue, mapAnonOutputStats[anonOutputStat.nValue].nMixins, anonOutputStat.nMixins); + if (mapAnonOutputStats[anonOutputStat.nValue].nMixinsStaking != anonOutputStat.nMixinsStaking) + LogPrintf("ConnectBlock(%d) [%d] Cache Stale: nMixinsStaking cache %d <> %d persisted.\n", + nBestHeight, anonOutputStat.nValue, mapAnonOutputStats[anonOutputStat.nValue].nMixinsStaking, anonOutputStat.nMixinsStaking); + } +} + bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) { // Check it again in case a previous version let a bad block in, but skip BlockSig checking @@ -2614,6 +2701,16 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) else nTxPos = pindex->nBlockPos + ::GetSerializeSize(CBlock(), SER_DISK, CLIENT_VERSION) - (2 * GetSizeOfCompactSize(0)) + GetSizeOfCompactSize(vtx.size()); + // Init anon cache if needed + if (fStaleAnonCache) + { + LogPrintf("ConnectBlock() : Stale anon cache => rebuild.\n"); + if (!pwalletMain->CacheAnonStats(pindex->pprev->nHeight)) + LogPrintf("CacheAnonStats() failed.\n"); + } + if (fDebugRingSig) + validateAnonCache(pindex->pprev->nHeight); + map mapQueuedChanges; int64_t nFees = 0; int64_t nAnonIn = 0; @@ -2686,7 +2783,7 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) if (fInvalid) return error("ConnectBlock() : CheckAnonInputs found invalid tx %s", tx.GetHash().ToString().substr(0,10).c_str()); return false; - }; + } nAnonIn += nTxAnonIn; nTxValueIn += nTxAnonIn; @@ -2720,14 +2817,38 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) if (IsProofOfStake()) { // ppcoin: coin stake tx earns reward instead of paying fee - uint64_t nCoinAge; - if (!vtx[1].GetCoinAge(txdb, pindex->pprev, nCoinAge)) + uint64_t nCoinAge = 0; + if (!Params().IsProtocolV3(pindex->pprev->nHeight) && !vtx[1].GetCoinAge(txdb, pindex->pprev, nCoinAge)) return error("ConnectBlock() : %s unable to get coin age for coinstake", vtx[1].GetHash().ToString()); - int64_t nCalculatedStakeReward = Params().GetProofOfStakeReward(pindex->pprev, nCoinAge, nFees); + int64_t nCalculatedStakeReward = IsProofOfAnonStake() ? Params().GetProofOfAnonStakeReward(pindex->pprev, nFees) : Params().GetProofOfStakeReward(pindex->pprev, nCoinAge, nFees); if (nStakeReward > nCalculatedStakeReward) return DoS(100, error("ConnectBlock() : coinstake pays too much(actual=%d vs calculated=%d)", nStakeReward, nCalculatedStakeReward)); + + bool fSupplyIncrease = Params().IsForkV4SupplyIncrease(pindex->pprev); + if (fSupplyIncrease || (Params().IsForkV2(nTime) && pindex->nHeight % 6 == 0)) { + CBitcoinAddress address(fSupplyIncrease ? Params().GetSupplyIncreaseAddress() : Params().GetDevContributionAddress()); + CScript scriptPubKey; + scriptPubKey.SetDestination(address.Get()); + + bool containsDonation = false; + + //the donation can be at i = 2 or above. so we start looking for it there + for (int i = 2; i < vtx[1].vout.size(); i++) { + if (vtx[1].vout[i].scriptPubKey == scriptPubKey) { + if (vtx[1].vout[i].nValue >= nCalculatedStakeReward) { + //we found a donation. Stop searching + containsDonation = true; + break; + } + } + } + if (!containsDonation) { + LogPrintf("ConnectBlock() : stake does not pay to address %s\n", address.ToString().c_str()); + return DoS(100, error("ConnectBlock() : stake does not pay to address %s in trx\n%s\n", address.ToString().c_str(), vtx[1].ToString())); + } + } } // ppcoin: track money supply and mint amount info @@ -2759,7 +2880,11 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) // Watch for transactions paying to me BOOST_FOREACH(CTransaction& tx, vtx) - SyncWithWallets(tx, this, true); + SyncWithWallets(tx, this, true); // calls ProcessAnonTransaction() which persists anons also in txDB + + // Update anon cache with stats of connected block (added in ProcessAnonTransaction()) + if (!pwalletMain->UpdateAnonStats(txdb, pindex->nHeight)) + return error("ConnectBlock() : UpdateAnonStats failed."); return true; } @@ -2971,6 +3096,14 @@ bool CBlock::SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew) nBestChainTrust = pindexNew->nChainTrust; nTimeBestReceived = GetTime(); mempool.AddTransactionsUpdated(1); + chainActive.SetTip(pindexNew); + + if (fStaleAnonCache) + { + LogPrintf("SetBestChain() : Stale anon cache => rebuild.\n"); + if (!pwalletMain->CacheAnonStats(nBestHeight)) + LogPrintf("CacheAnonStats() failed.\n"); + } uint256 nBestBlockTrust = pindexBest->nHeight != 0 ? (pindexBest->nChainTrust - pindexBest->pprev->nChainTrust) : pindexBest->nChainTrust; @@ -2980,6 +3113,12 @@ bool CBlock::SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew) nBestBlockTrust.Get64(), DateTimeStrFormat("%x %H:%M:%S", pindexBest->GetBlockTime())); + // Stamp the IBD-stall watchdog clock — we ACTUALLY connected a + // block, not just received one as an orphan. SendMessages() reads + // this to decide whether to force a getblocks retry against a + // different peer when the chain stops advancing. + nTimeLastBlockAccepted = GetTime(); + // Check the version of the last 100 blocks to see if we need to upgrade: if (!fIsInitialDownload) { @@ -3009,48 +3148,48 @@ bool CBlock::SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew) return true; } -int CMerkleTx::GetDepthInMainChainINTERNAL(CBlockIndex* &pindexRet) const +std::pair CMerkleTx::GetDepthAndHeightInMainChainINTERNAL(CBlockIndex* &pindexRet) const { if (hashBlock == 0 || nIndex == -1) - return 0; + return std::make_pair(0, -1); AssertLockHeld(cs_main); // Find the block it claims to be in map::iterator mi = mapBlockIndex.find(hashBlock); if (mi == mapBlockIndex.end()) - return 0; + return std::make_pair(0, -1); CBlockIndex* pindex = (*mi).second; if (!pindex || !pindex->IsInMainChain()) - return 0; + return std::make_pair(0, -1); // Make sure the merkle branch connects to this block if (!fMerkleVerified) { if (CBlock::CheckMerkleBranch(GetHash(), vMerkleBranch, nIndex) != pindex->hashMerkleRoot) - return 0; + return std::make_pair(0, -1); fMerkleVerified = true; } pindexRet = pindex; - return pindexBest->nHeight - pindex->nHeight + 1; + return std::make_pair(pindexBest->nHeight - pindex->nHeight + 1, pindex->nHeight); } -int CMerkleTx::GetDepthInMainChain(CBlockIndex* &pindexRet) const +std::pair CMerkleTx::GetDepthAndHeightInMainChain(CBlockIndex* &pindexRet) const { AssertLockHeld(cs_main); - int nResult = GetDepthInMainChainINTERNAL(pindexRet); - if (nResult == 0 && !mempool.exists(GetHash())) - return -1; // Not in chain, not in mempool + pair nResult = GetDepthAndHeightInMainChainINTERNAL(pindexRet); + if (nResult.first == 0 && !mempool.exists(GetHash())) + return std::make_pair(-1, -1); // Not in chain, not in mempool return nResult; } -int CMerkleTx::GetDepthInMainChainINTERNAL(CBlockThinIndex* &pindexRet) const +std::pair CMerkleTx::GetDepthAndHeightInMainChainINTERNAL(CBlockThinIndex* &pindexRet) const { //if (hashBlock == 0 || nIndex == -1) if (hashBlock == 0) - return 0; + return std::make_pair(0, -1); AssertLockHeld(cs_main); @@ -3068,15 +3207,15 @@ int CMerkleTx::GetDepthInMainChainINTERNAL(CBlockThinIndex* &pindexRet) const CDiskBlockThinIndex diskindex; if (txdb.ReadBlockThinIndex(hashBlock, diskindex) && diskindex.hashNext != 0) - return pindexBestHeader->nHeight - diskindex.nHeight + 1; + return std::make_pair(pindexBestHeader->nHeight - diskindex.nHeight + 1, diskindex.nHeight); }; - return 0; + return std::make_pair(0, -1); }; CBlockThinIndex* pindex = (*mi).second; if (!pindex || !pindex->IsInMainChain()) - return 0; + return std::make_pair(0, -1); /* // Make sure the merkle branch connects to this block @@ -3088,15 +3227,15 @@ int CMerkleTx::GetDepthInMainChainINTERNAL(CBlockThinIndex* &pindexRet) const }; */ pindexRet = pindex; - return pindexBestHeader->nHeight - pindex->nHeight + 1; + return std::make_pair(pindexBestHeader->nHeight - pindex->nHeight + 1, pindex->nHeight); } -int CMerkleTx::GetDepthInMainChain(CBlockThinIndex* &pindexRet) const +std::pair CMerkleTx::GetDepthAndHeightInMainChain(CBlockThinIndex* &pindexRet) const { AssertLockHeld(cs_main); - int nResult = GetDepthInMainChainINTERNAL(pindexRet); - if (nResult == 0 && !mempool.exists(GetHash())) - return -1; // Not in chain, not in mempool + std::pair nResult = GetDepthAndHeightInMainChainINTERNAL(pindexRet); + if (nResult.first == 0 && !mempool.exists(GetHash())) + return std::make_pair(-1, -1); // Not in chain, not in mempool return nResult; } @@ -3106,7 +3245,16 @@ int CMerkleTx::GetBlocksToMaturity() const if (!(IsCoinBase() || IsCoinStake())) return 0; - return max(0, (nCoinbaseMaturity + 5) - GetDepthInMainChain()); + std::pair pDepthAndHeight = GetDepthAndHeightInMainChain(); + + // Block to maturity is only relevant for PoSv3 according to the consensus rule in CheckProofOfStake + if (pDepthAndHeight.second != -1 && !Params().IsProtocolV3(pDepthAndHeight.second)) + return 0; + + int nMaturity = IsCoinBase() ? nCoinbaseMaturity : + IsAnonCoinStake() ? Params().GetAnonStakeMinConfirmations() : + Params().GetStakeMinConfirmations(GetAdjustedTime()); + return max(0, nMaturity - pDepthAndHeight.first); } @@ -3310,7 +3458,7 @@ bool CTransaction::GetCoinAge(CTxDB& txdb, const CBlockIndex* pindexPrev, uint64 if (Params().IsProtocolV3(pindexPrev->nHeight)) { int nSpendDepth; - if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, nStakeMinConfirmations - 1, nSpendDepth)) + if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, Params().GetStakeMinConfirmations(nTime) - 1, nSpendDepth)) { LogPrint("coinage", "coin age skip nSpendDepth=%d\n", nSpendDepth + 1); continue; // only count coins meeting min confirmations requirement @@ -3395,6 +3543,7 @@ bool CBlock::AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos, const u if (!ComputeNextStakeModifier(pindexNew->pprev, nStakeModifier, fGeneratedStakeModifier)) return error("AddToBlockIndex() : ComputeNextStakeModifier() failed"); pindexNew->SetStakeModifier(nStakeModifier, fGeneratedStakeModifier); + // note prevout.hash contains keyImage if vin[0] is anon input pindexNew->bnStakeModifierV2 = ComputeStakeModifierV2(pindexNew->pprev, IsProofOfWork() ? hash : vtx[1].vin[0].prevout.hash); // Add to mapBlockIndex @@ -3428,7 +3577,8 @@ bool CBlock::AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos, const u hashPrevBestCoinBase = vtx[0].GetHash(); } - uiInterface.NotifyBlocksChanged(); + BlockChangedEvent blockChangedEvent = {nBestHeight, GetNumBlocksOfPeers(), IsInitialBlockDownload(), pindexBest->GetBlockTime()}; + uiInterface.NotifyBlocksChanged(blockChangedEvent); return true; } @@ -3474,7 +3624,8 @@ bool CBlock::CheckBlock(bool fCheckPOW, bool fCheckMerkleRoot, bool fCheckSig) c // Check proof-of-stake block signature if (fCheckSig && !CheckBlockSignature()) - return DoS(100, error("CheckBlock() : bad proof-of-stake block signature")); + return IsProofOfAnonStake() ? DoS(100, error("CheckBlock() : bad proof-of-anon-stake block signature")) : + DoS(100, error("CheckBlock() : bad proof-of-stake block signature")); } // Check transactions @@ -3534,6 +3685,12 @@ bool CBlock::AcceptBlock() if (mi == mapBlockIndex.end()) return DoS(10, error("AcceptBlock() : prev block not found")); CBlockIndex* pindexPrev = (*mi).second; + // Refuse to build on a chain operator or auto-recovery has flagged. The + // ProcessBlock entry check covers the normal incoming-block path; this + // mirrors it for callers that reach AcceptBlock directly (e.g. orphan + // reconnect loop). + if (!pindexPrev->IsValid()) + return error("AcceptBlock() : prev block %s is in invalid set", hashPrevBlock.ToString()); int nHeight = pindexPrev->nHeight+1; if (Params().IsProtocolV2(nHeight) && nVersion < 7) @@ -3599,6 +3756,48 @@ bool CBlock::AcceptBlock() if (fReindexing) return true; + // Prevent fake stake block spam attacks on forks + if (IsProofOfStake() && !chainActive.Contains(pindexPrev)) + { + // start at the block we're adding on to + CBlockIndex *last = pindexPrev; + + bool isAnonCoinStake = IsProofOfAnonStake(); + ec_point vchImage, vchImageIn; + if (isAnonCoinStake) + vtx[1].vin[0].ExtractKeyImage(vchImage); + + // while that block is not on the main chain + while (!chainActive.Contains(last)) + { + CBlock bl; + if (!bl.ReadFromDisk(last)) + return error("AcceptBlock() : ReadFromDisk for prev forked block failed"); + + // loop through every spent input from said block + for (CTransaction t : bl.vtx) + { + for (CTxIn in: t.vin) + { + if (in.IsAnonInput() != isAnonCoinStake) + continue; + + if (isAnonCoinStake) + { + in.ExtractKeyImage(vchImageIn); + if (vchImage == vchImageIn) + return DoS(100, error("AcceptBlock() : rejected because keyImage spent in prev forked block")); + } + else if (vtx[1].vin[0].prevout == in.prevout) + return DoS(100, error("AcceptBlock() : rejected because prevout spent in prev forked block")); + } + } + + // go to the parent block + last = last->pprev; + } + } + // Write block to history file if (!CheckDiskSpace(::GetSerializeSize(*this, SER_DISK, CLIENT_VERSION))) return error("AcceptBlock() : out of disk space"); @@ -3657,6 +3856,105 @@ uint256 CBlockThinIndex::GetBlockTrust() const return ((CBigNum(1)<<256) / (bnTarget+1)).getuint256(); } + +/** + * CChain implementation + */ +void CChain::SetTip(CBlockIndex *pindex) { + if (pindex == nullptr) { + vChain.clear(); + return; + } + vChain.resize(pindex->nHeight + 1); + while (pindex && vChain[pindex->nHeight] != pindex) { + vChain[pindex->nHeight] = pindex; + pindex = pindex->pprev; + } +} + + +// Walk a block's chain descendants via pnext and apply fn to each. Used by +// InvalidateBlock to flag descendants on the active chain and by +// ReconsiderBlock to clear them. Note we only follow pnext (active chain) +// because off-chain descendants don't extend the tip; if a peer later +// re-serves them, the parent check in AcceptBlock catches it. +static void WalkActiveDescendants(CBlockIndex* pstart, std::function fn) +{ + for (CBlockIndex* p = pstart ? pstart->pnext : NULL; p != NULL; p = p->pnext) + fn(p); +} + +bool InvalidateBlock(const uint256& hash) +{ + LOCK(cs_main); + + auto mi = mapBlockIndex.find(hash); + if (mi == mapBlockIndex.end()) + return error("InvalidateBlock: block %s not in index", hash.ToString()); + CBlockIndex* pindex = mi->second; + + // Flag the block and any on-chain descendants. Collect descendants first + // so a single batched txdb write commits the lot. + std::vector vTouched; + pindex->SetInvalid(); + vTouched.push_back(pindex); + WalkActiveDescendants(pindex, [&](CBlockIndex* p) { + p->SetInvalid(); + vTouched.push_back(p); + }); + + CTxDB txdb; + for (CBlockIndex* p : vTouched) { + if (!txdb.WriteBlockIndex(CDiskBlockIndex(p))) + return error("InvalidateBlock: WriteBlockIndex failed for %s", p->GetBlockHash().ToString()); + } + + // If the invalidated block is on the active chain, retreat the tip to + // its parent. We use the existing SetBestChain machinery so all the + // reorg-aware accounting (stake-modifier rewind, money supply, wallet + // notifications) runs as it would for a normal reorg. + if (pindex->IsInMainChain() && pindex->pprev) { + CBlock blockPrev; + if (!blockPrev.ReadFromDisk(pindex->pprev)) + return error("InvalidateBlock: ReadFromDisk(parent) failed"); + if (!blockPrev.SetBestChain(txdb, pindex->pprev)) + return error("InvalidateBlock: SetBestChain(parent) failed"); + pindex->pprev->pnext = NULL; + } + + LogPrintf("InvalidateBlock: %s at height %d marked invalid (+%d descendants); chain tip now %d\n", + hash.ToString(), pindex->nHeight, (int)vTouched.size() - 1, nBestHeight); + return true; +} + +bool ReconsiderBlock(const uint256& hash) +{ + LOCK(cs_main); + + auto mi = mapBlockIndex.find(hash); + if (mi == mapBlockIndex.end()) + return error("ReconsiderBlock: block %s not in index", hash.ToString()); + CBlockIndex* pindex = mi->second; + + std::vector vTouched; + pindex->ClearInvalid(); + vTouched.push_back(pindex); + WalkActiveDescendants(pindex, [&](CBlockIndex* p) { + p->ClearInvalid(); + vTouched.push_back(p); + }); + + CTxDB txdb; + for (CBlockIndex* p : vTouched) { + if (!txdb.WriteBlockIndex(CDiskBlockIndex(p))) + return error("ReconsiderBlock: WriteBlockIndex failed for %s", p->GetBlockHash().ToString()); + } + + LogPrintf("ReconsiderBlock: %s at height %d cleared (+%d descendants)\n", + hash.ToString(), pindex->nHeight, (int)vTouched.size() - 1); + return true; +} + bool ProcessBlock(CNode* pfrom, CBlock* pblock, uint256& hash) { AssertLockHeld(cs_main); @@ -3670,6 +3968,13 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock, uint256& hash) if (mapOrphanBlocks.count(hash)) return error("ProcessBlock() : already have block (orphan) %s", strHash.c_str()); + // Refuse blocks whose parent has been marked invalid (operator action or + // auto-detected divergence). Without this, peers could re-feed us the + // same wrong-fork chain after a manual invalidateblock. + auto miPrev = mapBlockIndex.find(pblock->hashPrevBlock); + if (miPrev != mapBlockIndex.end() && !miPrev->second->IsValid()) + return error("ProcessBlock() : parent %s is in invalid set", pblock->hashPrevBlock.ToString()); + // ppcoin: check proof-of-stake // Limited duplicity on stake: prevents block flood attack // Duplicate stake allowed only when there is orphan child block @@ -3708,15 +4013,26 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock, uint256& hash) if (setStakeSeenOrphan.count(pblock->GetProofOfStake()) && !mapOrphanBlocksByPrev.count(hash)) return error("ProcessBlock() : duplicate proof-of-stake (%s, %d) for orphan block %s", pblock->GetProofOfStake().first.ToString(), pblock->GetProofOfStake().second, hash.ToString()); } - PruneOrphanBlocks(); + const COrphanBlock* orphan = AddOrphanBlock(pblock); - // Ask this guy to fill in what we're missing - pfrom->PushGetBlocks(pindexBest, GetOrphanRoot(hash)); - // ppcoin: getblocks may not obtain the ancestor block rejected - // earlier by duplicate-stake check so we ask for it again directly - if (!IsInitialBlockDownload()) - pfrom->AskFor(CInv(MSG_BLOCK, WantedByOrphan(orphan))); + const CBlockIndex* pcheckpoint = Checkpoints::AutoSelectSyncCheckpoint(); + map::iterator it = mapOrphanBlocks.find(GetOrphanRoot(hash)); + if (it != mapOrphanBlocks.end() && it->second->nTime < pcheckpoint->nTime) + { + PruneOrphanBlocks(); + pfrom->Misbehaving(1); + return error("ProcessBlock() : orphan root block with timestamp before last checkpoint"); + } + else { + // Ask this guy to fill in what we're missing + pfrom->PushGetBlocks(pindexBest, GetOrphanRoot(hash)); + // ppcoin: getblocks may not obtain the ancestor block rejected + // earlier by duplicate-stake check so we ask for it again directly + if (!IsInitialBlockDownload()) + pfrom->AskFor(CInv(MSG_BLOCK, WantedByOrphan(orphan))); + PruneOrphanBlocks(); + } } return true; } @@ -3861,37 +4177,49 @@ bool CBlock::SignBlock(CWallet& wallet, int64_t nFees) static int64_t nLastCoinStakeSearchTime = GetAdjustedTime(); // startup timestamp - CKey key; - CTransaction txCoinStake; + int64_t nSearchTime = GetAdjustedTime(); // search to current time if (Params().IsProtocolV2(nBestHeight+1)) - txCoinStake.nTime &= ~STAKE_TIMESTAMP_MASK; - - int64_t nSearchTime = txCoinStake.nTime; // search to current time + nSearchTime &= ~STAKE_TIMESTAMP_MASK; // decrease granularity to 16 seconds if (nSearchTime > nLastCoinStakeSearchTime) { int64_t nSearchInterval = Params().IsProtocolV2(nBestHeight+1) ? 1 : nSearchTime - nLastCoinStakeSearchTime; - if (wallet.CreateCoinStake(nBits, nSearchInterval, nFees, txCoinStake, key)) + + CKey key; + CTransaction txCoinStake; + txCoinStake.nTime = nSearchTime; + + bool foundStake = false; + if (Params().IsForkV3(nSearchTime) && Params().IsProtocolV3(nBestHeight+1) && + wallet.CreateAnonCoinStake(nBits, nSearchInterval, nFees, txCoinStake, key)) + foundStake = true; + else { - if (txCoinStake.nTime >= pindexBest->GetPastTimeLimit()+1) - { + key.Clear(); + txCoinStake.SetNull(); + txCoinStake.nTime = nSearchTime; + if (wallet.CreateCoinStake(nBits, nSearchInterval, nFees, txCoinStake, key)) + foundStake = true; + } - // make sure coinstake would meet timestamp protocol - // as it would be the same as the block timestamp - vtx[0].nTime = nTime = txCoinStake.nTime; + if (foundStake && txCoinStake.nTime >= pindexBest->GetPastTimeLimit()+1) + { + // make sure coinstake would meet timestamp protocol + // as it would be the same as the block timestamp + vtx[0].nTime = nTime = txCoinStake.nTime; - // we have to make sure that we have no future timestamps in - // our transactions set - for (vector::iterator it = vtx.begin(); it != vtx.end();) - if (it->nTime > nTime) { it = vtx.erase(it); } else { ++it; } + // we have to make sure that we have no future timestamps in + // our transactions set + for (vector::iterator it = vtx.begin(); it != vtx.end();) + if (it->nTime > nTime) { it = vtx.erase(it); } else { ++it; } - vtx.insert(vtx.begin() + 1, txCoinStake); - hashMerkleRoot = BuildMerkleTree(); + vtx.insert(vtx.begin() + 1, txCoinStake); + hashMerkleRoot = BuildMerkleTree(); - // append a signature to our block - return key.Sign(GetHash(), vchBlockSig); - } + // append a signature to our block + return key.Sign(GetHash(), vchBlockSig); } + nLastCoinStakeSearchInterval = nSearchTime - nLastCoinStakeSearchTime; nLastCoinStakeSearchTime = nSearchTime; } @@ -3907,6 +4235,9 @@ bool CBlock::CheckBlockSignature() const if (vchBlockSig.empty()) return false; + if (IsProofOfAnonStake()) + return CheckAnonBlockSignature(); + vector vSolutions; txnouttype whichType; @@ -3942,6 +4273,18 @@ bool CBlock::CheckBlockSignature() const return false; } +bool CBlock::CheckAnonBlockSignature() const +{ + if (vtx.size() < 2 || !vtx[1].IsAnonCoinStake()) + return false; + + const CTxOut& txout = vtx[1].vout[1]; + const CScript &s = txout.scriptPubKey; + const CPubKey pkCoin = CPubKey(&s[2+1], EC_COMPRESSED_SIZE); + + return pkCoin.Verify(GetHash(), vchBlockSig); +} + bool CBlock::GetHashProof(uint256& hashProof) { // PoW is checked in CheckBlock() @@ -3978,7 +4321,7 @@ bool CheckDiskSpace(uint64_t nAdditionalBytes) string strMessage = _("Warning: Disk space is low!"); strMiscWarning = strMessage; LogPrintf("*** %s\n", strMessage.c_str()); - uiInterface.ThreadSafeMessageBox(strMessage, "ShadowCoin", CClientUIInterface::BTN_OK | CClientUIInterface::ICON_WARNING | CClientUIInterface::MODAL); + uiInterface.ThreadSafeMessageBox(strMessage, "ALIAS", CClientUIInterface::BTN_OK | CClientUIInterface::ICON_WARNING | CClientUIInterface::MODAL); StartShutdown(); return false; } @@ -4035,7 +4378,7 @@ FILE* AppendBlockFile(bool fHeaderFile, unsigned int& nFileRet, const char* fmod } -int LoadBlockIndex(bool fAllowNew) +int LoadBlockIndex(bool fAllowNew, std::function funcProgress) { LOCK(cs_main); @@ -4050,10 +4393,25 @@ int LoadBlockIndex(bool fAllowNew) if (nNodeMode == NT_FULL) { - if (!txdb.LoadBlockIndex()) - return 1; - - if (!pwalletMain->CacheAnonStats()) + int res = 1; + if (!txdb.LoadBlockIndex([&res] (const CBlockIndex* const pBlockIndex) -> bool { + // Check that the block matches the known checkpoint blocks + if (Checkpoints::CheckHardened(pBlockIndex->nHeight, pBlockIndex->GetBlockHash())) + return true; + else { + res = 3; + return error("LoadBlockIndex() : Block at height %d with hash %s does not match checkpoint.", + pBlockIndex->nHeight, pBlockIndex->GetBlockHash().GetHex()); + } + }, funcProgress)) + return res; + + if (!pwalletMain->CacheAnonStats(nBestHeight, [] (const unsigned mode, const uint32_t& nOutpus) -> void { + if (mode == 0) + uiInterface.InitMessage(strprintf(_("Read ATXOs... (%d)"), nOutpus)); + else + uiInterface.InitMessage(strprintf(_("Read spent ATXOs... (%d)"), nOutpus)); + })) LogPrintf("CacheAnonStats() failed.\n"); } else { @@ -4079,8 +4437,8 @@ int LoadBlockIndex(bool fAllowNew) }; // Start new block file - unsigned int nFile; - unsigned int nBlockPos; + unsigned int nFile = 0; + unsigned int nBlockPos = 0; if (nNodeMode == NT_FULL) { @@ -4179,7 +4537,7 @@ void PrintBlockTree() } } -bool LoadExternalBlockFile(int nFile, FILE* fileIn) +bool LoadExternalBlockFile(int nFile, FILE* fileIn, std::function funcProgress) { if (nNodeMode != NT_FULL) { @@ -4189,7 +4547,7 @@ bool LoadExternalBlockFile(int nFile, FILE* fileIn) int64_t nStart = GetTimeMillis(); - int nLoaded = 0; + uint32_t nLoaded = 0; { try { @@ -4247,8 +4605,10 @@ bool LoadExternalBlockFile(int nFile, FILE* fileIn) nLoaded++; nPos += 4 + nSize; - if (nLoaded % 20000 == 0) + if (nLoaded % 10000 == 0) LogPrintf("Loaded %d blocks and counting.\n", nLoaded); + if (funcProgress) + funcProgress(nLoaded); }; }; }; @@ -4277,7 +4637,7 @@ struct CImportingNow void ThreadImport(std::vector vImportFiles) { - RenameThread("shadow-loadblk"); + RenameThread("alias-loadblk"); CImportingNow imp; // -loadblock= @@ -4471,21 +4831,11 @@ static void ProcessGetData(CNode* pfrom) CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(mapBlockIndex); if (pcheckpoint && nHeight < pcheckpoint->nHeight) { - //if (!chainActive.Contains(mi->second)) - // -- check if best chain contains block - // necessary? faster way? (mark unlinked blocks) - CBlockIndex *pindex = pindexBest; - while (pindex && pindex != mi->second && pindex->pprev) - pindex = pindex->pprev; - - if ((!pindex->pprev && pindex != mi->second)) // reached start of chain. - { + if (!chainActive.Contains(mi->second)) LogPrintf("ProcessGetData(): ignoring request for old block that isn't in the main chain\n"); - } else - { + else send = true; - }; } else { send = true; @@ -4968,6 +5318,19 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, CAddress addrFrom; uint64_t nNonce = 1; vRecv >> pfrom->nVersion >> pfrom->nServices >> nTime >> addrMe; + + // Future fork condition. Enforce minimum protcol version based on nTime. + if (Params().IsForkV4(nTime)) { + if (pfrom->nVersion < LEGACY_CUTOFF_MIN_PROTOCOL_VERSION) + { + // disconnect from peers older than this proto version + LogPrintf("Peer %s using pre-fork version %i; disconnecting\n", pfrom->addr.ToString(), pfrom->nVersion); + pfrom->PushMessage("reject", strCommand, REJECT_OBSOLETE, strprintf("node < %d", LEGACY_CUTOFF_MIN_PROTOCOL_VERSION)); + pfrom->fDisconnect = true; + return false; + } + } + if (pfrom->nVersion < MIN_PEER_PROTO_VERSION) { // disconnect from peers older than this proto version @@ -5117,7 +5480,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, LogPrint("net", "receive version message: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", pfrom->nVersion, pfrom->nChainHeight, addrMe.ToString(), addrFrom.ToString(), pfrom->addr.ToString()); + LOCK(cs_main); cPeerBlockCounts.input(pfrom->nChainHeight); + + BlockChangedEvent blockChangedEvent = {nBestHeight, GetNumBlocksOfPeers(), IsInitialBlockDownload(), nNodeMode == NT_FULL ? pindexBest->GetBlockTime() : pindexBestHeader->GetBlockTime()}; + uiInterface.NotifyBlocksChanged(blockChangedEvent); } @@ -5195,7 +5562,12 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } int nRelayNodes = fReachable ? 2 : 1; // limited relaying of addresses outside our network(s) for (multimap::iterator mi = mapMix.begin(); mi != mapMix.end() && nRelayNodes-- > 0; ++mi) - ((*mi).second)->PushAddress(addr); + { + if (!addr.IsTorV3() || ((*mi).second)->nRecvVersion >= 60042) + ((*mi).second)->PushAddress(addr); + else + nRelayNodes++; + } } } // Do not store addresses outside our network @@ -5582,11 +5954,18 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, LogPrintf("Received mblk %d\n", nBlocks); nTimeLastMblkRecv = GetTime(); + // Bootstrap the orphan-stall watchdog clock on the very first + // mblk arrival of this session. After this, the watchdog only + // resets when SetBestChain actually advances the chain — so if + // every subsequent mblk is an orphan, BLOCK_ACCEPT_STALL_TIMEOUT + // eventually fires and SendMessages() forces a fresh getblocks. + if (nTimeLastBlockAccepted == 0) + nTimeLastBlockAccepted = GetTime(); { - LOCK(cs_main); for (uint32_t i = 0; i < nBlocks; ++i) { + LOCK(cs_main); CBlock &block = vBlocks[i]; uint256 hashBlock = block.GetHash(); @@ -5605,11 +5984,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (block.nDoS) pfrom->Misbehaving(block.nDoS); - - if (fSecMsgEnabled) - SecureMsgScanBlock(block); - }; - } // cs_main + } // cs_main + } } else if (strCommand == "mblkt" && !fImporting && !fReindexing) // Ignore blocks received while importing { @@ -5667,8 +6043,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (ProcessBlock(pfrom, &block, hashBlock)) mapAlreadyAskedFor.erase(inv); if (block.nDoS) pfrom->Misbehaving(block.nDoS); - if (fSecMsgEnabled) - SecureMsgScanBlock(block); } else if (strCommand == "merkleblock") { @@ -6016,9 +6390,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } else { - if (fSecMsgEnabled) - SecureMsgReceiveData(pfrom, strCommand, vRecv); - // Ignore unknown commands for extensibility } @@ -6512,22 +6883,67 @@ bool SendMessages(CNode* pto, std::vector &vNodesCopy, bool fSendTrickle if (!vGetData.empty()) pto->PushMessage("getdata", vGetData); - // - If syncing and !get mblk in MBLK_RECEIVE_TIMEOUT send another getblocks to random peer + // IBD stall watchdog. Two trigger conditions: + // (a) No mblk message received for MBLK_RECEIVE_TIMEOUT (60 s). + // The "peer went silent" case. + // (b) No block ACCEPTED for BLOCK_ACCEPT_STALL_TIMEOUT (5 min) + // even though mblks may still be flowing. This catches the + // "every received block is an orphan, mapOrphanBlocks grows + // without bound, MBLK_RECEIVE_TIMEOUT never fires because + // nTimeLastMblkRecv keeps getting refreshed" stall pattern. + // + // Either way the fix is the same: send a fresh getblocks from our + // current best to a (possibly different) peer so we start pulling + // the in-order range we actually need. + bool fMblkSilent = nTimeLastMblkRecv > 0 + && nTimeNow - nTimeLastMblkRecv > MBLK_RECEIVE_TIMEOUT; + bool fAcceptStalled = nTimeLastBlockAccepted > 0 + && nTimeNow - nTimeLastBlockAccepted > BLOCK_ACCEPT_STALL_TIMEOUT; if (nNodeMode == NT_FULL - && nTimeLastMblkRecv > 0 && pto->nChainHeight - nBestHeight > 256 - && nTimeNow - nTimeLastMblkRecv > MBLK_RECEIVE_TIMEOUT) + && (fMblkSilent || fAcceptStalled)) { pto->PushGetBlocks(pindexBest, uint256(0)); - if (fDebug) - LogPrintf("Sync timeout, getblocks to %s, from %d\n", pto->addr.ToString().c_str(), pindexBest->nHeight); - nTimeLastMblkRecv = nTimeNow; // reset timeout + LogPrintf("Sync %s, getblocks to %s, from %d\n", + fAcceptStalled ? "stall (orphans accumulating)" : "timeout", + pto->addr.ToString().c_str(), pindexBest->nHeight); + nTimeLastMblkRecv = nTimeNow; // reset both watchdogs + nTimeLastBlockAccepted = nTimeNow; + + // Auto-reorg: if the "orphans accumulating" watchdog has fired + // AUTOREORG_STALL_FIRINGS times in a row without our chain advancing + // a single block, the orphans are almost certainly the canonical + // chain that orphan-resolution can't walk back through (>500-block + // walk limit). Mark our current tip BLOCK_FAILED_VALID so the + // retreat-to-parent + parent-is-invalid check forces peers to feed + // us the alternate fork. Conservative gating below avoids triggering + // on healthy nodes that just hit a brief network hiccup. + static int nAutoReorgFirings = 0; + static int nLastBestAtFiring = -1; + if (fAcceptStalled) + { + if (nBestHeight == nLastBestAtFiring) { + nAutoReorgFirings++; + } else { + nAutoReorgFirings = 1; + nLastBestAtFiring = nBestHeight; + } + if (nAutoReorgFirings >= AUTOREORG_STALL_FIRINGS + && mapOrphanBlocks.size() >= AUTOREORG_MIN_ORPHANS + && pindexBest && pindexBest->pprev) + { + uint256 stuckHash = pindexBest->GetBlockHash(); + LogPrintf("Auto-reorg: tip %s height=%d stalled across %d watchdog firings " + "with %d orphans; invalidating to force alternate-chain pull.\n", + stuckHash.ToString(), nBestHeight, + nAutoReorgFirings, (int)mapOrphanBlocks.size()); + InvalidateBlock(stuckHash); + nAutoReorgFirings = 0; + nLastBestAtFiring = -1; + } + } } - - if (fSecMsgEnabled) - SecureMsgSendData(pto, fSendTrickle); // should be in cs_main? - return true; } diff --git a/src/main.h b/src/main.h index 6690d7e6b5..046b92259b 100644 --- a/src/main.h +++ b/src/main.h @@ -1,17 +1,25 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + #ifndef BITCOIN_MAIN_H #define BITCOIN_MAIN_H -#include "core.h" +#ifdef _MSC_BUILD +#define __PRETTY_FUNCTION__ BOOST_CURRENT_FUNCTION +#endif + +#include "primitives/core.h" #include "bignum.h" -#include "sync.h" -#include "txmempool.h" -#include "net.h" -#include "script.h" -#include "scrypt.h" +#include "util/sync.h" +#include "wallet/txmempool.h" +#include "net/net.h" +#include "script/script.h" +#include "crypto/scrypt.h" #include "state.h" #include @@ -24,6 +32,7 @@ class CBlock; class CBlockThin; class CBlockIndex; class CBlockThinIndex; +class CChain; class CKeyItem; class CReserveKey; @@ -44,6 +53,7 @@ static const unsigned int MAX_GETHEADERS_SZ = 2000; static const unsigned int MAX_MULTI_BLOCK_SIZE = 5120000; // 5MiB, most likely to hit MAX_MULTI_BLOCK_ELEMNTS first static const unsigned int MAX_MULTI_BLOCK_ELEMENTS = 64; // processing larger blocks is cpu intensive static const unsigned int MAX_MULTI_BLOCK_THIN_ELEMENTS = 128; +static const unsigned int TARGET_BLOCK_TIME = 96; /** No amount larger than this (in satoshi) is valid */ static const int64_t MAX_MONEY = std::numeric_limits::max(); @@ -53,14 +63,30 @@ inline bool MoneyRange(int64_t nValue) { return (nValue >= 0 && nValue <= MAX_MO static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC inline int64_t FutureDriftV1(int64_t nTime) { return nTime + 10 * 60; } -inline int64_t FutureDriftV2(int64_t nTime) { return nTime + 15; } +// Was +15s in upstream. Raised to +600s to tolerate live-network clock spread: +// peers' median offset can sit several minutes from real wall time and the +// per-peer spread alone exceeds 15s, causing every incoming tip block to fail +// CheckBlock's "timestamp too far in the future" check. This is a one-sided +// relaxation (we accept what peers already accepted); it cannot fork us off. +inline int64_t FutureDriftV2(int64_t nTime) { return nTime + 600; } inline int64_t FutureDrift(int64_t nTime, int nHeight) { return Params().IsProtocolV2(nHeight) ? FutureDriftV2(nTime) : FutureDriftV1(nTime); } -inline unsigned int GetTargetSpacing(int nHeight) { return Params().IsProtocolV2(nHeight) ? 64 : 60; } +inline unsigned int GetTargetSpacing(int nHeight, int64_t nBlockTime) { return Params().IsProtocolV2(nHeight) ? Params().IsForkV3(nBlockTime) ? TARGET_BLOCK_TIME : 64 : 60; } +inline std::pair GetRingSizeMinMax(int64_t nTime = 0) { + uint32_t nMinRingSize = 1, nMaxRingSize = MAX_RING_SIZE; + if (nTime == 0 || Params().IsForkV3(nTime)) + { + nMinRingSize = MIN_RING_SIZE; + if (nTime == 0 || !fTestNet) // TODO remove with next TESTNET restart + nMaxRingSize = MIN_RING_SIZE; + } + return std::make_pair(nMinRingSize, nMaxRingSize); +} extern CScript COINBASE_FLAGS; extern CCriticalSection cs_main; +extern CChain chainActive; extern std::map mapBlockIndex; extern std::map mapBlockThinIndex; extern std::set > setStakeSeen; @@ -91,14 +117,25 @@ extern std::set setpwalletRegistered; struct COrphanBlock { uint256 hashBlock; uint256 hashPrev; + unsigned int nTime; std::pair stake; std::vector vchBlock; }; extern std::map mapOrphanBlocks; +extern std::multimap mapOrphanBlocksByPrev; extern std::map mapOrphanBlockThins; +extern size_t nOrphanBlocksSize; +extern bool fStaleAnonCache; extern std::map mapAnonOutputStats; +struct CAnonBlockStat { + uint16_t nSpends, nOutputs, nStakingOutputs, nCompromisedOutputs; +}; +extern int nMaxAnonBlockCache; +extern std::map> mapAnonBlockStats; + + extern CTxMemPool mempool; @@ -122,16 +159,25 @@ void UnregisterWallet(CWallet* pwalletIn); void SyncWithWallets(const CTransaction& tx, const CBlock* pblock = NULL, bool fUpdate = false, bool fConnect = true); bool ProcessBlock(CNode* pfrom, CBlock* pblock, uint256& hash); bool CheckDiskSpace(uint64_t nAdditionalBytes=0); +// Mark a block hash (and any chain descendants) as invalid. If the block is +// on the active chain, the tip retreats to its parent. The flag persists in +// CDiskBlockIndex so peers re-serving the chain past this point cannot +// re-attach it. Returns false on unknown hash or persistence failure. +bool InvalidateBlock(const uint256& hash); +// Undo InvalidateBlock for a hash and its descendants. The next incoming +// block from peers (or the next chain-selection pass) can then re-extend +// through it. Idempotent if the hash was already valid. +bool ReconsiderBlock(const uint256& hash); FILE* OpenBlockFile(bool fHeaderFile, unsigned int nFile, unsigned int nBlockPos, const char* pszMode="rb"); FILE* AppendBlockFile(bool fHeaderFile, unsigned int& nFileRet, const char* fmode = "ab"); -int LoadBlockIndex(bool fAllowNew=true); +int LoadBlockIndex(bool fAllowNew=true, std::function funcProgress = nullptr); void PrintBlockTree(); CBlockIndex* FindBlockByHeight(int nHeight); CBlockThinIndex* FindBlockThinByHeight(int nHeight); bool ProcessMessages(CNode* pfrom); bool SendMessages(CNode* pto, std::vector &vNodesCopy, bool fSendTrickle); -bool LoadExternalBlockFile(int nFile, FILE* fileIn); +bool LoadExternalBlockFile(int nFile, FILE* fileIn, std::function funcProgress = nullptr); void ThreadImport(std::vector vImportFiles); bool CheckProofOfWork(uint256 hash, unsigned int nBits); @@ -142,7 +188,7 @@ int GetNumBlocksOfPeers(); bool IsInitialBlockDownload(); bool IsConfirmedInNPrevBlocks(const CTxIndex& txindex, const CBlockIndex* pindexFrom, int nMaxDepth, int& nActualDepth); std::string GetWarnings(std::string strFor); -bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock); +bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock, bool includemempool = false); bool GetTransactionBlockHash(const uint256 &hash, uint256 &hashBlock); bool GetKeyImage(CTxDB* ptxdb, ec_point& keyImage, CKeyImageSpent& keyImageSpent, bool& fInMempool); @@ -167,6 +213,7 @@ bool GetWalletFile(CWallet* pwallet, std::string &strWalletFileOut); /** Get statistics from node state */ bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats); +bool AddOrphanTx(const CTransaction& tx); /** Position on disk for a particular transaction. */ class CDiskTxPos @@ -333,6 +380,12 @@ class CTransaction return (vin.size() > 0 && (!vin[0].prevout.IsNull()) && vout.size() >= 2 && vout[0].IsEmpty()); } + bool IsAnonCoinStake() const + { + // ppcoin: the coin stake transaction is marked with the first output empty + return nVersion == ANON_TXN_VERSION && IsCoinStake(); + } + /** Check for standard transaction types @return True if all outputs (scriptPubKeys) use only standard transaction forms */ @@ -470,6 +523,7 @@ class CTransaction bool FetchInputs(CTxDB& txdb, const std::map& mapTestPool, bool fBlock, bool fMiner, MapPrevTx& inputsRet, bool& fInvalid); + bool CheckAnonInputAB(CTxDB &txdb, const CTxIn &txin, int iVin, int nRingSize, const std::vector &vchImage, int64_t &nCoinValue) const; bool CheckAnonInputs(CTxDB& txdb, int64_t& nSumValue, bool& fInvalid, bool fCheckExists); /** Sanity check previous transactions, then, if all checks succeed, @@ -503,8 +557,11 @@ bool AcceptToMemoryPool(CTxMemPool &pool, CTransaction &tx, CTxDB& txdb, bool *p class CMerkleTx : public CTransaction { private: - int GetDepthInMainChainINTERNAL(CBlockIndex* &pindexRet) const; - int GetDepthInMainChainINTERNAL(CBlockThinIndex* &pindexRet) const; + int GetDepthInMainChainINTERNAL(CBlockIndex* &pindexRet) const { return GetDepthAndHeightInMainChainINTERNAL(pindexRet).first; }; + int GetDepthInMainChainINTERNAL(CBlockThinIndex* &pindexRet) const { return GetDepthAndHeightInMainChainINTERNAL(pindexRet).first; }; + + std::pair GetDepthAndHeightInMainChainINTERNAL(CBlockIndex* &pindexRet) const; + std::pair GetDepthAndHeightInMainChainINTERNAL(CBlockThinIndex* &pindexRet) const; public: uint256 hashBlock; std::vector vMerkleBranch; @@ -548,19 +605,30 @@ class CMerkleTx : public CTransaction // -1 : not in blockchain, and not in memory pool (conflicted transaction) // 0 : in memory pool, waiting to be included in a block // >=1 : this many blocks deep in the main chain - int GetDepthInMainChain(CBlockIndex* &pindexRet) const; - int GetDepthInMainChain(CBlockThinIndex* &pindexRet) const; - int GetDepthInMainChain() const + int GetDepthInMainChain(CBlockIndex* &pindexRet) const { return GetDepthAndHeightInMainChain(pindexRet).first; }; + int GetDepthInMainChain(CBlockThinIndex* &pindexRet) const { return GetDepthAndHeightInMainChain(pindexRet).first; }; + int GetDepthInMainChain() const { return GetDepthAndHeightInMainChain().first; }; + + // Return depth and height of transaction in blockchain as pair. + // first contains the depth: + // -1 : not in blockchain, and not in memory pool (conflicted transaction) + // 0 : in memory pool, waiting to be included in a block + // >=1 : this many blocks deep in the main chain + // seconds contains the height of the block or -1 if the block is not in the blockchain + std::pair GetDepthAndHeightInMainChain(CBlockIndex* &pindexRet) const; + std::pair GetDepthAndHeightInMainChain(CBlockThinIndex* &pindexRet) const; + std::pair GetDepthAndHeightInMainChain() const { if (nNodeMode == NT_FULL) { CBlockIndex *pindexRet; - return GetDepthInMainChain(pindexRet); + return GetDepthAndHeightInMainChain(pindexRet); }; CBlockThinIndex *pindexRet; - return GetDepthInMainChain(pindexRet); + return GetDepthAndHeightInMainChain(pindexRet); } + bool IsInMainChain() const { if (nNodeMode == NT_THIN) @@ -790,6 +858,11 @@ class CBlock : public CBlockHeader return (vtx.size() > 1 && vtx[1].IsCoinStake()); } + bool IsProofOfAnonStake() const + { + return (vtx.size() > 1 && vtx[1].IsAnonCoinStake()); + } + bool IsProofOfWork() const { return !IsProofOfStake(); @@ -951,6 +1024,7 @@ class CBlock : public CBlockHeader bool AcceptBlock(); bool SignBlock(CWallet& keystore, int64_t nFees); bool CheckBlockSignature() const; + bool CheckAnonBlockSignature() const; bool GetHashProof(uint256& hashProof); @@ -1317,6 +1391,12 @@ class CBlockIndex nFlags |= BLOCK_STAKE_MODIFIER; } + // BLOCK_FAILED_VALID: persisted "do not accept blocks on this chain" + // marker. See state.h for the rationale. + bool IsValid() const { return !(nFlags & BLOCK_FAILED_VALID); } + void SetInvalid() { nFlags |= BLOCK_FAILED_VALID; } + void ClearInvalid() { nFlags &= ~BLOCK_FAILED_VALID; } + std::string ToString() const { return strprintf("CBlockIndex(nprev=%p, pnext=%p, nFile=%u, nBlockPos=%-6d nHeight=%d, nMint=%s, nMoneySupply=%s, nFlags=(%s)(%d)(%s), nStakeModifier=%016x, hashProof=%s, prevoutStake=(%s), nStakeTime=%d merkle=%s, hashBlock=%s)", @@ -1978,6 +2058,68 @@ class CBlockThinLocator } }; + +/** An in-memory indexed chain of blocks. */ +class CChain { +private: + std::vector vChain; + +public: + /** Returns the index entry for the genesis block of this chain, or nullptr if none. */ + CBlockIndex *Genesis() const { + return vChain.size() > 0 ? vChain[0] : nullptr; + } + + /** Returns the index entry for the tip of this chain, or nullptr if none. */ + CBlockIndex *Tip() const { + return vChain.size() > 0 ? vChain[vChain.size() - 1] : nullptr; + } + + /** Returns the index entry at a particular height in this chain, or nullptr if no such height exists. */ + CBlockIndex *operator[](int nHeight) const { + if (nHeight < 0 || nHeight >= (int)vChain.size()) + return nullptr; + return vChain[nHeight]; + } + + /** Compare two chains efficiently. */ + friend bool operator==(const CChain &a, const CChain &b) { + return a.vChain.size() == b.vChain.size() && + a.vChain[a.vChain.size() - 1] == b.vChain[b.vChain.size() - 1]; + } + + /** Efficiently check whether a block is present in this chain. */ + bool Contains(const CBlockIndex *pindex) const { + return (*this)[pindex->nHeight] == pindex; + } + + /** Find the successor of a block in this chain, or nullptr if the given index is not found or is the tip. */ + CBlockIndex *Next(const CBlockIndex *pindex) const { + if (Contains(pindex)) + return (*this)[pindex->nHeight + 1]; + else + return nullptr; + } + + /** Return the maximal height in the chain. Is equal to chain.Tip() ? chain.Tip()->nHeight : -1. */ + int Height() const { + return vChain.size() - 1; + } + + /** Set/initialize a chain with a given tip. */ + void SetTip(CBlockIndex *pindex); + + /** Return a CBlockLocator that refers to a block in this chain (by default the tip). */ + CBlockLocator GetLocator(const CBlockIndex *pindex = nullptr) const; + + /** Find the last common block between this chain and a block index entry. */ + const CBlockIndex *FindFork(const CBlockIndex *pindex) const; + + /** Find the earliest block with timestamp equal or greater than the given. */ + CBlockIndex* FindEarliestAtLeast(int64_t nTime) const; +}; + + /** Data structure that represents a partial merkle tree. * * It respresents a subset of the txid's of a known block, in a way that diff --git a/src/makefile.bsd b/src/makefile.bsd deleted file mode 100644 index bf34580f1e..0000000000 --- a/src/makefile.bsd +++ /dev/null @@ -1,192 +0,0 @@ -# Copyright (c) 2009-2010 Satoshi Nakamoto -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -USE_UPNP:=0 - -LINK:=$(CXX) - -DEFS=-DBOOST_SPIRIT_THREADSAFE - -DEFS += $(addprefix -I,$(CURDIR) $(CURDIR)/obj $(BOOST_INCLUDE_PATH) $(BDB_INCLUDE_PATH) $(OPENSSL_INCLUDE_PATH)) -LIBS = $(addprefix -L,$(BOOST_LIB_PATH) $(BDB_LIB_PATH) $(OPENSSL_LIB_PATH)) - -LMODE = dynamic -LMODE2 = dynamic -ifdef STATIC - LMODE = static - ifeq (${STATIC}, all) - LMODE2 = static - endif -endif - -# for boost 1.37, add -mt to the boost libraries -LIBS += \ - -Wl,-B$(LMODE) \ - -l boost_system$(BOOST_LIB_SUFFIX) \ - -l boost_filesystem$(BOOST_LIB_SUFFIX) \ - -l boost_program_options$(BOOST_LIB_SUFFIX) \ - -l boost_thread$(BOOST_LIB_SUFFIX) \ - -l db_cxx$(BDB_LIB_SUFFIX) \ - -l ssl \ - -l crypto \ - -l execinfo - -ifndef USE_UPNP - override USE_UPNP = - -endif -ifneq (${USE_UPNP}, -) - LIBS += -l miniupnpc - DEFS += -DUSE_UPNP=$(USE_UPNP) -endif - -LIBS+= \ - -Wl,-B$(LMODE2) \ - -l z \ - -l dl \ - -l pthread - - -# Hardening -# Make some classes of vulnerabilities unexploitable in case one is discovered. -# - # This is a workaround for Ubuntu bug #691722, the default -fstack-protector causes - # -fstack-protector-all to be ignored unless -fno-stack-protector is used first. - # see: https://bugs.launchpad.net/ubuntu/+source/gcc-4.5/+bug/691722 - HARDENING=-fno-stack-protector - - # Stack Canaries - # Put numbers at the beginning of each stack frame and check that they are the same. - # If a stack buffer if overflowed, it writes over the canary number and then on return - # when that number is checked, it won't be the same and the program will exit with - # a "Stack smashing detected" error instead of being exploited. - HARDENING+=-fstack-protector-all -Wstack-protector - - # Make some important things such as the global offset table read only as soon as - # the dynamic linker is finished building it. This will prevent overwriting of addresses - # which would later be jumped to. - LDHARDENING+=-Wl,-z,relro -Wl,-z,now - - # Build position independent code to take advantage of Address Space Layout Randomization - # offered by some kernels. - # see doc/build-unix.txt for more information. - ifdef PIE - HARDENING+=-fPIE - LDHARDENING+=-pie - endif - - # -D_FORTIFY_SOURCE=2 does some checking for potentially exploitable code patterns in - # the source such overflowing a statically defined buffer. - HARDENING+=-D_FORTIFY_SOURCE=2 -# - - -DEBUGFLAGS=-g - -# CXXFLAGS can be specified on the make command line, so we use xCXXFLAGS that only -# adds some defaults in front. Unfortunately, CXXFLAGS=... $(CXXFLAGS) does not work. -xCXXFLAGS=-O0 -msse2 -pthread -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter \ - $(DEBUGFLAGS) $(DEFS) $(HARDENING) $(CXXFLAGS) - -# LDFLAGS can be specified on the make command line, so we use xLDFLAGS that only -# adds some defaults in front. Unfortunately, LDFLAGS=... $(LDFLAGS) does not work. -xLDFLAGS=$(LDHARDENING) $(LDFLAGS) - -OBJS= \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/db.o \ - obj/init.o \ - obj/keystore.o \ - obj/main.o \ - obj/miner.o \ - obj/net.o \ - obj/protocol.o \ - obj/bitcoinrpc.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/noui.o \ - obj/kernel.o \ - obj/pbkdf2.o \ - obj/scrypt.o \ - obj/scrypt-arm.o \ - obj/scrypt-x86.o \ - obj/scrypt-x86_64.o \ - obj/zerocoin/Accumulator.o \ - obj/zerocoin/AccumulatorProofOfKnowledge.o \ - obj/zerocoin/Coin.o \ - obj/zerocoin/CoinSpend.o \ - obj/zerocoin/Commitment.o \ - obj/zerocoin/ParamGeneration.o \ - obj/zerocoin/Params.o \ - obj/zerocoin/SerialNumberSignatureOfKnowledge.o \ - obj/zerocoin/SpendMetaData.o \ - obj/zerocoin/ZeroTest.o - -all: shadowcoind - -LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a -DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) -DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) -OBJS += obj/txdb-leveldb.o -leveldb/libleveldb.a: - @echo "Building LevelDB ..."; cd leveldb; make libleveldb.a libmemenv.a; cd ..; -obj/txdb-leveldb.o: leveldb/libleveldb.a - -# auto-generated dependencies: --include obj/*.P - -obj/build.h: FORCE - /bin/sh ../share/genbuild.sh obj/build.h -version.cpp: obj/build.h -DEFS += -DHAVE_BUILD_INFO - -obj/scrypt-x86.o: scrypt-x86.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-x86_64.o: scrypt-x86_64.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-arm.o: scrypt-arm.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/%.o: %.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/zerocoin/%.o: zerocoin/%.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -shadowcoind: $(OBJS:obj/%=obj/%) - $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS) - -clean: - -rm -f shadowcoind - -rm -f obj/*.o - -rm -f obj/zerocoin/*.o - -rm -f obj/*.P - -rm -f obj/zerocoin/*.P - -rm -f obj/build.h - -FORCE: diff --git a/src/makefile.linux-mingw b/src/makefile.linux-mingw deleted file mode 100644 index c86a12ae11..0000000000 --- a/src/makefile.linux-mingw +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright (c) 2009-2010 Satoshi Nakamoto -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#TARGET_PLATFORM:=i686 -#TARGET_PLATFORM:=x86_64 - -HOSTDEPSDIR:=/usr/$(HOST) -CC:=$(HOST)-gcc -CXX:=$(HOST)-g++ -RANLIB=$(HOST)-ranlib -STRIP=$(HOST)-strip - -USE_UPNP:=1 - -INCLUDEPATHS= \ - -I"$(CURDIR)" \ - -I"$(CURDIR)"/obj \ - -I"$(HOSTDEPSDIR)/include" \ - -I"$(HOSTDEPSDIR)" \ - -I"$(DEPSDIR)/include" \ - -I"$(DEPSDIR)" - -LIBPATHS= \ - -L"$(HOSTDEPSDIR)" \ - -L"$(HOSTDEPSDIR)/lib" \ - -L"$(DEPSDIR)/lib" \ - -L"$(DEPSDIR)" - -LIBS= \ - -l boost_system-mt-s \ - -l boost_filesystem-mt-s \ - -l boost_program_options-mt-s \ - -l boost_thread_win32-mt-s \ - -l boost_chrono-mt-s \ - -l db_cxx \ - -l ssl \ - -l crypto \ - -l z - -DEFS=-D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -DBOOST_SPIRIT_THREADSAFE -DEBUGFLAGS=-g -CFLAGS=-O3 -msse2 -w -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) -LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -static -static-libgcc -static-libstdc++ - -ifndef USE_UPNP - override USE_UPNP = - -endif -ifneq (${USE_UPNP}, -) - LIBPATHS += -L"$(DEPSDIR)/miniupnpc" - LIBS += -l miniupnpc -l iphlpapi - DEFS += -DMINIUPNP_STATICLIB -DSTATICLIB -DUSE_UPNP=$(USE_UPNP) -endif - -LIBS += -l mingwthrd -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l mswsock -l shlwapi - -# TODO: make the mingw builds smarter about dependencies, like the linux/osx builds are -HEADERS = $(wildcard *.h) - -OBJS= \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/eckey.o \ - obj/extkey.o \ - obj/db.o \ - obj/init.o \ - obj/shadowcoind.o \ - obj/keystore.o \ - obj/miner.o \ - obj/main.o \ - obj/net.o \ - obj/protocol.o \ - obj/rpcprotocol.o \ - obj/rpcserver.o \ - obj/rpcclient.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/rpcsmessage.o \ - obj/rpcextkey.o \ - obj/rpcmnemonic.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/hash.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/noui.o \ - obj/kernel.o \ - obj/pbkdf2.o \ - obj/scrypt.o \ - obj/scrypt-arm.o \ - obj/scrypt-x86.o \ - obj/scrypt-x86_64.o \ - obj/smessage.o \ - obj/stealth.o \ - obj/ringsig.o \ - obj/core.o \ - obj/txmempool.o \ - obj/chainparams.o \ - obj/state.o \ - obj/bloom.o - -all: shadowcoind.exe - -LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a -DEFS += -I"$(CURDIR)/leveldb/include" -DEFS += -I"$(CURDIR)/leveldb/helpers" -OBJS += obj/txdb-leveldb.o -leveldb/libleveldb.a: - @echo "Building LevelDB ..." && cd leveldb && CC=$(CC) CXX=$(CXX) TARGET_OS=OS_WINDOWS_CROSSCOMPILE CXXFLAGS="-I$(INCLUDEPATHS)" LDFLAGS="-L$(LIBPATHS)" $(MAKE) libleveldb.a libmemenv.a && $(RANLIB) libleveldb.a && $(RANLIB) libmemenv.a && cd .. -obj/txdb-leveldb.o: leveldb/libleveldb.a - -obj/build.h: FORCE - /bin/sh ../share/genbuild.sh obj/build.h -version.cpp: obj/build.h -DEFS += -DHAVE_BUILD_INFO - -obj/%.o: %.cpp $(HEADERS) - $(CXX) -c $(CFLAGS) -o $@ $< - -obj/scrypt-x86.o: scrypt-x86.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-x86_64.o: scrypt-x86_64.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-arm.o: scrypt-arm.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -shadowcoind.exe: $(OBJS:obj/%=obj/%) - $(CXX) $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) -lshlwapi - $(STRIP) shadowcoind.exe - -clean: - -rm -f obj/*.o - -rm -f obj/zerocoin/*.o - -rm -f shadowcoind.exe - -rm -f obj/build.h - cd leveldb && TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) clean && cd .. - -FORCE: diff --git a/src/makefile.mingw b/src/makefile.mingw deleted file mode 100644 index 339d2a7dea..0000000000 --- a/src/makefile.mingw +++ /dev/null @@ -1,189 +0,0 @@ -# Copyright (c) 2009-2010 Satoshi Nakamoto -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -USE_UPNP:=1 -USE_WALLET:=1 - -INCLUDEPATHS= \ - -I"C:\Develop\deps\boost_1_59_0" \ - -I"C:\Develop\deps\db-4.8.30.NC\build_unix" \ - -I"C:\Develop\deps\openssl-1.0.2d\include" \ - -I"$(abspath obj)" - -TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) - -LIBPATHS= \ - -L"C:\Develop\deps\boost_1_59_0\bin.v2\libs" \ - -L"C:\Develop\deps\db-4.8.30.NC\build_unix" \ - -L"C:\Develop\deps\openssl-1.0.2d\lib" \ - -LIBS= \ - -l boost_system-mgw49-mt-s-1_59 \ - -l boost_filesystem-mgw49-mt-s-1_59 \ - -l boost_program_options-mgw49-mt-s-1_59 \ - -l boost_thread-mgw49-mt-s-1_59 \ - -l boost_chrono-mgw49-mt-s-1_59 \ - -l db_cxx \ - -l ssl \ - -l crypto \ - -l z - -DEFS=-DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -DBOOST_SPIRIT_THREADSAFE -DEBUGFLAGS=-g -CFLAGS=-mthreads -O3 -msse2 -w -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) -LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -static -static-libgcc -static-libstdc++ - -TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) - -ifndef USE_UPNP - override USE_UPNP = - -endif -ifneq (${USE_UPNP}, -) - INCLUDEPATHS += -I"C:\Develop\deps\miniupnpc-1.9\include" - LIBPATHS += -L"C:\Develop\deps\miniupnpc-1.9\lib" - LIBS += -l miniupnpc -l iphlpapi - DEFS += -DMINIUPNP_STATICLIB -DSTATICLIB -DUSE_UPNP=$(USE_UPNP) -endif - -LIBS += -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l mswsock -l shlwapi -# Hardening -# Make some classes of vulnerabilities unexploitable in case one is discovered. -# - # This is a workaround for Ubuntu bug #691722, the default -fstack-protector causes - # -fstack-protector-all to be ignored unless -fno-stack-protector is used first. - # see: https://bugs.launchpad.net/ubuntu/+source/gcc-4.5/+bug/691722 - HARDENING=-fno-stack-protector - - # Stack Canaries - # Put numbers at the beginning of each stack frame and check that they are the same. - # If a stack buffer if overflowed, it writes over the canary number and then on return - # when that number is checked, it won't be the same and the program will exit with - # a "Stack smashing detected" error instead of being exploited. - HARDENING+=-fstack-protector-all -Wstack-protector - - # Make some important things such as the global offset table read only as soon as - # the dynamic linker is finished building it. This will prevent overwriting of addresses - # which would later be jumped to. - LDHARDENING+=-Wl,-z,relro -Wl,-z,now - - # -D_FORTIFY_SOURCE=2 does some checking for potentially exploitable code patterns in - # the source such overflowing a statically defined buffer. - HARDENING+=-D_FORTIFY_SOURCE=2 -# -DEBUGFLAGS=-g - -# TODO: make the mingw builds smarter about dependencies, like the linux/osx builds are -HEADERS = $(wildcard *.h) - -OBJS= \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/eckey.o \ - obj/extkey.o \ - obj/db.o \ - obj/init.o \ - obj/shadowcoind.o \ - obj/keystore.o \ - obj/miner.o \ - obj/main.o \ - obj/net.o \ - obj/protocol.o \ - obj/rpcprotocol.o \ - obj/rpcserver.o \ - obj/rpcclient.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/rpcsmessage.o \ - obj/rpcextkey.o \ - obj/rpcmnemonic.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/hash.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/noui.o \ - obj/kernel.o \ - obj/pbkdf2.o \ - obj/scrypt.o \ - obj/scrypt-arm.o \ - obj/scrypt-x86.o \ - obj/scrypt-x86_64.o \ - obj/smessage.o \ - obj/stealth.o \ - obj/ringsig.o \ - obj/core.o \ - obj/txmempool.o \ - obj/chainparams.o \ - obj/state.o \ - obj/bloom.o - -all: shadowcoind.exe - -test check: test_shadow FORCE - ./test_shadow - -LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a -DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) -DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) -OBJS += obj/txdb-leveldb.o -leveldb/libleveldb.a: - @echo "Building LevelDB ..." && cd leveldb TARGET_OS=NATIVE_WINDOWS make libleveldb.a libmemenv.a cd .. -obj/txdb-leveldb.o: leveldb/libleveldb.a - -obj/build.h: FORCE - sh ../share/genbuild.sh obj/build.h - -version.cpp: obj/build.h -DEFS += -DHAVE_BUILD_INFO - -obj/%.o: %.cpp $(HEADERS) - $(CXX) -c $(CFLAGS) -o $@ $< - -shadowcoind.exe: $(OBJS:obj/%=obj/%) - $(CXX) $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) -lshlwapi - strip shadowcoind.exe - -obj/scrypt-x86.o: scrypt-x86.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-x86_64.o: scrypt-x86_64.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-arm.o: scrypt-arm.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) - -xTESTCXXFLAGS = -std=c++11 - -obj-test/%.o: test/%.cpp - $(CXX) -c $(TESTDEFS) $(xTESTCXXFLAGS) $(xCXXFLAGS) $(CFLAGS) $(LDFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -test_shadow.exe: $(TESTOBJS) $(filter-out obj/init.o obj/shadowcoind.o,$(OBJS:obj/%=obj/%)) - $(LINK) $(xCXXFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(TESTLIBS) $(xLDFLAGS) $(LIBS) - -clean: - -rm -f obj/*.o - -rm -f shadowcoind.exe - -rm -f obj/build.h - cd leveldb && TARGET_OS=NATIVE_WINDOWS $(MAKE) clean && cd .. - -rm -f test_shadow.exe - -rm -f obj-test/*.o - -rm -f obj-test/*.P - -FORCE: diff --git a/src/makefile.osx b/src/makefile.osx deleted file mode 100644 index 9df411e932..0000000000 --- a/src/makefile.osx +++ /dev/null @@ -1,166 +0,0 @@ -# -*- mode: Makefile; -*- -# Copyright (c) 2011 Bitcoin Developers -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -# Mac OS X makefile for shadowcoin -# Originally by Laszlo Hanyecz (solar@heliacal.net) -USE_UPNP:=0 -CXX=llvm-g++ -DEPSDIR=/usr/local/Cellar - -INCLUDEPATHS= \ - -I"$(CURDIR)" \ - -I"$(CURDIR)"/obj \ - -I"$(DEPSDIR)/include" \ - -I"$(DEPSDIR)/include/db48" - -LIBPATHS= \ - -L"$(DEPSDIR)/lib" \ - -L"$(DEPSDIR)/lib/db48" - -USE_UPNP:=1 - -LIBS= -dead_strip - -LIBS += \ - -ldb_cxx-4.8 \ - -lboost_system-mt \ - -lboost_filesystem-mt \ - -lboost_program_options-mt \ - -lboost_thread-mt \ - -lssl \ - -lcrypto - - -DEFS=-DMAC_OSX -DMSG_NOSIGNAL=0 -DBOOST_SPIRIT_THREADSAFE - -ifdef RELEASE -# Compile for maximum compatibility and smallest size. -# This requires that dependencies are compiled -# the same way. -CFLAGS = -arch x86_64 -stdlib=libc++ -else -CFLAGS = -arch x86_64 -stdlib=libc++ -g -msse2 -endif - -# ppc doesn't work because we don't support big-endian -CFLAGS += -Wall -Wextra -Wformat -Wno-ignored-qualifiers -Wformat-security -Wno-unused-parameter \ - $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) -OBJS= \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/eckey.o \ - obj/extkey.o \ - obj/db.o \ - obj/init.o \ - obj/shadowcoind.o \ - obj/keystore.o \ - obj/miner.o \ - obj/main.o \ - obj/net.o \ - obj/protocol.o \ - obj/rpcprotocol.o \ - obj/rpcserver.o \ - obj/rpcclient.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/rpcsmessage.o \ - obj/rpcextkey.o \ - obj/rpcmnemonic.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/hash.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/noui.o \ - obj/kernel.o \ - obj/pbkdf2.o \ - obj/scrypt.o \ - obj/scrypt-arm.o \ - obj/scrypt-x86.o \ - obj/scrypt-x86_64.o \ - obj/smessage.o \ - obj/stealth.o \ - obj/ringsig.o \ - obj/core.o \ - obj/txmempool.o \ - obj/chainparams.o \ - obj/state.o \ - obj/bloom.o - - - -all: shadowcoind - -test check: test_shadow FORCE - ./test_shadow -LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a -DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) -DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) -OBJS += obj/txdb-leveldb.o -leveldb/libleveldb.a: - @echo "Building LevelDB ..."; cd leveldb; make libleveldb.a libmemenv.a; cd ..; -obj/txdb-leveldb.o: leveldb/libleveldb.a - -# auto-generated dependencies: --include obj/*.P - -obj/build.h: FORCE - /bin/sh ../share/genbuild.sh obj/build.h -version.cpp: obj/build.h -DEFS += -DHAVE_BUILD_INFO -obj/scrypt-x86.o: scrypt-x86.S - $(CXX) -c $(CFLAGS) -MMD -o $@ $< -obj/scrypt-x86_64.o: scrypt-x86_64.S - $(CXX) -c $(CFLAGS) -MMD -o $@ $< -obj/scrypt-arm.o: scrypt-arm.S - $(CXX) -c $(CFLAGS) -MMD -o $@ $< - -obj/%.o: %.cpp - $(CXX) -c $(CFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -shadowcoind: $(OBJS:obj/%=obj/%) - $(LINK) $(CFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS) - - -TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) - -xTESTCXXFLAGS = -std=c++11 - -obj-test/%.o: test/%.cpp - $(CXX) -c $(TESTDEFS) $(xTESTCXXFLAGS) $(CFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -test_shadow: $(TESTOBJS) $(filter-out obj/init.o obj/shadowcoind.o,$(OBJS:obj/%=obj/%)) - $(LINK) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(TESTLIBS) $(xLDFLAGS) $(LIBS) - -clean: - -rm -f shadowcoind - -rm -f obj/*.o - -rm -f obj/*.P - -rm -f obj/build.h - -rm -f test_shadow - -rm -f obj-test/*.o - -rm -f obj-test/*.P - -cd leveldb && $(MAKE) clean || true - - -FORCE: \ No newline at end of file diff --git a/src/makefile.unix b/src/makefile.unix deleted file mode 100644 index 4364c46380..0000000000 --- a/src/makefile.unix +++ /dev/null @@ -1,229 +0,0 @@ -# Copyright (c) 2009-2010 Satoshi Nakamoto -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -USE_UPNP:=0 - -LINK:=$(CXX) -ARCH:=$(system lscpu | head -n 1 | awk '{print $2}') - -DEFS=-DBOOST_SPIRIT_THREADSAFE - -DEFS += $(addprefix -I,$(CURDIR) $(CURDIR)/obj $(BOOST_INCLUDE_PATH) $(BDB_INCLUDE_PATH) $(OPENSSL_INCLUDE_PATH)) -LIBS = $(addprefix -L,$(BOOST_LIB_PATH) $(BDB_LIB_PATH) $(OPENSSL_LIB_PATH)) - - -TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) - -LMODE = dynamic -LMODE2 = dynamic -ifdef STATIC - LMODE = static - ifeq (${STATIC}, all) - LMODE2 = static - endif -else - TESTDEFS += -DBOOST_TEST_DYN_LINK -endif - - -# for boost 1.37, add -mt to the boost libraries -LIBS += \ - -Wl,-B$(LMODE) \ - -l boost_system$(BOOST_LIB_SUFFIX) \ - -l boost_filesystem$(BOOST_LIB_SUFFIX) \ - -l boost_program_options$(BOOST_LIB_SUFFIX) \ - -l boost_thread$(BOOST_LIB_SUFFIX) \ - -l db_cxx$(BDB_LIB_SUFFIX) \ - -l ssl \ - -l crypto - -ifndef USE_UPNP - override USE_UPNP = - -endif -ifneq (${USE_UPNP}, -) - LIBS += -l miniupnpc - DEFS += -DUSE_UPNP=$(USE_UPNP) -endif - -LIBS+= \ - -Wl,-B$(LMODE2) \ - -l z \ - -l dl \ - -l pthread - -TESTLIBS += \ - -Wl,-B$(LMODE) \ - -l boost_unit_test_framework$(BOOST_LIB_SUFFIX) - -# Hardening -# Make some classes of vulnerabilities unexploitable in case one is discovered. -# - # This is a workaround for Ubuntu bug #691722, the default -fstack-protector causes - # -fstack-protector-all to be ignored unless -fno-stack-protector is used first. - # see: https://bugs.launchpad.net/ubuntu/+source/gcc-4.5/+bug/691722 - HARDENING=-fno-stack-protector - - # Stack Canaries - # Put numbers at the beginning of each stack frame and check that they are the same. - # If a stack buffer if overflowed, it writes over the canary number and then on return - # when that number is checked, it won't be the same and the program will exit with - # a "Stack smashing detected" error instead of being exploited. - HARDENING+=-fstack-protector-all -Wstack-protector - - # Make some important things such as the global offset table read only as soon as - # the dynamic linker is finished building it. This will prevent overwriting of addresses - # which would later be jumped to. - LDHARDENING+=-Wl,-z,relro -Wl,-z,now - - # Build position independent code to take advantage of Address Space Layout Randomization - # offered by some kernels. - # see doc/build-unix.txt for more information. - ifdef PIE - HARDENING+=-fPIE - LDHARDENING+=-pie - endif - - # -D_FORTIFY_SOURCE=2 does some checking for potentially exploitable code patterns in - # the source such overflowing a statically defined buffer. - HARDENING+=-D_FORTIFY_SOURCE=2 -# - - -DEBUGFLAGS=-g - - -ifeq (${ARCH}, i686) - EXT_OPTIONS=-msse2 -endif - - -# CXXFLAGS can be specified on the make command line, so we use xCXXFLAGS that only -# adds some defaults in front. Unfortunately, CXXFLAGS=... $(CXXFLAGS) does not work. -xCXXFLAGS=-O2 $(EXT_OPTIONS) -pthread -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter \ - $(DEBUGFLAGS) $(DEFS) $(HARDENING) $(CXXFLAGS) - -# LDFLAGS can be specified on the make command line, so we use xLDFLAGS that only -# adds some defaults in front. Unfortunately, LDFLAGS=... $(LDFLAGS) does not work. -xLDFLAGS=$(LDHARDENING) $(LDFLAGS) - -OBJS= \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/eckey.o \ - obj/extkey.o \ - obj/db.o \ - obj/init.o \ - obj/shadowcoind.o \ - obj/keystore.o \ - obj/miner.o \ - obj/main.o \ - obj/net.o \ - obj/protocol.o \ - obj/rpcprotocol.o \ - obj/rpcserver.o \ - obj/rpcclient.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/rpcsmessage.o \ - obj/rpcextkey.o \ - obj/rpcmnemonic.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/hash.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/noui.o \ - obj/kernel.o \ - obj/pbkdf2.o \ - obj/scrypt.o \ - obj/scrypt-arm.o \ - obj/scrypt-x86.o \ - obj/scrypt-x86_64.o \ - obj/smessage.o \ - obj/stealth.o \ - obj/ringsig.o \ - obj/core.o \ - obj/txmempool.o \ - obj/chainparams.o \ - obj/state.o \ - obj/bloom.o - - -all: shadowcoind - -test check: test_shadow FORCE - ./test_shadow - -LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a -DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) -DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) -OBJS += obj/txdb-leveldb.o -leveldb/libleveldb.a: - @echo "Building LevelDB ..."; cd leveldb; make libleveldb.a libmemenv.a; cd ..; -obj/txdb-leveldb.o: leveldb/libleveldb.a - - -# auto-generated dependencies: --include obj/*.P - -obj/build.h: FORCE - /bin/sh ../share/genbuild.sh obj/build.h -version.cpp: obj/build.h -DEFS += -DHAVE_BUILD_INFO - -obj/scrypt-x86.o: scrypt-x86.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-x86_64.o: scrypt-x86_64.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-arm.o: scrypt-arm.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/%.o: %.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -shadowcoind: $(OBJS:obj/%=obj/%) - $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS) - - -TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) - -xTESTCXXFLAGS = -std=c++11 - -obj-test/%.o: test/%.cpp - $(CXX) -c $(TESTDEFS) $(xTESTCXXFLAGS) $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -test_shadow: $(TESTOBJS) $(filter-out obj/init.o obj/shadowcoind.o,$(OBJS:obj/%=obj/%)) - $(LINK) $(xCXXFLAGS) -o $@ $(LIBPATHS) $^ $(TESTLIBS) $(xLDFLAGS) $(LIBS) - -clean: - -rm -f shadowcoind - -rm -f obj/*.o - -rm -f obj/*.P - -rm -f obj/build.h - -rm -f test_shadow - -rm -f obj-test/*.o - -rm -f obj-test/*.P - -cd leveldb && $(MAKE) clean || true - -FORCE: diff --git a/src/miner.h b/src/miner.h deleted file mode 100644 index 21e6baaf7d..0000000000 --- a/src/miner.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Copyright (c) 2013 The NovaCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef NOVACOIN_MINER_H -#define NOVACOIN_MINER_H - -#include "main.h" -#include "wallet.h" -#include "init.h" - -void ThreadStakeMiner(CWallet *pwallet); - -/* Generate a new block, without valid proof-of-work */ -CBlock* CreateNewBlock(CWallet* pwallet, bool fProofOfStake=false, int64_t* pFees = 0); - -/** Modify the extranonce in a block */ -void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce); - -/** Do mining precalculation */ -void FormatHashBuffers(CBlock* pblock, char* pmidstate, char* pdata, char* phash1); - -/** Check mined proof-of-work block */ -bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey); - -/** Check mined proof-of-stake block */ -bool CheckStake(CBlock* pblock, CWallet& wallet); - -/** Base sha256 mining transform */ -void SHA256Transform(void* pstate, void* pinput, const void* pinit); - -#endif // NOVACOIN_MINER_H diff --git a/src/net.cpp b/src/net.cpp deleted file mode 100644 index a4fe3eba43..0000000000 --- a/src/net.cpp +++ /dev/null @@ -1,1852 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "db.h" -#include "net.h" -#include "init.h" -#include "strlcpy.h" -#include "addrman.h" -#include "ui_interface.h" - -#ifdef WIN32 -#include -#endif - -#ifdef USE_UPNP -#include -#include -#include -#include -#endif - -// Dump addresses to peers.dat every 15 minutes (900s) -#define DUMP_ADDRESSES_INTERVAL 900 - -using namespace std; -using namespace boost; - -static const int MAX_OUTBOUND_CONNECTIONS = 16; - -bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false); - - -// -// Global state variables -// -bool fDiscover = true; -bool fUseUPnP = false; - -CCriticalSection cs_mapLocalHost; -map mapLocalHost; -static bool vfReachable[NET_MAX] = {}; -static bool vfLimited[NET_MAX] = {}; -static CNode* pnodeLocalHost = NULL; -static CNode* pnodeSync = NULL; -CAddress addrSeenByPeer(CService("0.0.0.0", 0), nLocalServices); -uint64_t nLocalHostNonce = 0; -static std::vector vhListenSocket; -CAddrMan addrman; - -vector vNodes; -CCriticalSection cs_vNodes; -CCriticalSection cs_connectNode; -map mapRelay; -deque > vRelayExpiration; -CCriticalSection cs_mapRelay; -map mapAlreadyAskedFor; - -static deque vOneShots; -CCriticalSection cs_vOneShots; - -set setservAddNodeAddresses; -CCriticalSection cs_setservAddNodeAddresses; - -vector vAddedNodes; -CCriticalSection cs_vAddedNodes; - -static CSemaphore *semOutbound = NULL; - -NodeId nLastNodeId = 0; -CCriticalSection cs_nLastNodeId; - -void AddOneShot(string strDest) -{ - LOCK(cs_vOneShots); - vOneShots.push_back(strDest); -} - -unsigned short GetListenPort() -{ - return (unsigned short)(GetArg("-port", Params().GetDefaultPort())); -} - -void CNode::PushGetBlocks(uint256& hashBegin, uint256 hashEnd) -{ - //pindexLastGetBlocksBegin = pindexBegin; - hashLastGetBlocksEnd = hashEnd; - - CBlockLocator blockLocator; - blockLocator.SetThin(hashBegin); - PushMessage("getblocks", blockLocator, hashEnd); -} - -void CNode::PushGetBlocks(CBlockIndex* pindexBegin, uint256 hashEnd) -{ - // Filter out duplicate requests - if (pindexBegin == pindexLastGetBlocksBegin && hashEnd == hashLastGetBlocksEnd) - return; - - pindexLastGetBlocksBegin = pindexBegin; - hashLastGetBlocksEnd = hashEnd; - - PushMessage("getblocks", CBlockLocator(pindexBegin), hashEnd); -} - -void CNode::PushGetBlocks(CBlockThinIndex* pindexBegin, uint256 hashEnd) -{ - // Filter out duplicate requests - if (pindexBegin == pindexLastGetBlockThinsBegin && hashEnd == hashLastGetBlocksEnd) - return; - - pindexLastGetBlockThinsBegin = pindexBegin; - hashLastGetBlocksEnd = hashEnd; - - PushMessage("getblocks", CBlockThinLocator(pindexBegin), hashEnd); -}; - -void CNode::PushGetHeaders(CBlockThinIndex* pindexBegin, uint256 hashEnd) -{ - // Filter out duplicate requests - if (pindexBegin == pindexLastGetBlockThinsBegin && hashEnd == hashLastGetBlocksEnd) - return; - - pindexLastGetBlockThinsBegin = pindexBegin; - hashLastGetBlocksEnd = hashEnd; - - PushMessage("getheaders", CBlockThinLocator(pindexBegin), hashEnd); -}; - - - -// find 'best' local address for a particular peer -bool GetLocal(CService& addr, const CNetAddr *paddrPeer) -{ - if (fNoListen) - return false; - - int nBestScore = -1; - int nBestReachability = -1; - { - LOCK(cs_mapLocalHost); - for (map::iterator it = mapLocalHost.begin(); it != mapLocalHost.end(); it++) - { - int nScore = (*it).second.nScore; - int nReachability = (*it).first.GetReachabilityFrom(paddrPeer); - if (nReachability > nBestReachability || (nReachability == nBestReachability && nScore > nBestScore)) - { - addr = CService((*it).first, (*it).second.nPort); - nBestReachability = nReachability; - nBestScore = nScore; - } - } - } - return nBestScore >= 0; -} - -// get best local address for a particular peer as a CAddress -// Otherwise, return the unroutable 0.0.0.0 but filled in with -// the normal parameters, since the IP may be changed to a useful -// one by discovery. -CAddress GetLocalAddress(const CNetAddr *paddrPeer) -{ - CAddress ret(CService("0.0.0.0",GetListenPort()),0); - CService addr; - if (GetLocal(addr, paddrPeer)) - { - ret = CAddress(addr); - } - ret.nServices = nLocalServices; - ret.nTime = GetAdjustedTime(); - return ret; -} - -bool RecvLine(SOCKET hSocket, string& strLine) -{ - strLine = ""; - while (true) - { - char c; - int nBytes = recv(hSocket, &c, 1, 0); - if (nBytes > 0) - { - if (c == '\n') - continue; - if (c == '\r') - return true; - strLine += c; - if (strLine.size() >= 9000) - return true; - } - else if (nBytes <= 0) - { - boost::this_thread::interruption_point(); - if (nBytes < 0) - { - int nErr = WSAGetLastError(); - if (nErr == WSAEMSGSIZE) - continue; - if (nErr == WSAEWOULDBLOCK || nErr == WSAEINTR || nErr == WSAEINPROGRESS) - { - MilliSleep(10); - continue; - } - } - if (!strLine.empty()) - return true; - if (nBytes == 0) - { - // socket closed - LogPrint("net", "socket closed\n"); - return false; - } - else - { - // socket error - int nErr = WSAGetLastError(); - LogPrint("net", "recv failed: %d\n", nErr); - return false; - } - } - } -} - -int GetnScore(const CService& addr) -{ - LOCK(cs_mapLocalHost); - if (mapLocalHost.count(addr) == LOCAL_NONE) - return 0; - return mapLocalHost[addr].nScore; -} - -// Is our peer's addrLocal potentially useful as an external IP source? -bool IsPeerAddrLocalGood(CNode *pnode) -{ - return fDiscover && pnode->addr.IsRoutable() && pnode->addrLocal.IsRoutable() && - !IsLimited(pnode->addrLocal.GetNetwork()); -} - -// used when scores of local addresses may have changed -// pushes better local address to peers -void static AdvertizeLocal() -{ - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - { - if (pnode->fSuccessfullyConnected) - { - CAddress addrLocal = GetLocalAddress(&pnode->addr); - if (addrLocal.IsRoutable() && (CService)addrLocal != (CService)pnode->addrLocal) - { - pnode->PushAddress(addrLocal); - pnode->addrLocal = addrLocal; - }; - }; - }; -} - - -void SetReachable(enum Network net, bool fFlag) -{ - LOCK(cs_mapLocalHost); - vfReachable[net] = fFlag; - if (net == NET_IPV6 && fFlag) - vfReachable[NET_IPV4] = true; -} - -// learn a new local address -bool AddLocal(const CService& addr, int nScore) -{ - if (!addr.IsRoutable()) - return false; - - if (!fDiscover && nScore < LOCAL_MANUAL) - return false; - - if (IsLimited(addr)) - return false; - - LogPrintf("AddLocal(%s,%i)\n", addr.ToString(), nScore); - - { - LOCK(cs_mapLocalHost); - bool fAlready = mapLocalHost.count(addr) > 0; - LocalServiceInfo &info = mapLocalHost[addr]; - if (!fAlready || nScore >= info.nScore) { - info.nScore = nScore + (fAlready ? 1 : 0); - info.nPort = addr.GetPort(); - } - SetReachable(addr.GetNetwork()); - } - - AdvertizeLocal(); - - return true; -} - -bool AddLocal(const CNetAddr &addr, int nScore) -{ - return AddLocal(CService(addr, GetListenPort()), nScore); -} - -/** Make a particular network entirely off-limits (no automatic connects to it) */ -void SetLimited(enum Network net, bool fLimited) -{ - if (net == NET_UNROUTABLE) - return; - LOCK(cs_mapLocalHost); - vfLimited[net] = fLimited; -} - -bool IsLimited(enum Network net) -{ - LOCK(cs_mapLocalHost); - return vfLimited[net]; -} - -bool IsLimited(const CNetAddr &addr) -{ - return IsLimited(addr.GetNetwork()); -} - -/** vote for a local address */ -bool SeenLocal(const CService& addr) -{ - { - LOCK(cs_mapLocalHost); - if (mapLocalHost.count(addr) == 0) - return false; - mapLocalHost[addr].nScore++; - } - - AdvertizeLocal(); - - return true; -} - -/** check whether a given address is potentially local */ -bool IsLocal(const CService& addr) -{ - LOCK(cs_mapLocalHost); - return mapLocalHost.count(addr) > 0; -} - -/** check whether a given address is in a network we can probably connect to */ -bool IsReachable(enum Network net) -{ - LOCK(cs_mapLocalHost); - return vfReachable[net] && !vfLimited[net]; -} - -bool IsReachable(const CNetAddr& addr) -{ - LOCK(cs_mapLocalHost); - enum Network net = addr.GetNetwork(); - return vfReachable[net] && !vfLimited[net]; -} - -void AddressCurrentlyConnected(const CService& addr) -{ - addrman.Connected(addr); -} - - -uint64_t CNode::nTotalBytesRecv = 0; -uint64_t CNode::nTotalBytesSent = 0; -CCriticalSection CNode::cs_totalBytesRecv; -CCriticalSection CNode::cs_totalBytesSent; - -CNode* FindNode(const CNetAddr& ip) -{ - { - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - if ((CNetAddr)pnode->addr == ip) - return (pnode); - } - return NULL; -} - -CNode* FindNode(const std::string& addrName) -{ - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - if (pnode->addrName == addrName) - return (pnode); - return NULL; -} - -CNode* FindNode(const CService& addr) -{ - { - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - if ((CService)pnode->addr == addr) - return (pnode); - } - return NULL; -} - -CNode* ConnectNode(CAddress addrConnect, const char *pszDest) -{ - // ConnectNode is called from multiple threads (ThreadOpenConnections, ThreadOpenAddedConnections) - // each thread must run duplicate, connect and push to vNodes together - // or it's possible to connect to the same peer twice - // don't want to lock cs_vNodes as ConnectSocket may be slow - LOCK(cs_connectNode); - - if (pszDest == NULL) { - - if (IsLocal(addrConnect)) - return NULL; - - // Look for an existing connection - CNode* pnode = FindNode((CService)addrConnect); - if (pnode) - { - pnode->AddRef(); - return pnode; - } - } - - - /// debug print - LogPrint("net", "trying connection %s lastseen=%.1fhrs\n", - pszDest ? pszDest : addrConnect.ToString(), - pszDest ? 0 : (double)(GetAdjustedTime() - addrConnect.nTime)/3600.0); - - // Connect - SOCKET hSocket; - bool proxyConnectionFailed = false; - if (pszDest ? ConnectSocketByName(addrConnect, hSocket, pszDest, Params().GetDefaultPort(), nConnectTimeout, &proxyConnectionFailed) : - ConnectSocket(addrConnect, hSocket, nConnectTimeout, &proxyConnectionFailed)) - { - addrman.Attempt(addrConnect); - - LogPrint("net", "connected %s\n", pszDest ? pszDest : addrConnect.ToString()); - - // Set to non-blocking -#ifdef WIN32 - u_long nOne = 1; - if (ioctlsocket(hSocket, FIONBIO, &nOne) == SOCKET_ERROR) - LogPrintf("ConnectSocket() : ioctlsocket non-blocking setting failed, error %d\n", WSAGetLastError()); -#else - if (fcntl(hSocket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR) - LogPrintf("ConnectSocket() : fcntl non-blocking setting failed, error %d\n", errno); -#endif - - // Add node - CNode* pnode = new CNode(hSocket, addrConnect, pszDest ? pszDest : "", false); - pnode->AddRef(); - - { - LOCK(cs_vNodes); - vNodes.push_back(pnode); - } - - pnode->nTimeConnected = GetTime(); - return pnode; - } else if (!proxyConnectionFailed) { - // If connecting to the node failed, and failure is not caused by a problem connecting to - // the proxy, mark this as an attempt. - addrman.Attempt(addrConnect); - } - - return NULL; -} - -void CNode::CloseSocketDisconnect() -{ - fDisconnect = true; - if (hSocket != INVALID_SOCKET) - { - LogPrint("net", "disconnecting node %s\n", addrName); - closesocket(hSocket); - hSocket = INVALID_SOCKET; - } - - // in case this fails, we'll empty the recv buffer when the CNode is deleted - TRY_LOCK(cs_vRecvMsg, lockRecv); - if (lockRecv) - vRecvMsg.clear(); - - // if this was the sync node, we'll need a new one - if (this == pnodeSync) - pnodeSync = NULL; -} - -void CNode::Cleanup() -{ -} - -void CNode::TryFlushSend() -{ - for (int i = 0; i < 3; ++i) - { - TRY_LOCK(cs_vSend, lockSend); - if (lockSend) - { - SocketSendData(this); - break; - }; - MilliSleep(10); - }; -} - - -void CNode::PushVersion() -{ - /// when NTP implemented, change to just nTime = GetAdjustedTime() - int64_t nTime = (fInbound ? GetAdjustedTime() : GetTime()); - CAddress addrYou = (addr.IsRoutable() && !IsProxy(addr) ? addr : CAddress(CService("0.0.0.0",0))); - CAddress addrMe = GetLocalAddress(&addr); - RAND_bytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce)); - LogPrint("net", "send version message: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", PROTOCOL_VERSION, nBestHeight, addrMe.ToString(), addrYou.ToString(), addr.ToString()); - - // -- node requirements are packed into the top 32 bits of nServices - //uint64_t nServices = ((uint64_t) nLocalRequirements) << 32 | nLocalServices; - uint64_t nServices = nLocalServices; - unsigned char *p = (unsigned char*)&nServices; // fortify - memcpy(p+4, &nLocalRequirements, 4); - - PushMessage("version", PROTOCOL_VERSION, nServices, nTime, addrYou, addrMe, - nLocalHostNonce, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector()), nBestHeight, nNodeMode); -} - - - - - -std::map CNode::setBanned; -CCriticalSection CNode::cs_setBanned; - -void CNode::ClearBanned() -{ - setBanned.clear(); -} - -bool CNode::IsBanned(CNetAddr ip) -{ - bool fResult = false; - { - LOCK(cs_setBanned); - std::map::iterator i = setBanned.find(ip); - if (i != setBanned.end()) - { - int64_t t = (*i).second; - if (GetTime() < t) - fResult = true; - } - } - return fResult; -} - -bool CNode::Misbehaving(int howmuch) -{ - if (addr.IsLocal()) - { - LogPrintf("Warning: Local node %s misbehaving (delta: %d)!\n", addrName, howmuch); - return false; - } - - nMisbehavior += howmuch; - if (nMisbehavior >= GetArg("-banscore", 100)) - { - int64_t banTime = GetTime()+GetArg("-bantime", 60*60*24); // Default 24-hour ban - LogPrintf("Misbehaving: %s (%d -> %d) DISCONNECTING\n", addr.ToString(), nMisbehavior-howmuch, nMisbehavior); - { - LOCK(cs_setBanned); - if (setBanned[addr] < banTime) - setBanned[addr] = banTime; - } - CloseSocketDisconnect(); - return true; - } else - LogPrintf("Misbehaving: %s (%d -> %d)\n", addr.ToString(), nMisbehavior-howmuch, nMisbehavior); - return false; -} - -bool CNode::SoftBan() -{ - // -- same as Misbehaving, but a shorter ban time - if (addr.IsLocal()) - { - LogPrintf("Warning: Tried to soft ban local node %s !\n", addrName.c_str()); - return false; - }; - - int64_t banTime = GetTime()+GetArg("-softbantime", 60*60*1); // Default 1-hour ban - LogPrintf("SoftBan: %s DISCONNECTING\n", addr.ToString().c_str()); - { - LOCK(cs_setBanned); - if (setBanned[addr] < banTime) - setBanned[addr] = banTime; - } - - CloseSocketDisconnect(); - - return true; -} - -#undef X -#define X(name) stats.name = name -void CNode::copyStats(CNodeStats &stats) -{ - stats.nodeid = this->GetId(); - X(nServices); - X(nLastSend); - X(nLastRecv); - X(nTimeConnected); - X(nTimeOffset); - X(addrName); - X(nVersion); - X(nTypeInd); - X(strSubVer); - X(fInbound); - X(nChainHeight); - X(nMisbehavior); - X(nSendBytes); - X(nRecvBytes); - stats.fSyncNode = (this == pnodeSync); - - // It is common for nodes with good ping times to suddenly become lagged, - // due to a new block arriving or other large transfer. - // Merely reporting pingtime might fool the caller into thinking the node was still responsive, - // since pingtime does not update until the ping is complete, which might take a while. - // So, if a ping is taking an unusually long time in flight, - // the caller can immediately detect that this is happening. - int64_t nPingUsecWait = 0; - if ((0 != nPingNonceSent) && (0 != nPingUsecStart)) { - nPingUsecWait = GetTimeMicros() - nPingUsecStart; - } - - // Raw ping time is in microseconds, but show it to user as whole seconds (Bitcoin users should be well used to small numbers with many decimal places by now :) - stats.dPingTime = (((double)nPingUsecTime) / 1e6); - stats.dPingWait = (((double)nPingUsecWait) / 1e6); - - // Leave string empty if addrLocal invalid (not filled in yet) - stats.addrLocal = addrLocal.IsValid() ? addrLocal.ToString() : ""; -} -#undef X - -// requires LOCK(cs_vRecvMsg) -bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes) -{ - while (nBytes > 0) { - - // get current incomplete message, or create a new one - if (vRecvMsg.empty() || - vRecvMsg.back().complete()) - vRecvMsg.push_back(CNetMessage(SER_NETWORK, nRecvVersion)); - - CNetMessage& msg = vRecvMsg.back(); - - // absorb network data - int handled; - if (!msg.in_data) - handled = msg.readHeader(pch, nBytes); - else - handled = msg.readData(pch, nBytes); - - if (handled < 0) - return false; - - pch += handled; - nBytes -= handled; - - if (msg.complete()) - msg.nTime = GetTimeMicros(); - } - - return true; -} - -int CNetMessage::readHeader(const char *pch, unsigned int nBytes) -{ - // copy data to temporary parsing buffer - unsigned int nRemaining = 24 - nHdrPos; - unsigned int nCopy = std::min(nRemaining, nBytes); - - memcpy(&hdrbuf[nHdrPos], pch, nCopy); - nHdrPos += nCopy; - - // if header incomplete, exit - if (nHdrPos < 24) - return nCopy; - - // deserialize to CMessageHeader - try { - hdrbuf >> hdr; - } - catch (std::exception &e) { - return -1; - } - - // reject messages larger than MAX_SIZE - if (hdr.nMessageSize > MAX_SIZE) - return -1; - - // switch state to reading message data - in_data = true; - - return nCopy; -} - -int CNetMessage::readData(const char *pch, unsigned int nBytes) -{ - unsigned int nRemaining = hdr.nMessageSize - nDataPos; - unsigned int nCopy = std::min(nRemaining, nBytes); - - if (vRecv.size() < nDataPos + nCopy) { - // Allocate up to 256 KiB ahead, but never more than the total message size. - vRecv.resize(std::min(hdr.nMessageSize, nDataPos + nCopy + 256 * 1024)); - } - - memcpy(&vRecv[nDataPos], pch, nCopy); - nDataPos += nCopy; - - return nCopy; -} - - - - - - - - - -// requires LOCK(cs_vSend) -void SocketSendData(CNode *pnode) -{ - std::deque::iterator it = pnode->vSendMsg.begin(); - - while (it != pnode->vSendMsg.end()) { - const CSerializeData &data = *it; - assert(data.size() > pnode->nSendOffset); - int nBytes = send(pnode->hSocket, &data[pnode->nSendOffset], data.size() - pnode->nSendOffset, MSG_NOSIGNAL | MSG_DONTWAIT); - if (nBytes > 0) { - pnode->nLastSend = GetTime(); - pnode->nSendBytes += nBytes; - pnode->nSendOffset += nBytes; - pnode->RecordBytesSent(nBytes); - if (pnode->nSendOffset == data.size()) { - pnode->nSendOffset = 0; - pnode->nSendSize -= data.size(); - it++; - } else { - // could not send full message; stop sending more - break; - } - } else { - if (nBytes < 0) { - // error - int nErr = WSAGetLastError(); - if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS) - { - LogPrintf("socket send error %d\n", nErr); - pnode->CloseSocketDisconnect(); - } - } - // couldn't send anything at all - break; - } - } - - if (it == pnode->vSendMsg.end()) { - assert(pnode->nSendOffset == 0); - assert(pnode->nSendSize == 0); - } - pnode->vSendMsg.erase(pnode->vSendMsg.begin(), it); -} - -static list vNodesDisconnected; - -void ThreadSocketHandler() -{ - unsigned int nPrevNodeCount = 0; - - while (true) - { - // - // Disconnect nodes - // - { - LOCK(cs_vNodes); - // Disconnect unused nodes - vector vNodesCopy = vNodes; - BOOST_FOREACH(CNode* pnode, vNodesCopy) - { - if (pnode->fDisconnect || - (pnode->GetRefCount() <= 0 && pnode->vRecvMsg.empty() && pnode->nSendSize == 0 && pnode->ssSend.empty())) - { - // remove from vNodes - vNodes.erase(remove(vNodes.begin(), vNodes.end(), pnode), vNodes.end()); - - // release outbound grant (if any) - pnode->grantOutbound.Release(); - - // close socket and cleanup - pnode->CloseSocketDisconnect(); - pnode->Cleanup(); - - // hold in disconnected pool until all refs are released - if (pnode->fNetworkNode || pnode->fInbound) - pnode->Release(); - vNodesDisconnected.push_back(pnode); - } - } - } - { - // Delete disconnected nodes - list vNodesDisconnectedCopy = vNodesDisconnected; - BOOST_FOREACH(CNode* pnode, vNodesDisconnectedCopy) - { - // wait until threads are done using it - if (pnode->GetRefCount() <= 0) - { - bool fDelete = false; - { - TRY_LOCK(pnode->cs_vSend, lockSend); - if (lockSend) - { - TRY_LOCK(pnode->cs_vRecvMsg, lockRecv); - if (lockRecv) - { - TRY_LOCK(pnode->cs_inventory, lockInv); - if (lockInv) - fDelete = true; - } - } - } - if (fDelete) - { - vNodesDisconnected.remove(pnode); - delete pnode; - } - } - } - } - if(vNodes.size() != nPrevNodeCount) { - nPrevNodeCount = vNodes.size(); - uiInterface.NotifyNumConnectionsChanged(nPrevNodeCount); - } - - - // - // Find which sockets have data to receive - // - struct timeval timeout; - timeout.tv_sec = 0; - timeout.tv_usec = 50000; // frequency to poll pnode->vSend - - fd_set fdsetRecv; - fd_set fdsetSend; - fd_set fdsetError; - FD_ZERO(&fdsetRecv); - FD_ZERO(&fdsetSend); - FD_ZERO(&fdsetError); - SOCKET hSocketMax = 0; - bool have_fds = false; - - BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket) { - FD_SET(hListenSocket, &fdsetRecv); - hSocketMax = max(hSocketMax, hListenSocket); - have_fds = true; - } - { - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - { - if (pnode->hSocket == INVALID_SOCKET) - continue; - { - TRY_LOCK(pnode->cs_vSend, lockSend); - if (lockSend) { - // do not read, if draining write queue - if (!pnode->vSendMsg.empty()) - FD_SET(pnode->hSocket, &fdsetSend); - else - FD_SET(pnode->hSocket, &fdsetRecv); - FD_SET(pnode->hSocket, &fdsetError); - hSocketMax = max(hSocketMax, pnode->hSocket); - have_fds = true; - } - } - } - } - - int nSelect = select(have_fds ? hSocketMax + 1 : 0, - &fdsetRecv, &fdsetSend, &fdsetError, &timeout); - boost::this_thread::interruption_point(); - - if (nSelect == SOCKET_ERROR) - { - if (have_fds) - { - int nErr = WSAGetLastError(); - LogPrintf("socket select error %d\n", nErr); - for (unsigned int i = 0; i <= hSocketMax; i++) - FD_SET(i, &fdsetRecv); - } - FD_ZERO(&fdsetSend); - FD_ZERO(&fdsetError); - MilliSleep(timeout.tv_usec/1000); - } - - - // - // Accept new connections - // - BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket) - if (hListenSocket != INVALID_SOCKET && FD_ISSET(hListenSocket, &fdsetRecv)) - { - struct sockaddr_storage sockaddr; - socklen_t len = sizeof(sockaddr); - SOCKET hSocket = accept(hListenSocket, (struct sockaddr*)&sockaddr, &len); - CAddress addr; - int nInbound = 0; - - if (hSocket != INVALID_SOCKET) - if (!addr.SetSockAddr((const struct sockaddr*)&sockaddr)) - LogPrintf("Warning: Unknown socket family\n"); - - { - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - if (pnode->fInbound) - nInbound++; - } - - if (hSocket == INVALID_SOCKET) - { - int nErr = WSAGetLastError(); - if (nErr != WSAEWOULDBLOCK) - LogPrintf("socket error accept failed: %d\n", nErr); - } - else if (nInbound >= GetArg("-maxconnections", 125) - MAX_OUTBOUND_CONNECTIONS) - { - closesocket(hSocket); - } - else if (CNode::IsBanned(addr)) - { - LogPrintf("connection from %s dropped (banned)\n", addr.ToString()); - closesocket(hSocket); - } - else - { - LogPrint("net", "accepted connection %s\n", addr.ToString()); - CNode* pnode = new CNode(hSocket, addr, "", true); - pnode->AddRef(); - { - LOCK(cs_vNodes); - vNodes.push_back(pnode); - } - } - } - - - // - // Service each socket - // - vector vNodesCopy; - { - LOCK(cs_vNodes); - vNodesCopy = vNodes; - BOOST_FOREACH(CNode* pnode, vNodesCopy) - pnode->AddRef(); - } - BOOST_FOREACH(CNode* pnode, vNodesCopy) - { - boost::this_thread::interruption_point(); - - // - // Receive - // - if (pnode->hSocket == INVALID_SOCKET) - continue; - if (FD_ISSET(pnode->hSocket, &fdsetRecv) || FD_ISSET(pnode->hSocket, &fdsetError)) - { - TRY_LOCK(pnode->cs_vRecvMsg, lockRecv); - if (lockRecv) - { - if (pnode->GetTotalRecvSize() > ReceiveFloodSize()) { - if (!pnode->fDisconnect) - LogPrintf("socket recv flood control disconnect (%u bytes)\n", pnode->GetTotalRecvSize()); - pnode->CloseSocketDisconnect(); - } - else { - // typical socket buffer is 8K-64K - char pchBuf[0x10000]; - int nBytes = recv(pnode->hSocket, pchBuf, sizeof(pchBuf), MSG_DONTWAIT); - if (nBytes > 0) - { - if (!pnode->ReceiveMsgBytes(pchBuf, nBytes)) - pnode->CloseSocketDisconnect(); - pnode->nLastRecv = GetTime(); - pnode->nRecvBytes += nBytes; - pnode->RecordBytesRecv(nBytes); - } - else if (nBytes == 0) - { - // socket closed gracefully - if (!pnode->fDisconnect) - LogPrint("net", "socket closed\n"); - pnode->CloseSocketDisconnect(); - } - else if (nBytes < 0) - { - // error - int nErr = WSAGetLastError(); - if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS) - { - if (!pnode->fDisconnect) - LogPrintf("socket recv error %d\n", nErr); - pnode->CloseSocketDisconnect(); - } - } - } - } - } - - // - // Send - // - if (pnode->hSocket == INVALID_SOCKET) - continue; - if (FD_ISSET(pnode->hSocket, &fdsetSend)) - { - TRY_LOCK(pnode->cs_vSend, lockSend); - if (lockSend) - SocketSendData(pnode); - } - - // - // Inactivity checking - // - int64_t nTime = GetTime(); - if (nTime - pnode->nTimeConnected > 60) - { - if (pnode->nLastRecv == 0 || pnode->nLastSend == 0) - { - LogPrint("net", "socket no message in first 60 seconds, %d %d\n", pnode->nLastRecv != 0, pnode->nLastSend != 0); - pnode->fDisconnect = true; - } - else if (nTime - pnode->nLastSend > TIMEOUT_INTERVAL) - { - LogPrintf("socket sending timeout: %ds\n", nTime - pnode->nLastSend); - pnode->fDisconnect = true; - } - else if (nTime - pnode->nLastRecv > TIMEOUT_INTERVAL) - { - LogPrintf("socket receive timeout: %ds\n", nTime - pnode->nLastRecv); - pnode->fDisconnect = true; - } - else if (pnode->nPingNonceSent && pnode->nPingUsecStart + TIMEOUT_INTERVAL * 1000000 < GetTimeMicros()) - { - LogPrintf("ping timeout: %fs\n", 0.000001 * (GetTimeMicros() - pnode->nPingUsecStart)); - pnode->fDisconnect = true; - } - } - } - { - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodesCopy) - pnode->Release(); - } - - MilliSleep(100); - } // main loop -} - - - - - - - - -#ifdef USE_UPNP -void ThreadMapPort() -{ - std::string port = strprintf("%u", GetListenPort()); - const char * multicastif = 0; - const char * minissdpdpath = 0; - struct UPNPDev * devlist = 0; - char lanaddr[64]; - -#ifndef UPNPDISCOVER_SUCCESS - /* miniupnpc 1.5 */ - devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0); -#elif MINIUPNPC_API_VERSION < 14 - /* miniupnpc 1.6 */ - int error = 0; - devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, &error); -#else - /* miniupnpc 1.9.20150730 */ - int error = 0; - devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, 2, &error); -#endif - - struct UPNPUrls urls; - struct IGDdatas data; - int r; - - r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr)); - if (r == 1) - { - if (fDiscover) { - char externalIPAddress[40]; - r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIPAddress); - if(r != UPNPCOMMAND_SUCCESS) - LogPrintf("UPnP: GetExternalIPAddress() returned %d\n", r); - else - { - if(externalIPAddress[0]) - { - LogPrintf("UPnP: ExternalIPAddress = %s\n", externalIPAddress); - AddLocal(CNetAddr(externalIPAddress), LOCAL_UPNP); - } - else - LogPrintf("UPnP: GetExternalIPAddress failed.\n"); - } - } - - string strDesc = "ShadowCoin " + FormatFullVersion(); - - try { - while (true) { -#ifndef UPNPDISCOVER_SUCCESS - /* miniupnpc 1.5 */ - r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, - port.c_str(), port.c_str(), lanaddr, strDesc.c_str(), "TCP", 0); -#else - /* miniupnpc 1.6 */ - r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, - port.c_str(), port.c_str(), lanaddr, strDesc.c_str(), "TCP", 0, "0"); -#endif - - if(r!=UPNPCOMMAND_SUCCESS) - LogPrintf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", - port, port, lanaddr, r, strupnperror(r)); - else - LogPrintf("UPnP Port Mapping successful.\n");; - - MilliSleep(20*60*1000); // Refresh every 20 minutes - } - } - catch (boost::thread_interrupted) - { - r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, port.c_str(), "TCP", 0); - LogPrintf("UPNP_DeletePortMapping() returned : %d\n", r); - freeUPNPDevlist(devlist); devlist = 0; - FreeUPNPUrls(&urls); - throw; - } - } else { - LogPrintf("No valid UPnP IGDs found\n"); - freeUPNPDevlist(devlist); devlist = 0; - if (r != 0) - FreeUPNPUrls(&urls); - } -} - -void MapPort(bool fUseUPnP) -{ - static boost::thread* upnp_thread = NULL; - - if (fUseUPnP) - { - if (upnp_thread) { - upnp_thread->interrupt(); - upnp_thread->join(); - delete upnp_thread; - } - upnp_thread = new boost::thread(boost::bind(&TraceThread, "upnp", &ThreadMapPort)); - } - else if (upnp_thread) { - upnp_thread->interrupt(); - upnp_thread->join(); - delete upnp_thread; - upnp_thread = NULL; - } -} - -#else -void MapPort(bool) -{ - // Intentionally left blank. -} -#endif - - - - - - -void ThreadDNSAddressSeed() -{ - // goal: only query DNS seeds if address need is acute - if ((addrman.size() > 0) && - (!GetBoolArg("-forcednsseed", false))) { - MilliSleep(11 * 1000); - - LOCK(cs_vNodes); - if (vNodes.size() >= 2) { - LogPrintf("P2P peers available. Skipped DNS seeding.\n"); - return; - } - } - - const vector &vSeeds = Params().DNSSeeds(); - int found = 0; - - LogPrintf("Loading addresses from DNS seeds (could take a while)\n"); - - BOOST_FOREACH(const CDNSSeedData &seed, vSeeds) { - if (HaveNameProxy()) { - AddOneShot(seed.host); - } else { - vector vIPs; - vector vAdd; - if (LookupHost(seed.host.c_str(), vIPs)) - { - BOOST_FOREACH(CNetAddr& ip, vIPs) - { - int nOneDay = 24*3600; - CAddress addr = CAddress(CService(ip, Params().GetDefaultPort())); - addr.nTime = GetTime() - 3*nOneDay - GetRand(4*nOneDay); // use a random age between 3 and 7 days old - vAdd.push_back(addr); - found++; - } - } - addrman.Add(vAdd, CNetAddr(seed.name, true)); - } - } - - LogPrintf("%d addresses found from DNS seeds\n", found); -} - -void DumpAddresses() -{ - int64_t nStart = GetTimeMillis(); - - CAddrDB adb; - adb.Write(addrman); - - LogPrint("net", "Flushed %d addresses to peers.dat %dms\n", - addrman.size(), GetTimeMillis() - nStart); -} - -void static ProcessOneShot() -{ - string strDest; - { - LOCK(cs_vOneShots); - if (vOneShots.empty()) - return; - strDest = vOneShots.front(); - vOneShots.pop_front(); - } - CAddress addr; - CSemaphoreGrant grant(*semOutbound, true); - if (grant) { - if (!OpenNetworkConnection(addr, &grant, strDest.c_str(), true)) - AddOneShot(strDest); - } -} - -void ThreadOpenConnections() -{ - // Connect to specific addresses - if (mapArgs.count("-connect") && mapMultiArgs["-connect"].size() > 0) - { - for (int64_t nLoop = 0;; nLoop++) - { - ProcessOneShot(); - BOOST_FOREACH(string strAddr, mapMultiArgs["-connect"]) - { - CAddress addr; - OpenNetworkConnection(addr, NULL, strAddr.c_str()); - for (int i = 0; i < 10 && i < nLoop; i++) - { - MilliSleep(500); - } - } - MilliSleep(500); - } - } - - // Initiate network connections - int64_t nStart = GetTime(); - while (true) - { - ProcessOneShot(); - - MilliSleep(500); - - CSemaphoreGrant grant(*semOutbound); - boost::this_thread::interruption_point(); - - // Add seed nodes if DNS seeds are all down (an infrastructure attack?). - if (addrman.size() == 0 && (GetTime() - nStart > 60)) { - static bool done = false; - if (!done) { - LogPrintf("Adding fixed seed nodes as DNS doesn't seem to be available.\n"); - addrman.Add(Params().FixedSeeds(), CNetAddr("127.0.0.1")); - done = true; - } - } - - // - // Choose an address to connect to based on most recently seen - // - CAddress addrConnect; - - // Only connect out to one peer per network group (/16 for IPv4). - // Do this here so we don't have to critsect vNodes inside mapAddresses critsect. - int nOutbound = 0; - set > setConnected; - { - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) { - if (!pnode->fInbound) { - setConnected.insert(pnode->addr.GetGroup()); - nOutbound++; - } - } - } - - int64_t nANow = GetAdjustedTime(); - - int nTries = 0; - while (true) - { - boost::this_thread::interruption_point(); - // use an nUnkBias between 10 (no outgoing connections) and 90 (8 outgoing connections) - CAddress addr = addrman.Select(10 + min(nOutbound,8)*10); - - // if we selected an invalid address, restart - if (!addr.IsValid() || setConnected.count(addr.GetGroup()) || IsLocal(addr)) - break; - - // If we didn't find an appropriate destination after trying 100 addresses fetched from addrman, - // stop this loop, and let the outer loop run again (which sleeps, adds seed nodes, recalculates - // already-connected network ranges, ...) before trying new addrman addresses. - nTries++; - if (nTries > 100) - break; - - if (IsLimited(addr)) - continue; - - // only consider very recently tried nodes after 30 failed attempts - if (nANow - addr.nLastTry < 600 && nTries < 30) - continue; - - // do not allow non-default ports, unless after 50 invalid addresses selected already - if (addr.GetPort() != Params().GetDefaultPort() && nTries < 50) - continue; - - addrConnect = addr; - break; - } - - if (addrConnect.IsValid()) - OpenNetworkConnection(addrConnect, &grant); - } -} - -void ThreadOpenAddedConnections() -{ - { - LOCK(cs_vAddedNodes); - vAddedNodes = mapMultiArgs["-addnode"]; - } - - if (HaveNameProxy()) { - while(true) { - list lAddresses(0); - { - LOCK(cs_vAddedNodes); - BOOST_FOREACH(string& strAddNode, vAddedNodes) - lAddresses.push_back(strAddNode); - } - BOOST_FOREACH(string& strAddNode, lAddresses) { - CAddress addr; - CSemaphoreGrant grant(*semOutbound); - OpenNetworkConnection(addr, &grant, strAddNode.c_str()); - MilliSleep(500); - } - MilliSleep(120000); // Retry every 2 minutes - } - } - - for (unsigned int i = 0; true; i++) - { - list lAddresses(0); - { - LOCK(cs_vAddedNodes); - BOOST_FOREACH(string& strAddNode, vAddedNodes) - lAddresses.push_back(strAddNode); - } - - list > lservAddressesToAdd(0); - BOOST_FOREACH(string& strAddNode, lAddresses) - { - vector vservNode(0); - if(Lookup(strAddNode.c_str(), vservNode, Params().GetDefaultPort(), fNameLookup, 0)) - { - lservAddressesToAdd.push_back(vservNode); - { - LOCK(cs_setservAddNodeAddresses); - BOOST_FOREACH(CService& serv, vservNode) - setservAddNodeAddresses.insert(serv); - } - } - } - // Attempt to connect to each IP for each addnode entry until at least one is successful per addnode entry - // (keeping in mind that addnode entries can have many IPs if fNameLookup) - { - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - for (list >::iterator it = lservAddressesToAdd.begin(); it != lservAddressesToAdd.end(); it++) - BOOST_FOREACH(CService& addrNode, *(it)) - if (pnode->addr == addrNode) - { - it = lservAddressesToAdd.erase(it); - it--; - break; - } - } - BOOST_FOREACH(vector& vserv, lservAddressesToAdd) - { - CSemaphoreGrant grant(*semOutbound); - OpenNetworkConnection(CAddress(vserv[i % vserv.size()]), &grant); - MilliSleep(500); - } - MilliSleep(120000); // Retry every 2 minutes - } -} - -// if successful, this moves the passed grant to the constructed node -bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound, const char *strDest, bool fOneShot) -{ - // - // Initiate outbound network connection - // - boost::this_thread::interruption_point(); - - if (!strDest) - { - if (IsLocal(addrConnect) || - FindNode((CNetAddr)addrConnect) || CNode::IsBanned(addrConnect) || - FindNode(addrConnect.ToStringIPPort().c_str())) - return false; - } - else if (FindNode(strDest)) - return false; - - CNode* pnode = ConnectNode(addrConnect, strDest); - boost::this_thread::interruption_point(); - - if (!pnode) - return false; - if (grantOutbound) - grantOutbound->MoveTo(pnode->grantOutbound); - pnode->fNetworkNode = true; - if (fOneShot) - pnode->fOneShot = true; - - return true; -} - - -// for now, use a very simple selection metric: the node from which we received -// most recently -static int64_t NodeSyncScore(const CNode *pnode) { - return pnode->nLastRecv; -} - - -void ThreadMessageHandler() -{ - SetThreadPriority(THREAD_PRIORITY_BELOW_NORMAL); - while (true) - { - boost::this_thread::interruption_point(); - vector vNodesCopy; - { - LOCK(cs_vNodes); - vNodesCopy = vNodes; - BOOST_FOREACH(CNode* pnode, vNodesCopy) - pnode->AddRef(); - } // cs_vNodes - - // Poll the connected nodes for messages - CNode* pnodeTrickle = NULL; - if (!vNodesCopy.empty()) - pnodeTrickle = vNodesCopy[GetRand(vNodesCopy.size())]; - - bool fSleep = true; - - //BOOST_FOREACH(CNode* pnode, vNodesCopy) - - size_t r = GetRandInt(vNodesCopy.size()-1); // randomise the order - for (size_t i = 0; i < vNodesCopy.size(); ++i) - { - CNode *pnode = vNodesCopy[(i + r) % vNodesCopy.size()]; - - if (pnode->fDisconnect) - continue; - - // Receive messages - { - TRY_LOCK(pnode->cs_vRecvMsg, lockRecv); - if (lockRecv) - { - if (!ProcessMessages(pnode)) - pnode->CloseSocketDisconnect(); - - if (pnode->nSendSize < SendBufferSize() && (!pnode->vRecvGetData.empty() || (!pnode->vRecvMsg.empty() && pnode->vRecvMsg[0].complete()))) - fSleep = false; - } - } // cs_vRecvMsg - - boost::this_thread::interruption_point(); - - // Send messages - { - TRY_LOCK(pnode->cs_vSend, lockSend); - if (lockSend) - SendMessages(pnode, vNodesCopy, pnode == pnodeTrickle); - } // cs_vSend - }; - - { - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodesCopy) - pnode->Release(); - } // cs_vNodes - - if (fSleep) - MilliSleep(100); - }; -} - - - - - - -bool BindListenPort(const CService &addrBind, string& strError) -{ - strError = ""; - int nOne = 1; - -#ifdef WIN32 - // Initialize Windows Sockets - WSADATA wsadata; - int ret = WSAStartup(MAKEWORD(2,2), &wsadata); - if (ret != NO_ERROR) - { - strError = strprintf("Error: TCP/IP socket library failed to start (WSAStartup returned error %d)", ret); - LogPrintf("%s\n", strError.c_str()); - return false; - }; -#endif - - // Create socket for listening for incoming connections - struct sockaddr_storage sockaddr; - socklen_t len = sizeof(sockaddr); - if (!addrBind.GetSockAddr((struct sockaddr*)&sockaddr, &len)) - { - strError = strprintf("Error: bind address family for %s not supported", addrBind.ToString()); - LogPrintf("%s\n", strError); - return false; - } - - SOCKET hListenSocket = socket(((struct sockaddr*)&sockaddr)->sa_family, SOCK_STREAM, IPPROTO_TCP); - if (hListenSocket == INVALID_SOCKET) - { - strError = strprintf("Error: Couldn't open socket for incoming connections (socket returned error %d)", WSAGetLastError()); - LogPrintf("%s\n", strError); - return false; - } - -#ifdef SO_NOSIGPIPE - // Different way of disabling SIGPIPE on BSD - setsockopt(hListenSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&nOne, sizeof(int)); -#endif - -#ifndef WIN32 - // Allow binding if the port is still in TIME_WAIT state after - // the program was closed and restarted. Not an issue on windows. - setsockopt(hListenSocket, SOL_SOCKET, SO_REUSEADDR, (void*)&nOne, sizeof(int)); -#endif - - -#ifdef WIN32 - // Set to non-blocking, incoming connections will also inherit this - if (ioctlsocket(hListenSocket, FIONBIO, (u_long*)&nOne) == SOCKET_ERROR) -#else - if (fcntl(hListenSocket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR) -#endif - { - strError = strprintf("Error: Couldn't set properties on socket for incoming connections (error %d)", WSAGetLastError()); - LogPrintf("%s\n", strError); - return false; - } - - // some systems don't have IPV6_V6ONLY but are always v6only; others do have the option - // and enable it by default or not. Try to enable it, if possible. - if (addrBind.IsIPv6()) { -#ifdef IPV6_V6ONLY -#ifdef WIN32 - setsockopt(hListenSocket, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&nOne, sizeof(int)); -#else - setsockopt(hListenSocket, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&nOne, sizeof(int)); -#endif -#endif -#ifdef WIN32 - int nProtLevel = 10 /* PROTECTION_LEVEL_UNRESTRICTED */; - int nParameterId = 23 /* IPV6_PROTECTION_LEVEl */; - // this call is allowed to fail - setsockopt(hListenSocket, IPPROTO_IPV6, nParameterId, (const char*)&nProtLevel, sizeof(int)); -#endif - } - - if (::bind(hListenSocket, (struct sockaddr*)&sockaddr, len) == SOCKET_ERROR) - { - int nErr = WSAGetLastError(); - if (nErr == WSAEADDRINUSE) - strError = strprintf(_("Unable to bind to %s on this computer. ShadowCoin is probably already running."), addrBind.ToString()); - else - strError = strprintf(_("Unable to bind to %s on this computer (bind returned error %d, %s)"), addrBind.ToString(), nErr, strerror(nErr)); - LogPrintf("%s\n", strError); - return false; - }; - - LogPrintf("Bound to %s\n", addrBind.ToString().c_str()); - - // Listen for incoming connections - if (listen(hListenSocket, SOMAXCONN) == SOCKET_ERROR) - { - strError = strprintf("Error: Listening for incoming connections failed (listen returned error %d)", WSAGetLastError()); - LogPrintf("%s\n", strError); - return false; - } - - vhListenSocket.push_back(hListenSocket); - - if (addrBind.IsRoutable() && fDiscover) - AddLocal(addrBind, LOCAL_BIND); - - return true; -} - -void static Discover(boost::thread_group& threadGroup) -{ - if (!fDiscover) - return; - -#ifdef WIN32 - // Get local host IP - char pszHostName[1000] = ""; - if (gethostname(pszHostName, sizeof(pszHostName)) != SOCKET_ERROR) - { - vector vaddr; - if (LookupHost(pszHostName, vaddr)) - { - BOOST_FOREACH (const CNetAddr &addr, vaddr) - { - AddLocal(addr, LOCAL_IF); - } - } - } -#else - // Get local host ip - struct ifaddrs* myaddrs; - if (getifaddrs(&myaddrs) == 0) - { - for (struct ifaddrs* ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next) - { - if (ifa->ifa_addr == NULL) continue; - if ((ifa->ifa_flags & IFF_UP) == 0) continue; - if (strcmp(ifa->ifa_name, "lo") == 0) continue; - if (strcmp(ifa->ifa_name, "lo0") == 0) continue; - if (ifa->ifa_addr->sa_family == AF_INET) - { - struct sockaddr_in* s4 = (struct sockaddr_in*)(ifa->ifa_addr); - CNetAddr addr(s4->sin_addr); - if (AddLocal(addr, LOCAL_IF)) - LogPrintf("IPv4 %s: %s\n", ifa->ifa_name, addr.ToString()); - } - else if (ifa->ifa_addr->sa_family == AF_INET6) - { - struct sockaddr_in6* s6 = (struct sockaddr_in6*)(ifa->ifa_addr); - CNetAddr addr(s6->sin6_addr); - if (AddLocal(addr, LOCAL_IF)) - LogPrintf("IPv6 %s: %s\n", ifa->ifa_name, addr.ToString()); - } - } - freeifaddrs(myaddrs); - } -#endif - -} - - -void StartNode(boost::thread_group& threadGroup) -{ - if (semOutbound == NULL) { - // initialize semaphore - int nMaxOutbound = min(MAX_OUTBOUND_CONNECTIONS, (int)GetArg("-maxconnections", 125)); - semOutbound = new CSemaphore(nMaxOutbound); - } - - if (pnodeLocalHost == NULL) - pnodeLocalHost = new CNode(INVALID_SOCKET, CAddress(CService("127.0.0.1", 0), nLocalServices)); - - Discover(threadGroup); - - // - // Start threads - // - - if (!GetBoolArg("-dnsseed", true)) - LogPrintf("DNS seeding disabled\n"); - else - threadGroup.create_thread(boost::bind(&TraceThread, "dnsseed", &ThreadDNSAddressSeed)); - - MapPort(GetBoolArg("-upnp", DEFAULT_UPNP)); - - // Send and receive from sockets, accept connections - threadGroup.create_thread(boost::bind(&TraceThread, "net", &ThreadSocketHandler)); - - // Initiate outbound connections from -addnode - threadGroup.create_thread(boost::bind(&TraceThread, "addcon", &ThreadOpenAddedConnections)); - - // Initiate outbound connections - threadGroup.create_thread(boost::bind(&TraceThread, "opencon", &ThreadOpenConnections)); - - // Process messages - threadGroup.create_thread(boost::bind(&TraceThread, "msghand", &ThreadMessageHandler)); - - // Dump network addresses - threadGroup.create_thread(boost::bind(&LoopForever, "dumpaddr", &DumpAddresses, DUMP_ADDRESSES_INTERVAL * 1000)); -} - -bool StopNode() -{ - LogPrintf("StopNode()\n"); - MapPort(false); - mempool.AddTransactionsUpdated(1); - if (semOutbound) - for (int i=0; ipost(); - DumpAddresses(); - return true; -} - -class CNetCleanup -{ -public: - CNetCleanup() - { - } - ~CNetCleanup() - { - // Close sockets - BOOST_FOREACH(CNode* pnode, vNodes) - if (pnode->hSocket != INVALID_SOCKET) - closesocket(pnode->hSocket); - BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket) - if (hListenSocket != INVALID_SOCKET) - if (closesocket(hListenSocket) == SOCKET_ERROR) - LogPrintf("closesocket(hListenSocket) failed with error %d\n", WSAGetLastError()); - -#ifdef WIN32 - // Shutdown Windows Sockets - WSACleanup(); -#endif - } -} -instance_of_cnetcleanup; - -void RelayTransaction(const CTransaction& tx, const uint256& hash) -{ - CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); - ss.reserve(10000); - ss << tx; - RelayTransaction(tx, hash, ss); -} - -void RelayTransaction(const CTransaction& tx, const uint256& hash, const CDataStream& ss) -{ - CInv inv(MSG_TX, hash); - { - LOCK(cs_mapRelay); - // Expire old relay messages - while (!vRelayExpiration.empty() && vRelayExpiration.front().first < GetTime()) - { - mapRelay.erase(vRelayExpiration.front().second); - vRelayExpiration.pop_front(); - } - - // Save original serialized message so newer versions are preserved - mapRelay.insert(std::make_pair(inv, ss)); - vRelayExpiration.push_back(std::make_pair(GetTime() + 15 * 60, inv)); - } - - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - { - if(!pnode->fRelayTxes) - continue; - LOCK(pnode->cs_filter); - if (pnode->pfilter) - { - if (pnode->pfilter->IsRelevantAndUpdate(tx)) - pnode->PushInventory(inv); - } else - { - pnode->PushInventory(inv); - }; - }; -} - -void CNode::RecordBytesRecv(uint64_t bytes) -{ - LOCK(cs_totalBytesRecv); - nTotalBytesRecv += bytes; -} - -void CNode::RecordBytesSent(uint64_t bytes) -{ - LOCK(cs_totalBytesSent); - nTotalBytesSent += bytes; -} - -uint64_t CNode::GetTotalBytesRecv() -{ - LOCK(cs_totalBytesRecv); - return nTotalBytesRecv; -} - -uint64_t CNode::GetTotalBytesSent() -{ - LOCK(cs_totalBytesSent); - return nTotalBytesSent; -} diff --git a/src/addrman.cpp b/src/net/addrman.cpp similarity index 98% rename from src/addrman.cpp rename to src/net/addrman.cpp index 40b36d6c34..930d7fe32b 100644 --- a/src/addrman.cpp +++ b/src/net/addrman.cpp @@ -1,9 +1,9 @@ -// Copyright (c) 2012 Pieter Wuille -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2012 Pieter Wuille +// +// SPDX-License-Identifier: MIT -#include "addrman.h" -#include "hash.h" +#include "net/addrman.h" +#include "crypto/hash.h" int CAddrInfo::GetTriedBucket(const std::vector &nKey) const { @@ -390,9 +390,9 @@ CAddress CAddrMan::Select_(int nUnkBias) { if (size() == 0) return CAddress(); - + int nTries = fTestNet ? 100 : 100000; - + double nCorTried = sqrt(nTried) * (100.0 - nUnkBias); double nCorNew = sqrt(nNew) * nUnkBias; if ((nCorTried + nCorNew)*GetRandInt(1<<30)/(1<<30) < nCorTried) @@ -431,7 +431,7 @@ CAddress CAddrMan::Select_(int nUnkBias) fChanceFactor *= fTestNet ? 12 : 1.2; }; }; - + return CAddress(); } diff --git a/src/net/addrman.h b/src/net/addrman.h new file mode 100644 index 0000000000..2b64d4403f --- /dev/null +++ b/src/net/addrman.h @@ -0,0 +1,948 @@ +// SPDX-FileCopyrightText: © 2012 Pieter Wuille +// +// SPDX-License-Identifier: MIT + +#ifndef _BITCOIN_ADDRMAN +#define _BITCOIN_ADDRMAN 1 + +#include "net/netbase.h" +#include "net/protocol.h" +#include "util/util.h" +#include "util/sync.h" + +#include +#include + +#include + + +/** Extended statistics about a CAddress */ +class CAddrInfo : public CAddress +{ +private: + // where knowledge about this address first came from + CNetAddr source; + + // last successful connection by us + int64_t nLastSuccess; + + // last try whatsoever by us: + // int64_t CAddress::nLastTry + + // connection attempts since last successful attempt + int nAttempts; + + // reference count in new sets (memory only) + int nRefCount; + + // in tried set? (memory only) + bool fInTried; + + // position in vRandom + int nRandomPos; + + friend class CAddrMan; + +public: + + IMPLEMENT_SERIALIZE( + CAddress* pthis = (CAddress*)(this); + READWRITE(*pthis); + READWRITE(source); + READWRITE(nLastSuccess); + READWRITE(nAttempts); + ) + + void Init() + { + nLastSuccess = 0; + nLastTry = 0; + nAttempts = 0; + nRefCount = 0; + fInTried = false; + nRandomPos = -1; + } + + CAddrInfo(const CAddress &addrIn, const CNetAddr &addrSource) : CAddress(addrIn), source(addrSource) + { + Init(); + } + + CAddrInfo() : CAddress(), source() + { + Init(); + } + + // Calculate in which "tried" bucket this entry belongs + int GetTriedBucket(const std::vector &nKey) const; + + // Calculate in which "new" bucket this entry belongs, given a certain source + int GetNewBucket(const std::vector &nKey, const CNetAddr& src) const; + + // Calculate in which "new" bucket this entry belongs, using its default source + int GetNewBucket(const std::vector &nKey) const + { + return GetNewBucket(nKey, source); + } + + // Determine whether the statistics about this entry are bad enough so that it can just be deleted + bool IsTerrible(int64_t nNow = GetAdjustedTime()) const; + + // Calculate the relative chance this entry should be given when selecting nodes to connect to + double GetChance(int64_t nNow = GetAdjustedTime()) const; + +}; + +// Stochastic address manager +// +// Design goals: +// * Only keep a limited number of addresses around, so that addr.dat and memory requirements do not grow without bound. +// * Keep the address tables in-memory, and asynchronously dump the entire to able in addr.dat. +// * Make sure no (localized) attacker can fill the entire table with his nodes/addresses. +// +// To that end: +// * Addresses are organized into buckets. +// * Address that have not yet been tried go into 256 "new" buckets. +// * Based on the address range (/16 for IPv4) of source of the information, 32 buckets are selected at random +// * The actual bucket is chosen from one of these, based on the range the address itself is located. +// * One single address can occur in up to 4 different buckets, to increase selection chances for addresses that +// are seen frequently. The chance for increasing this multiplicity decreases exponentially. +// * When adding a new address to a full bucket, a randomly chosen entry (with a bias favoring less recently seen +// ones) is removed from it first. +// * Addresses of nodes that are known to be accessible go into 64 "tried" buckets. +// * Each address range selects at random 4 of these buckets. +// * The actual bucket is chosen from one of these, based on the full address. +// * When adding a new good address to a full bucket, a randomly chosen entry (with a bias favoring less recently +// tried ones) is evicted from it, back to the "new" buckets. +// * Bucket selection is based on cryptographic hashing, using a randomly-generated 256-bit key, which should not +// be observable by adversaries. +// * Several indexes are kept for high performance. Defining DEBUG_ADDRMAN will introduce frequent (and expensive) +// consistency checks for the entire data structure. + +// total number of buckets for tried addresses +#define ADDRMAN_TRIED_BUCKET_COUNT 64 + +// maximum allowed number of entries in buckets for tried addresses +#define ADDRMAN_TRIED_BUCKET_SIZE 64 + +// total number of buckets for new addresses +#define ADDRMAN_NEW_BUCKET_COUNT 256 + +// maximum allowed number of entries in buckets for new addresses +#define ADDRMAN_NEW_BUCKET_SIZE 64 + +// over how many buckets entries with tried addresses from a single group (/16 for IPv4) are spread +#define ADDRMAN_TRIED_BUCKETS_PER_GROUP 4 + +// over how many buckets entries with new addresses originating from a single group are spread +#define ADDRMAN_NEW_BUCKETS_PER_SOURCE_GROUP 32 + +// in how many buckets for entries with new addresses a single address may occur +#define ADDRMAN_NEW_BUCKETS_PER_ADDRESS 4 + +// how many entries in a bucket with tried addresses are inspected, when selecting one to replace +#define ADDRMAN_TRIED_ENTRIES_INSPECT_ON_EVICT 4 + +// how old addresses can maximally be +#define ADDRMAN_HORIZON_DAYS 30 + +// after how many failed attempts we give up on a new node +#define ADDRMAN_RETRIES 3 + +// how many successive failures are allowed ... +#define ADDRMAN_MAX_FAILURES 10 + +// ... in at least this many days +#define ADDRMAN_MIN_FAIL_DAYS 7 + +// the maximum percentage of nodes to return in a getaddr call +#define ADDRMAN_GETADDR_MAX_PCT 23 + +// the maximum number of nodes to return in a getaddr call +#define ADDRMAN_GETADDR_MAX 2500 + +/** Stochastical (IP) address manager */ +class CAddrMan +{ +private: + // critical section to protect the inner data structures + mutable CCriticalSection cs; + + // secret key to randomize bucket select with + std::vector nKey; + + // last used nId + int nIdCount; + + // table with information about all nIds + std::map mapInfo; + + // find an nId based on its network address + std::map mapAddr; + + // randomly-ordered vector of all nIds + std::vector vRandom; + + // number of "tried" entries + int nTried; + + // list of "tried" buckets + std::vector > vvTried; + + // number of (unique) "new" entries + int nNew; + + // list of "new" buckets + std::vector > vvNew; + +protected: + + // Find an entry. + CAddrInfo* Find(const CNetAddr& addr, int *pnId = NULL); + + // find an entry, creating it if necessary. + // nTime and nServices of found node is updated, if necessary. + CAddrInfo* Create(const CAddress &addr, const CNetAddr &addrSource, int *pnId = NULL); + + // Swap two elements in vRandom. + void SwapRandom(unsigned int nRandomPos1, unsigned int nRandomPos2); + + // Return position in given bucket to replace. + int SelectTried(int nKBucket); + + // Remove an element from a "new" bucket. + // This is the only place where actual deletes occur. + // They are never deleted while in the "tried" table, only possibly evicted back to the "new" table. + int ShrinkNew(int nUBucket); + + // Move an entry from the "new" table(s) to the "tried" table + // @pre vvUnkown[nOrigin].count(nId) != 0 + void MakeTried(CAddrInfo& info, int nId, int nOrigin); + + // Mark an entry "good", possibly moving it from "new" to "tried". + void Good_(const CService &addr, int64_t nTime); + + // Add an entry to the "new" table. + bool Add_(const CAddress &addr, const CNetAddr& source, int64_t nTimePenalty); + + // Mark an entry as attempted to connect. + void Attempt_(const CService &addr, int64_t nTime); + + // Select an address to connect to. + // nUnkBias determines how much to favor new addresses over tried ones (min=0, max=100) + CAddress Select_(int nUnkBias); + +#ifdef DEBUG_ADDRMAN + // Perform consistency check. Returns an error code or zero. + int Check_(); +#endif + + // Select several addresses at once. + void GetAddr_(std::vector &vAddr); + + // Mark an entry as currently-connected-to. + void Connected_(const CService &addr, int64_t nTime); + +public: +#ifdef _MSC_BUILD + unsigned int GetSerializeSize(int nType, int nVersion) const + { + CSerActionGetSerializeSize ser_action; + const bool fGetSize = true; + const bool fWrite = false; + const bool fRead = false; + unsigned int nSerSize = 0; + ser_streamplaceholder s; + assert(fGetSize||fWrite||fRead); + s.nType = nType; + s.nVersion = nVersion; + // serialized format: + // * version byte (currently 0) + // * nKey + // * nNew + // * nTried + // * number of "new" buckets + // * all nNew addrinfos in vvNew + // * all nTried addrinfos in vvTried + // * for each bucket: + // * number of elements + // * for each element: index + // + // Notice that vvTried, mapAddr and vVector are never encoded explicitly; + // they are instead reconstructed from the other information. + // + // vvNew is serialized, but only used if ADDRMAN_UNKOWN_BUCKET_COUNT didn't change, + // otherwise it is reconstructed as well. + // + // This format is more complex, but significantly smaller (at most 1.5 MiB), and supports + // changes to the ADDRMAN_ parameters without breaking the on-disk structure. + { + LOCK(cs); + unsigned char nVersion = 0; + unsigned int nSerSize = 0; + READWRITE(nVersion); + READWRITE(nKey); + READWRITE(nNew); + READWRITE(nTried); + + CAddrMan *am = const_cast(this); + if (fWrite) + { + int nUBuckets = ADDRMAN_NEW_BUCKET_COUNT; + READWRITE(nUBuckets); + std::map mapUnkIds; + int nIds = 0; + for (std::map::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) + { + if (nIds == nNew) break; // this means nNew was wrong, oh ow + mapUnkIds[(*it).first] = nIds; + CAddrInfo &info = (*it).second; + if (info.nRefCount) + { + READWRITE(info); + nIds++; + } + } + nIds = 0; + for (std::map::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) + { + if (nIds == nTried) break; // this means nTried was wrong, oh ow + CAddrInfo &info = (*it).second; + if (info.fInTried) + { + READWRITE(info); + nIds++; + } + } + for (std::vector >::iterator it = am->vvNew.begin(); it != am->vvNew.end(); it++) + { + const std::set &vNew = (*it); + int nSize = vNew.size(); + READWRITE(nSize); + for (std::set::iterator it2 = vNew.begin(); it2 != vNew.end(); it2++) + { + int nIndex = mapUnkIds[*it2]; + READWRITE(nIndex); + } + } + } else { + int nUBuckets = 0; + READWRITE(nUBuckets); + am->nIdCount = 0; + am->mapInfo.clear(); + am->mapAddr.clear(); + am->vRandom.clear(); + am->vvTried = std::vector >(ADDRMAN_TRIED_BUCKET_COUNT, std::vector(0)); + am->vvNew = std::vector >(ADDRMAN_NEW_BUCKET_COUNT, std::set()); + for (int n = 0; n < am->nNew; n++) + { + CAddrInfo &info = am->mapInfo[n]; + READWRITE(info); + am->mapAddr[info] = n; + info.nRandomPos = vRandom.size(); + am->vRandom.push_back(n); + if (nUBuckets != ADDRMAN_NEW_BUCKET_COUNT) + { + am->vvNew[info.GetNewBucket(am->nKey)].insert(n); + info.nRefCount++; + } + } + am->nIdCount = am->nNew; + int nLost = 0; + for (int n = 0; n < am->nTried; n++) + { + CAddrInfo info; + READWRITE(info); + std::vector &vTried = am->vvTried[info.GetTriedBucket(am->nKey)]; + if (vTried.size() < ADDRMAN_TRIED_BUCKET_SIZE) + { + info.nRandomPos = vRandom.size(); + info.fInTried = true; + am->vRandom.push_back(am->nIdCount); + am->mapInfo[am->nIdCount] = info; + am->mapAddr[info] = am->nIdCount; + vTried.push_back(am->nIdCount); + am->nIdCount++; + } else { + nLost++; + } + } + am->nTried -= nLost; + for (int b = 0; b < nUBuckets; b++) + { + std::set &vNew = am->vvNew[b]; + int nSize = 0; + READWRITE(nSize); + for (int n = 0; n < nSize; n++) + { + int nIndex = 0; + READWRITE(nIndex); + CAddrInfo &info = am->mapInfo[nIndex]; + if (nUBuckets == ADDRMAN_NEW_BUCKET_COUNT && info.nRefCount < ADDRMAN_NEW_BUCKETS_PER_ADDRESS) + { + info.nRefCount++; + vNew.insert(nIndex); + } + } + } + } + } + return nSerSize; + } + template + void Serialize(Stream& s, int nType, int nVersion) const + { + CSerActionSerialize ser_action; + const bool fGetSize = false; + const bool fWrite = true; + const bool fRead = false; + unsigned int nSerSize = 0; + assert(fGetSize||fWrite||fRead); + // serialized format: + // * version byte (currently 0) + // * nKey + // * nNew + // * nTried + // * number of "new" buckets + // * all nNew addrinfos in vvNew + // * all nTried addrinfos in vvTried + // * for each bucket: + // * number of elements + // * for each element: index + // + // Notice that vvTried, mapAddr and vVector are never encoded explicitly; + // they are instead reconstructed from the other information. + // + // vvNew is serialized, but only used if ADDRMAN_UNKOWN_BUCKET_COUNT didn't change, + // otherwise it is reconstructed as well. + // + // This format is more complex, but significantly smaller (at most 1.5 MiB), and supports + // changes to the ADDRMAN_ parameters without breaking the on-disk structure. + { + LOCK(cs); + unsigned char nVersion = 0; + unsigned int nSerSize = 0; + READWRITE(nVersion); + READWRITE(nKey); + READWRITE(nNew); + READWRITE(nTried); + + CAddrMan *am = const_cast(this); + if (fWrite) + { + int nUBuckets = ADDRMAN_NEW_BUCKET_COUNT; + READWRITE(nUBuckets); + std::map mapUnkIds; + int nIds = 0; + for (std::map::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) + { + if (nIds == nNew) break; // this means nNew was wrong, oh ow + mapUnkIds[(*it).first] = nIds; + CAddrInfo &info = (*it).second; + if (info.nRefCount) + { + READWRITE(info); + nIds++; + } + } + nIds = 0; + for (std::map::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) + { + if (nIds == nTried) break; // this means nTried was wrong, oh ow + CAddrInfo &info = (*it).second; + if (info.fInTried) + { + READWRITE(info); + nIds++; + } + } + for (std::vector >::iterator it = am->vvNew.begin(); it != am->vvNew.end(); it++) + { + const std::set &vNew = (*it); + int nSize = vNew.size(); + READWRITE(nSize); + for (std::set::iterator it2 = vNew.begin(); it2 != vNew.end(); it2++) + { + int nIndex = mapUnkIds[*it2]; + READWRITE(nIndex); + } + } + } else { + int nUBuckets = 0; + READWRITE(nUBuckets); + am->nIdCount = 0; + am->mapInfo.clear(); + am->mapAddr.clear(); + am->vRandom.clear(); + am->vvTried = std::vector >(ADDRMAN_TRIED_BUCKET_COUNT, std::vector(0)); + am->vvNew = std::vector >(ADDRMAN_NEW_BUCKET_COUNT, std::set()); + for (int n = 0; n < am->nNew; n++) + { + CAddrInfo &info = am->mapInfo[n]; + READWRITE(info); + am->mapAddr[info] = n; + info.nRandomPos = vRandom.size(); + am->vRandom.push_back(n); + if (nUBuckets != ADDRMAN_NEW_BUCKET_COUNT) + { + am->vvNew[info.GetNewBucket(am->nKey)].insert(n); + info.nRefCount++; + } + } + am->nIdCount = am->nNew; + int nLost = 0; + for (int n = 0; n < am->nTried; n++) + { + CAddrInfo info; + READWRITE(info); + std::vector &vTried = am->vvTried[info.GetTriedBucket(am->nKey)]; + if (vTried.size() < ADDRMAN_TRIED_BUCKET_SIZE) + { + info.nRandomPos = vRandom.size(); + info.fInTried = true; + am->vRandom.push_back(am->nIdCount); + am->mapInfo[am->nIdCount] = info; + am->mapAddr[info] = am->nIdCount; + vTried.push_back(am->nIdCount); + am->nIdCount++; + } else { + nLost++; + } + } + am->nTried -= nLost; + for (int b = 0; b < nUBuckets; b++) + { + std::set &vNew = am->vvNew[b]; + int nSize = 0; + READWRITE(nSize); + for (int n = 0; n < nSize; n++) + { + int nIndex = 0; + READWRITE(nIndex); + CAddrInfo &info = am->mapInfo[nIndex]; + if (nUBuckets == ADDRMAN_NEW_BUCKET_COUNT && info.nRefCount < ADDRMAN_NEW_BUCKETS_PER_ADDRESS) + { + info.nRefCount++; + vNew.insert(nIndex); + } + } + } + } + } + } + template + void Unserialize(Stream& s, int nType, int nVersion) + { + CSerActionUnserialize ser_action; + const bool fGetSize = false; + const bool fWrite = false; + const bool fRead = true; + unsigned int nSerSize = 0; + assert(fGetSize||fWrite||fRead); + // serialized format: + // * version byte (currently 0) + // * nKey + // * nNew + // * nTried + // * number of "new" buckets + // * all nNew addrinfos in vvNew + // * all nTried addrinfos in vvTried + // * for each bucket: + // * number of elements + // * for each element: index + // + // Notice that vvTried, mapAddr and vVector are never encoded explicitly; + // they are instead reconstructed from the other information. + // + // vvNew is serialized, but only used if ADDRMAN_UNKOWN_BUCKET_COUNT didn't change, + // otherwise it is reconstructed as well. + // + // This format is more complex, but significantly smaller (at most 1.5 MiB), and supports + // changes to the ADDRMAN_ parameters without breaking the on-disk structure. + { + LOCK(cs); + unsigned char nVersion = 0; + unsigned int nSerSize = 0; + READWRITE(nVersion); + READWRITE(nKey); + READWRITE(nNew); + READWRITE(nTried); + + CAddrMan *am = const_cast(this); + if (fWrite) + { + int nUBuckets = ADDRMAN_NEW_BUCKET_COUNT; + READWRITE(nUBuckets); + std::map mapUnkIds; + int nIds = 0; + for (std::map::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) + { + if (nIds == nNew) break; // this means nNew was wrong, oh ow + mapUnkIds[(*it).first] = nIds; + CAddrInfo &info = (*it).second; + if (info.nRefCount) + { + READWRITE(info); + nIds++; + } + } + nIds = 0; + for (std::map::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) + { + if (nIds == nTried) break; // this means nTried was wrong, oh ow + CAddrInfo &info = (*it).second; + if (info.fInTried) + { + READWRITE(info); + nIds++; + } + } + for (std::vector >::iterator it = am->vvNew.begin(); it != am->vvNew.end(); it++) + { + const std::set &vNew = (*it); + int nSize = vNew.size(); + READWRITE(nSize); + for (std::set::iterator it2 = vNew.begin(); it2 != vNew.end(); it2++) + { + int nIndex = mapUnkIds[*it2]; + READWRITE(nIndex); + } + } + } else { + int nUBuckets = 0; + READWRITE(nUBuckets); + am->nIdCount = 0; + am->mapInfo.clear(); + am->mapAddr.clear(); + am->vRandom.clear(); + am->vvTried = std::vector >(ADDRMAN_TRIED_BUCKET_COUNT, std::vector(0)); + am->vvNew = std::vector >(ADDRMAN_NEW_BUCKET_COUNT, std::set()); + for (int n = 0; n < am->nNew; n++) + { + CAddrInfo &info = am->mapInfo[n]; + READWRITE(info); + am->mapAddr[info] = n; + info.nRandomPos = vRandom.size(); + am->vRandom.push_back(n); + if (nUBuckets != ADDRMAN_NEW_BUCKET_COUNT) + { + am->vvNew[info.GetNewBucket(am->nKey)].insert(n); + info.nRefCount++; + } + } + am->nIdCount = am->nNew; + int nLost = 0; + for (int n = 0; n < am->nTried; n++) + { + CAddrInfo info; + READWRITE(info); + std::vector &vTried = am->vvTried[info.GetTriedBucket(am->nKey)]; + if (vTried.size() < ADDRMAN_TRIED_BUCKET_SIZE) + { + info.nRandomPos = vRandom.size(); + info.fInTried = true; + am->vRandom.push_back(am->nIdCount); + am->mapInfo[am->nIdCount] = info; + am->mapAddr[info] = am->nIdCount; + vTried.push_back(am->nIdCount); + am->nIdCount++; + } else { + nLost++; + } + } + am->nTried -= nLost; + for (int b = 0; b < nUBuckets; b++) + { + std::set &vNew = am->vvNew[b]; + int nSize = 0; + READWRITE(nSize); + for (int n = 0; n < nSize; n++) + { + int nIndex = 0; + READWRITE(nIndex); + CAddrInfo &info = am->mapInfo[nIndex]; + if (nUBuckets == ADDRMAN_NEW_BUCKET_COUNT && info.nRefCount < ADDRMAN_NEW_BUCKETS_PER_ADDRESS) + { + info.nRefCount++; + vNew.insert(nIndex); + } + } + } + } + } + } +#endif + +#ifndef _MSC_BUILD + IMPLEMENT_SERIALIZE(({ + // serialized format: + // * version byte (currently 0) + // * nKey + // * nNew + // * nTried + // * number of "new" buckets + // * all nNew addrinfos in vvNew + // * all nTried addrinfos in vvTried + // * for each bucket: + // * number of elements + // * for each element: index + // + // Notice that vvTried, mapAddr and vVector are never encoded explicitly; + // they are instead reconstructed from the other information. + // + // vvNew is serialized, but only used if ADDRMAN_UNKOWN_BUCKET_COUNT didn't change, + // otherwise it is reconstructed as well. + // + // This format is more complex, but significantly smaller (at most 1.5 MiB), and supports + // changes to the ADDRMAN_ parameters without breaking the on-disk structure. + { + LOCK(cs); + unsigned char nVersion = 0; + unsigned int nSerSize = 0; + READWRITE(nVersion); + READWRITE(nKey); + READWRITE(nNew); + READWRITE(nTried); + + CAddrMan *am = const_cast(this); + if (fWrite) + { + int nUBuckets = ADDRMAN_NEW_BUCKET_COUNT; + READWRITE(nUBuckets); + std::map mapUnkIds; + int nIds = 0; + for (std::map::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) + { + if (nIds == nNew) break; // this means nNew was wrong, oh ow + mapUnkIds[(*it).first] = nIds; + CAddrInfo &info = (*it).second; + if (info.nRefCount) + { + READWRITE(info); + nIds++; + } + } + nIds = 0; + for (std::map::iterator it = am->mapInfo.begin(); it != am->mapInfo.end(); it++) + { + if (nIds == nTried) break; // this means nTried was wrong, oh ow + CAddrInfo &info = (*it).second; + if (info.fInTried) + { + READWRITE(info); + nIds++; + } + } + for (std::vector >::iterator it = am->vvNew.begin(); it != am->vvNew.end(); it++) + { + const std::set &vNew = (*it); + int nSize = vNew.size(); + READWRITE(nSize); + for (std::set::iterator it2 = vNew.begin(); it2 != vNew.end(); it2++) + { + int nIndex = mapUnkIds[*it2]; + READWRITE(nIndex); + } + } + } else { + int nUBuckets = 0; + READWRITE(nUBuckets); + am->nIdCount = 0; + am->mapInfo.clear(); + am->mapAddr.clear(); + am->vRandom.clear(); + am->vvTried = std::vector >(ADDRMAN_TRIED_BUCKET_COUNT, std::vector(0)); + am->vvNew = std::vector >(ADDRMAN_NEW_BUCKET_COUNT, std::set()); + for (int n = 0; n < am->nNew; n++) + { + CAddrInfo &info = am->mapInfo[n]; + READWRITE(info); + am->mapAddr[info] = n; + info.nRandomPos = vRandom.size(); + am->vRandom.push_back(n); + if (nUBuckets != ADDRMAN_NEW_BUCKET_COUNT) + { + am->vvNew[info.GetNewBucket(am->nKey)].insert(n); + info.nRefCount++; + } + } + am->nIdCount = am->nNew; + int nLost = 0; + for (int n = 0; n < am->nTried; n++) + { + CAddrInfo info; + READWRITE(info); + std::vector &vTried = am->vvTried[info.GetTriedBucket(am->nKey)]; + if (vTried.size() < ADDRMAN_TRIED_BUCKET_SIZE) + { + info.nRandomPos = vRandom.size(); + info.fInTried = true; + am->vRandom.push_back(am->nIdCount); + am->mapInfo[am->nIdCount] = info; + am->mapAddr[info] = am->nIdCount; + vTried.push_back(am->nIdCount); + am->nIdCount++; + } else { + nLost++; + } + } + am->nTried -= nLost; + for (int b = 0; b < nUBuckets; b++) + { + std::set &vNew = am->vvNew[b]; + int nSize = 0; + READWRITE(nSize); + for (int n = 0; n < nSize; n++) + { + int nIndex = 0; + READWRITE(nIndex); + CAddrInfo &info = am->mapInfo[nIndex]; + if (nUBuckets == ADDRMAN_NEW_BUCKET_COUNT && info.nRefCount < ADDRMAN_NEW_BUCKETS_PER_ADDRESS) + { + info.nRefCount++; + vNew.insert(nIndex); + } + } + } + } + } + });) +#endif + + void Clear() + { + { + LOCK(cs); + vRandom.clear(); + vvTried = std::vector >(ADDRMAN_TRIED_BUCKET_COUNT, std::vector(0)); + vvNew = std::vector >(ADDRMAN_NEW_BUCKET_COUNT, std::set()); + nIdCount = 0; + nTried = 0; + nNew = 0; + mapInfo.clear(); + mapAddr.clear(); + } + } + + CAddrMan() : vRandom(0), vvTried(ADDRMAN_TRIED_BUCKET_COUNT, std::vector(0)), vvNew(ADDRMAN_NEW_BUCKET_COUNT, std::set()) + { + nKey.resize(32); + RAND_bytes(&nKey[0], 32); + + nIdCount = 0; + nTried = 0; + nNew = 0; + } + + // Return the number of (unique) addresses in all tables. + int size() + { + return vRandom.size(); + } + + // Consistency check + void Check() + { +#ifdef DEBUG_ADDRMAN + { + LOCK(cs); + int err; + if ((err=Check_())) + LogPrintf("ADDRMAN CONSISTENCY CHECK FAILED!!! err=%i\n", err); + } +#endif + } + + // Add a single address. + bool Add(const CAddress &addr, const CNetAddr& source, int64_t nTimePenalty = 0) + { + bool fRet = false; + { + LOCK(cs); + Check(); + fRet |= Add_(addr, source, nTimePenalty); + Check(); + } + if (fRet) + LogPrintf("Added %s from %s: %i tried, %i new\n", addr.ToStringIPPort().c_str(), source.ToString().c_str(), nTried, nNew); + return fRet; + } + + // Add multiple addresses. + bool Add(const std::vector &vAddr, const CNetAddr& source, int64_t nTimePenalty = 0) + { + int nAdd = 0; + { + LOCK(cs); + Check(); + for (std::vector::const_iterator it = vAddr.begin(); it != vAddr.end(); it++) + nAdd += Add_(*it, source, nTimePenalty) ? 1 : 0; + Check(); + } + if (nAdd) + LogPrintf("Added %i addresses from %s: %i tried, %i new\n", nAdd, source.ToString().c_str(), nTried, nNew); + return nAdd > 0; + } + + // Mark an entry as accessible. + void Good(const CService &addr, int64_t nTime = GetAdjustedTime()) + { + { + LOCK(cs); + Check(); + Good_(addr, nTime); + Check(); + } + } + + // Mark an entry as connection attempted to. + void Attempt(const CService &addr, int64_t nTime = GetAdjustedTime()) + { + { + LOCK(cs); + Check(); + Attempt_(addr, nTime); + Check(); + } + } + + // Choose an address to connect to. + // nUnkBias determines how much "new" entries are favored over "tried" ones (0-100). + CAddress Select(int nUnkBias = 50) + { + CAddress addrRet; + { + LOCK(cs); + Check(); + addrRet = Select_(nUnkBias); + Check(); + } + return addrRet; + } + + // Return a bunch of addresses, selected at random. + std::vector GetAddr() + { + Check(); + std::vector vAddr; + { + LOCK(cs); + GetAddr_(vAddr); + } + Check(); + return vAddr; + } + + // Mark an entry as currently-connected-to. + void Connected(const CService &addr, int64_t nTime = GetAdjustedTime()) + { + { + LOCK(cs); + Check(); + Connected_(addr, nTime); + Check(); + } + } +}; + +#endif diff --git a/src/bloom.cpp b/src/net/bloom.cpp similarity index 94% rename from src/bloom.cpp rename to src/net/bloom.cpp index d3883644f1..d4b08489bc 100644 --- a/src/bloom.cpp +++ b/src/net/bloom.cpp @@ -1,11 +1,14 @@ -// Copyright (c) 2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2012 Bitcoin Developers +// +// SPDX-License-Identifier: MIT -#include "bloom.h" +#include "net/bloom.h" #include "main.h" -#include "script.h" +#include "script/script.h" #include "uint256.h" #include @@ -42,7 +45,7 @@ void CBloomFilter::insert(const vector& vKey) { if (isFull) return; - + for (unsigned int i = 0; i < nHashFuncs; i++) { unsigned int nIndex = Hash(i, vKey); @@ -117,24 +120,24 @@ bool CBloomFilter::IsRelevantAndUpdate(const CTransaction& tx) return true; if (isEmpty) return false; - + const uint256& hash = tx.GetHash(); - - + + if (((nFlags & BLOOM_ACCEPT_STEALTH) && tx.HasStealthOutput()) || contains(hash)) { fFound = true; // -- don't return here! }; - + for (unsigned int i = 0; i < tx.vout.size(); i++) { const CTxOut& txout = tx.vout[i]; // Match if the filter contains any arbitrary script data element in any scriptPubKey in tx // If this matches, also add the specific output that was matched. - // This means clients don't have to update the filter themselves when a new relevant tx + // This means clients don't have to update the filter themselves when a new relevant tx // is discovered in order to find spending transactions, which avoids round-tripping and race conditions. CScript::const_iterator pc = txout.scriptPubKey.begin(); vector data; @@ -143,20 +146,20 @@ bool CBloomFilter::IsRelevantAndUpdate(const CTransaction& tx) opcodetype opcode; if (!txout.scriptPubKey.GetOp(pc, opcode, data)) break; - + if (data.size() == 33) // coinstake { uint160 pkHash = Hash160(data); vector dataHash160(pkHash.begin(), pkHash.end()); - + if (dataHash160.size() != 0 && contains(dataHash160)) fFound = true; }; - + if (!fFound && data.size() != 0 && contains(data)) fFound = true; - + if (fFound) { if ((nFlags & BLOOM_UPDATE_MASK) == BLOOM_UPDATE_ALL) @@ -210,7 +213,7 @@ void CBloomFilter::UpdateEmptyFull() full &= vData[i] == 0xff; empty &= vData[i] == 0; }; - + isFull = full; isEmpty = empty; } diff --git a/src/bloom.h b/src/net/bloom.h similarity index 91% rename from src/bloom.h rename to src/net/bloom.h index 7658c5dc1e..f3b47082b8 100644 --- a/src/bloom.h +++ b/src/net/bloom.h @@ -1,6 +1,9 @@ -// Copyright (c) 2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2012 Bitcoin Developers +// +// SPDX-License-Identifier: MIT #ifndef BITCOIN_BLOOM_H #define BITCOIN_BLOOM_H @@ -9,7 +12,7 @@ #include -#include "core.h" +#include "primitives/core.h" #include "serialize.h" @@ -28,20 +31,20 @@ enum bloomflags // Only adds outpoints to the filter if the output is a pay-to-pubkey/pay-to-multisig script BLOOM_UPDATE_P2PUBKEY_ONLY = 2, BLOOM_UPDATE_MASK = 3, - + BLOOM_ACCEPT_STEALTH = (1 << 2), - - + + }; /** * BloomFilter is a probabilistic filter which SPV clients provide * so that we can filter the transactions we sends them. - * + * * This allows for significantly more efficient transaction and block downloads. - * + * * Because bloom filters are probabilistic, an SPV node can increase the false- - * positive rate, making us send them transactions which aren't actually theirs, + * positive rate, making us send them transactions which aren't actually theirs, * allowing clients to trade more bandwidth for more privacy by obfuscating which * keys are owned by them. */ @@ -56,7 +59,7 @@ class CBloomFilter unsigned char nFlags; unsigned int Hash(unsigned int nHashNum, const std::vector& vDataToHash) const; - + // Creates a new bloom filter which will provide the given fp rate when filled with the given number of elements // Note that if the given parameters will result in a filter outside the bounds of the protocol limits, // the filter created will be as close to the given parameters as possible within the protocol limits. @@ -74,7 +77,7 @@ class CBloomFilter READWRITE(nTweak); READWRITE(nFlags); ) - + bool IsFull() {return isFull;}; unsigned int GetSize() {return vData.size();}; diff --git a/src/net/net.cpp b/src/net/net.cpp new file mode 100644 index 0000000000..b593128eac --- /dev/null +++ b/src/net/net.cpp @@ -0,0 +1,2079 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + +#include "wallet/db.h" +#include "net/net.h" +#include "init/init.h" +#include "compat/strlcpy.h" +#include "net/addrman.h" +#include "interface.h" +#include +#include + +#ifdef WIN32 +#include +#include +#elif __APPLE__ +// Tor separate process via boost::process +#include +boost::process::group gTor; +#elif __linux__ +#include +#include // signals +#include // fork() +#include // waitpid() +pid_t tor_process_pid = 0; +#endif + +#ifdef USE_UPNP +#include +#include +#include +#include +#endif + +// Dump addresses to peers.dat every 15 minutes (900s) +#define DUMP_ADDRESSES_INTERVAL 900 + +using namespace std; +using namespace boost; +namespace fs = boost::filesystem; + +#if !defined(WIN32) && !defined(__APPLE__) && !defined(__linux__) +// Tor embedded +extern "C" { + int tor_main(int argc, char *argv[]); +} +#endif + +static const int MAX_OUTBOUND_CONNECTIONS = 16; +// Increment this variable when doing change to torrc-defaults on Linux +static const int TORRC_DEFAULTS_REV = 1; + +bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false); + + +// +// Global state variables +// +// Set true when the wallet itself stops tor (see StopNode), so the onion +// thread can tell an intentional shutdown from an unexpected tor exit. Lives +// outside the platform guards because StartTor()'s restart loop reads it on +// every platform; only Linux ever sets it true. +bool tor_killed_from_here = false; +bool fDiscover = true; +bool fUseUPnP = false; + +CCriticalSection cs_mapLocalHost; +map mapLocalHost; +static bool vfReachable[NET_MAX] = {}; +static bool vfLimited[NET_MAX] = {}; +static CNode* pnodeLocalHost = NULL; +static CNode* pnodeSync = NULL; +CAddress addrSeenByPeer(CService("0.0.0.0", 0), nLocalServices); +uint64_t nLocalHostNonce = 0; +static std::vector vhListenSocket; +CAddrMan addrman; + +vector vNodes; +CCriticalSection cs_vNodes; +CCriticalSection cs_connectNode; +map mapRelay; +deque > vRelayExpiration; +CCriticalSection cs_mapRelay; +map mapAlreadyAskedFor; + +static deque vOneShots; +CCriticalSection cs_vOneShots; + +set setservAddNodeAddresses; +CCriticalSection cs_setservAddNodeAddresses; + +vector vAddedNodes; +CCriticalSection cs_vAddedNodes; + +static CSemaphore *semOutbound = NULL; + +NodeId nLastNodeId = 0; +CCriticalSection cs_nLastNodeId; + +void AddOneShot(string strDest) +{ + LOCK(cs_vOneShots); + vOneShots.push_back(strDest); +} + +unsigned short GetListenPort() +{ + return (unsigned short)(GetArg("-port", Params().GetDefaultPort())); +} + +void CNode::PushGetBlocks(uint256& hashBegin, uint256 hashEnd) +{ + //pindexLastGetBlocksBegin = pindexBegin; + hashLastGetBlocksEnd = hashEnd; + + CBlockLocator blockLocator; + blockLocator.SetThin(hashBegin); + PushMessage("getblocks", blockLocator, hashEnd); +} + +void CNode::PushGetBlocks(CBlockIndex* pindexBegin, uint256 hashEnd) +{ + // Filter out duplicate requests + if (pindexBegin == pindexLastGetBlocksBegin && hashEnd == hashLastGetBlocksEnd) + return; + + pindexLastGetBlocksBegin = pindexBegin; + hashLastGetBlocksEnd = hashEnd; + + PushMessage("getblocks", CBlockLocator(pindexBegin), hashEnd); +} + +void CNode::PushGetBlocks(CBlockThinIndex* pindexBegin, uint256 hashEnd) +{ + // Filter out duplicate requests + if (pindexBegin == pindexLastGetBlockThinsBegin && hashEnd == hashLastGetBlocksEnd) + return; + + pindexLastGetBlockThinsBegin = pindexBegin; + hashLastGetBlocksEnd = hashEnd; + + PushMessage("getblocks", CBlockThinLocator(pindexBegin), hashEnd); +}; + +void CNode::PushGetHeaders(CBlockThinIndex* pindexBegin, uint256 hashEnd) +{ + // Filter out duplicate requests + if (pindexBegin == pindexLastGetBlockThinsBegin && hashEnd == hashLastGetBlocksEnd) + return; + + pindexLastGetBlockThinsBegin = pindexBegin; + hashLastGetBlocksEnd = hashEnd; + + PushMessage("getheaders", CBlockThinLocator(pindexBegin), hashEnd); +}; + + + +// find 'best' local address for a particular peer +bool GetLocal(CService& addr, const CNetAddr *paddrPeer) +{ + if (fNoListen) + return false; + + int nBestScore = -1; + int nBestReachability = -1; + int nBestTorScore = -1; + { + LOCK(cs_mapLocalHost); + for (map::iterator it = mapLocalHost.begin(); it != mapLocalHost.end(); it++) + { + int nScore = (*it).second.nScore; + int nReachability = (*it).first.GetReachabilityFrom(paddrPeer); + int nTorScore = (*it).first.IsTorV3() ? 1 : 0; + if (nReachability > nBestReachability || (nReachability == nBestReachability && (nTorScore > nBestTorScore || (nTorScore == nBestTorScore && nScore > nBestScore)))) + { + addr = CService((*it).first, (*it).second.nPort); + nBestReachability = nReachability; + nBestScore = nScore; + nBestTorScore = nTorScore; + } + } + } + return nBestScore >= 0; +} + +// get best local address for a particular peer as a CAddress +// Otherwise, return the unroutable 0.0.0.0 but filled in with +// the normal parameters, since the IP may be changed to a useful +// one by discovery. +CAddress GetLocalAddress(const CNetAddr *paddrPeer) +{ + CAddress ret(CService("0.0.0.0",GetListenPort()),0); + CService addr; + if (GetLocal(addr, paddrPeer)) + { + ret = CAddress(addr); + } + ret.nServices = nLocalServices; + ret.nTime = GetAdjustedTime(); + return ret; +} + +bool RecvLine(SOCKET hSocket, string& strLine) +{ + strLine = ""; + while (true) + { + char c; + int nBytes = recv(hSocket, &c, 1, 0); + if (nBytes > 0) + { + if (c == '\n') + continue; + if (c == '\r') + return true; + strLine += c; + if (strLine.size() >= 9000) + return true; + } + else if (nBytes <= 0) + { + boost::this_thread::interruption_point(); + if (nBytes < 0) + { + int nErr = WSAGetLastError(); + if (nErr == WSAEMSGSIZE) + continue; + if (nErr == WSAEWOULDBLOCK || nErr == WSAEINTR || nErr == WSAEINPROGRESS) + { + MilliSleep(10); + continue; + } + } + if (!strLine.empty()) + return true; + if (nBytes == 0) + { + // socket closed + LogPrint("net", "socket closed\n"); + return false; + } + else + { + // socket error + int nErr = WSAGetLastError(); + LogPrint("net", "recv failed: %d\n", nErr); + return false; + } + } + } +} + +int GetnScore(const CService& addr) +{ + LOCK(cs_mapLocalHost); + if (mapLocalHost.count(addr) == LOCAL_NONE) + return 0; + return mapLocalHost[addr].nScore; +} + +// Is our peer's addrLocal potentially useful as an external IP source? +bool IsPeerAddrLocalGood(CNode *pnode) +{ + return fDiscover && pnode->addr.IsRoutable() && pnode->addrLocal.IsRoutable() && + !IsLimited(pnode->addrLocal.GetNetwork()); +} + +// used when scores of local addresses may have changed +// pushes better local address to peers +void static AdvertizeLocal() +{ + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if (pnode->fSuccessfullyConnected) + { + CAddress addrLocal = GetLocalAddress(&pnode->addr); + if (addrLocal.IsRoutable() && (CService)addrLocal != (CService)pnode->addrLocal) + { + pnode->PushAddress(addrLocal); + pnode->addrLocal = addrLocal; + }; + }; + }; +} + + +void SetReachable(enum Network net, bool fFlag) +{ + LOCK(cs_mapLocalHost); + vfReachable[net] = fFlag; + if (net == NET_IPV6 && fFlag) + vfReachable[NET_IPV4] = true; +} + +// learn a new local address +bool AddLocal(const CService& addr, int nScore) +{ + if (!addr.IsRoutable()) + return false; + + if (!fDiscover && nScore < LOCAL_MANUAL) + return false; + + if (IsLimited(addr)) + return false; + + LogPrintf("AddLocal(%s,%i)\n", addr.ToString(), nScore); + + { + LOCK(cs_mapLocalHost); + bool fAlready = mapLocalHost.count(addr) > 0; + LocalServiceInfo &info = mapLocalHost[addr]; + if (!fAlready || nScore >= info.nScore) { + info.nScore = nScore + (fAlready ? 1 : 0); + info.nPort = addr.GetPort(); + } + SetReachable(addr.GetNetwork()); + } + + AdvertizeLocal(); + + return true; +} + +bool AddLocal(const CNetAddr &addr, int nScore) +{ + return AddLocal(CService(addr, GetListenPort()), nScore); +} + +/** Make a particular network entirely off-limits (no automatic connects to it) */ +void SetLimited(enum Network net, bool fLimited) +{ + if (net == NET_UNROUTABLE) + return; + LOCK(cs_mapLocalHost); + vfLimited[net] = fLimited; +} + +bool IsLimited(enum Network net) +{ + LOCK(cs_mapLocalHost); + return vfLimited[net]; +} + +bool IsLimited(const CNetAddr &addr) +{ + return IsLimited(addr.GetNetwork()); +} + +/** vote for a local address */ +bool SeenLocal(const CService& addr) +{ + { + LOCK(cs_mapLocalHost); + if (mapLocalHost.count(addr) == 0) + return false; + mapLocalHost[addr].nScore++; + } + + AdvertizeLocal(); + + return true; +} + +/** check whether a given address is potentially local */ +bool IsLocal(const CService& addr) +{ + LOCK(cs_mapLocalHost); + return mapLocalHost.count(addr) > 0; +} + +/** check whether a given address is in a network we can probably connect to */ +bool IsReachable(enum Network net) +{ + LOCK(cs_mapLocalHost); + return vfReachable[net] && !vfLimited[net]; +} + +bool IsReachable(const CNetAddr& addr) +{ + LOCK(cs_mapLocalHost); + enum Network net = addr.GetNetwork(); + return vfReachable[net] && !vfLimited[net]; +} + +void AddressCurrentlyConnected(const CService& addr) +{ + addrman.Connected(addr); +} + + +uint64_t CNode::nTotalBytesRecv = 0; +uint64_t CNode::nTotalBytesSent = 0; +CCriticalSection CNode::cs_totalBytesRecv; +CCriticalSection CNode::cs_totalBytesSent; + +CNode* FindNode(const CNetAddr& ip) +{ + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + if ((CNetAddr)pnode->addr == ip) + return (pnode); + } + return NULL; +} + +CNode* FindNode(const std::string& addrName) +{ + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + if (pnode->addrName == addrName) + return (pnode); + return NULL; +} + +CNode* FindNode(const CService& addr) +{ + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + if ((CService)pnode->addr == addr) + return (pnode); + } + return NULL; +} + +CNode* ConnectNode(CAddress addrConnect, const char *pszDest) +{ + // ConnectNode is called from multiple threads (ThreadOpenConnections, ThreadOpenAddedConnections) + // each thread must run duplicate, connect and push to vNodes together + // or it's possible to connect to the same peer twice + // don't want to lock cs_vNodes as ConnectSocket may be slow + LOCK(cs_connectNode); + + if (pszDest == NULL) { + + if (IsLocal(addrConnect)) + return NULL; + + // Look for an existing connection + CNode* pnode = FindNode((CService)addrConnect); + if (pnode) + { + pnode->AddRef(); + return pnode; + } + } + + + /// debug print + LogPrint("net", "trying connection %s lastseen=%.1fhrs\n", + pszDest ? pszDest : addrConnect.ToString(), + pszDest ? 0 : (double)(GetAdjustedTime() - addrConnect.nTime)/3600.0); + + // Connect + SOCKET hSocket; + bool proxyConnectionFailed = false; + if (pszDest ? ConnectSocketByName(addrConnect, hSocket, pszDest, Params().GetDefaultPort(), nConnectTimeout, &proxyConnectionFailed) : + ConnectSocket(addrConnect, hSocket, nConnectTimeout, &proxyConnectionFailed)) + { + addrman.Attempt(addrConnect); + + LogPrint("net", "connected %s\n", pszDest ? pszDest : addrConnect.ToString()); + + // Set to non-blocking +#ifdef WIN32 + u_long nOne = 1; + if (ioctlsocket(hSocket, FIONBIO, &nOne) == SOCKET_ERROR) + LogPrintf("ConnectSocket() : ioctlsocket non-blocking setting failed, error %d\n", WSAGetLastError()); +#else + if (fcntl(hSocket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR) + LogPrintf("ConnectSocket() : fcntl non-blocking setting failed, error %d\n", errno); +#endif + + // Add node + CNode* pnode = new CNode(hSocket, addrConnect, pszDest ? pszDest : "", false); + pnode->AddRef(); + + { + LOCK(cs_vNodes); + vNodes.push_back(pnode); + } + + pnode->nTimeConnected = GetTime(); + return pnode; + } else if (!proxyConnectionFailed) { + // If connecting to the node failed, and failure is not caused by a problem connecting to + // the proxy, mark this as an attempt. + addrman.Attempt(addrConnect); + } + + return NULL; +} + +void CNode::CloseSocketDisconnect() +{ + fDisconnect = true; + if (hSocket != INVALID_SOCKET) + { + LogPrint("net", "disconnecting node %s\n", addrName); + closesocket(hSocket); + hSocket = INVALID_SOCKET; + } + + // in case this fails, we'll empty the recv buffer when the CNode is deleted + TRY_LOCK(cs_vRecvMsg, lockRecv); + if (lockRecv) + vRecvMsg.clear(); + + // if this was the sync node, we'll need a new one + if (this == pnodeSync) + pnodeSync = NULL; +} + +void CNode::Cleanup() +{ +} + +void CNode::TryFlushSend() +{ + for (int i = 0; i < 3; ++i) + { + TRY_LOCK(cs_vSend, lockSend); + if (lockSend) + { + SocketSendData(this); + break; + }; + MilliSleep(10); + }; +} + + +void CNode::PushVersion() +{ + /// when NTP implemented, change to just nTime = GetAdjustedTime() + int64_t nTime = (fInbound ? GetAdjustedTime() : GetTime()); + CAddress addrYou = (addr.IsRoutable() && !IsProxy(addr) ? addr : CAddress(CService("0.0.0.0",0))); + CAddress addrMe = GetLocalAddress(&addr); + RAND_bytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce)); + LogPrint("net", "send version message: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", PROTOCOL_VERSION, nBestHeight, addrMe.ToString(), addrYou.ToString(), addr.ToString()); + + // -- node requirements are packed into the top 32 bits of nServices + //uint64_t nServices = ((uint64_t) nLocalRequirements) << 32 | nLocalServices; + uint64_t nServices = nLocalServices; + unsigned char *p = (unsigned char*)&nServices; // fortify + memcpy(p+4, &nLocalRequirements, 4); + + PushMessage("version", PROTOCOL_VERSION, nServices, nTime, addrYou, addrMe, + nLocalHostNonce, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector()), nBestHeight, nNodeMode); +} + + + + + +std::map CNode::setBanned; +CCriticalSection CNode::cs_setBanned; + +void CNode::ClearBanned() +{ + setBanned.clear(); +} + +bool CNode::IsBanned(CNetAddr ip) +{ + bool fResult = false; + { + LOCK(cs_setBanned); + std::map::iterator i = setBanned.find(ip); + if (i != setBanned.end()) + { + int64_t t = (*i).second; + if (GetTime() < t) + fResult = true; + } + } + return fResult; +} + +bool CNode::Misbehaving(int howmuch) +{ + nMisbehavior += howmuch; + if (nMisbehavior >= GetArg("-banscore", 100)) + { + if (addr.IsLocal()) + { + LogPrintf("Misbehaving: %s (%d -> %d) DISCONNECTING (Warning: local addr not banned)\n", addr.ToString(), nMisbehavior-howmuch, nMisbehavior); + } + else { + int64_t banTime = GetTime()+GetArg("-bantime", 60*60*24); // Default 24-hour ban + LogPrintf("Misbehaving: %s (%d -> %d) DISCONNECTING\n", addr.ToString(), nMisbehavior-howmuch, nMisbehavior); + { + LOCK(cs_setBanned); + if (setBanned[addr] < banTime) + setBanned[addr] = banTime; + } + } + CloseSocketDisconnect(); + return true; + } else + LogPrintf("Misbehaving: %s (%d -> %d)\n", addr.ToString(), nMisbehavior-howmuch, nMisbehavior); + return false; +} + +bool CNode::SoftBan() +{ + // -- same as Misbehaving, but a shorter ban time + { + if (addr.IsLocal()) + { + LogPrintf("SoftBan: %s DISCONNECTING (Warning: local addr not banned)\n", addr.ToString().c_str()); + } + else { + int64_t banTime = GetTime()+GetArg("-softbantime", 60*60*1); // Default 1-hour ban + LogPrintf("SoftBan: %s DISCONNECTING\n", addr.ToString().c_str()); + LOCK(cs_setBanned); + if (setBanned[addr] < banTime) + setBanned[addr] = banTime; + } + } + + CloseSocketDisconnect(); + + return true; +} + +#undef X +#define X(name) stats.name = name +void CNode::copyStats(CNodeStats &stats) +{ + stats.nodeid = this->GetId(); + X(nServices); + X(nLastSend); + X(nLastRecv); + X(nTimeConnected); + X(nTimeOffset); + X(addrName); + X(nVersion); + X(nTypeInd); + X(strSubVer); + X(fInbound); + X(nChainHeight); + X(nMisbehavior); + X(nSendBytes); + X(nRecvBytes); + stats.fSyncNode = (this == pnodeSync); + + // It is common for nodes with good ping times to suddenly become lagged, + // due to a new block arriving or other large transfer. + // Merely reporting pingtime might fool the caller into thinking the node was still responsive, + // since pingtime does not update until the ping is complete, which might take a while. + // So, if a ping is taking an unusually long time in flight, + // the caller can immediately detect that this is happening. + int64_t nPingUsecWait = 0; + if ((0 != nPingNonceSent) && (0 != nPingUsecStart)) { + nPingUsecWait = GetTimeMicros() - nPingUsecStart; + } + + // Raw ping time is in microseconds, but show it to user as whole seconds (Bitcoin users should be well used to small numbers with many decimal places by now :) + stats.dPingTime = (((double)nPingUsecTime) / 1e6); + stats.dPingWait = (((double)nPingUsecWait) / 1e6); + + // Leave string empty if addrLocal invalid (not filled in yet) + stats.addrLocal = addrLocal.IsValid() ? addrLocal.ToString() : ""; +} +#undef X + +// requires LOCK(cs_vRecvMsg) +bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes) +{ + while (nBytes > 0) { + + // get current incomplete message, or create a new one + if (vRecvMsg.empty() || + vRecvMsg.back().complete()) + vRecvMsg.push_back(CNetMessage(SER_NETWORK, nRecvVersion)); + + CNetMessage& msg = vRecvMsg.back(); + + // absorb network data + int handled; + if (!msg.in_data) + handled = msg.readHeader(pch, nBytes); + else + handled = msg.readData(pch, nBytes); + + if (handled < 0) + return false; + + pch += handled; + nBytes -= handled; + + if (msg.complete()) + msg.nTime = GetTimeMicros(); + } + + return true; +} + +int CNetMessage::readHeader(const char *pch, unsigned int nBytes) +{ + // copy data to temporary parsing buffer + unsigned int nRemaining = 24 - nHdrPos; + unsigned int nCopy = std::min(nRemaining, nBytes); + + memcpy(&hdrbuf[nHdrPos], pch, nCopy); + nHdrPos += nCopy; + + // if header incomplete, exit + if (nHdrPos < 24) + return nCopy; + + // deserialize to CMessageHeader + try { + hdrbuf >> hdr; + } + catch (std::exception &e) { + return -1; + } + + // reject messages larger than MAX_SIZE + if (hdr.nMessageSize > MAX_SIZE) + return -1; + + // switch state to reading message data + in_data = true; + + return nCopy; +} + +int CNetMessage::readData(const char *pch, unsigned int nBytes) +{ + unsigned int nRemaining = hdr.nMessageSize - nDataPos; + unsigned int nCopy = std::min(nRemaining, nBytes); + + if (vRecv.size() < nDataPos + nCopy) { + // Allocate up to 256 KiB ahead, but never more than the total message size. + vRecv.resize(std::min(hdr.nMessageSize, nDataPos + nCopy + 256 * 1024)); + } + + memcpy(&vRecv[nDataPos], pch, nCopy); + nDataPos += nCopy; + + return nCopy; +} + + + + + + + + + +// requires LOCK(cs_vSend) +void SocketSendData(CNode *pnode) +{ + std::deque::iterator it = pnode->vSendMsg.begin(); + + while (it != pnode->vSendMsg.end()) { + const CSerializeData &data = *it; + assert(data.size() > pnode->nSendOffset); + int nBytes = send(pnode->hSocket, &data[pnode->nSendOffset], data.size() - pnode->nSendOffset, MSG_NOSIGNAL | MSG_DONTWAIT); + if (nBytes > 0) { + pnode->nLastSend = GetTime(); + pnode->nSendBytes += nBytes; + pnode->nSendOffset += nBytes; + pnode->RecordBytesSent(nBytes); + if (pnode->nSendOffset == data.size()) { + pnode->nSendOffset = 0; + pnode->nSendSize -= data.size(); + it++; + } else { + // could not send full message; stop sending more + break; + } + } else { + if (nBytes < 0) { + // error + int nErr = WSAGetLastError(); + if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS) + { + LogPrintf("socket send error %d\n", nErr); + pnode->CloseSocketDisconnect(); + } + } + // couldn't send anything at all + break; + } + } + + if (it == pnode->vSendMsg.end()) { + assert(pnode->nSendOffset == 0); + assert(pnode->nSendSize == 0); + } + pnode->vSendMsg.erase(pnode->vSendMsg.begin(), it); +} + +static list vNodesDisconnected; + +void ThreadSocketHandler() +{ + unsigned int nPrevNodeCount = 0; + + while (true) + { + // + // Disconnect nodes + // + { + LOCK(cs_vNodes); + // Disconnect unused nodes + vector vNodesCopy = vNodes; + BOOST_FOREACH(CNode* pnode, vNodesCopy) + { + if (pnode->fDisconnect || + (pnode->GetRefCount() <= 0 && pnode->vRecvMsg.empty() && pnode->nSendSize == 0 && pnode->ssSend.empty())) + { + // remove from vNodes + vNodes.erase(remove(vNodes.begin(), vNodes.end(), pnode), vNodes.end()); + + // release outbound grant (if any) + pnode->grantOutbound.Release(); + + // close socket and cleanup + pnode->CloseSocketDisconnect(); + pnode->Cleanup(); + + // hold in disconnected pool until all refs are released + if (pnode->fNetworkNode || pnode->fInbound) + pnode->Release(); + vNodesDisconnected.push_back(pnode); + } + } + } + { + // Delete disconnected nodes + list vNodesDisconnectedCopy = vNodesDisconnected; + BOOST_FOREACH(CNode* pnode, vNodesDisconnectedCopy) + { + // wait until threads are done using it + if (pnode->GetRefCount() <= 0) + { + bool fDelete = false; + { + TRY_LOCK(pnode->cs_vSend, lockSend); + if (lockSend) + { + TRY_LOCK(pnode->cs_vRecvMsg, lockRecv); + if (lockRecv) + { + TRY_LOCK(pnode->cs_inventory, lockInv); + if (lockInv) + fDelete = true; + } + } + } + if (fDelete) + { + vNodesDisconnected.remove(pnode); + delete pnode; + } + } + } + } + if(vNodes.size() != nPrevNodeCount) { + nPrevNodeCount = vNodes.size(); + uiInterface.NotifyNumConnectionsChanged(nPrevNodeCount); + } + + + // + // Find which sockets have data to receive + // + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 50000; // frequency to poll pnode->vSend + + fd_set fdsetRecv; + fd_set fdsetSend; + fd_set fdsetError; + FD_ZERO(&fdsetRecv); + FD_ZERO(&fdsetSend); + FD_ZERO(&fdsetError); + SOCKET hSocketMax = 0; + bool have_fds = false; + + BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket) { + FD_SET(hListenSocket, &fdsetRecv); + hSocketMax = max(hSocketMax, hListenSocket); + have_fds = true; + } + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if (pnode->hSocket == INVALID_SOCKET) + continue; + { + TRY_LOCK(pnode->cs_vSend, lockSend); + if (lockSend) { + // do not read, if draining write queue + if (!pnode->vSendMsg.empty()) + FD_SET(pnode->hSocket, &fdsetSend); + else + FD_SET(pnode->hSocket, &fdsetRecv); + FD_SET(pnode->hSocket, &fdsetError); + hSocketMax = max(hSocketMax, pnode->hSocket); + have_fds = true; + } + } + } + } + + int nSelect = select(have_fds ? hSocketMax + 1 : 0, + &fdsetRecv, &fdsetSend, &fdsetError, &timeout); + boost::this_thread::interruption_point(); + + if (nSelect == SOCKET_ERROR) + { + if (have_fds) + { + int nErr = WSAGetLastError(); + LogPrintf("socket select error %d\n", nErr); + for (unsigned int i = 0; i <= hSocketMax; i++) + FD_SET(i, &fdsetRecv); + } + FD_ZERO(&fdsetSend); + FD_ZERO(&fdsetError); + MilliSleep(timeout.tv_usec/1000); + } + + + // + // Accept new connections + // + BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket) + if (hListenSocket != INVALID_SOCKET && FD_ISSET(hListenSocket, &fdsetRecv)) + { + struct sockaddr_storage sockaddr; + socklen_t len = sizeof(sockaddr); + SOCKET hSocket = accept(hListenSocket, (struct sockaddr*)&sockaddr, &len); + CAddress addr; + int nInbound = 0; + + if (hSocket != INVALID_SOCKET) + if (!addr.SetSockAddr((const struct sockaddr*)&sockaddr)) + LogPrintf("Warning: Unknown socket family\n"); + + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + if (pnode->fInbound) + nInbound++; + } + + if (hSocket == INVALID_SOCKET) + { + int nErr = WSAGetLastError(); + if (nErr != WSAEWOULDBLOCK) + LogPrintf("socket error accept failed: %d\n", nErr); + } + else if (nInbound >= GetArg("-maxconnections", 125) - MAX_OUTBOUND_CONNECTIONS) + { + closesocket(hSocket); + } + else if (CNode::IsBanned(addr)) + { + LogPrintf("connection from %s dropped (banned)\n", addr.ToString()); + closesocket(hSocket); + } + else + { + LogPrint("net", "accepted connection %s\n", addr.ToString()); + CNode* pnode = new CNode(hSocket, addr, "", true); + pnode->AddRef(); + { + LOCK(cs_vNodes); + vNodes.push_back(pnode); + } + } + } + + + // + // Service each socket + // + vector vNodesCopy; + { + LOCK(cs_vNodes); + vNodesCopy = vNodes; + BOOST_FOREACH(CNode* pnode, vNodesCopy) + pnode->AddRef(); + } + BOOST_FOREACH(CNode* pnode, vNodesCopy) + { + boost::this_thread::interruption_point(); + + // + // Receive + // + if (pnode->hSocket == INVALID_SOCKET) + continue; + if (FD_ISSET(pnode->hSocket, &fdsetRecv) || FD_ISSET(pnode->hSocket, &fdsetError)) + { + TRY_LOCK(pnode->cs_vRecvMsg, lockRecv); + if (lockRecv) + { + if (pnode->GetTotalRecvSize() > ReceiveFloodSize()) { + if (!pnode->fDisconnect) + LogPrintf("socket recv flood control disconnect (%u bytes)\n", pnode->GetTotalRecvSize()); + pnode->CloseSocketDisconnect(); + } + else { + // typical socket buffer is 8K-64K + char pchBuf[0x10000]; + int nBytes = recv(pnode->hSocket, pchBuf, sizeof(pchBuf), MSG_DONTWAIT); + if (nBytes > 0) + { + if (!pnode->ReceiveMsgBytes(pchBuf, nBytes)) + pnode->CloseSocketDisconnect(); + pnode->nLastRecv = GetTime(); + pnode->nRecvBytes += nBytes; + pnode->RecordBytesRecv(nBytes); + } + else if (nBytes == 0) + { + // socket closed gracefully + if (!pnode->fDisconnect) + LogPrint("net", "socket closed\n"); + pnode->CloseSocketDisconnect(); + } + else if (nBytes < 0) + { + // error + int nErr = WSAGetLastError(); + if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS) + { + if (!pnode->fDisconnect) + LogPrintf("socket recv error %d\n", nErr); + pnode->CloseSocketDisconnect(); + } + } + } + } + } + + // + // Send + // + if (pnode->hSocket == INVALID_SOCKET) + continue; + if (FD_ISSET(pnode->hSocket, &fdsetSend)) + { + TRY_LOCK(pnode->cs_vSend, lockSend); + if (lockSend) + SocketSendData(pnode); + } + + // + // Inactivity checking + // + int64_t nTime = GetTime(); + if (nTime - pnode->nTimeConnected > 60) + { + if (pnode->nLastRecv == 0 || pnode->nLastSend == 0) + { + LogPrint("net", "socket no message in first 60 seconds, %d %d\n", pnode->nLastRecv != 0, pnode->nLastSend != 0); + pnode->fDisconnect = true; + } + else if (nTime - pnode->nLastSend > TIMEOUT_INTERVAL) + { + LogPrintf("socket sending timeout: %ds\n", nTime - pnode->nLastSend); + pnode->fDisconnect = true; + } + else if (nTime - pnode->nLastRecv > TIMEOUT_INTERVAL) + { + LogPrintf("socket receive timeout: %ds\n", nTime - pnode->nLastRecv); + pnode->fDisconnect = true; + } + else if (pnode->nPingNonceSent && pnode->nPingUsecStart + TIMEOUT_INTERVAL * 1000000 < GetTimeMicros()) + { + LogPrintf("ping timeout: %fs\n", 0.000001 * (GetTimeMicros() - pnode->nPingUsecStart)); + pnode->fDisconnect = true; + } + } + } + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodesCopy) + pnode->Release(); + } + + MilliSleep(100); + } // main loop +} + + +/* Tor implementation ---------------------------------*/ + +// hidden service seeds +static const char *strMainNetOnionSeed[][1] = { + // project-maintained nodes + {"gji6yid3u2gozq5hvoufkfyybcvj3ftajvrlhmjjrtzv42o7oeosllqd.onion"}, + {"nounwopyxdcwe72v5xey5jgjf6ypsmyitzolambc7c4vgvheyquekmyd.onion"}, + {"vz2a5ivpeodhydehc4n433n3wrn4exck5i6audy5hbe3pnyi5nudbqid.onion"}, + {"thje6hx5tpj65ujrnizkp6vkg276lcuba5faephxyp65xrwviz452rid.onion"}, + {"34mek66nmcgc4hb4u55zq3pjay5fz3qqmmopqqw6vaqlfxbqtuudkhad.onion"}, + + // other stable nodes that are monitored by the project + {NULL} +}; + +static const char *strTestNetOnionSeed[][1] = { + // project-maintained nodes + {"f3kcqb22tae4twfvd6lrsanwp4ikfocltsuo4onsjdapcsgatoyw7oid.onion"}, + {"k2chqlj5s5q6xejbkznjqptidqmdbdtnm4jozbe5d5o7mmugikuwzsyd.onion"}, + {"srrfkizif7t7t46s4n37remlzjslryzo5vwibm2l2ewcfsbfgesie7yd.onion"}, + {"f3htcdks3hspr4b52ham4btbxvvtvdqamxpdojexbf42mgkqei5kdcid.onion"}, + {"cuvepsg3uezrchf3cezopd6thrp4osoagi6ngmayakme5qik3f2toiqd.onion"}, + {NULL} +}; + +void ThreadOnionSeed() +{ + + // Make this thread recognisable as the tor thread + RenameThread("onionseed"); + + static const char *(*strOnionSeed)[1] = fTestNet ? strTestNetOnionSeed : strMainNetOnionSeed; + + int found = 0; + + LogPrintf("Loading addresses from .onion seeds\n"); + + for (unsigned int seed_idx = 0; strOnionSeed[seed_idx][0] != NULL; seed_idx++) { + CNetAddr parsed; + if ( + !parsed.SetSpecial( + strOnionSeed[seed_idx][0] + ) + ) { + throw runtime_error("ThreadOnionSeed() : invalid .onion seed"); + } + int nOneDay = 24*3600; + CAddress addr = CAddress(CService(parsed, Params().GetDefaultPort())); + addr.nTime = GetTime() - 3*nOneDay - GetRand(4*nOneDay); // use a random age between 3 and 7 days old + found++; + addrman.Add(addr, parsed); + } + + LogPrintf("%d addresses found from .onion seeds\n", found); +} + + +/* void ThreadDNSAddressSeed() +{ + // goal: only query DNS seeds if address need is acute + if ((addrman.size() > 0) && + (!GetBoolArg("-forcednsseed", false))) { + MilliSleep(11 * 1000); + + LOCK(cs_vNodes); + if (vNodes.size() >= 2) { + LogPrintf("P2P peers available. Skipped DNS seeding.\n"); + return; + } + } + + const vector &vSeeds = Params().DNSSeeds(); + int found = 0; + + LogPrintf("Loading addresses from DNS seeds (could take a while)\n"); + + BOOST_FOREACH(const CDNSSeedData &seed, vSeeds) { + if (HaveNameProxy()) { + AddOneShot(seed.host); + } else { + vector vIPs; + vector vAdd; + if (LookupHost(seed.host.c_str(), vIPs)) + { + BOOST_FOREACH(CNetAddr& ip, vIPs) + { + int nOneDay = 24*3600; + CAddress addr = CAddress(CService(ip, Params().GetDefaultPort())); + addr.nTime = GetTime() - 3*nOneDay - GetRand(4*nOneDay); // use a random age between 3 and 7 days old + vAdd.push_back(addr); + found++; + } + } + addrman.Add(vAdd, CNetAddr(seed.name, true)); + } + } + + LogPrintf("%d addresses found from DNS seeds\n", found); +} */ + +void DumpAddresses() +{ + int64_t nStart = GetTimeMillis(); + + CAddrDB adb; + adb.Write(addrman); + + LogPrint("net", "Flushed %d addresses to peers.dat %dms\n", + addrman.size(), GetTimeMillis() - nStart); +} + +void static ProcessOneShot() +{ + string strDest; + { + LOCK(cs_vOneShots); + if (vOneShots.empty()) + return; + strDest = vOneShots.front(); + vOneShots.pop_front(); + } + CAddress addr; + CSemaphoreGrant grant(*semOutbound, true); + if (grant) { + if (!OpenNetworkConnection(addr, &grant, strDest.c_str(), true)) + AddOneShot(strDest); + } +} + +void ThreadOpenConnections() +{ + // Connect to specific addresses + if (mapArgs.count("-connect") && mapMultiArgs["-connect"].size() > 0) + { + for (int64_t nLoop = 0;; nLoop++) + { + ProcessOneShot(); + BOOST_FOREACH(string strAddr, mapMultiArgs["-connect"]) + { + CAddress addr; + OpenNetworkConnection(addr, NULL, strAddr.c_str()); + for (int i = 0; i < 10 && i < nLoop; i++) + { + MilliSleep(500); + } + } + MilliSleep(500); + } + } + + // Initiate network connections + int64_t nStart = GetTime(); + while (true) + { + ProcessOneShot(); + + MilliSleep(500); + + CSemaphoreGrant grant(*semOutbound); + boost::this_thread::interruption_point(); + + // Add seed nodes if DNS seeds are all down (an infrastructure attack?). + if (addrman.size() == 0 && (GetTime() - nStart > 60)) { + static bool done = false; + if (!done) { + LogPrintf("Adding fixed seed nodes as DNS doesn't seem to be available.\n"); + addrman.Add(Params().FixedSeeds(), CNetAddr("127.0.0.1")); + done = true; + } + } + + // + // Choose an address to connect to based on most recently seen + // + CAddress addrConnect; + + // Only connect out to one peer per network group (/16 for IPv4). + // Do this here so we don't have to critsect vNodes inside mapAddresses critsect. + int nOutbound = 0; + set > setConnected; + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) { + if (!pnode->fInbound) { + setConnected.insert(pnode->addr.GetGroup()); + nOutbound++; + } + } + } + + int64_t nANow = GetAdjustedTime(); + + int nTries = 0; + while (true) + { + boost::this_thread::interruption_point(); + // use an nUnkBias between 10 (no outgoing connections) and 90 (8 outgoing connections) + CAddress addr = addrman.Select(10 + min(nOutbound,8)*10); + + // if we selected an invalid address, restart + if (!addr.IsValid() || setConnected.count(addr.GetGroup()) || IsLocal(addr)) + break; + + // If we didn't find an appropriate destination after trying 100 addresses fetched from addrman, + // stop this loop, and let the outer loop run again (which sleeps, adds seed nodes, recalculates + // already-connected network ranges, ...) before trying new addrman addresses. + nTries++; + if (nTries > 100) + break; + + if (IsLimited(addr)) + continue; + + // only consider very recently tried nodes after 30 failed attempts + if (nANow - addr.nLastTry < 600 && nTries < 30) + continue; + + // do not allow non-default ports, unless after 50 invalid addresses selected already + if (addr.GetPort() != Params().GetDefaultPort() && nTries < 50) + continue; + + addrConnect = addr; + break; + } + + if (addrConnect.IsValid()) + OpenNetworkConnection(addrConnect, &grant); + } +} + +void ThreadOpenAddedConnections() +{ + { + LOCK(cs_vAddedNodes); + vAddedNodes = mapMultiArgs["-addnode"]; + } + + if (HaveNameProxy()) { + while(true) { + list lAddresses(0); + { + LOCK(cs_vAddedNodes); + BOOST_FOREACH(string& strAddNode, vAddedNodes) + lAddresses.push_back(strAddNode); + } + BOOST_FOREACH(string& strAddNode, lAddresses) { + CAddress addr; + CSemaphoreGrant grant(*semOutbound); + OpenNetworkConnection(addr, &grant, strAddNode.c_str()); + MilliSleep(500); + } + MilliSleep(120000); // Retry every 2 minutes + } + } + + for (unsigned int i = 0; true; i++) + { + list lAddresses(0); + { + LOCK(cs_vAddedNodes); + BOOST_FOREACH(string& strAddNode, vAddedNodes) + lAddresses.push_back(strAddNode); + } + + list > lservAddressesToAdd(0); + BOOST_FOREACH(string& strAddNode, lAddresses) + { + vector vservNode(0); + if(Lookup(strAddNode.c_str(), vservNode, Params().GetDefaultPort(), fNameLookup, 0)) + { + lservAddressesToAdd.push_back(vservNode); + { + LOCK(cs_setservAddNodeAddresses); + BOOST_FOREACH(CService& serv, vservNode) + setservAddNodeAddresses.insert(serv); + } + } + } + // Attempt to connect to each IP for each addnode entry until at least one is successful per addnode entry + // (keeping in mind that addnode entries can have many IPs if fNameLookup) + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + for (list >::iterator it = lservAddressesToAdd.begin(); it != lservAddressesToAdd.end(); it++) + BOOST_FOREACH(CService& addrNode, *(it)) + if (pnode->addr == addrNode) + { + it = lservAddressesToAdd.erase(it); + it--; + break; + } + } + BOOST_FOREACH(vector& vserv, lservAddressesToAdd) + { + CSemaphoreGrant grant(*semOutbound); + OpenNetworkConnection(CAddress(vserv[i % vserv.size()]), &grant); + MilliSleep(500); + } + MilliSleep(120000); // Retry every 2 minutes + } +} + +// if successful, this moves the passed grant to the constructed node +bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound, const char *strDest, bool fOneShot) +{ + // + // Initiate outbound network connection + // + boost::this_thread::interruption_point(); + + if (!strDest) + { + if (IsLocal(addrConnect) || + FindNode((CNetAddr)addrConnect) || CNode::IsBanned(addrConnect) || + FindNode(addrConnect.ToStringIPPort().c_str())) + return false; + } + else if (FindNode(strDest)) + return false; + + CNode* pnode = ConnectNode(addrConnect, strDest); + boost::this_thread::interruption_point(); + + if (!pnode) + return false; + if (grantOutbound) + grantOutbound->MoveTo(pnode->grantOutbound); + pnode->fNetworkNode = true; + if (fOneShot) + pnode->fOneShot = true; + + return true; +} + + +void ThreadMessageHandler() +{ + SetThreadPriority(THREAD_PRIORITY_BELOW_NORMAL); + while (true) + { + boost::this_thread::interruption_point(); + vector vNodesCopy; + { + LOCK(cs_vNodes); + vNodesCopy = vNodes; + BOOST_FOREACH(CNode* pnode, vNodesCopy) + pnode->AddRef(); + } // cs_vNodes + + // Poll the connected nodes for messages + CNode* pnodeTrickle = NULL; + if (!vNodesCopy.empty()) + pnodeTrickle = vNodesCopy[GetRand(vNodesCopy.size())]; + + bool fSleep = true; + + //BOOST_FOREACH(CNode* pnode, vNodesCopy) + + size_t r = GetRandInt(vNodesCopy.size()-1); // randomise the order + for (size_t i = 0; i < vNodesCopy.size(); ++i) + { + CNode *pnode = vNodesCopy[(i + r) % vNodesCopy.size()]; + + if (pnode->fDisconnect) + continue; + + // Receive messages + { + TRY_LOCK(pnode->cs_vRecvMsg, lockRecv); + if (lockRecv) + { + if (!ProcessMessages(pnode)) + pnode->CloseSocketDisconnect(); + + if (pnode->nSendSize < SendBufferSize() && (!pnode->vRecvGetData.empty() || (!pnode->vRecvMsg.empty() && pnode->vRecvMsg[0].complete()))) + fSleep = false; + } + } // cs_vRecvMsg + + boost::this_thread::interruption_point(); + + // Send messages + { + TRY_LOCK(pnode->cs_vSend, lockSend); + if (lockSend) + SendMessages(pnode, vNodesCopy, pnode == pnodeTrickle); + } // cs_vSend + }; + + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodesCopy) + pnode->Release(); + } // cs_vNodes + + if (fSleep) + MilliSleep(100); + }; +} + + + + + + +bool BindListenPort(const CService &addrBind, string& strError) +{ + strError = ""; + int nOne = 1; + +#ifdef WIN32 + // Initialize Windows Sockets + WSADATA wsadata; + int ret = WSAStartup(MAKEWORD(2,2), &wsadata); + if (ret != NO_ERROR) + { + strError = strprintf("Error: TCP/IP socket library failed to start (WSAStartup returned error %d)", ret); + LogPrintf("%s\n", strError.c_str()); + return false; + }; +#endif + + // Create socket for listening for incoming connections + struct sockaddr_storage sockaddr; + socklen_t len = sizeof(sockaddr); + if (!addrBind.GetSockAddr((struct sockaddr*)&sockaddr, &len)) + { + strError = strprintf("Error: bind address family for %s not supported", addrBind.ToString()); + LogPrintf("%s\n", strError); + return false; + } + + SOCKET hListenSocket = socket(((struct sockaddr*)&sockaddr)->sa_family, SOCK_STREAM, IPPROTO_TCP); + if (hListenSocket == INVALID_SOCKET) + { + strError = strprintf("Error: Couldn't open socket for incoming connections (socket returned error %d)", WSAGetLastError()); + LogPrintf("%s\n", strError); + return false; + } + +#ifdef SO_NOSIGPIPE + // Different way of disabling SIGPIPE on BSD + setsockopt(hListenSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&nOne, sizeof(int)); +#endif + +#ifndef WIN32 + // Allow binding if the port is still in TIME_WAIT state after + // the program was closed and restarted. Not an issue on windows. + setsockopt(hListenSocket, SOL_SOCKET, SO_REUSEADDR, (void*)&nOne, sizeof(int)); +#endif + + +#ifdef WIN32 + // Set to non-blocking, incoming connections will also inherit this + if (ioctlsocket(hListenSocket, FIONBIO, (u_long*)&nOne) == SOCKET_ERROR) +#else + if (fcntl(hListenSocket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR) +#endif + { + strError = strprintf("Error: Couldn't set properties on socket for incoming connections (error %d)", WSAGetLastError()); + LogPrintf("%s\n", strError); + return false; + } + + // some systems don't have IPV6_V6ONLY but are always v6only; others do have the option + // and enable it by default or not. Try to enable it, if possible. + if (addrBind.IsIPv6()) { +#ifdef IPV6_V6ONLY +#ifdef WIN32 + setsockopt(hListenSocket, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&nOne, sizeof(int)); +#else + setsockopt(hListenSocket, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&nOne, sizeof(int)); +#endif +#endif +#ifdef WIN32 + int nProtLevel = 10 /* PROTECTION_LEVEL_UNRESTRICTED */; + int nParameterId = 23 /* IPV6_PROTECTION_LEVEl */; + // this call is allowed to fail + setsockopt(hListenSocket, IPPROTO_IPV6, nParameterId, (const char*)&nProtLevel, sizeof(int)); +#endif + } + + if (::bind(hListenSocket, (struct sockaddr*)&sockaddr, len) == SOCKET_ERROR) + { + int nErr = WSAGetLastError(); + if (nErr == WSAEADDRINUSE) + strError = strprintf(_("Unable to bind to %s on this computer. ALIAS is probably already running."), addrBind.ToString()); + else + strError = strprintf(_("Unable to bind to %s on this computer (bind returned error %d, %s)"), addrBind.ToString(), nErr, strerror(nErr)); + LogPrintf("%s\n", strError); + return false; + }; + + LogPrintf("Bound to %s\n", addrBind.ToString().c_str()); + + // Listen for incoming connections + if (listen(hListenSocket, SOMAXCONN) == SOCKET_ERROR) + { + strError = strprintf("Error: Listening for incoming connections failed (listen returned error %d)", WSAGetLastError()); + LogPrintf("%s\n", strError); + return false; + } + + vhListenSocket.push_back(hListenSocket); + + if (addrBind.IsRoutable() && fDiscover) + AddLocal(addrBind, LOCAL_BIND); + + return true; +} + +static char *convert_str(const std::string &s) { + char *pc = new char[s.size()+1]; + std::strcpy(pc, s.c_str()); + return pc; +} + +static std::string quoteArg(const bool& quote, const std::string& arg) +{ + if (quote) + return "\"" + arg + "\""; + else + return arg; +} + +/** + * Run tor as separate process for Windows, macOS and Linux + * - Windows with windows specific CreateProcess() + * - macOS with boost::process:child + * - Linux with fork() and execvp() + * All other platforms run Tor embedded. + * + * @brief run_tor + */ +static void run_tor() { + fs::path tor_dir = GetDataDir() / "tor"; + fs::create_directory(tor_dir); + fs::path log_file = tor_dir / "tor.log"; + + std::vector argv; + bool bQuoteArg = false; +#if defined(WIN32) + bQuoteArg = true; +#endif +#ifndef __APPLE__ + // Windows CreateProcess(), exec() and main() when embedding tor need 'tor' as first argument + // Tor separate process via boost::process does not need 'tor' as first argument + argv.push_back("tor"); +#endif + argv.push_back("--SocksPort"); + if (TestNet()) { + argv.push_back(quoteArg(bQuoteArg,"9090 OnionTrafficOnly")); + } else { + argv.push_back(quoteArg(bQuoteArg,"9089 OnionTrafficOnly")); + } + argv.push_back("--ignore-missing-torrc"); + argv.push_back("-f"); + // Move the location of the torrc to the .spectrecoin folder instead of .spectrecoin/tor + // Allows to have all config files in one place + argv.push_back(quoteArg(bQuoteArg, (GetDataDir() / "torrc").string())); + argv.push_back("--DataDirectory"); + argv.push_back(quoteArg(bQuoteArg, tor_dir.string())); + argv.push_back("--GeoIPFile"); + argv.push_back(quoteArg(bQuoteArg, (tor_dir / "geoip").string())); + argv.push_back("--GeoIPv6File"); + argv.push_back(quoteArg(bQuoteArg, (tor_dir / "geoipv6").string())); + argv.push_back("--HiddenServiceDir"); + argv.push_back(quoteArg(bQuoteArg, (tor_dir / "onion").string())); + argv.push_back("--HiddenServiceVersion"); + if (GetBoolArg("-onionv2")) { + argv.push_back("2"); + } + else { + argv.push_back("3"); + } + argv.push_back("--HiddenServicePort"); + if (TestNet()) { + argv.push_back("37111"); + } + else { + argv.push_back("37347"); + } + +#if defined(WIN32) || defined(__APPLE__) + // Tor separate process + fs::path pathApplicationDir = dll::program_location().parent_path(); + fs::path pathTorDir = pathApplicationDir / "Tor"; + + argv.push_back("--defaults-torrc"); + fs::path torrc_defaults_file = pathTorDir / "torrc-defaults"; + argv.push_back(quoteArg(bQuoteArg, torrc_defaults_file.string())); +#elif __linux__ + + fs::path torrc_defaults_file = tor_dir / "torrc-defaults"; + bool must_override = false; + if (fs::exists(torrc_defaults_file) && fs::is_regular_file(torrc_defaults_file)) + { + FILE* file = fopen(torrc_defaults_file.string().c_str(), "r"); + if (file) + { + int check_rev = 0; + fscanf(file, "# torrc-defaults for ALIAS rev. %d\n", &check_rev); + if (check_rev != TORRC_DEFAULTS_REV) + must_override = true; + fclose(file); + } + } + if (must_override || !fs::exists(torrc_defaults_file) || !fs::is_regular_file(torrc_defaults_file)) + { + FILE* file = fopen(torrc_defaults_file.string().c_str(), "w"); + if (file) + { + fprintf(file, "# torrc-defaults for ALIAS rev. %d\n", TORRC_DEFAULTS_REV); + fprintf(file, "#\n"); + fprintf(file, "# DO NOT EDIT THIS FILE\n"); + fprintf(file, "#\n"); + fprintf(file, "# This file is distributed with ALIAS within the tor folder and SHOULD NOT be modified\n"); + fprintf(file, "# (it may be overwritten during the next ALIAS update).\n"); + fprintf(file, "# To customize your Tor configuration, shut down ALIAS and edit the torrc file.\n"); + fprintf(file, "#\n"); + fprintf(file, "# If non-zero, try to write to disk less frequently than we would otherwise.\n"); + fprintf(file, "AvoidDiskWrites 1\n"); + fprintf(file, "#\n"); + fprintf(file, "# If non-zero, try to use built-in (static) crypto hardware acceleration when available.\n"); + fprintf(file, "HardwareAccel 1\n"); +#if defined(ANDROID) || defined(__ANDROID__) + fprintf(file, "# If it is set to 0, Tor will not send any padding cells. This option should be offered to mobile users for use where bandwidth may be expensive.\n"); + fprintf(file, "ConnectionPadding 0\n"); + fprintf(file, "#\n"); + fprintf(file, "# If set to 1, Tor will not not hold OR connections open for very long. This option should be offered to mobile users for use where bandwidth may be expensive.\n"); + fprintf(file, "ReducedConnectionPadding 1\n"); +#endif + fclose(file); + } + } + argv.push_back("--defaults-torrc"); + argv.push_back(quoteArg(bQuoteArg, torrc_defaults_file.string())); +#endif +#ifdef WIN32 + // Tor separate process via CreateProcess + argv.push_back("--Log"); + argv.push_back("\"notice file " + log_file.string() + "\""); + + HANDLE hJob; + JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 }; + PROCESS_INFORMATION pi = { 0 }; + STARTUPINFOA si = { 0 }; + + // Create a job object. + hJob = CreateJobObject(NULL, NULL); + + // Causes all processes associated with the job to terminate when the last handle to the job is closed. + jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; + SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli)); + + // Hide the console window + si.cb = sizeof(si); + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_HIDE; + + // Build concatenated commandline string for CreateProcess + std::string strCommandLine; + for (auto const& s : argv) { strCommandLine += s + " "; } + + // Create the process suspended + LogPrintf("Start tor 'Tor/tor.exe' as separate process (CreateProcess) with: %s\n", strCommandLine); + + if (!CreateProcessA("Tor/tor.exe", const_cast(strCommandLine.c_str()), NULL, NULL, FALSE, + CREATE_SUSPENDED | CREATE_BREAKAWAY_FROM_JOB /*Important*/, NULL, NULL, &si, &pi)) { + LogPrintf("Terminating - Error: CreateProcess for tor failed with error %d\n", GetLastError()); + exit(1); // TODO improved termination + } + + // Add the process to our job object. + AssignProcessToJobObject(hJob, pi.hProcess); // Does not work if without CREATE_BREAKAWAY_FROM_JOB + + // Start our suspended process. + ResumeThread(pi.hThread); + + /* + * At this point, if we are closed, windows will automatically clean up + * by closing any handles we have open. When the handle to the job object + * is closed, any processes belonging to the job will be terminated. + * Note: Grandchild processes automatically become part of the job and + * will also be terminated. This behaviour can be avoided by using the + * JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK limit flag. + */ + + // Block this thread until the process exits (to have same behavior as tor_main call for static tor integration) + WaitForSingleObject(pi.hProcess, INFINITE); +#elif __APPLE__ + // Tor separate process via boost::process + argv.push_back("--Log"); + argv.push_back("notice file " + log_file.string()); + + std::string strCommandLine; + for (auto const& s : argv) { strCommandLine += s + " "; } + LogPrintf("Start tor as separate process (process::child) with: %s\n", strCommandLine); + + process::child pChildTor(process::start_dir = pathTorDir, "./tor.real", argv, gTor); + pChildTor.detach(); + // Block this thread until the process exits (to have same behavior as tor_main call for static tor integration) + std::error_code ec; + gTor.wait(ec); + if (ec && !ShutdownRequested()) + boost::process::detail::throw_error(ec, "Tor process: waitpid(2) failed in wait"); +#elif __linux__ + // Tor separate process via fork,execvp + argv.push_back("--Log"); + argv.push_back("notice file " + log_file.string()); + + std::string strCommandLine; + for (auto const& s : argv) { strCommandLine += s + " "; } + LogPrintf("Start tor as separate process (fork,execvp) with: %s\n", strCommandLine); + + std::string torResult; + pid_t ppid_before_fork = getpid(); + tor_process_pid = fork(); + if (tor_process_pid == -1) { + torResult = "Terminating - Error: fork() for tor failed: "; + torResult += strerror(errno); + torResult += "\n"; + } + else if (tor_process_pid == 0) { + // Continue child execution... + // Make sure tor gets terminated when parent process dies + int r = prctl(PR_SET_PDEATHSIG, SIGKILL); + if (r == -1) { + perror("Could not install PDEATHSIG."); + _exit(1); + } + if (getppid() != ppid_before_fork) { + LogPrintf("Original parent exited just before the prctl() call\n"); + _exit(1); + } + + std::vector argv_c; + std::transform(argv.begin(), argv.end(), std::back_inserter(argv_c), convert_str); + argv_c.push_back(nullptr); + + if (execvp("tor", &argv_c[0]) < 0) { + perror("execvp(\"tor\", ...) failed"); + _exit(127); + } + } else { + // Continue parent execution... + // Block this thread until the process exits (to have same behavior as tor_main call for static tor integration) + int status; + if (waitpid(tor_process_pid, &status, 0) > 0) { + if (WIFEXITED(status) && !WEXITSTATUS(status)) { + torResult = "Tor shutdown successfull\n"; + } else if (tor_killed_from_here) { + torResult = "Tor shutdown during wallet stop\n"; + } else if (WIFEXITED(status) && WEXITSTATUS(status)) { + if (WEXITSTATUS(status) == 127) { + torResult = "Terminating - Error: Could not start tor. Is tor installed and available in PATH?\n"; + } else { + torResult = "Terminating - Error: Tor did exit with status " + std::to_string(WEXITSTATUS(status)) + + "\n"; + } + } else { + torResult = "Terminating - Error: Tor was terminated\n"; + } + } else { + torResult = "Terminating - Error: waitpid() for tor failed\n"; + } + } + +#else + // Tor embedded + argv.push_back("--Log"); + argv.push_back("notice file " + log_file.string()); + + std::string strCommandLine; + for (auto const& s : argv) { strCommandLine += s + " "; } + LogPrintf("Start tor embedded (tor_main) with: %s\n", strCommandLine); + + std::vector argv_c; + std::transform(argv.begin(), argv.end(), std::back_inserter(argv_c), convert_str); + tor_main(argv_c.size(), &argv_c[0]); +#endif +} + +void StartTor(void *nothing) +{ + // Make this thread recognisable as the tor thread + RenameThread("onion"); + + // Keep tor alive for the lifetime of the wallet. run_tor() blocks on the + // tor process and returns when it exits. Previously any tor exit (crash, + // network blip, OOM, killed circuit) called StartShutdown() and terminated + // the whole wallet -- so a long IBD that outlived tor's stability could be + // closed mid-sync and never complete. Instead, restart tor whenever it + // exits unexpectedly; only stop the thread when the wallet itself is + // shutting down. + int nRestarts = 0; + while (!ShutdownRequested()) + { + try + { + run_tor(); // blocks until the tor process exits + } + catch (std::exception& e) { + PrintException(&e, "StartTor()"); + } + + if (ShutdownRequested() || tor_killed_from_here) + break; // tor was stopped as part of a normal wallet shutdown + + nRestarts++; + LogPrintf("Onion: tor exited unexpectedly (restart #%d), restarting in 5s...\n", nRestarts); + for (int i = 0; i < 50 && !ShutdownRequested(); i++) + MilliSleep(100); + } + + LogPrintf("Onion thread exited.\n"); +} + +void StartNode(boost::thread_group& threadGroup) +{ + if (semOutbound == NULL) { + // initialize semaphore + int nMaxOutbound = min(MAX_OUTBOUND_CONNECTIONS, (int)GetArg("-maxconnections", 125)); + semOutbound = new CSemaphore(nMaxOutbound); + } + + if (pnodeLocalHost == NULL) + pnodeLocalHost = new CNode(INVALID_SOCKET, CAddress(CService("127.0.0.1", 0), nLocalServices)); + + // + // Start threads + // + + // start the onion seeder + if (!GetBoolArg("-onionseed", true)) + LogPrintf(".onion seeding disabled\n"); + else + threadGroup.create_thread(boost::bind(&TraceThread, "onionseed", &ThreadOnionSeed)); + + // Send and receive from sockets, accept connections + threadGroup.create_thread(boost::bind(&TraceThread, "net", &ThreadSocketHandler)); + + // Initiate outbound connections from -addnode + threadGroup.create_thread(boost::bind(&TraceThread, "addcon", &ThreadOpenAddedConnections)); + + // Initiate outbound connections + threadGroup.create_thread(boost::bind(&TraceThread, "opencon", &ThreadOpenConnections)); + + // Process messages + threadGroup.create_thread(boost::bind(&TraceThread, "msghand", &ThreadMessageHandler)); + + // Dump network addresses + threadGroup.create_thread(boost::bind(&LoopForever, "dumpaddr", &DumpAddresses, DUMP_ADDRESSES_INTERVAL * 1000)); +} + +bool StopNode() +{ + LogPrintf("StopNode()\n"); + mempool.AddTransactionsUpdated(1); + if (semOutbound) + for (int i=0; ipost(); + DumpAddresses(); + +#ifdef __APPLE__ + // Tor separate process via boost::process + if (gTor && gTor.valid()) { + LogPrintf("Terminate tor process group\n"); + gTor.terminate(); + } +#elif __linux__ + if (tor_process_pid > 0) { + // Prevent confusing error output as SIGTERM is not working from here + tor_killed_from_here = true; + + kill(tor_process_pid, SIGKILL); + } +#endif + + return true; +} + +class CNetCleanup +{ +public: + CNetCleanup() + { + } + ~CNetCleanup() + { + // Close sockets + BOOST_FOREACH(CNode* pnode, vNodes) + if (pnode->hSocket != INVALID_SOCKET) + closesocket(pnode->hSocket); + BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket) + if (hListenSocket != INVALID_SOCKET) + if (closesocket(hListenSocket) == SOCKET_ERROR) + LogPrintf("closesocket(hListenSocket) failed with error %d\n", WSAGetLastError()); + +#ifdef WIN32 + // Shutdown Windows Sockets + WSACleanup(); +#endif + } +} +instance_of_cnetcleanup; + +void RelayTransaction(const CTransaction& tx, const uint256& hash) +{ + CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); + ss.reserve(10000); + ss << tx; + RelayTransaction(tx, hash, ss); +} + +void RelayTransaction(const CTransaction& tx, const uint256& hash, const CDataStream& ss) +{ + CInv inv(MSG_TX, hash); + { + LOCK(cs_mapRelay); + // Expire old relay messages + while (!vRelayExpiration.empty() && vRelayExpiration.front().first < GetTime()) + { + mapRelay.erase(vRelayExpiration.front().second); + vRelayExpiration.pop_front(); + } + + // Save original serialized message so newer versions are preserved + mapRelay.insert(std::make_pair(inv, ss)); + vRelayExpiration.push_back(std::make_pair(GetTime() + 15 * 60, inv)); + } + + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if(!pnode->fRelayTxes) + continue; + LOCK(pnode->cs_filter); + if (pnode->pfilter) + { + if (pnode->pfilter->IsRelevantAndUpdate(tx)) + pnode->PushInventory(inv); + } else + { + pnode->PushInventory(inv); + }; + }; +} + +void CNode::RecordBytesRecv(uint64_t bytes) +{ + LOCK(cs_totalBytesRecv); + nTotalBytesRecv += bytes; +} + +void CNode::RecordBytesSent(uint64_t bytes) +{ + LOCK(cs_totalBytesSent); + nTotalBytesSent += bytes; +} + +uint64_t CNode::GetTotalBytesRecv() +{ + LOCK(cs_totalBytesRecv); + return nTotalBytesRecv; +} + +uint64_t CNode::GetTotalBytesSent() +{ + LOCK(cs_totalBytesSent); + return nTotalBytesSent; +} diff --git a/src/net.h b/src/net/net.h similarity index 95% rename from src/net.h rename to src/net/net.h index 5f496e0989..8ffba11cc8 100644 --- a/src/net.h +++ b/src/net/net.h @@ -1,29 +1,39 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + #ifndef BITCOIN_NET_H #define BITCOIN_NET_H #include +#ifndef Q_MOC_RUN #include #include #include +#endif #include #ifndef WIN32 #include #endif -#include "mruset.h" -#include "netbase.h" -#include "protocol.h" -#include "addrman.h" -#include "bloom.h" +#include "support/mruset.h" +#include "net/netbase.h" +#include "net/protocol.h" +#include "net/addrman.h" +#include "net/bloom.h" #include "state.h" -#include "hash.h" +#include "crypto/hash.h" +#ifndef MSG_NOSIGNAL +#define MSG_NOSIGNAL 0x0 // not necessary on systems where it is not defined +#endif + class CRequestTracker; class CNode; class CBlockIndex; @@ -60,6 +70,7 @@ CNode* ConnectNode(CAddress addrConnect, const char *strDest = NULL); void MapPort(bool fUseUPnP); unsigned short GetListenPort(); bool BindListenPort(const CService &bindAddr, std::string& strError=REF(std::string())); +void StartTor(void *); void StartNode(boost::thread_group& threadGroup); bool StopNode(); void SocketSendData(CNode *pnode); @@ -131,12 +142,14 @@ class CRequestTracker /** Thread types */ enum threadId { + THREAD_TORNET, THREAD_SOCKETHANDLER, THREAD_OPENCONNECTIONS, THREAD_MESSAGEHANDLER, THREAD_RPCLISTENER, THREAD_UPNP, - THREAD_DNSSEED, + THREAD_ONIONSEED, +// THREAD_DNSSEED, THREAD_ADDEDCONNECTIONS, THREAD_DUMPADDRESS, THREAD_RPCHANDLER, @@ -145,7 +158,7 @@ enum threadId THREAD_MAX }; -extern bool fDiscover; +// extern bool fDiscover; extern bool fUseUPnP; extern uint64_t nLocalHostNonce; @@ -247,30 +260,6 @@ class CNetMessage - -class SecMsgNode -{ -public: - SecMsgNode() - { - lastSeen = 0; - lastMatched = 0; - ignoreUntil = 0; - nWakeCounter = 0; - fEnabled = false; - }; - - ~SecMsgNode() {}; - - CCriticalSection cs_smsg_net; - int64_t lastSeen; - int64_t lastMatched; - int64_t ignoreUntil; - uint32_t nWakeCounter; - bool fEnabled; - -}; - /** Information about a peer */ class CNode { @@ -293,7 +282,7 @@ class CNode int64_t nLastSend; int64_t nLastRecv; - + int64_t nLastSendEmpty; int64_t nTimeConnected; int64_t nTimeOffset; @@ -306,6 +295,7 @@ class CNode bool fOneShot; bool fClient; bool fInbound; + bool fVerified; // tor implementation bool fNetworkNode; bool fSuccessfullyConnected; bool fDisconnect; @@ -345,8 +335,6 @@ class CNode CCriticalSection cs_inventory; std::multimap mapAskFor; - SecMsgNode smsgData; - // Ping time measurement: // The pong reply we're expecting, or 0 if no pong expected. uint64_t nPingNonceSent; @@ -356,8 +344,8 @@ class CNode int64_t nPingUsecTime; // Whether a ping is requested. bool fPingQueued; - - + + CCriticalSection cs_filter; CBloomFilter* pfilter; @@ -381,6 +369,7 @@ class CNode fOneShot = false; fClient = false; // set by version message fInbound = fInboundIn; + fVerified = false; // tor implementation fNetworkNode = false; fSuccessfullyConnected = false; fDisconnect = false; @@ -401,7 +390,7 @@ class CNode nPingUsecStart = 0; nPingUsecTime = 0; fPingQueued = false; - + { LOCK(cs_nLastNodeId); id = nLastNodeId++; @@ -444,7 +433,7 @@ class CNode unsigned int GetTotalRecvSize() { unsigned int total = 0; - BOOST_FOREACH(const CNetMessage &msg, vRecvMsg) + BOOST_FOREACH(const CNetMessage &msg, vRecvMsg) total += msg.vRecv.size() + 24; return total; } @@ -483,7 +472,7 @@ class CNode // Known checking here is only to save space from duplicates. // SendMessages will filter it again for knowns that were added // after addresses were pushed. - if (addr.IsValid() && !setAddrKnown.count(addr)) + if (addr.IsValid() && !setAddrKnown.count(addr) && (!addr.IsTorV3() || nRecvVersion >= 60042)) vAddrToSend.push_back(addr); } @@ -509,7 +498,7 @@ class CNode { // We're using mapAskFor as a priority queue, // the key is the earliest time the request can be sent - + int64_t& nRequestTime = mapAlreadyAskedFor[inv]; LogPrint("net", "askfor %s %d (%s)\n", inv.ToString(), nRequestTime, DateTimeStrFormat("%H:%M:%S", nRequestTime/1000000)); @@ -556,8 +545,10 @@ class CNode return; } - if (ssSend.size() == 0) + if (ssSend.size() == 0) { + LEAVE_CRITICAL_SECTION(cs_vSend); return; + } // Set the size unsigned int nSize = ssSend.size() - CMessageHeader::HEADER_SIZE; @@ -792,7 +783,7 @@ class CNode void PushGetBlocks(CBlockIndex* pindexBegin, uint256 hashEnd); - + void PushGetBlocks(uint256& hashBegin, uint256 hashEnd); void PushGetBlocks(CBlockThinIndex* pindexBegin, uint256 hashEnd); void PushGetHeaders(CBlockThinIndex* pindexBegin, uint256 hashEnd); diff --git a/src/netbase.cpp b/src/net/netbase.cpp similarity index 93% rename from src/netbase.cpp rename to src/net/netbase.cpp index 4bf7e16161..0dc8238d32 100644 --- a/src/netbase.cpp +++ b/src/net/netbase.cpp @@ -1,14 +1,22 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "netbase.h" - -#include "hash.h" -#include "sync.h" +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + +#include "net/netbase.h" + +#include "crypto/hash.h" +#include "util/sync.h" #include "uint256.h" -#include "util.h" +#include "util/util.h" + +#if defined(_MSC_VER) +#include +typedef SSIZE_T ssize_t; +#endif #ifdef HAVE_GETADDRINFO_A #include @@ -41,7 +49,7 @@ bool fNameLookup = false; static const unsigned char pchIPv4[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff }; // Need ample time for negotiation for very slow proxies such as Tor (milliseconds) -static const int SOCKS5_RECV_TIMEOUT = 20 * 1000; +static const int SOCKS5_RECV_TIMEOUT = 60 * 1000; enum Network ParseNetwork(std::string net) { boost::to_lower(net); @@ -303,7 +311,7 @@ bool static Socks5(string strDest, int port, SOCKET& hSocket) if (!InterruptibleRecv(pchRet1, 2, SOCKS5_RECV_TIMEOUT, hSocket)) { CloseSocket(hSocket); - return error("Error reading proxy response"); + return false; } if (pchRet1[0] != 0x05 || pchRet1[1] != 0x00) { @@ -326,7 +334,7 @@ bool static Socks5(string strDest, int port, SOCKET& hSocket) if (!InterruptibleRecv(pchRet2, 4, SOCKS5_RECV_TIMEOUT, hSocket)) { CloseSocket(hSocket); - return error("Error reading proxy response"); + return error("Error timeout"); } if (pchRet2[0] != 0x05) { @@ -583,11 +591,13 @@ bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest void CNetAddr::Init() { memset(ip, 0, sizeof(ip)); + memset(ip_tor, 0, sizeof(ip_tor)); } void CNetAddr::SetIP(const CNetAddr& ipIn) { memcpy(ip, ipIn.ip, sizeof(ip)); + memcpy(ip_tor, ipIn.ip_tor, sizeof(ip_tor)); } void CNetAddr::SetRaw(Network network, const uint8_t *ip_in) @@ -597,9 +607,11 @@ void CNetAddr::SetRaw(Network network, const uint8_t *ip_in) case NET_IPV4: memcpy(ip, pchIPv4, 12); memcpy(ip+12, ip_in, 4); + memset(ip_tor, 0, sizeof(ip_tor)); break; case NET_IPV6: memcpy(ip, ip_in, 16); + memset(ip_tor, 0, sizeof(ip_tor)); break; default: assert(!"invalid network"); @@ -614,10 +626,25 @@ bool CNetAddr::SetSpecial(const std::string &strName) if (strName.size()>6 && strName.substr(strName.size() - 6, 6) == ".onion") { std::vector vchAddr = DecodeBase32(strName.substr(0, strName.size() - 6).c_str()); if (vchAddr.size() != 16-sizeof(pchOnionCat)) - return false; + { + if (vchAddr.size() == 41-sizeof(pchOnionCat)) + { + memcpy(ip_tor, pchOnionCat, sizeof(pchOnionCat)); + for (unsigned int i=0; i<41-sizeof(pchOnionCat); i++) + ip_tor[i + sizeof(pchOnionCat)] = vchAddr[i]; + } + else + return false; + } + else + memset(ip_tor, 0, sizeof(ip_tor)); + memcpy(ip, pchOnionCat, sizeof(pchOnionCat)); for (unsigned int i=0; i<16-sizeof(pchOnionCat); i++) + { ip[i + sizeof(pchOnionCat)] = vchAddr[i]; + } + return true; } if (strName.size()>11 && strName.substr(strName.size() - 11, 11) == ".oc.b32.i2p") { @@ -668,6 +695,11 @@ unsigned int CNetAddr::GetByte(int n) const return ip[15-n]; } +unsigned int CNetAddr::GetByteTorV3(int n) const +{ + return ip_tor[40-n]; +} + bool CNetAddr::IsIPv4() const { return (memcmp(ip, pchIPv4, sizeof(pchIPv4)) == 0); @@ -756,6 +788,11 @@ bool CNetAddr::IsTor() const return (memcmp(ip, pchOnionCat, sizeof(pchOnionCat)) == 0); } +bool CNetAddr::IsTorV3() const +{ + return IsTor() && (memcmp(ip_tor, pchOnionCat, sizeof(pchOnionCat)) == 0); +} + bool CNetAddr::IsI2P() const { return (memcmp(ip, pchGarliCat, sizeof(pchGarliCat)) == 0); @@ -841,6 +878,8 @@ enum Network CNetAddr::GetNetwork() const std::string CNetAddr::ToStringIP() const { + if (IsTorV3()) + return EncodeBase32(&ip_tor[6], 35) + ".onion"; if (IsTor()) return EncodeBase32(&ip[6], 10) + ".onion"; if (IsI2P()) @@ -870,17 +909,24 @@ std::string CNetAddr::ToString() const bool operator==(const CNetAddr& a, const CNetAddr& b) { - return (memcmp(a.ip, b.ip, 16) == 0); + if (a.IsTorV3() == b.IsTorV3()) + return b.IsTorV3() ? (memcmp(a.ip_tor, b.ip_tor, 41) == 0) : (memcmp(a.ip, b.ip, 16) == 0); + return false; } bool operator!=(const CNetAddr& a, const CNetAddr& b) { - return (memcmp(a.ip, b.ip, 16) != 0); + if (a.IsTorV3() == b.IsTorV3()) + return b.IsTorV3() ? (memcmp(a.ip_tor, b.ip_tor, 41) != 0) : (memcmp(a.ip, b.ip, 16) != 0); + return true; } bool operator<(const CNetAddr& a, const CNetAddr& b) { - return (memcmp(a.ip, b.ip, 16) < 0); + if (a.IsTorV3() == b.IsTorV3()) + return b.IsTorV3() ? (memcmp(a.ip_tor, b.ip_tor, 41) < 0) : (memcmp(a.ip, b.ip, 16) < 0); + int result = memcmp(a.ip, b.ip, 16); + return (result == 0) ? b.IsTorV3() : (result < 0); } bool CNetAddr::GetInAddr(struct in_addr* pipv4Addr) const @@ -962,19 +1008,31 @@ std::vector CNetAddr::GetGroup() const vchRet.push_back(nClass); while (nBits >= 8) { - vchRet.push_back(GetByte(15 - nStartByte)); + if (IsTorV3()) + vchRet.push_back(GetByteTorV3(40 - nStartByte)); + else + vchRet.push_back(GetByte(15 - nStartByte)); nStartByte++; nBits -= 8; } if (nBits > 0) - vchRet.push_back(GetByte(15 - nStartByte) | ((1 << nBits) - 1)); + { + if (IsTorV3()) + vchRet.push_back(GetByteTorV3(40 - nStartByte) | ((1 << nBits) - 1)); + else + vchRet.push_back(GetByte(15 - nStartByte) | ((1 << nBits) - 1)); + } return vchRet; } uint64_t CNetAddr::GetHash() const { - uint256 hash = Hash(&ip[0], &ip[16]); + uint256 hash; + if (IsTorV3()) + hash = Hash(&ip_tor[0], &ip_tor[41]); + else + hash = Hash(&ip[0], &ip[16]); uint64_t nRet; memcpy(&nRet, &hash, sizeof(nRet)); return nRet; @@ -1188,10 +1246,20 @@ bool CService::GetSockAddr(struct sockaddr* paddr, socklen_t *addrlen) const std::vector CService::GetKey() const { std::vector vKey; - vKey.resize(18); - memcpy(&vKey[0], ip, 16); - vKey[16] = port / 0x100; - vKey[17] = port & 0x0FF; + if (IsTorV3()) + { + vKey.resize(43); + memcpy(&vKey[0], ip_tor, 41); + vKey[41] = port / 0x100; + vKey[42] = port & 0x0FF; + } + else + { + vKey.resize(18); + memcpy(&vKey[0], ip, 16); + vKey[16] = port / 0x100; + vKey[17] = port & 0x0FF; + } return vKey; } diff --git a/src/netbase.h b/src/net/netbase.h similarity index 78% rename from src/netbase.h rename to src/net/netbase.h index fa13f1ac42..722a1a1663 100644 --- a/src/netbase.h +++ b/src/net/netbase.h @@ -1,10 +1,14 @@ -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef BITCOIN_NETBASE_H #define BITCOIN_NETBASE_H -#include "compat.h" +#include "compat/compat.h" #include "serialize.h" #include @@ -15,7 +19,7 @@ extern int nConnectTimeout; extern bool fNameLookup; /** -timeout default */ -static const int DEFAULT_CONNECT_TIMEOUT = 5000; +static const int DEFAULT_CONNECT_TIMEOUT = 10000; #ifdef WIN32 // In MSVC, this is defined as a macro, undefine it to prevent a compile and link error @@ -29,15 +33,22 @@ enum Network NET_IPV6, NET_TOR, NET_I2P, - + NET_MAX, }; +enum AddressFormat +{ + ADDR_LEGACY = 0, + ADDR_TORV3, +}; + /** IP address (IPv6, or IPv4 using mapped IPv6 range (::FFFF:0:0/96)) */ class CNetAddr { protected: unsigned char ip[16]; // in network byte order + unsigned char ip_tor[41]; //for compatibility with onion v3 addresses public: CNetAddr(); @@ -52,7 +63,6 @@ class CNetAddr * @note Only NET_IPV4 and NET_IPV6 are allowed for network. */ void SetRaw(Network network, const uint8_t *data); - bool SetSpecial(const std::string &strName); // for Tor addresses bool IsIPv4() const; // IPv4 mapped address (::FFFF:0:0/96, 0.0.0.0/0) bool IsIPv6() const; // IPv6 address (not mapped IPv4, not Tor/i2p) @@ -70,6 +80,7 @@ class CNetAddr bool IsRFC6052() const; // IPv6 well-known prefix (64:FF9B::/96) bool IsRFC6145() const; // IPv6 IPv4-translated address (::FFFF:0:0:0/96) bool IsTor() const; + bool IsTorV3() const; bool IsI2P() const; bool IsLocal() const; bool IsRoutable() const; @@ -79,6 +90,7 @@ class CNetAddr std::string ToString() const; std::string ToStringIP() const; unsigned int GetByte(int n) const; + unsigned int GetByteTorV3(int n) const; uint64_t GetHash() const; bool GetInAddr(struct in_addr* pipv4Addr) const; std::vector GetGroup() const; @@ -93,7 +105,44 @@ class CNetAddr IMPLEMENT_SERIALIZE ( - READWRITE(FLATDATA(ip)); + CNetAddr* pthis = const_cast(this); + if (nType == SER_NETWORK && nVersion >= INIT_PROTO_VERSION && nVersion < 60042) + { + if (fRead) + pthis->Init(); + READWRITE(FLATDATA(ip)); + } + else + { + int fTorV3; + if (fRead) + { + pthis->Init(); + READWRITE(fTorV3); + if (fTorV3 == ADDR_TORV3) + { + READWRITE(FLATDATA(ip_tor)); + std::memcpy((char *)(ip), ip_tor, sizeof(ip)); + } + else + READWRITE(FLATDATA(ip)); + } + else + { + if (pthis->IsTorV3()) + { + fTorV3 = ADDR_TORV3; + READWRITE(fTorV3); + READWRITE(FLATDATA(ip_tor)); + } + else + { + fTorV3 = ADDR_LEGACY; + READWRITE(fTorV3); + READWRITE(FLATDATA(ip)); + } + } + } ) }; @@ -154,7 +203,8 @@ class CService : public CNetAddr IMPLEMENT_SERIALIZE ( CService* pthis = const_cast(this); - READWRITE(FLATDATA(ip)); + CNetAddr* pip = (CNetAddr*)pthis; + READWRITE(*pip); unsigned short portN = htons(port); READWRITE(portN); if (fRead) diff --git a/src/protocol.cpp b/src/net/protocol.cpp similarity index 89% rename from src/protocol.cpp rename to src/net/protocol.cpp index ce4b93a6f1..c083b070f4 100644 --- a/src/protocol.cpp +++ b/src/net/protocol.cpp @@ -1,11 +1,14 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "protocol.h" -#include "util.h" -#include "netbase.h" +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + +#include "net/protocol.h" +#include "util/util.h" +#include "net/netbase.h" #ifndef WIN32 # include diff --git a/src/protocol.h b/src/net/protocol.h similarity index 90% rename from src/protocol.h rename to src/net/protocol.h index 7612b68ba1..e17c4b3d88 100644 --- a/src/protocol.h +++ b/src/net/protocol.h @@ -1,7 +1,10 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT #ifndef __cplusplus # error This header can only be compiled as C++. @@ -12,9 +15,9 @@ #include -#include "chainparams.h" +#include "kernel/chainparams.h" #include "serialize.h" -#include "netbase.h" +#include "net/netbase.h" #include "uint256.h" #include "state.h" @@ -124,7 +127,7 @@ class CInv const char* GetCommand() const; std::string ToString() const; void print() const; - + int type; uint256 hash; }; @@ -134,7 +137,7 @@ class CPendingFilteredChunk public: CPendingFilteredChunk(uint256 _startHash, uint256 _endHash, int64_t _nTime) : startHash(_startHash), endHash(_endHash), nTime(_nTime) {}; - + uint256 startHash; uint256 endHash; int64_t nTime; diff --git a/src/noui.cpp b/src/noui.cpp index 262ca4fa49..96a7dcbba6 100644 --- a/src/noui.cpp +++ b/src/noui.cpp @@ -1,10 +1,14 @@ -// Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "ui_interface.h" -#include "init.h" -#include "rpcserver.h" +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2010 Satoshi Nakamoto +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + +#include "interface.h" +#include "init/init.h" +#include "rpc/rpcserver.h" #include diff --git a/src/obj-test/.gitignore b/src/obj-test/.gitignore index d6b7ef32c8..c9ccbbd91f 100644 --- a/src/obj-test/.gitignore +++ b/src/obj-test/.gitignore @@ -1,2 +1,8 @@ +# SPDX-FileCopyrightText: © 2025 ALIAS Developer +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + * !.gitignore diff --git a/src/obj/.gitignore b/src/obj/.gitignore index d6b7ef32c8..c9ccbbd91f 100644 --- a/src/obj/.gitignore +++ b/src/obj/.gitignore @@ -1,2 +1,8 @@ +# SPDX-FileCopyrightText: © 2025 ALIAS Developer +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + * !.gitignore diff --git a/src/osx.pri b/src/osx.pri new file mode 100644 index 0000000000..82699d6e91 --- /dev/null +++ b/src/osx.pri @@ -0,0 +1,136 @@ +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# +# SPDX-License-Identifier: MIT + +# 1. Before using autotools & make, make sure to set the macOS target platform in the shell: +# export MACOSX_DEPLOYMENT_TARGET=10.12 + +# 2. Install all libraries with homebrew: +# brew install autoconf automake libtool pkg-config openssl@1.1 libevent boost gcc wget + +# (2a optional) Fix for xCode to stop complaining about not finding the string.h file +# https://stackoverflow.com/questions/48839127/qmake-derived-clang-in-osx-10-13-cannot-find-string-h +# INCLUDEPATH += /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include + +ICON = $$PWD/qt/res/icons/alias-app.icns + +QMAKE_INFO_PLIST = $$PWD/osx/Info.plist + + # to build tor with autotools, call in subfolder tor: + # ./autogen.sh && ./configure --with-ssl-dir=/usr/local/Cellar/openssl@1.1/1.1.1 --disable-asciidoc --disable-lzma +# LIBS += -L$$PWD/../tor/src/or -ltor \ +# -L$$PWD/../tor/src/common -lor \ +# -L$$PWD/../tor/src/common -lor-ctime \ +# -L$$PWD/../tor/src/common -lor-crypto \ +# -L$$PWD/../tor/src/common -lor-event \ +# -L$$PWD/../tor/src/trunnel -lor-trunnel \ +# -L$$PWD/../tor/src/common -lcurve25519_donna \ +# -L$$PWD/../tor/src/ext/ed25519/donna -led25519_donna \ +# -L$$PWD/../tor/src/ext/ed25519/ref10 -led25519_ref10 \ +# -L$$PWD/../tor/src/ext/keccak-tiny -lkeccak-tiny \ + +# INCLUDEPATH += $$PWD/../tor/src/or $$PWD/../tor/src/common $$PWD/../tor/src/trunnel $$PWD/../tor/src/ext/ed25519/donna $$PWD/../tor/src/ext/ed25519/ref10 $$PWD/../tor/src/ext/keccak-tiny +# DEPENDPATH += $$PWD/../tor/src/or $$PWD/../tor/src/common $$PWD/../tor/src/trunnel $$PWD/../tor/src/ext/ed25519/donna $$PWD/../tor/src/ext/ed25519/ref10 $$PWD/../tor/src/ext/keccak-tiny + +# PRE_TARGETDEPS += $$PWD/../tor/src/or/libtor.a \ +# $$PWD/../tor/src/common/libor.a \ +# $$PWD/../tor/src/common/libor-ctime.a \ +# $$PWD/../tor/src/common/libor-crypto.a \ +# $$PWD/../tor/src/common/libor-event.a \ +# $$PWD/../tor/src/trunnel/libor-trunnel.a \ +# $$PWD/../tor/src/common/libcurve25519_donna.a \ +# $$PWD/../tor/src/ext/ed25519/donna/libed25519_donna.a \ +# $$PWD/../tor/src/ext/ed25519/ref10/libed25519_ref10.a \ +# $$PWD/../tor/src/ext/keccak-tiny/libkeccak-tiny.a \ + + # brew install zlib + _ZLIB_PATH = /usr/local/opt/zlib + INCLUDEPATH += "$${_ZLIB_PATH}/include/" + LIBS += -L$${_ZLIB_PATH}/lib + #Shblis-MacBook-Pro:src Shbli$ find /usr/local/Cellar/libevent/2.1.8/lib/ -name *a + LIBS += -lz + + # to build BerkeleyDB with autotools, call in subfolder db4.8: + # ./configure --enable-cxx --disable-shared --disable-replication --with-pic && make + _BERKELEY_PATH = $$PWD/../db4.8/build_unix + LIBS += $${_BERKELEY_PATH}/libdb_cxx.a \ # link static + $${_BERKELEY_PATH}/libdb.a + + DEPENDPATH += $${_BERKELEY_PATH} + INCLUDEPATH += $${_BERKELEY_PATH} + + # to build leveldb call in subfolder leveldb: + # ./build_detect_platform build_config.mk ./ && make + LIBS += -L$$PWD/../leveldb/out-static -lleveldb \ + -L$$PWD/../leveldb/out-static -lmemenv + + INCLUDEPATH += $$PWD/../leveldb/out-static + DEPENDPATH += $$PWD/../leveldb/out-static + INCLUDEPATH += $$PWD/../leveldb/include + DEPENDPATH += $$PWD/../leveldb/include + INCLUDEPATH += $$PWD/../leveldb/helpers + DEPENDPATH += $$PWD/../leveldb/helpers + + PRE_TARGETDEPS += $$PWD/../leveldb/out-static/libleveldb.a \ + $$PWD/../leveldb/out-static/libmemenv.a + + +HEADERS += $$PWD/qt/macdockiconhandler.h \ + $$PWD/qt/macnotificationhandler.h \ + +OBJECTIVE_SOURCES += $$PWD/qt/macdockiconhandler.mm \ + $$PWD/qt/macnotificationhandler.mm \ + +DEFINES += FORTIFY_SOURCE=1 + +QMAKE_LFLAGS += -fstack-protector +QMAKE_CXXFLAGS += -pthread -fPIC -fstack-protector -O2 -D_FORTIFY_SOURCE=1 -Wall -Wextra -Wno-ignored-qualifiers -Woverloaded-virtual -Wformat -Wformat-security -Wno-unused-parameter + +DEFINES += MAC_OSX +DEFINES += HAVE_BUILD_INFO +# Mac: compile for maximum compatibility (10.0 Yosemite, 32-bit) +QMAKE_CXXFLAGS += -std=c++17 -mmacosx-version-min=10.10 -isysroot + + # https://www.reddit.com/r/cpp/comments/334s4r/how_to_enable_c14_in_qt_creator_on_a_mac/ + # TODO might be obsolete with C++17: Turns out, there's a glitch in the Mac version where the standard library isn't correctly included when using the C++14 config flag. Adding this additional line to the .pro file fixes the problem: + QMAKE_CXXFLAGS += -stdlib=libc++ + + #add in core foundation framework + QMAKE_LFLAGS += -F /System/Library/Frameworks/CoreFoundation.framework/ + LIBS += -framework CoreFoundation + + QMAKE_LFLAGS += -F /System/Library/Frameworks/AppKit.framework/ + LIBS += -framework AppKit + + QMAKE_LFLAGS += -F /System/Library/Frameworks/ApplicationServices.framework/ + LIBS += -framework ApplicationServices + + + #brew install boost + # $BOOST_PATH is set via environment +# _BOOST_PATH = /usr/local/Cellar/boost/1.68.0_1 +# BOOST_PATH = /usr/local/Cellar/boost/1.68.0_1 + INCLUDEPATH += "${BOOST_PATH}/include/" + LIBS += -L${BOOST_PATH}/lib + LIBS += -lboost_system-mt -lboost_chrono-mt -lboost_filesystem-mt -lboost_program_options-mt -lboost_thread-mt -lboost_unit_test_framework-mt -lboost_timer-mt # using dynamic lib (not sure if you need that "-mt" at the end or not) + DEFINES += BOOST_ASIO_ENABLE_OLD_SERVICES BOOST_SPIRIT_THREADSAFE BOOST_THREAD_USE_LIB BOOST_THREAD_POSIX BOOST_HAS_THREADS + #LIBS += ${BOOST_PATH}/lib/libboost_chrono-mt.a # using static lib + + #brew install openssl@1.1 + # $OPENSSL_PATH is set via environment +# _OPENSSL_PATH = /usr/local/Cellar/openssl@1.1/1.1.1 +# OPENSSL_PATH = /usr/local/Cellar/openssl@1.1/1.1.0h + # See http://doc.qt.io/archives/qt-4.8/qmake-advanced-usage.html#variables + INCLUDEPATH += "${OPENSSL_PATH}/include/" + LIBS += -L${OPENSSL_PATH}/lib + LIBS += -lssl -lcrypto # using dynamic lib (not sure if you need that "-mt" at the end or not) + + #libevent-2.1.6.dylib + #brew install libevent +# _LIBEVENT_PATH = /usr/local/Cellar/libevent/2.1.8 + _LIBEVENT_PATH = /usr/local/Cellar/libevent/2.1.11_1 + INCLUDEPATH += "$${_LIBEVENT_PATH}/include/" + LIBS += -L$${_LIBEVENT_PATH}/lib + #Shblis-MacBook-Pro:src Shbli$ find /usr/local/Cellar/libevent/2.1.8/lib/ -name *a + LIBS += -levent_extra -levent -levent_core -levent_openssl -levent_pthreads diff --git a/src/osx/MacOSXBundleInfo.plist.in b/src/osx/MacOSXBundleInfo.plist.in new file mode 100644 index 0000000000..bf8ec4880b --- /dev/null +++ b/src/osx/MacOSXBundleInfo.plist.in @@ -0,0 +1,41 @@ + + + + + + + + CFBundleName + ${MACOSX_BUNDLE_BUNDLE_NAME} + CFBundleExecutable + Alias + CFBundleGetInfoString + ${MACOSX_BUNDLE_INFO_STRING} + CFBundleDisplayName + Alias + CFBundleIconFile + alias-app.icns + CFBundleIdentifier + ${MACOSX_BUNDLE_GUI_IDENTIFIER} + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + ${MACOSX_BUNDLE_BUNDLE_VERSION} + CFBundleShortVersionString + ${MACOSX_BUNDLE_SHORT_VERSION_STRING} + CFBundleLongVersionString + ${MACOSX_BUNDLE_LONG_VERSION_STRING} + LSMinimumSystemVersion + 10.14 + NSPrincipalClass + NSApplication + NSHumanReadableCopyright + ${MACOSX_BUNDLE_COPYRIGHT} + NSSupportsAutomaticGraphicsSwitching + + NOTE + This file was initially generated by Qt/QMake automatically updated during CMake build + + diff --git a/src/osx/app-slide-arrow.png b/src/osx/app-slide-arrow.png new file mode 100644 index 0000000000..cf2f08bc4c Binary files /dev/null and b/src/osx/app-slide-arrow.png differ diff --git a/src/osx/torrc-defaults b/src/osx/torrc-defaults new file mode 100644 index 0000000000..4fba9523d0 --- /dev/null +++ b/src/osx/torrc-defaults @@ -0,0 +1,27 @@ +# torrc-defaults for Spectrecoin +# +# SPDX-FileCopyrightText: © 2025 ALIAS Developer +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# DO NOT EDIT THIS FILE +# +# This file is distributed with Spectrecoin within the tor folder and SHOULD NOT be modified +# (it may be overwritten during the next Spectrecoin update). +# To customize your Tor configuration, shut down Spectrecoin and edit the torrc file. +# +# If non-zero, try to write to disk less frequently than we would otherwise. +AvoidDiskWrites 1 + +# If non-zero, try to use built-in (static) crypto hardware acceleration when available. +HardwareAccel 1 + +## obfs4proxy configuration +ClientTransportPlugin obfs2,obfs3,obfs4,scramblesuit exec PluggableTransports/obfs4proxy + +## meek configuration +#ClientTransportPlugin meek exec PluggableTransports/meek-client-torbrowser -- PluggableTransports/meek-client + +## snowflake configuration +ClientTransportPlugin snowflake exec PluggableTransports/snowflake-client -url https://snowflake-broker.azureedge.net/ -front ajax.aspnetcdn.com -ice stun:stun.l.google.com:19302 \ No newline at end of file diff --git a/src/osx/torrc-defaults_obfs4 b/src/osx/torrc-defaults_obfs4 new file mode 100644 index 0000000000..8c30b1e666 --- /dev/null +++ b/src/osx/torrc-defaults_obfs4 @@ -0,0 +1,57 @@ +# torrc-defaults for Spectrecoin +# +# SPDX-FileCopyrightText: © 2025 ALIAS Developer +# SPDX-FileCopyrightText: © 2020 Alias Developers +# SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +# SPDX-License-Identifier: MIT +# +# DO NOT EDIT THIS FILE +# +# This file is distributed with Spectrecoin within the tor folder and SHOULD NOT be modified +# (it may be overwritten during the next Spectrecoin update). +# To customize your Tor configuration, shut down Spectrecoin and edit the torrc file. +# +# If non-zero, try to write to disk less frequently than we would otherwise. +AvoidDiskWrites 1 + +# If non-zero, try to use built-in (static) crypto hardware acceleration when available. +HardwareAccel 1 + +## obfs4proxy configuration +ClientTransportPlugin obfs2,obfs3,obfs4,scramblesuit exec PluggableTransports/obfs4proxy + +## meek configuration +#ClientTransportPlugin meek exec PluggableTransports/meek-client-torbrowser -- PluggableTransports/meek-client + +## snowflake configuration +ClientTransportPlugin snowflake exec PluggableTransports/snowflake-client -url https://snowflake-broker.azureedge.net/ -front ajax.aspnetcdn.com -ice stun:stun.l.google.com:19302 + +## preconfigured OBFS4 bridges +Bridge obfs4 154.35.22.9:12166 C73ADBAC8ADFDBF0FC0F3F4E8091C0107D093716 cert=gEGKc5WN/bSjFa6UkG9hOcft1tuK+cV8hbZ0H6cqXiMPLqSbCh2Q3PHe5OOr6oMVORhoJA iat-mode=0 +Bridge obfs4 154.35.22.9:443 C73ADBAC8ADFDBF0FC0F3F4E8091C0107D093716 cert=gEGKc5WN/bSjFa6UkG9hOcft1tuK+cV8hbZ0H6cqXiMPLqSbCh2Q3PHe5OOr6oMVORhoJA iat-mode=0 +Bridge obfs4 38.229.33.83:80 0BAC39417268B96B9F514E7F63FA6FBA1A788955 cert=VwEFpk9F/UN9JED7XpG1XOjm/O8ZCXK80oPecgWnNDZDv5pdkhq1OpbAH0wNqOT6H6BmRQ iat-mode=1 +Bridge obfs4 154.35.22.13:443 FE7840FE1E21FE0A0639ED176EDA00A3ECA1E34D cert=fKnzxr+m+jWXXQGCaXe4f2gGoPXMzbL+bTBbXMYXuK0tMotd+nXyS33y2mONZWU29l81CA iat-mode=0 +Bridge obfs4 38.229.1.78:80 C8CBDB2464FC9804A69531437BCF2BE31FDD2EE4 cert=Hmyfd2ev46gGY7NoVxA9ngrPF2zCZtzskRTzoWXbxNkzeVnGFPWmrTtILRyqCTjHR+s9dg iat-mode=1 +Bridge obfs4 192.99.11.54:443 7B126FAB960E5AC6A629C729434FF84FB5074EC2 cert=VW5f8+IBUWpPFxF+rsiVy2wXkyTQG7vEd+rHeN2jV5LIDNu8wMNEOqZXPwHdwMVEBdqXEw iat-mode=0 +Bridge obfs4 154.35.22.12:80 00DC6C4FA49A65BD1472993CF6730D54F11E0DBB cert=N86E9hKXXXVz6G7w2z8wFfhIDztDAzZ/3poxVePHEYjbKDWzjkRDccFMAnhK75fc65pYSg iat-mode=0 +Bridge obfs4 85.17.30.79:443 FC259A04A328A07FED1413E9FC6526530D9FD87A cert=RutxZlu8BtyP+y0NX7bAVD41+J/qXNhHUrKjFkRSdiBAhIHIQLhKQ2HxESAKZprn/lR3KA iat-mode=0 +Bridge obfs4 192.95.36.142:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1 +Bridge obfs4 216.252.162.21:46089 0DB8799466902192B6C7576D58D4F7F714EC87C1 cert=XPUwcQPxEXExHfJYX58gZXN7mYpos7VNAHbkgERNFg+FCVNzuYo1Wp+uMscl3aR9hO2DRQ iat-mode=0 +Bridge obfs4 109.105.109.147:13764 BBB28DF0F201E706BE564EFE690FE9577DD8386D cert=KfMQN/tNMFdda61hMgpiMI7pbwU1T+wxjTulYnfw+4sgvG0zSH7N7fwT10BI8MUdAD7iJA iat-mode=2 +Bridge obfs4 154.35.22.10:80 8FB9F4319E89E5C6223052AA525A192AFBC85D55 cert=GGGS1TX4R81m3r0HBl79wKy1OtPPNR2CZUIrHjkRg65Vc2VR8fOyo64f9kmT1UAFG7j0HQ iat-mode=0 +Bridge obfs4 154.35.22.11:443 A832D176ECD5C7C6B58825AE22FC4C90FA249637 cert=YPbQqXPiqTUBfjGFLpm9JYEFTBvnzEJDKJxXG5Sxzrr/v2qrhGU4Jls9lHjLAhqpXaEfZw iat-mode=0 +Bridge obfs4 83.212.101.3:50002 A09D536DD1752D542E1FBB3C9CE4449D51298239 cert=lPRQ/MXdD1t5SRZ9MquYQNT9m5DV757jtdXdlePmRCudUU9CFUOX1Tm7/meFSyPOsud7Cw iat-mode=0 +Bridge obfs4 109.105.109.165:10527 8DFCD8FB3285E855F5A55EDDA35696C743ABFC4E cert=Bvg/itxeL4TWKLP6N1MaQzSOC6tcRIBv6q57DYAZc3b2AzuM+/TfB7mqTFEfXILCjEwzVA iat-mode=1 +Bridge obfs4 154.35.22.11:80 A832D176ECD5C7C6B58825AE22FC4C90FA249637 cert=YPbQqXPiqTUBfjGFLpm9JYEFTBvnzEJDKJxXG5Sxzrr/v2qrhGU4Jls9lHjLAhqpXaEfZw iat-mode=0 +Bridge obfs4 154.35.22.12:4304 00DC6C4FA49A65BD1472993CF6730D54F11E0DBB cert=N86E9hKXXXVz6G7w2z8wFfhIDztDAzZ/3poxVePHEYjbKDWzjkRDccFMAnhK75fc65pYSg iat-mode=0 +Bridge obfs4 154.35.22.11:16488 A832D176ECD5C7C6B58825AE22FC4C90FA249637 cert=YPbQqXPiqTUBfjGFLpm9JYEFTBvnzEJDKJxXG5Sxzrr/v2qrhGU4Jls9lHjLAhqpXaEfZw iat-mode=0 +Bridge obfs4 154.35.22.9:80 C73ADBAC8ADFDBF0FC0F3F4E8091C0107D093716 cert=gEGKc5WN/bSjFa6UkG9hOcft1tuK+cV8hbZ0H6cqXiMPLqSbCh2Q3PHe5OOr6oMVORhoJA iat-mode=0 +Bridge obfs4 85.31.186.26:443 91A6354697E6B02A386312F68D82CF86824D3606 cert=PBwr+S8JTVZo6MPdHnkTwXJPILWADLqfMGoVvhZClMq/Urndyd42BwX9YFJHZnBB3H0XCw iat-mode=0 +Bridge obfs4 85.31.186.98:443 011F2599C0E9B27EE74B353155E244813763C3E5 cert=ayq0XzCwhpdysn5o0EyDUbmSOx3X/oTEbzDMvczHOdBJKlvIdHHLJGkZARtT4dcBFArPPg iat-mode=0 +Bridge obfs4 154.35.22.10:443 8FB9F4319E89E5C6223052AA525A192AFBC85D55 cert=GGGS1TX4R81m3r0HBl79wKy1OtPPNR2CZUIrHjkRg65Vc2VR8fOyo64f9kmT1UAFG7j0HQ iat-mode=0 +Bridge obfs4 154.35.22.13:16815 FE7840FE1E21FE0A0639ED176EDA00A3ECA1E34D cert=fKnzxr+m+jWXXQGCaXe4f2gGoPXMzbL+bTBbXMYXuK0tMotd+nXyS33y2mONZWU29l81CA iat-mode=0 +Bridge obfs4 [2001:470:b381:bfff:216:3eff:fe23:d6c3]:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1 +Bridge obfs4 37.218.240.34:40035 88CD36D45A35271963EF82E511C8827A24730913 cert=eGXYfWODcgqIdPJ+rRupg4GGvVGfh25FWaIXZkit206OSngsp7GAIiGIXOJJROMxEqFKJg iat-mode=1 +Bridge obfs4 154.35.22.10:15937 8FB9F4319E89E5C6223052AA525A192AFBC85D55 cert=GGGS1TX4R81m3r0HBl79wKy1OtPPNR2CZUIrHjkRg65Vc2VR8fOyo64f9kmT1UAFG7j0HQ iat-mode=0 +Bridge obfs4 37.218.245.14:38224 D9A82D2F9C2F65A18407B1D2B764F130847F8B5D cert=bjRaMrr1BRiAW8IE9U5z27fQaYgOhX1UCmOpg2pFpoMvo6ZgQMzLsaTzzQNTlm7hNcb+Sg iat-mode=0 +UseBridges 1 \ No newline at end of file diff --git a/src/pbkdf2.h b/src/pbkdf2.h deleted file mode 100644 index 4c55fd919c..0000000000 --- a/src/pbkdf2.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2013 NovaCoin Developers - -#ifndef PBKDF2_H -#define PBKDF2_H - -#include -#include - -typedef struct HMAC_SHA256Context { - SHA256_CTX ictx; - SHA256_CTX octx; -} HMAC_SHA256_CTX; - -void -HMAC_SHA256_Init(HMAC_SHA256_CTX * ctx, const void * _K, size_t Klen); - -void -HMAC_SHA256_Update(HMAC_SHA256_CTX * ctx, const void *in, size_t len); - -void -HMAC_SHA256_Final(unsigned char digest[32], HMAC_SHA256_CTX * ctx); - -void -PBKDF2_SHA256(const uint8_t * passwd, size_t passwdlen, const uint8_t * salt, - size_t saltlen, uint64_t c, uint8_t * buf, size_t dkLen); - -#endif // PBKDF2_H diff --git a/src/kernel.cpp b/src/pos/kernel.cpp similarity index 77% rename from src/kernel.cpp rename to src/pos/kernel.cpp index 4ea98ff0ff..4f7e76c8e2 100644 --- a/src/kernel.cpp +++ b/src/pos/kernel.cpp @@ -1,11 +1,14 @@ -// Copyright (c) 2012-2013 The PPCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2012 PPCoin Developers +// +// SPDX-License-Identifier: MIT #include -#include "kernel.h" -#include "txdb.h" +#include "pos/kernel.h" +#include "wallet/txdb.h" // Get time weight int64_t GetWeight(int64_t nIntervalBeginning, int64_t nIntervalEnd) @@ -36,13 +39,13 @@ static bool GetLastStakeModifierThin(const CBlockThinIndex* pindex, uint64_t& nS { if (!pindex) return error("GetLastStakeModifierThin: null pindex"); - + while (pindex && pindex->pprev && !pindex->GeneratedStakeModifier()) pindex = pindex->pprev; - + if (!pindex->GeneratedStakeModifier()) return error("GetLastStakeModifierThin: no generation at genesis block"); - + nStakeModifier = pindex->nStakeModifier; nModifierTime = pindex->GetBlockTime(); return true; @@ -77,14 +80,14 @@ static bool SelectBlockFromCandidates(std::vector >& { if (!mapBlockIndex.count(item.second)) return error("SelectBlockFromCandidates: failed to find block index for candidate block %s", item.second.ToString().c_str()); - + const CBlockIndex* pindex = mapBlockIndex[item.second]; if (fSelected && pindex->GetBlockTime() > nSelectionIntervalStop) break; - + if (mapSelectedBlocks.count(pindex->GetBlockHash()) > 0) continue; - + // compute the selection hash by hashing its proof-hash and the // previous proof-of-stake modifier CDataStream ss(SER_GETHASH, 0); @@ -107,10 +110,10 @@ static bool SelectBlockFromCandidates(std::vector >& *pindexSelected = (const CBlockIndex*) pindex; } } - + if (fDebugPoS) LogPrintf("SelectBlockFromCandidates: selection hash=%s\n", hashBest.ToString().c_str()); - + return fSelected; } @@ -124,16 +127,16 @@ static bool SelectBlockFromCandidatesThin(std::vectorGetBlockTime() > nSelectionIntervalStop) break; - + if (mapSelectedBlocks.count(pindex->GetBlockHash()) > 0) continue; - + // compute the selection hash by hashing its proof-hash and the // previous proof-of-stake modifier CDataStream ss(SER_GETHASH, 0); @@ -144,7 +147,7 @@ static bool SelectBlockFromCandidatesThin(std::vectorIsProofOfStake()) hashSelection >>= 32; - + if (fSelected && hashSelection < hashBest) { hashBest = hashSelection; @@ -157,10 +160,10 @@ static bool SelectBlockFromCandidatesThin(std::vector= pindexPrev->GetBlockTime() / nModifierInterval) return true; // Sort candidate blocks by timestamp std::vector > vSortedByTimestamp; - vSortedByTimestamp.reserve(64 * nModifierInterval / GetTargetSpacing(pindexPrev->nHeight)); + vSortedByTimestamp.reserve(64 * nModifierInterval / GetTargetSpacing(pindexPrev->nHeight, pindexPrev->GetBlockTime())); int64_t nSelectionInterval = GetStakeModifierSelectionInterval(); int64_t nSelectionIntervalStart = (pindexPrev->GetBlockTime() / nModifierInterval) * nModifierInterval - nSelectionInterval; const CBlockIndex* pindex = pindexPrev; @@ -217,7 +220,7 @@ bool ComputeNextStakeModifier(const CBlockIndex* pindexPrev, uint64_t& nStakeMod uint64_t nStakeModifierNew = 0; int64_t nSelectionIntervalStop = nSelectionIntervalStart; std::map mapSelectedBlocks; - + for (int nRound=0; nRoundnHeight - nHeightFirstCandidate, 1, "="); pindex = pindex->pprev; } - + BOOST_FOREACH(const PAIRTYPE(uint256, const CBlockIndex*)& item, mapSelectedBlocks) // 'S' indicates selected proof-of-stake blocks // 'W' indicates selected proof-of-work blocks strSelectionMap.replace(item.second->nHeight - nHeightFirstCandidate, 1, item.second->IsProofOfStake()? "S" : "W"); - + LogPrintf("ComputeNextStakeModifier: selection height [%d, %d] map %s\n", nHeightFirstCandidate, pindexPrev->nHeight, strSelectionMap.c_str()); } else if (fDebugPoS) @@ -272,24 +275,24 @@ bool ComputeNextStakeModifierThin(const CBlockThinIndex* pindexPrev, uint64_t& n fGeneratedStakeModifier = true; return true; // genesis block's modifier is 0 }; - + // First find current stake modifier and its generation block time // if it's not old enough, return the same stake modifier int64_t nModifierTime = 0; if (!GetLastStakeModifierThin(pindexPrev, nStakeModifier, nModifierTime)) return error("ComputeNextStakeModifier: unable to get last modifier"); - + if (fDebug) { LogPrintf("ComputeNextStakeModifierThin: prev modifier=0x%016x time=%s\n", nStakeModifier, DateTimeStrFormat(nModifierTime).c_str()); }; - + if (nModifierTime / nModifierInterval >= pindexPrev->GetBlockTime() / nModifierInterval) return true; // Sort candidate blocks by timestamp std::vector > vSortedByTimestamp; - vSortedByTimestamp.reserve(64 * nModifierInterval / GetTargetSpacing(pindexPrev->nHeight)); + vSortedByTimestamp.reserve(64 * nModifierInterval / GetTargetSpacing(pindexPrev->nHeight, pindexPrev->GetBlockTime())); int64_t nSelectionInterval = GetStakeModifierSelectionInterval(); int64_t nSelectionIntervalStart = (pindexPrev->GetBlockTime() / nModifierInterval) * nModifierInterval - nSelectionInterval; const CBlockThinIndex* pindex = pindexPrev; @@ -298,7 +301,7 @@ bool ComputeNextStakeModifierThin(const CBlockThinIndex* pindexPrev, uint64_t& n vSortedByTimestamp.push_back(std::make_pair(pindex->GetBlockTime(), pindex->GetBlockHash())); pindex = pindex->pprev; }; - + int nHeightFirstCandidate = pindex ? (pindex->nHeight + 1) : 0; reverse(vSortedByTimestamp.begin(), vSortedByTimestamp.end()); sort(vSortedByTimestamp.begin(), vSortedByTimestamp.end()); @@ -307,7 +310,7 @@ bool ComputeNextStakeModifierThin(const CBlockThinIndex* pindexPrev, uint64_t& n uint64_t nStakeModifierNew = 0; int64_t nSelectionIntervalStop = nSelectionIntervalStart; std::map mapSelectedBlocks; - + for (int nRound=0; nRoundnHeight - nHeightFirstCandidate, 1, "="); pindex = pindex->pprev; }; - + BOOST_FOREACH(const PAIRTYPE(uint256, const CBlockThinIndex*)& item, mapSelectedBlocks) { // 'S' indicates selected proof-of-stake blocks // 'W' indicates selected proof-of-work blocks strSelectionMap.replace(item.second->nHeight - nHeightFirstCandidate, 1, item.second->IsProofOfStake()? "S" : "W"); }; - + LogPrintf("ComputeNextStakeModifierThin: selection height [%d, %d] map %s\n", nHeightFirstCandidate, pindexPrev->nHeight, strSelectionMap.c_str()); } else if (fDebugPoS) @@ -398,7 +401,7 @@ static bool GetKernelStakeModifier(uint256 hashBlockFrom, uint64_t& nStakeModifi else return false; } - + pindex = pindex->pnext; if (pindex->GeneratedStakeModifier()) { @@ -406,7 +409,7 @@ static bool GetKernelStakeModifier(uint256 hashBlockFrom, uint64_t& nStakeModifi nStakeModifierTime = pindex->GetBlockTime(); } } - + nStakeModifier = pindex->nStakeModifier; return true; } @@ -430,7 +433,7 @@ static bool GetKernelStakeModifierThinIt(CBlockThinIndex* pindex, int64_t nFound return false; }; }; - + pindex = pindex->pnext; if (pindex->GeneratedStakeModifier()) { @@ -438,7 +441,7 @@ static bool GetKernelStakeModifierThinIt(CBlockThinIndex* pindex, int64_t nFound nStakeModifierTime = pindex->GetBlockTime(); }; }; - + nStakeModifier = pindex->nStakeModifier; return true; }; @@ -446,27 +449,27 @@ static bool GetKernelStakeModifierThinIt(CBlockThinIndex* pindex, int64_t nFound static bool GetKernelStakeModifierThin(uint256 hashBlockFrom, uint64_t& nStakeModifier, int& nStakeModifierHeight, int64_t& nStakeModifierTime, bool fPrintProofOfStake) { nStakeModifier = 0; - + int64_t nFoundTime; int64_t nStakeModifierSelectionInterval = GetStakeModifierSelectionInterval(); - + std::map::iterator mi = mapBlockThinIndex.find(hashBlockFrom); if (mi == mapBlockThinIndex.end()) { if (fThinFullIndex || !pindexRear) return error("GetKernelStakeModifierThin() : block not indexed"); - + CTxDB txdb("r"); CDiskBlockThinIndex diskindex; if (!txdb.ReadBlockThinIndex(hashBlockFrom, diskindex) || diskindex.hashNext == 0) return error("GetKernelStakeModifierThin() : block not in db %s", hashBlockFrom.ToString().c_str()); - + nStakeModifierHeight = diskindex.nHeight; nStakeModifierTime = (int64_t)diskindex.nTime; nFoundTime = (int64_t)diskindex.nTime; - + // TODO, check mapBlockThinIndex while (nStakeModifierTime < nFoundTime + nStakeModifierSelectionInterval) { @@ -483,24 +486,24 @@ static bool GetKernelStakeModifierThin(uint256 hashBlockFrom, uint64_t& nStakeMo return false; }; }; - - + + if ((int64_t)diskindex.nTime > pindexRear->GetBlockTime()) { // -- back into the index window mi = mapBlockThinIndex.find(diskindex.hashNext); - + if (mi != mapBlockThinIndex.end()) { CBlockThinIndex* pindex = mi->second; return GetKernelStakeModifierThinIt(pindex, nFoundTime, nStakeModifierSelectionInterval, nStakeModifier, nStakeModifierHeight, nStakeModifierTime, fPrintProofOfStake); }; }; - + if (!txdb.ReadBlockThinIndex(diskindex.hashNext, diskindex) || diskindex.hashNext == 0) return error("GetKernelStakeModifierThin() : block not indexed %s", diskindex.hashNext.ToString().c_str()); - + //pindex = pindex->pnext; if (diskindex.GeneratedStakeModifier()) { @@ -508,16 +511,16 @@ static bool GetKernelStakeModifierThin(uint256 hashBlockFrom, uint64_t& nStakeMo nStakeModifierTime = (int64_t)diskindex.nTime; }; }; - + nStakeModifier = diskindex.nStakeModifier; return true; }; - + CBlockThinIndex* pindexFrom = mi->second; nStakeModifierHeight = pindexFrom->nHeight; nStakeModifierTime = pindexFrom->GetBlockTime(); nFoundTime = pindexFrom->GetBlockTime(); - + CBlockThinIndex* pindex = pindexFrom; return GetKernelStakeModifierThinIt(pindex, nFoundTime, nStakeModifierSelectionInterval, nStakeModifier, nStakeModifierHeight, nStakeModifierTime, fPrintProofOfStake); } @@ -537,7 +540,7 @@ static bool GetKernelStakeModifierThin(uint256 hashBlockFrom, uint64_t& nStakeMo // future proof-of-stake at the time of the coin's confirmation // txPrev.block.nTime: prevent nodes from guessing a good timestamp to // generate transaction for future advantage -// txPrev.offset: offset of txPrev inside block, to reduce the chance of +// txPrev.offset: offset of txPrev inside block, to reduce the chance of // nodes generating coinstake at the same time // txPrev.nTime: reduce the chance of nodes generating coinstake at the same // time @@ -551,12 +554,12 @@ static inline bool CheckStakeKernelHashV1(unsigned int nBits, const CBlock& bloc { if (nTimeTx < txPrev.nTime) // Transaction timestamp violation return error("CheckStakeKernelHash() : nTime violation"); - + unsigned int nTimeBlockFrom = blockFrom.GetBlockTime(); - + if (nTimeBlockFrom + nStakeMinAge > nTimeTx) // Min age requirement return error("CheckStakeKernelHash() : min age violation"); - + CBigNum bnTargetPerCoinDay; bnTargetPerCoinDay.SetCompact(nBits); @@ -570,7 +573,7 @@ static inline bool CheckStakeKernelHashV1(unsigned int nBits, const CBlock& bloc uint64_t nStakeModifier = 0; int nStakeModifierHeight = 0; int64_t nStakeModifierTime = 0; - + if (nNodeMode == NT_FULL) { if (!GetKernelStakeModifier(hashBlockFrom, nStakeModifier, nStakeModifierHeight, nStakeModifierTime, fPrintProofOfStake)) @@ -580,12 +583,12 @@ static inline bool CheckStakeKernelHashV1(unsigned int nBits, const CBlock& bloc if (!GetKernelStakeModifierThin(hashBlockFrom, nStakeModifier, nStakeModifierHeight, nStakeModifierTime, fPrintProofOfStake)) return false; }; - + ss << nStakeModifier; - + ss << nTimeBlockFrom << nTxPrevOffset << txPrev.nTime << prevout.n << nTimeTx; hashProofOfStake = Hash(ss.begin(), ss.end()); - + if (fPrintProofOfStake) { int nHeight = 0; @@ -594,7 +597,7 @@ static inline bool CheckStakeKernelHashV1(unsigned int nBits, const CBlock& bloc else if (fThinFullIndex) // otherwise index may not be in the window nHeight = mapBlockThinIndex[hashBlockFrom]->nHeight; - + LogPrintf("CheckStakeKernelHash() : using modifier 0x%016x at height=%d timestamp=%s for block from height=%d timestamp=%s\n", nStakeModifier, nStakeModifierHeight, DateTimeStrFormat(nStakeModifierTime).c_str(), @@ -604,24 +607,24 @@ static inline bool CheckStakeKernelHashV1(unsigned int nBits, const CBlock& bloc nStakeModifier, nTimeBlockFrom, nTxPrevOffset, txPrev.nTime, prevout.n, nTimeTx, hashProofOfStake.ToString().c_str()); - + CBigNum nTry = CBigNum(hashProofOfStake); CBigNum nTar = bnCoinDayWeight * bnTargetPerCoinDay; LogPrintf("try %s\n target %s\n", nTry.ToString().c_str(), nTar.ToString().c_str()); }; - - + + // Now check if proof-of-stake hash meets target protocol if (CBigNum(hashProofOfStake) > bnCoinDayWeight * bnTargetPerCoinDay) return false; - + if (fDebug && !fPrintProofOfStake) { //int nHeight = nNodeMode == NT_FULL ? mapBlockIndex[hashBlockFrom]->nHeight : mapBlockThinIndex[hashBlockFrom]->nHeight; int nHeight = nNodeMode == NT_FULL ? mapBlockIndex[hashBlockFrom]->nHeight : fThinFullIndex ? mapBlockThinIndex[hashBlockFrom]->nHeight : 0; - + LogPrintf("CheckStakeKernelHash() : using modifier 0x%016x at height=%d timestamp=%s for block from height=%d timestamp=%s\n", - nStakeModifier, nStakeModifierHeight, + nStakeModifier, nStakeModifierHeight, DateTimeStrFormat(nStakeModifierTime), nHeight, DateTimeStrFormat(blockFrom.GetBlockTime())); @@ -630,12 +633,12 @@ static inline bool CheckStakeKernelHashV1(unsigned int nBits, const CBlock& bloc nTimeBlockFrom, nTxPrevOffset, txPrev.nTime, prevout.n, nTimeTx, hashProofOfStake.ToString()); } - + return true; } -// ShadowCoin kernel protocol +// Spectrecoin kernel protocol // coinstake must meet hash target according to the protocol: // kernel (input 0) must meet the formula // hash(nStakeModifier + txPrev.block.nTime + txPrev.nTime + txPrev.vout.hash + txPrev.vout.n + nTime) < bnTarget * nWeight @@ -661,9 +664,6 @@ static inline bool CheckStakeKernelHashV2(CStakeModifier* pStakeMod, unsigned in if (nTimeTx < txPrev.nTime) // Transaction timestamp violation return error("CheckStakeKernelHash() : nTime violation"); - if (nTimeBlockFrom + nStakeMinAge > nTimeTx) // Min age requirement - return error("CheckStakeKernelHash() : min age violation"); - // Base target CBigNum bnTarget; bnTarget.SetCompact(nBits); @@ -683,36 +683,27 @@ static inline bool CheckStakeKernelHashV2(CStakeModifier* pStakeMod, unsigned in hashProofOfStake = Hash(ss.begin(), ss.end()); - if (fPrintProofOfStake) - { - LogPrintf("CheckStakeKernelHash() : using modifier 0x%016x at height=%d timestamp=%s for block from timestamp=%s\n", - pStakeMod->nModifier, pStakeMod->nHeight, - DateTimeStrFormat(pStakeMod->nTime), - DateTimeStrFormat(nTimeBlockFrom)); - LogPrintf("CheckStakeKernelHash() : check modifier=0x%016x nTimeBlockFrom=%u nTimeTxPrev=%u nPrevout=%u nTimeTx=%u hashProof=%s target=%s\n", - pStakeMod->nModifier, - nTimeBlockFrom, txPrev.nTime, prevout.n, nTimeTx, - hashProofOfStake.ToString(), - bnTarget.ToString()); - } // Now check if proof-of-stake hash meets target protocol - if (CBigNum(hashProofOfStake) > bnTarget) - return false; + bool foundHash = CBigNum(hashProofOfStake) < bnTarget; - if (fDebug && !fPrintProofOfStake) + if (fPrintProofOfStake || (foundHash && fDebug)) { - LogPrintf("CheckStakeKernelHash() : using modifier 0x%016x at height=%d timestamp=%s for block from timestamp=%s\n", - pStakeMod->nModifier, pStakeMod->nHeight, - DateTimeStrFormat(pStakeMod->nTime), - DateTimeStrFormat(nTimeBlockFrom)); - LogPrintf("CheckStakeKernelHash() : pass modifier=0x%016x nTimeBlockFrom=%u nTimeTxPrev=%u nPrevout=%u nTimeTx=%u hashProof=%s\n", - pStakeMod->nModifier, - nTimeBlockFrom, txPrev.nTime, prevout.n, nTimeTx, - hashProofOfStake.ToString()); + if (Params().IsProtocolV3(pStakeMod->nHeight)) + LogPrintf("CheckStakeKernelHash() : PoSv3 check=%b with modifierV2=%s at height=%d timestamp=%s, nTimeTxPrev=%u nPrevout=%u nTimeTx=%u, hashProof=%s target=%s\n", + foundHash, + pStakeMod->bnModifierV2.ToString(), pStakeMod->nHeight, DateTimeStrFormat(pStakeMod->nTime), + txPrev.nTime, prevout.n, nTimeTx, + hashProofOfStake.ToString(), bnTarget.ToString()); + else + LogPrintf("CheckStakeKernelHash() : PoSv2 check=%b with modifier=0x%016x at height=%d timestamp=%s, nTimeBlockFrom=%u nTimeTxPrev=%u nPrevout=%u nTimeTx=%u, hashProof=%s target=%s\n", + foundHash, + pStakeMod->nModifier, pStakeMod->nHeight, DateTimeStrFormat(pStakeMod->nTime), + nTimeBlockFrom, txPrev.nTime, prevout.n, nTimeTx, + hashProofOfStake.ToString(), bnTarget.ToString()); } - return true; + return foundHash; } @@ -727,18 +718,36 @@ bool CheckStakeKernelHash(int nPrevHeight, CStakeModifier* pStakeMod, unsigned i // Check kernel hash target and coinstake signature bool CheckProofOfStake(CBlockIndex* pindexPrev, const CTransaction& tx, unsigned int nBits, uint256& hashProofOfStake, uint256& targetProofOfStake) { + if (tx.nVersion == ANON_TXN_VERSION) + return CheckAnonProofOfStake(pindexPrev, tx, nBits, hashProofOfStake, targetProofOfStake); + if (!tx.IsCoinStake()) return error("CheckProofOfStake() : called on non-coinstake %s", tx.GetHash().ToString()); // Kernel (input 0) must match the stake hash target per coin age (nBits) const CTxIn& txin = tx.vin[0]; - // First try finding the previous transaction in database + // First try finding the previous transaction in database and check that output is not spent CTxDB txdb("r"); CTransaction txPrev; CTxIndex txindex; if (!txPrev.ReadFromDisk(txdb, txin.prevout, txindex)) return tx.DoS(1, error("CheckProofOfStake() : INFO: read txPrev failed")); // previous transaction not in main chain, may occur during initial download + if (!txindex.vSpent[txin.prevout.n].IsNull()) + { + CBlock block; + if (block.ReadFromDisk(txindex.vSpent[txin.prevout.n].nFile, txindex.vSpent[txin.prevout.n].nBlockPos, false)) + { + std::map::iterator mi = mapBlockIndex.find(block.GetHash()); + if (fDebug) + LogPrintf("CheckProofOfStake() : block at height %d spends txPrev staked at height %d\n", mi->second->nHeight, pindexPrev->nHeight + 1); + if (mi != mapBlockIndex.end() && mi->second->nHeight < pindexPrev->nHeight + 1) // only consider spends in blocks BEFORE current block + return tx.DoS(100, error("CheckProofOfStake() : INFO: txPrev already used at %s height %d", txindex.vSpent[txin.prevout.n].ToString(), mi->second->nHeight)); + } + else { + LogPrintf("CheckProofOfStake(): Warning - Could not read block which spends txPrev at %s -> ignore spend", txindex.vSpent[txin.prevout.n].ToString()); + } + } // Verify signature if (!VerifySignature(txPrev, tx, 0, SCRIPT_VERIFY_NONE, 0)) @@ -752,15 +761,11 @@ bool CheckProofOfStake(CBlockIndex* pindexPrev, const CTransaction& tx, unsigned if (Params().IsProtocolV3(pindexPrev->nHeight)) { int nDepth; - if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, nStakeMinConfirmations - 1, nDepth)) + if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, Params().GetStakeMinConfirmations(tx.nTime) - 1, nDepth)) return tx.DoS(100, error("CheckProofOfStake() : tried to stake at depth %d", nDepth + 1)); } - else - { - unsigned int nTimeBlockFrom = block.GetBlockTime(); - if (nTimeBlockFrom + nStakeMinAge > tx.nTime) - return error("CheckProofOfStake() : min age violation"); - } + else if (block.GetBlockTime() + nStakeMinAge > tx.nTime) + return error("CheckProofOfStake() : min age violation"); CStakeModifier stakeMod(pindexPrev->nStakeModifier, pindexPrev->bnStakeModifierV2, pindexPrev->nHeight, pindexPrev->nTime); if (!CheckStakeKernelHash(pindexPrev->nHeight, &stakeMod, nBits, block, txindex.pos.nTxPos - txindex.pos.nBlockPos, txPrev, txin.prevout, tx.nTime, hashProofOfStake, targetProofOfStake, fDebugPoS)) @@ -782,32 +787,160 @@ bool CheckCoinStakeTimestamp(int nHeight, int64_t nTimeBlock, int64_t nTimeTx) bool CheckKernel(CBlockIndex* pindexPrev, unsigned int nBits, int64_t nTime, const COutPoint& prevout, int64_t* pBlockTime) { uint256 hashProofOfStake, targetProofOfStake; - + CTxDB txdb("r"); CTransaction txPrev; CTxIndex txindex; if (!txPrev.ReadFromDisk(txdb, prevout, txindex)) return false; - + // Read block header CBlock block; if (!block.ReadFromDisk(txindex.pos.nFile, txindex.pos.nBlockPos, false)) return false; - if (Params().IsProtocolV3(nTime)) + if (Params().IsProtocolV3(pindexPrev->nHeight+1)) { int nDepth; - if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, nStakeMinConfirmations - 1, nDepth)) + if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, Params().GetStakeMinConfirmations(nTime) - 1, nDepth)) return false; } - else - if (block.GetBlockTime() + nStakeMinAge > nTime) - return false; // only count coins meeting min age requirement + else if (block.GetBlockTime() + nStakeMinAge > nTime) + return false; // only count coins meeting min age requirement if (pBlockTime) *pBlockTime = block.GetBlockTime(); - + // - workaround for thin mode CStakeModifier stakeMod(pindexPrev->nStakeModifier, pindexPrev->bnStakeModifierV2, pindexPrev->nHeight, pindexPrev->nTime); return CheckStakeKernelHash(pindexPrev->nHeight, &stakeMod, nBits, block, txindex.pos.nTxPos - txindex.pos.nBlockPos, txPrev, prevout, nTime, hashProofOfStake, targetProofOfStake, fDebugPoS); } + + +/** + * ----------------------------------------------------------- + * Stealth Staking + * ----------------------------------------------------------- + * + * An anon staking transaction is valid, if + * - transaction is PoSv3 conform + * - a valid rigsignature of MIN_RING_SIZE exists in vin[0] + * - keyImage is unspent (checked in CheckAnonInputs()) + * - all ring signature anon outputs meet minDepth maturity requirement (checked in CheckAnonInputs()) + * - the kernel hash calculated is below target + * + * Spectrecoin anon kernel protocol + * -------------------------------- + * coinstake kernel (input 0) must meet hash target according to the formula: + * + * hash(nStakeModifier + keyImage + nTime) < bnTarget * nWeight + * + * this ensures that the chance of getting a coinstake is proportional to the amount of coins one owns. + * + * The reason this hash is chosen is the following: + * nStakeModifier: scrambles computation to make it very difficult to precompute future proof-of-stake. + * nStakeModifier is either the UTXO hash or keyImage used for the last staking transaction + * plus the previous block's stake modifier + * keyImage: the keyImage of the ATXO used for staking is unique regardles the mixins, + * makes sure an ATXO can only be used once for generating a kernel hash + * nTime: current timestamp (granularity set to 16 seconds) + * + * Note: + * block/tx hash should not be used here as they can be generated in vast + * quantities so as to generate blocks faster, degrading the system back into + * a proof-of-work situation. + */ +bool CheckAnonProofOfStake(CBlockIndex* pindexPrev, const CTransaction& tx, unsigned int nBits, uint256& hashProofOfStake, uint256& targetProofOfStake) +{ + if (!tx.IsAnonCoinStake()) + return error("CheckAnonProofOfStake() : called on non-anon-coinstake %s", tx.GetHash().ToString()); + + if (!Params().IsProtocolV3(pindexPrev->nHeight+1)) + return error("CheckAnonProofOfStake() : not allowed for PoSv2 for coinstake %s", tx.GetHash().ToString()); + + if (!Params().IsForkV3(tx.nTime)) + return error("CheckAnonProofOfStake() : called before V3 fork time for coinstake %s", tx.GetHash().ToString()); + + if (!tx.vin[0].IsAnonInput()) + return error("CheckAnonProofOfStake() : vin[0] is no anon input for coinstake %s", tx.GetHash().ToString()); + + if (!tx.vout[1].IsAnonOutput()) + return error("CheckAnonProofOfStake() : vout[1] is no anon output for coinstake %s", tx.GetHash().ToString()); + + CTxDB txdb("r"); + + // Kernel (input 0) must match the stake hash target per coin age (nBits) + const CTxIn& txin = tx.vin[0]; + ec_point vchImage; + txin.ExtractKeyImage(vchImage); + + // ringsig AB + int64_t nCoinValue = -1; + int nRingSize = txin.ExtractRingSize(); + if (nRingSize != MIN_RING_SIZE) + return tx.DoS(100, error("CheckAnonProofOfStake() : INFO: Ringsize not %d for coinstake tx %s", MIN_RING_SIZE, tx.GetHash().ToString().c_str())); + + { + LOCK(cs_main); + CKeyImageSpent spentKeyImage; + bool fInMemPool; + if (GetKeyImage(&txdb, vchImage, spentKeyImage, fInMemPool) && // keyImage already spent + spentKeyImage.nBlockHeight < (pindexPrev->nHeight + 1) && // only consider spends in blocks BEFORE current block + !(spentKeyImage.txnHash == tx.GetHash() && spentKeyImage.inputNo == 0) && // this can happen for transactions created by the local node + TxnHashInSystem(&txdb, spentKeyImage.txnHash)) // keyimage is in db, but invalid as does not point to a known transaction, could be an old mempool keyimag + return tx.DoS(100, error("CheckAnonProofOfStake() : INFO: Coinstake tx %s has already spent keyImage %s", tx.GetHash().ToString().c_str(), HexStr(vchImage).c_str())); + + if (!tx.CheckAnonInputAB(txdb, txin, 0, MIN_RING_SIZE, vchImage, nCoinValue)) + return tx.DoS(100, error("CheckAnonProofOfStake() : INFO: CheckAnonInputAB failed on coinstake tx %s", tx.GetHash().ToString().c_str())); + } + + CStakeModifier stakeMod(pindexPrev->nStakeModifier, pindexPrev->bnStakeModifierV2, pindexPrev->nHeight, pindexPrev->nTime); + if (!CheckAnonStakeKernelHash(&stakeMod, nBits, nCoinValue, vchImage, tx.nTime, hashProofOfStake, targetProofOfStake, fDebugPoS)) + return tx.DoS(1, error("CheckAnonProofOfStake() : INFO: check kernel failed on coinstake %s, hashProof=%s", tx.GetHash().ToString().c_str(), hashProofOfStake.ToString().c_str())); // may occur during initial download or if behind on block chain sync + + return true; +} +// Note: this method does not validate that the keyImage is valid & unspent and that anon output is mature +bool CheckAnonStakeKernelHash(CStakeModifier* pStakeMod, const unsigned int& nBits, const int64_t& anonValue, const ec_point &anonKeyImage, const unsigned int& nTimeTx, uint256& hashProofOfStake, uint256& targetProofOfStake, const bool fPrintProofOfStake) +{ + // Base target + CBigNum bnTarget; + bnTarget.SetCompact(nBits); + + // Weighted target + CBigNum bnWeight = CBigNum(anonValue); + bnTarget *= bnWeight; + + targetProofOfStake = bnTarget.getuint256(); + + CDataStream ss(SER_GETHASH, 0); + ss << pStakeMod->bnModifierV2; + ss << anonKeyImage << nTimeTx; + + hashProofOfStake = Hash(ss.begin(), ss.end()); + + // Now check if proof-of-stake hash meets target protocol + bool foundHash = CBigNum(hashProofOfStake) < bnTarget; + + if (fPrintProofOfStake || (foundHash && fDebug)) + { + LogPrintf("CheckAnonStakeKernelHash() : PoSv3 check=%b with modifier=%s at height=%d timestamp=%s, anonKeyImage=%s nTimeTx=%u, hashProof=%s target=%s\n", + foundHash, + pStakeMod->bnModifierV2.ToString(), + pStakeMod->nHeight, + DateTimeStrFormat(pStakeMod->nTime), + HexStr(anonKeyImage), nTimeTx, + hashProofOfStake.ToString(), + bnTarget.ToString()); + } + return foundHash; +} + + +bool CheckAnonKernel(const CBlockIndex* pindexPrev, const unsigned int& nBits, const int64_t& anonValue, const ec_point& anonKeyImage, const unsigned int& nTime) +{ + uint256 hashProofOfStake, targetProofOfStake; + + CStakeModifier stakeMod(pindexPrev->nStakeModifier, pindexPrev->bnStakeModifierV2, pindexPrev->nHeight, pindexPrev->nTime); + return CheckAnonStakeKernelHash(&stakeMod, nBits, anonValue, anonKeyImage, nTime, hashProofOfStake, targetProofOfStake, fDebugPoS); +} diff --git a/src/pos/kernel.h b/src/pos/kernel.h new file mode 100644 index 0000000000..098e7512cc --- /dev/null +++ b/src/pos/kernel.h @@ -0,0 +1,63 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2012 PPCoin Developers +// +// SPDX-License-Identifier: MIT + +#ifndef PPCOIN_KERNEL_H +#define PPCOIN_KERNEL_H + +#include "main.h" +#include "primitives/core.h" + +// To decrease granularity of timestamp +// Supposed to be 2^n-1 +static const int STAKE_TIMESTAMP_MASK = 15; + +// MODIFIER_INTERVAL: time to elapse before new modifier is computed +extern unsigned int nModifierInterval; + +// MODIFIER_INTERVAL_RATIO: +// ratio of group interval length between the last group and the first group +static const int MODIFIER_INTERVAL_RATIO = 3; + +// Compute the hash modifier for proof-of-stake +bool ComputeNextStakeModifier(const CBlockIndex* pindexPrev, uint64_t& nStakeModifier, bool& fGeneratedStakeModifier); +bool ComputeNextStakeModifierThin(const CBlockThinIndex* pindexPrev, uint64_t& nStakeModifier, bool& fGeneratedStakeModifier); +uint256 ComputeStakeModifierV2(const CBlockIndex* pindexPrev, const uint256& kernel); + +// Check whether stake kernel meets hash target +// Sets hashProofOfStake on success return +bool CheckStakeKernelHash(int nPrevHeight, CStakeModifier* pStakeMod, unsigned int nBits, const CBlock& blockFrom, unsigned int nTxPrevOffset, const CTransaction& txPrev, const COutPoint& prevout, unsigned int nTimeTx, uint256& hashProofOfStake, uint256& targetProofOfStake, bool fPrintProofOfStake); + +// Check kernel hash target and coinstake signature +// Sets hashProofOfStake on success return +bool CheckProofOfStake(CBlockIndex* pindexPrev, const CTransaction& tx, unsigned int nBits, uint256& hashProofOfStake, uint256& targetProofOfStake); + +// Check whether the coinstake timestamp meets protocol +bool CheckCoinStakeTimestamp(int nHeight, int64_t nTimeBlock, int64_t nTimeTx); + +// Get time weight using supplied timestamps +int64_t GetWeight(int64_t nIntervalBeginning, int64_t nIntervalEnd); // TODO: posv2 remove + +// Wrapper around CheckStakeKernelHash() +// Also checks existence of kernel input and min age +// Convenient for searching a kernel +bool CheckKernel(CBlockIndex* pindexPrev, unsigned int nBits, int64_t nTime, const COutPoint& prevout, int64_t* pBlockTime = NULL); + + +// -- Stealth Staking +// Check whether stake kernel meets hash target and ATXO maturity +// Sets hashProofOfStake on success return +bool CheckAnonProofOfStake(CBlockIndex* pindexPrev, const CTransaction& tx, unsigned int nBits, uint256& hashProofOfStake, uint256& targetProofOfStake); + +// Check whether stake kernel meets hash target +// Sets hashProofOfStake on success return +bool CheckAnonStakeKernelHash(CStakeModifier* pStakeMod, const unsigned int& nBits, const int64_t& anonValue, const ec_point &anonKeyImage, const unsigned int& nTimeTx, uint256& hashProofOfStake, uint256& targetProofOfStake, const bool fPrintProofOfStake); + +// Wrapper around CheckAnonStakeKernelHash() +// Convenient for searching a anon kernel +bool CheckAnonKernel(const CBlockIndex* pindexPrev, const unsigned int& nBits, const int64_t& anonValue, const ec_point& anonKeyImage, const unsigned int& nTime); + +#endif // PPCOIN_KERNEL_H diff --git a/src/miner.cpp b/src/pos/miner.cpp similarity index 93% rename from src/miner.cpp rename to src/pos/miner.cpp index b47f37e601..d623528af3 100644 --- a/src/miner.cpp +++ b/src/pos/miner.cpp @@ -1,14 +1,18 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Copyright (c) 2013 The NovaCoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "txdb.h" -#include "miner.h" -#include "kernel.h" -#include "core.h" +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2013 NovaCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT +#include "wallet/txdb.h" +#include "pos/miner.h" +#include "pos/kernel.h" +#include "primitives/core.h" +#include "wallet/coincontrol.h" +#include using namespace std; @@ -118,8 +122,10 @@ class TxPriorityCompare // CreateNewBlock: create new block (without proof-of-work/proof-of-stake) CBlock* CreateNewBlock(CWallet* pwallet, bool fProofOfStake, int64_t* pFees) { + int64_t nStart = GetTimeMicros(); + // Create new block - auto_ptr pblock(new CBlock()); + unique_ptr pblock(new CBlock()); if (!pblock.get()) return NULL; @@ -230,14 +236,13 @@ CBlock* CreateNewBlock(CWallet* pwallet, bool fProofOfStake, int64_t* pFees) { int64_t nSumAnon; bool fInvalid; + if (!tx.CheckAnonInputs(txdb, nSumAnon, fInvalid, false)) { if (fInvalid) LogPrintf("CreateNewBlock() : CheckAnonInputs found invalid tx %s\n", tx.GetHash().ToString().substr(0,10).c_str()); - fMissingInputs = true; continue; }; - nTotalIn += nSumAnon; }; @@ -300,7 +305,7 @@ CBlock* CreateNewBlock(CWallet* pwallet, bool fProofOfStake, int64_t* pFees) continue; // Transaction fee - int64_t nMinFee = tx.GetMinFee(nBlockSize, GMF_BLOCK); // will get GMF_ANON if tx.nVersion == ANON_TXN_VERSION + int64_t nMinFee = tx.GetMinFee(nBlockSize, GMF_BLOCK); // Skip free transactions if we're past the minimum block size: if (fSortedByFee && (dFeePerKb < nMinTxFee) && (nBlockSize + nTxSize >= nBlockMinSize)) @@ -418,6 +423,9 @@ CBlock* CreateNewBlock(CWallet* pwallet, bool fProofOfStake, int64_t* pFees) pblock->nNonce = 0; } + if (fDebugPoS) + LogPrintf("CreateNewBlock() : created block at height: %d, txs: %d, size: %d bytes in %d µs.\n", nBestHeight, pblock->vtx.size(), nLastBlockSize, GetTimeMicros() - nStart); + return pblock.release(); } @@ -543,9 +551,12 @@ bool CheckStake(CBlock* pblock, CWallet& wallet) return error("CheckStake() : proof-of-stake checking failed"); //// debug print - LogPrintf("CheckStake() : new proof-of-stake block found \n hash: %s \nproofhash: %s \ntarget: %s\n", hashBlock.GetHex().c_str(), proofHash.GetHex().c_str(), hashTarget.GetHex().c_str()); + LogPrintf("CheckStake() : new %s block found \n hash: %s \nproofhash: %s \ntarget: %s\n", + pblock->IsProofOfAnonStake() ? "proof-of-anon-stake" : "proof-of-stake", hashBlock.GetHex().c_str(), proofHash.GetHex().c_str(), hashTarget.GetHex().c_str()); pblock->print(); - LogPrintf("out %s\n", FormatMoney(pblock->vtx[1].GetValueOut()).c_str()); + + int64_t vout = pblock->vtx[1].GetValueOut(); + LogPrintf("out %s\n", FormatMoney(vout).c_str()); // Found a solution { @@ -560,8 +571,12 @@ bool CheckStake(CBlock* pblock, CWallet& wallet) } // Process this block the same as if we had received it from another node - if (!ProcessBlock(NULL, pblock, hashBlock)) + if (ProcessBlock(NULL, pblock, hashBlock)) { + // Successful stake + } + else { return error("CheckStake() : ProcessBlock, block not accepted"); + } } return true; @@ -578,7 +593,7 @@ void ThreadStakeMiner(CWallet *pwallet) { boost::this_thread::interruption_point(); - while (pwallet->IsLocked()) + while (pwallet->IsLocked() || !fIsStakingEnabled) { fIsStaking = false; MilliSleep(2000); @@ -630,7 +645,7 @@ void ThreadStakeMiner(CWallet *pwallet) // Create new block // int64_t nFees; - auto_ptr pblock(CreateNewBlock(pwallet, true, &nFees)); + unique_ptr pblock(CreateNewBlock(pwallet, true, &nFees)); if (!pblock.get()) return; diff --git a/src/pos/miner.h b/src/pos/miner.h new file mode 100644 index 0000000000..f9af76cb9d --- /dev/null +++ b/src/pos/miner.h @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2013 NovaCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// SPDX-FileCopyrightText: © 2009 Satoshi Nakamoto +// +// SPDX-License-Identifier: MIT + +#ifndef NOVACOIN_MINER_H +#define NOVACOIN_MINER_H + +#include "main.h" +#include "wallet/wallet.h" +#include "init/init.h" + +void ThreadStakeMiner(CWallet *pwallet); + +/* Generate a new block, without valid proof-of-work */ +CBlock* CreateNewBlock(CWallet* pwallet, bool fProofOfStake=false, int64_t* pFees = 0); + +/** Modify the extranonce in a block */ +void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce); + +/** Do mining precalculation */ +void FormatHashBuffers(CBlock* pblock, char* pmidstate, char* pdata, char* phash1); + +/** Check mined proof-of-work block */ +bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey); + +/** Check mined proof-of-stake block */ +bool CheckStake(CBlock* pblock, CWallet& wallet); + +/** Base sha256 mining transform */ +void SHA256Transform(void* pstate, void* pinput, const void* pinit); + +#endif // NOVACOIN_MINER_H diff --git a/src/primitives/core.cpp b/src/primitives/core.cpp new file mode 100644 index 0000000000..cc603f53b6 --- /dev/null +++ b/src/primitives/core.cpp @@ -0,0 +1,165 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +// +// SPDX-License-Identifier: MIT + +#include "primitives/core.h" + +void addAnonOutput(CPubKey& pkAo, CAnonOutput& anonOutput, txMixins_container& txMixinsContainer) +{ + // create pair with vout index of tx and pubKey + const auto & pairOutPubkey = std::make_pair(anonOutput.outpoint.n, pkAo); + // check if CTxMixins does already exist in container for tx hash + const auto & txHashIndex = txMixinsContainer.get(); + const auto it = txHashIndex.find(anonOutput.outpoint.hash); + if (it != txHashIndex.end()) + // add anon pubKey to existing CTxMixins in container + it->vOutPubKeys.push_back(pairOutPubkey); + else + { + CTxMixins txMixins(anonOutput.outpoint.hash); + txMixins.vOutPubKeys.push_back(pairOutPubkey); + txMixinsContainer.push_back(txMixins); + } +} + +void CMixins::AddAnonOutput(CPubKey& pkAo, CAnonOutput& anonOutput, int blockHeight) +{ + CTxMixinsContainers& txMixinsContainers = mapMixins[anonOutput.nValue]; + + if (blockHeight - anonOutput.nBlockHeight < 2700) // blocks of last 3 days + // add anon to recent mixins container + addAnonOutput(pkAo, anonOutput, txMixinsContainers.get(RECENT)); + else + // add anon to old mixins container + addAnonOutput(pkAo, anonOutput, txMixinsContainers.get(OLD)); +} + +void removeEmptyTx(txMixins_container& txMixinsContainer, std::set& setPickedTxInd) +{ + // Remove transactions which don't provide any more anons + for (auto iter = setPickedTxInd.rbegin(); iter != setPickedTxInd.rend(); ++iter) + { + const CTxMixins& txMixins = txMixinsContainer.at(*iter); + if (txMixins.vOutPubKeys.empty()) + { + if (fDebugRingSig) + LogPrintf("CMixins::removeEmptyTx() : erase tx %s.\n", txMixins.txHash.ToString()); + txMixinsContainer.erase(txMixinsContainer.begin() + *iter); + } + } +} + +void pick(std::vector>& vUsedTx, CTxMixinsContainers& txMixinsContainers, int containerId, std::set& setPickedTxInd, std::vector& vPickedAnons) +{ + txMixins_container& txMixinsContainer = txMixinsContainers.get(containerId); + // Pick a random transaction + uint64_t nAvailableTx = txMixinsContainer.size() - setPickedTxInd.size(); + uint64_t iPickTx = GetRand(nAvailableTx); + // adust the pick index to skip already used transactions + for (const auto & iPickedTx : setPickedTxInd) + if (iPickedTx <= iPickTx) + iPickTx++; + + const CTxMixins& txMixins = txMixinsContainer.at(iPickTx); + // Remember for this picking loop, the transaction from which the anon was picked + setPickedTxInd.insert(iPickTx); + + // Pick random a anon from the picked transaction + uint64_t iPickAnon = GetRand(txMixins.vOutPubKeys.size()); + const auto & [iVout, pubKey] = txMixins.vOutPubKeys.at(iPickAnon); + vPickedAnons.push_back(pubKey); + if (fDebugRingSig) + LogPrintf("CMixins::pick() : pick mixin %d from %s tx %s vout %d.\n", + vPickedAnons.size(), containerId == OLD ? "OLD" : "RECENT", txMixins.txHash.ToString(), iVout); + + // Erase the anon, every anon can only be used once as mixin per transaction + txMixins.vOutPubKeys.erase(txMixins.vOutPubKeys.begin() + iPickAnon); + + // Remember for CMixins state, the transaction from which the anon was picked + auto pairContTx = std::make_pair(containerId, txMixins.txHash); + if (std::find(vUsedTx.begin(), vUsedTx.end(), pairContTx) == vUsedTx.end()) + vUsedTx.push_back(pairContTx); +} + + +bool CMixins::Pick(int64_t nValue, uint8_t nMixins, std::vector& vPickedAnons) +{ + int64_t nStart = GetTimeMicros(); + std::set setPickedTxInd[2]; + CTxMixinsContainers& txMixinsContainers = mapMixins[nValue]; + uint64_t nUsedTx = vUsedTx.size(); + + if (fDebugRingSig) + LogPrintf("CMixins::Pick() : pick %d mixins of value %d from %d recent and %d old transactions. Previously picked txs: %d.\n", + nMixins, nValue, txMixinsContainers.get(RECENT).size(), txMixinsContainers.get(OLD).size(), nUsedTx); + + if (txMixinsContainers.get(OLD).size() + txMixinsContainers.get(RECENT).size() < nMixins) + return false; + + for (uint8_t i = 0; i < nMixins; i++) + { + uint64_t mode = GetRand(100); + if (mode < 33 && nUsedTx > 0) + { + // take mixin from used transactions + if (fDebugRingSig) + LogPrintf("CMixins::Pick() : try to pick from %d previously picked tx.\n", nUsedTx); + // shuffle previous picked transaction list to make sure order of tx pick does not reveal its fake nature + std::shuffle(vUsedTx.begin(), vUsedTx.begin() + nUsedTx, urng); + bool foundMixin = false; + uint64_t iUsedTx = 0; + for (const auto & [iContainer, txHash] : vUsedTx) + { + if (iUsedTx++ >= nUsedTx) + break; + + txMixins_container& txMixinsContainer = txMixinsContainers.get(iContainer); + auto & txHashIndex = txMixinsContainer.get(); + auto it = txHashIndex.find(txHash); + if (it != txHashIndex.end()) + { + // Get index of tx in containers random index + uint64_t iPickTx = txMixinsContainer.iterator_to(*it) - txMixinsContainer.begin(); + + // check if tx was already used for this ring sig + if (setPickedTxInd[iContainer].find(iPickTx) != setPickedTxInd[iContainer].end()) + continue; + + // Pick random a anon from the transacton + uint64_t iPickAnon = GetRand(it->vOutPubKeys.size()); + const auto & [iVout, pubKey] = it->vOutPubKeys.at(iPickAnon); + vPickedAnons.push_back(pubKey); + if (fDebugRingSig) + LogPrintf("CMixins::Pick() : pick mixin %d from prev tx %s vout %d.\n", vPickedAnons.size(), txHash.ToString(), iVout); + // Erase the anon, every anon can only be used once as mixin per transaction + it->vOutPubKeys.erase(it->vOutPubKeys.begin() + iPickAnon); + + // Remember for this picking loop, the transaction from which the anon was picked + setPickedTxInd[iContainer].insert(iPickTx); + foundMixin = true; + break; + } + } + if (foundMixin) + continue; + } + + uint64_t nAvailableOldTx = txMixinsContainers.get(OLD).size() - setPickedTxInd[OLD].size(); + uint64_t nAvailableRecentTx = txMixinsContainers.get(RECENT).size() - setPickedTxInd[RECENT].size(); + int containerId = nAvailableRecentTx > 0 && (mode >= 66 || nAvailableOldTx == 0) ? RECENT : OLD; + pick(vUsedTx, txMixinsContainers, containerId, setPickedTxInd[containerId], vPickedAnons); + } + // Remove transactions which don't provide any more anons + removeEmptyTx(txMixinsContainers.get(RECENT), setPickedTxInd[RECENT]); + removeEmptyTx(txMixinsContainers.get(OLD), setPickedTxInd[OLD]); + + if (fDebugRingSig) + LogPrintf("CMixins::Pick() : picked %d mixins in %d µs.\n", nMixins, GetTimeMicros() - nStart); + return true; +} + + + diff --git a/src/primitives/core.h b/src/primitives/core.h new file mode 100644 index 0000000000..db37aea7b8 --- /dev/null +++ b/src/primitives/core.h @@ -0,0 +1,535 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2014 ShadowCoin Developers +// +// SPDX-License-Identifier: MIT + +#ifndef SPEC_CORE_H +#define SPEC_CORE_H + +#include +#include +#include +#include + +#include "util/util.h" +#include "serialize.h" +#include "script/script.h" +#include "anon/ringsig.h" + +#include +#include + +#include +#include +#include +#include + +enum GetMinFee_mode +{ + GMF_BLOCK, + GMF_RELAY, + GMF_SEND, +}; + +class CTransaction; + +/** An outpoint - a combination of a transaction hash and an index n into its vout */ +class COutPoint +{ +public: + uint256 hash; + unsigned int n; + + COutPoint() { SetNull(); } + COutPoint(uint256 hashIn, unsigned int nIn) { hash = hashIn; n = nIn; } + IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); ) + void SetNull() { hash = 0; n = (unsigned int) -1; } + bool IsNull() const { return (hash == 0 && n == (unsigned int) -1); } + + friend bool operator<(const COutPoint& a, const COutPoint& b) + { + return (a.hash < b.hash || (a.hash == b.hash && a.n < b.n)); + } + + friend bool operator==(const COutPoint& a, const COutPoint& b) + { + return (a.hash == b.hash && a.n == b.n); + } + + friend bool operator!=(const COutPoint& a, const COutPoint& b) + { + return !(a == b); + } + + std::string ToString() const + { + return strprintf("COutPoint(%s, %u)", hash.ToString().substr(0,10).c_str(), n); + } + + void print() const + { + LogPrintf("%s\n", ToString().c_str()); + } +}; + +/** An inpoint - a combination of a transaction and an index n into its vin */ +class CInPoint +{ +public: + CTransaction* ptx; + unsigned int n; + + CInPoint() { SetNull(); } + CInPoint(CTransaction* ptxIn, unsigned int nIn) { ptx = ptxIn; n = nIn; } + void SetNull() { ptx = NULL; n = (unsigned int) -1; } + bool IsNull() const { return (ptx == NULL && n == (unsigned int) -1); } +}; + + + +/** An input of a transaction. It contains the location of the previous + * transaction's output that it claims and a signature that matches the + * output's public key. + */ +class CTxIn +{ +public: + COutPoint prevout; + CScript scriptSig; + unsigned int nSequence; + + CTxIn() + { + nSequence = std::numeric_limits::max(); + } + + explicit CTxIn(COutPoint prevoutIn, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=std::numeric_limits::max()) + { + prevout = prevoutIn; + scriptSig = scriptSigIn; + nSequence = nSequenceIn; + } + + CTxIn(uint256 hashPrevTx, unsigned int nOut, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=std::numeric_limits::max()) + { + prevout = COutPoint(hashPrevTx, nOut); + scriptSig = scriptSigIn; + nSequence = nSequenceIn; + } + + IMPLEMENT_SERIALIZE + ( + READWRITE(prevout); + READWRITE(scriptSig); + READWRITE(nSequence); + ) + + bool IsFinal() const + { + return (nSequence == std::numeric_limits::max()); + } + + bool IsAnonInput() const + { + return (scriptSig.size() >= MIN_ANON_IN_SIZE + && scriptSig[0] == OP_RETURN + && scriptSig[1] == OP_ANON_MARKER); + } + + friend bool operator==(const CTxIn& a, const CTxIn& b) + { + return (a.prevout == b.prevout && + a.scriptSig == b.scriptSig && + a.nSequence == b.nSequence); + } + + friend bool operator!=(const CTxIn& a, const CTxIn& b) + { + return !(a == b); + } + + + std::string ToString() const + { + std::string str; + str += "CTxIn("; + str += prevout.ToString(); + if (prevout.IsNull()) + str += strprintf(", coinbase %s", HexStr(scriptSig).c_str()); + else + str += strprintf(", scriptSig=%s", scriptSig.ToString().substr(0,24).c_str()); + if (nSequence != std::numeric_limits::max()) + str += strprintf(", nSequence=%u", nSequence); + str += ")"; + return str; + } + + void print() const + { + LogPrintf("%s\n", ToString().c_str()); + } + + void ExtractKeyImage(ec_point& kiOut) const + { + kiOut.resize(EC_COMPRESSED_SIZE); + memcpy(&kiOut[0], prevout.hash.begin(), 32); + kiOut[32] = prevout.n & 0xFF; + }; + + int ExtractRingSize() const + { + return (prevout.n >> 16) & 0xFFFF; + }; + +}; + + + + +/** An output of a transaction. It contains the public key that the next input + * must be able to sign with to claim it. + */ +class CTxOut +{ +public: + int64_t nValue; + CScript scriptPubKey; + + CTxOut() + { + SetNull(); + } + + CTxOut(int64_t nValueIn, CScript scriptPubKeyIn) + { + nValue = nValueIn; + scriptPubKey = scriptPubKeyIn; + } + + IMPLEMENT_SERIALIZE + ( + READWRITE(nValue); + READWRITE(scriptPubKey); + ) + + void SetNull() + { + nValue = -1; + scriptPubKey.clear(); + } + + bool IsNull() + { + return (nValue == -1); + } + + void SetEmpty() + { + nValue = 0; + scriptPubKey.clear(); + } + + bool IsEmpty() const + { + return (nValue == 0 && scriptPubKey.empty()); + } + + bool IsAnonOutput() const + { + return (scriptPubKey.size() >= MIN_ANON_OUT_SIZE + && scriptPubKey[0] == OP_RETURN + && scriptPubKey[1] == OP_ANON_MARKER); + } + + + uint256 GetHash() const + { + return SerializeHash(*this); + } + + friend bool operator==(const CTxOut& a, const CTxOut& b) + { + return (a.nValue == b.nValue && + a.scriptPubKey == b.scriptPubKey); + } + + friend bool operator!=(const CTxOut& a, const CTxOut& b) + { + return !(a == b); + } + + friend bool operator<(const CTxOut& a, const CTxOut& b) + { + return (a.nValue < b.nValue); + } + + std::string ToString() const + { + if (IsEmpty()) return "CTxOut(empty)"; + return strprintf("CTxOut(nValue=%s, scriptPubKey=%s)", FormatMoney(nValue).c_str(), scriptPubKey.ToString().c_str()); + } + + void print() const + { + LogPrintf("%s\n", ToString().c_str()); + } + + CPubKey ExtractAnonPk() const + { + // always use IsAnonOutput to check length + return CPubKey(&scriptPubKey[2+1], EC_COMPRESSED_SIZE); + }; +}; + + + + +class CKeyImageSpent +{ +// stored in txdb, key is keyimage +public: + CKeyImageSpent() {}; + + CKeyImageSpent(uint256& txnHash_, uint32_t inputNo_, int64_t nValue_) + { + txnHash = txnHash_; + inputNo = inputNo_; + nValue = nValue_; + }; + + uint256 txnHash; // hash of spending transaction + uint32_t inputNo; // keyimage is for inputNo of txnHash + int64_t nValue; // reporting only + int nBlockHeight; // block which included the spent + + IMPLEMENT_SERIALIZE + ( + READWRITE(txnHash); + READWRITE(inputNo); + READWRITE(nValue); + READWRITE(nBlockHeight); + ) +}; + +class CAnonOutput +{ +// stored in txdb, key is pubkey +public: + + CAnonOutput() {}; + + CAnonOutput(COutPoint& outpoint_, int64_t nValue_, int nBlockHeight_, uint8_t nCompromised_, char fCoinStake_) + { + outpoint = outpoint_; + nValue = nValue_; + nBlockHeight = nBlockHeight_; + nCompromised = nCompromised_; + fCoinStake = fCoinStake_; + } + + COutPoint outpoint; + int64_t nValue; // rather store 2 bytes, digit + power 10 ? + int nBlockHeight; + uint8_t nCompromised; // TODO: mark if output can be identified (spent with ringsig 1) + char fCoinStake; + IMPLEMENT_SERIALIZE + ( + READWRITE(outpoint); + READWRITE(nValue); + READWRITE(nBlockHeight); + READWRITE(nCompromised); + READWRITE(fCoinStake); + ) +}; + +class CAnonOutputCount +{ // CountAllAnonOutputs +public: + + CAnonOutputCount() + { + nValue = 0; + nExists = 0; + nSpends = 0; + nOwned = 0; + nLastHeight = 0; + nCompromised = 0; + nStakes = 0; + nMature = 0; + nMixins = 0; + nMixinsStaking = 0; + nCompromisedHeight = 0; + } + + CAnonOutputCount(int64_t nValue_, int nExists_, int nUnconfirmed_, int nSpends_, int nOwned_, int nLastHeight_, int nCompromised_, int nMature_, int nMixins_, int nMixinsStaking_, int nStakes_, int nCompromisedHeight_) + { + nValue = nValue_; + nExists = nExists_; + nSpends = nSpends_; + nUnconfirmed = nUnconfirmed_; + nOwned = nOwned_; + nLastHeight = nLastHeight_; + nCompromised = nCompromised_; + nMature = nMature_; + nMixins = nMixins_; + nMixinsStaking = nMixinsStaking_; + nStakes = nStakes_; + nCompromisedHeight = nCompromisedHeight_; + } + + void set(int64_t nValue_, int nExists_, int nUnconfirmed_, int nSpends_, int nOwned_, int nLastHeight_, int nCompromised_, int nMature_, int nMixins_, int nMixinsStaking_, int nStakes_, int nCompromisedHeight_) + { + nValue = nValue_; + nExists = nExists_; + nSpends = nSpends_; + nUnconfirmed = nUnconfirmed_; + nOwned = nOwned_; + nLastHeight = nLastHeight_; + nCompromised = nCompromised_; + nMature = nMature_; + nMixins = nMixins_; + nMixinsStaking = nMixinsStaking_; + nStakes = nStakes_; + nCompromisedHeight = nCompromisedHeight_; + } + + void addCoin(int nBlockHeight, int64_t nCoinValue, bool fStake) + { + nExists++; + nValue = nCoinValue; + nStakes += fStake; + if (nBlockHeight > nLastHeight) + nLastHeight = nBlockHeight; + } + + void updateDepth(int nBlockHeight, int64_t nCoinValue) + { + nValue = nCoinValue; + if (nBlockHeight > nLastHeight) + nLastHeight = nBlockHeight; + } + + void incSpends(int64_t nCoinValue) + { + nSpends++; + nValue = nCoinValue; + } + + void decSpends(int64_t nCoinValue) + { + nSpends--; + nValue = nCoinValue; + } + + void incExists(int64_t nCoinValue) + { + nExists++; + nValue = nCoinValue; + } + + void decExists(int64_t nCoinValue) + { + nExists--; + nValue = nCoinValue; + } + + int numOfUnspends() + { + return nExists - nSpends; + } + + int numOfMatureUnspends() + { + return nMature - nSpends; + } + + + int64_t nValue; + int nExists; + int nUnconfirmed; + int nSpends; + int nOwned; // todo + int nLastHeight; + int nCompromised; + int nCompromisedHeight; + int nMature; + int nMixins; + int nMixinsStaking; + int nStakes; +}; + + +class CStakeModifier +{ +// for CheckKernel +public: + CStakeModifier() {}; + CStakeModifier(uint64_t modifier, uint256 modifierv2, int height, int64_t time) + : nModifier(modifier), bnModifierV2(modifierv2), nHeight(height), nTime(time) + {}; + + uint64_t nModifier; + uint256 bnModifierV2; + int nHeight; + int64_t nTime; +}; + + +struct CTxMixins +{ + CTxMixins(uint256 txHash_) + { + txHash = txHash_; + } + + uint256 txHash; + mutable std::vector> vOutPubKeys; +}; + +using namespace boost::multi_index; +// tags +struct TXHASH{}; +typedef boost::multi_index_container< + CTxMixins, + indexed_by< + random_access<>, + ordered_unique, member > + > +> txMixins_container; + +enum TxMixinsContainerId { OLD, RECENT }; +class CTxMixinsContainers +{ +private: + txMixins_container old; + txMixins_container recent; +public: + txMixins_container& get(int containerId) + { + return containerId == RECENT ? recent : old; + } +}; + +class CMixins +{ +// for mixin selection +public: + CMixins() : CMixins(initUrng()) {} + void AddAnonOutput(CPubKey& pkAo, CAnonOutput& anonOutput, int blockHeight); + bool Pick(int64_t nValue, uint8_t nMixins, std::vector& vPickedAnons); +private: + CMixins(std::mt19937 urng) : urng(urng) {} + static std::mt19937 initUrng() + { + std::random_device rd; + return std::mt19937(rd()); + } + std::vector> vUsedTx; // vector with used transaction hashes as pair of containerId and tx hash + std::map mapMixins; // value to CTxMixinsSet + std::mt19937 urng; +}; + +#endif // SPEC_CORE_H + diff --git a/src/qt/aboutdialog.cpp b/src/qt/aboutdialog.cpp index 0b98befe8d..98cd76afcc 100644 --- a/src/qt/aboutdialog.cpp +++ b/src/qt/aboutdialog.cpp @@ -1,8 +1,15 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "aboutdialog.h" #include "ui_aboutdialog.h" #include "clientmodel.h" -#include "version.h" +#include "util/version.h" AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent), diff --git a/src/qt/aboutdialog.h b/src/qt/aboutdialog.h index 2ed9e9e7c4..c2c692df85 100644 --- a/src/qt/aboutdialog.h +++ b/src/qt/aboutdialog.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef ABOUTDIALOG_H #define ABOUTDIALOG_H diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp index a75d9db6d2..aaf680142c 100644 --- a/src/qt/addresstablemodel.cpp +++ b/src/qt/addresstablemodel.cpp @@ -1,11 +1,18 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "addresstablemodel.h" #include "guiutil.h" #include "walletmodel.h" -#include "wallet.h" +#include "wallet/wallet.h" #include "base58.h" -#include "stealth.h" -#include "extkey.h" +#include "anon/stealth.h" +#include "key/extkey.h" #include #include @@ -60,7 +67,7 @@ class AddressTablePriv const QString & strName(QString::fromStdString(item.second)); bool fMine = IsDestMine(*wallet, address.Get()); - if (strName.startsWith("ao ")) + if (IsStealthAddressMappingLabel(item.second)) continue; QString strAddress(QString::fromStdString(address.ToString())); @@ -70,10 +77,6 @@ class AddressTablePriv if (address.IsBIP32()) { addrType = AT_BIP32; - } else if (strName.startsWith("group_")){ - //find way to detect group address here, probably need to add extra parameter to address log - addrType = AT_Group; - strPubkey = parent->pubkeyForAddress(strAddress, false); } else { addrType = AT_Normal; strPubkey = parent->pubkeyForAddress(strAddress, false); @@ -122,18 +125,18 @@ class AddressTablePriv } // cs_wallet // qLowerBound() and qUpperBound() require our cachedAddressTable list to be sorted in asc order - qSort(cachedAddressTable.begin(), cachedAddressTable.end(), AddressTableEntryLessThan()); + std::sort(cachedAddressTable.begin(), cachedAddressTable.end(), AddressTableEntryLessThan()); } void updateEntry(const QString &address, const QString &label, bool isMine, int status) { - if (label.startsWith("ao ")) + if (IsStealthAddressMappingLabel(label.toStdString())) return; // Find address / label in model - QList::iterator lower = qLowerBound( + QList::iterator lower = std::lower_bound( cachedAddressTable.begin(), cachedAddressTable.end(), address, AddressTableEntryLessThan()); - QList::iterator upper = qUpperBound( + QList::iterator upper = std::upper_bound( cachedAddressTable.begin(), cachedAddressTable.end(), address, AddressTableEntryLessThan()); int lowerIndex = (lower - cachedAddressTable.begin()); int upperIndex = (upper - cachedAddressTable.begin()); @@ -375,7 +378,7 @@ QVariant AddressTableModel::headerData(int section, Qt::Orientation orientation, Qt::ItemFlags AddressTableModel::flags(const QModelIndex &index) const { if(!index.isValid()) - return 0; + return Qt::ItemFlags(); AddressTableEntry *rec = static_cast(index.internalPointer()); Qt::ItemFlags retval = Qt::ItemIsSelectable | Qt::ItemIsEnabled; @@ -409,10 +412,7 @@ void AddressTableModel::updateEntry(const QString &address, const QString &label priv->updateEntry(address, label, isMine, status); } -/* -TODO: -(+) Handle groupchat more properly, maybe based on &type? instead of addressType? -*/ + QString AddressTableModel::addRow(const QString &type, const QString &label, const QString &address, int addressType) { std::string strLabel = label.toStdString(); @@ -505,7 +505,7 @@ QString AddressTableModel::addRow(const QString &type, const QString &label, con // - CBitcoinAddress displays public key only strAddress = CBitcoinAddress(sek->kp).ToString(); } else - { //NORMAL OR GROUP + { //NORMAL //TODO: decouple keygeneration from HD wallet CPubKey newKey; if (0 != wallet->NewKeyFromAccount(newKey)) @@ -566,6 +566,9 @@ bool AddressTableModel::removeRows(int row, int count, const QModelIndex &parent */ QString AddressTableModel::labelForAddress(const QString &address) const { + if (address.isEmpty()) + return ""; + int row(lookupAddress(address)); if(row == -1) @@ -574,22 +577,31 @@ QString AddressTableModel::labelForAddress(const QString &address) const std::string sAddr = address.toStdString(); - if (IsStealthAddress(sAddr)) + CStealthAddress stealthAddress; + if (wallet->GetStealthAddress(sAddr, stealthAddress)) { - CStealthAddress sxAddr; - if (!sxAddr.SetEncoded(sAddr)) - return ""; - - std::set::iterator it(wallet->stealthAddresses.find(sxAddr)); - if (it != wallet->stealthAddresses.end()) - return QString::fromStdString(it->label); - - } else + // given address is a stealth address, return the label if available + if (!stealthAddress.label.empty()) + return QString::fromStdString(stealthAddress.label); + } + else { CBitcoinAddress address_parsed(sAddr); std::map::iterator mi(wallet->mapAddressBook.find(address_parsed.Get())); if (mi != wallet->mapAddressBook.end()) - return QString::fromStdString(mi->second); + { + // there is a address mapping for the address, check if the mapping itself is a stealth address + if (wallet->GetStealthAddress(mi->second, stealthAddress)) + { + // return the label if available or the encoded stealth address + if (!stealthAddress.label.empty()) + return QString::fromStdString(stealthAddress.label); + else + return QString::fromStdString(stealthAddress.Encoded()); + } + else + return QString::fromStdString(mi->second); + } } } else return index(row, Label).data().toString(); @@ -611,14 +623,15 @@ QString AddressTableModel::pubkeyForAddress(const QString &address, const bool l if (addressParsed.IsValid()) { CKeyID destinationAddress; - CPubKey destinationKey; - - addressParsed.GetKeyID(destinationAddress); - - if (SecureMsgGetLocalKey (destinationAddress, destinationKey) == 0 // test if it's a local key - || SecureMsgGetStoredKey(destinationAddress, destinationKey) == 0) - return QString::fromStdString(EncodeBase58(destinationKey.begin(), destinationKey.end()).c_str()); - } + if (addressParsed.GetKeyID(destinationAddress)) + { + LOCK(wallet->cs_wallet); + CPubKey destinationKey; + if (wallet->GetPubKey(destinationAddress, destinationKey)) + if (destinationKey.IsValid() && destinationKey.IsCompressed()) + return QString::fromStdString(EncodeBase58(destinationKey.begin(), destinationKey.end()).c_str()); + } + } return ""; } diff --git a/src/qt/addresstablemodel.h b/src/qt/addresstablemodel.h index 38fc7b743a..a855c0b50c 100644 --- a/src/qt/addresstablemodel.h +++ b/src/qt/addresstablemodel.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef ADDRESSTABLEMODEL_H #define ADDRESSTABLEMODEL_H @@ -13,7 +20,6 @@ enum EAddressType { AT_Normal = 1, /**< Bitcoin address */ AT_Stealth = 2, /**< Stealth address */ AT_BIP32 = 3, /**< BIP32 address */ - AT_Group = 4, /**< BIP32 address */ }; /** @@ -25,7 +31,7 @@ class AddressTableModel : public QAbstractTableModel public: explicit AddressTableModel(CWallet *wallet, WalletModel *parent = 0); ~AddressTableModel(); - + enum ColumnIndex { Label = 0, /**< User specified label */ Address = 1, /**< Bitcoin address */ diff --git a/src/qt/alias_locale.qrc b/src/qt/alias_locale.qrc new file mode 100644 index 0000000000..b61da66e42 --- /dev/null +++ b/src/qt/alias_locale.qrc @@ -0,0 +1,68 @@ + + + + + + src/alias_af_ZA.qm + src/alias_ar.qm + src/alias_be.qm + src/alias_bg.qm + src/alias_bs.qm + src/alias_ca_ES.qm + src/alias_ca.qm + src/alias_cs.qm + src/alias_cy.qm + src/alias_da.qm + src/alias_de.qm + src/alias_el_GR.qm + src/alias_el.qm + src/alias_en.qm + src/alias_eo.qm + src/alias_es_MX.qm + src/alias_es.qm + src/alias_et.qm + src/alias_eu_ES.qm + src/alias_fa_IR.qm + src/alias_fa.qm + src/alias_fi.qm + src/alias_fr_CA.qm + src/alias_fr.qm + src/alias_gl.qm + src/alias_he.qm + src/alias_hi_IN.qm + src/alias_hr.qm + src/alias_hu.qm + src/alias_id_ID.qm + src/alias_it.qm + src/alias_ja.qm + src/alias_ka.qm + src/alias_kk.qm + src/alias_ko_KR.qm + src/alias_ky.qm + src/alias_la.qm + src/alias_lt.qm + src/alias_lv_LV.qm + src/alias_ms_MY.qm + src/alias_nb.qm + src/alias_nl.qm + src/alias_pl.qm + src/alias_pt_BR.qm + src/alias_pt_PT.qm + src/alias_ro_RO.qm + src/alias_ru.qm + src/alias_sk.qm + src/alias_sl_SI.qm + src/alias_sq.qm + src/alias_sr.qm + src/alias_sv.qm + src/alias_th.qm + src/alias_tr.qm + src/alias_uk.qm + src/alias_ur_PK.qm + src/alias_vi.qm + src/alias_vi_VN.qm + src/alias_zh_CN.qm + src/alias_zh_HK.qm + src/alias_zh_TW.qm + + diff --git a/src/qt/aliasbridgestrings.h b/src/qt/aliasbridgestrings.h new file mode 100644 index 0000000000..d885d1a46a --- /dev/null +++ b/src/qt/aliasbridgestrings.h @@ -0,0 +1,217 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + +#ifndef BRIDGETRANSLATIONS_H +#define BRIDGETRANSLATIONS_H +#include + +// Get strings in debug console `dumpStrings()` +// TODO: Automate this process, move into include and generate include... +static const char *html_strings[] = { + QT_TRANSLATE_NOOP("alias-bridge", "Overview"), + QT_TRANSLATE_NOOP("alias-bridge", "Wallet"), + QT_TRANSLATE_NOOP("alias-bridge", "Send"), + QT_TRANSLATE_NOOP("alias-bridge", "Receive"), + QT_TRANSLATE_NOOP("alias-bridge", "Transactions"), + QT_TRANSLATE_NOOP("alias-bridge", "Address Book"), + QT_TRANSLATE_NOOP("alias-bridge", "Options"), + QT_TRANSLATE_NOOP("alias-bridge", "Add Sub-Wallet"), + QT_TRANSLATE_NOOP("alias-bridge", "Immature generated coins with Proof-of-Work"), + QT_TRANSLATE_NOOP("alias-bridge", "Advanced"), + QT_TRANSLATE_NOOP("alias-bridge", "Backup Wallet"), + QT_TRANSLATE_NOOP("alias-bridge", "Encrypt Wallet"), + QT_TRANSLATE_NOOP("alias-bridge", "Change Passphrase"), + QT_TRANSLATE_NOOP("alias-bridge", "(Un)lock Wallet"), + QT_TRANSLATE_NOOP("alias-bridge", "Tools"), + QT_TRANSLATE_NOOP("alias-bridge", "Chain Data"), + QT_TRANSLATE_NOOP("alias-bridge", "Block Explorer"), + QT_TRANSLATE_NOOP("alias-bridge", "Sign Message"), + QT_TRANSLATE_NOOP("alias-bridge", "Verify Message"), + QT_TRANSLATE_NOOP("alias-bridge", "Debug"), + QT_TRANSLATE_NOOP("alias-bridge", "About ALIAS"), + QT_TRANSLATE_NOOP("alias-bridge", "About QT"), + QT_TRANSLATE_NOOP("alias-bridge", "QR code"), + QT_TRANSLATE_NOOP("alias-bridge", "Address:"), + QT_TRANSLATE_NOOP("alias-bridge", "Label:"), + QT_TRANSLATE_NOOP("alias-bridge", "Amount:"), + QT_TRANSLATE_NOOP("alias-bridge", "Add new receive address"), + QT_TRANSLATE_NOOP("alias-bridge", "Add Address"), + QT_TRANSLATE_NOOP("alias-bridge", "Add a new contact"), + QT_TRANSLATE_NOOP("alias-bridge", "Address Lookup"), + QT_TRANSLATE_NOOP("alias-bridge", "Address Type"), + QT_TRANSLATE_NOOP("alias-bridge", "Stealth"), + QT_TRANSLATE_NOOP("alias-bridge", "Group"), + QT_TRANSLATE_NOOP("alias-bridge", "BIP32"), + QT_TRANSLATE_NOOP("alias-bridge", "Label"), + QT_TRANSLATE_NOOP("alias-bridge", "Address"), + QT_TRANSLATE_NOOP("alias-bridge", "Public Key"), + QT_TRANSLATE_NOOP("alias-bridge", "Transaction Hash"), + QT_TRANSLATE_NOOP("alias-bridge", "Recent Transactions"), + QT_TRANSLATE_NOOP("alias-bridge", "Blockchain Info"), + QT_TRANSLATE_NOOP("alias-bridge", "Coin Control"), + QT_TRANSLATE_NOOP("alias-bridge", "Make payment"), + QT_TRANSLATE_NOOP("alias-bridge", "Balance transfer"), + QT_TRANSLATE_NOOP("alias-bridge", "Select Inputs"), + QT_TRANSLATE_NOOP("alias-bridge", "Automatically selected"), + QT_TRANSLATE_NOOP("alias-bridge", "Quantity:"), + QT_TRANSLATE_NOOP("alias-bridge", "Fee:"), + QT_TRANSLATE_NOOP("alias-bridge", "After Fee:"), + QT_TRANSLATE_NOOP("alias-bridge", "Bytes:"), + QT_TRANSLATE_NOOP("alias-bridge", "Priority:"), + QT_TRANSLATE_NOOP("alias-bridge", "LowOutput:"), + QT_TRANSLATE_NOOP("alias-bridge", "Change:"), + QT_TRANSLATE_NOOP("alias-bridge", "Custom change address"), + QT_TRANSLATE_NOOP("alias-bridge", "From account"), + QT_TRANSLATE_NOOP("alias-bridge", "PUBLIC"), + QT_TRANSLATE_NOOP("alias-bridge", "PRIVATE"), + QT_TRANSLATE_NOOP("alias-bridge", "Balance:"), + QT_TRANSLATE_NOOP("alias-bridge", "Ring Size:"), + QT_TRANSLATE_NOOP("alias-bridge", "To account"), + QT_TRANSLATE_NOOP("alias-bridge", "Pay to"), + QT_TRANSLATE_NOOP("alias-bridge", "(no label)"), + QT_TRANSLATE_NOOP("alias-bridge", "Master"), + QT_TRANSLATE_NOOP("alias-bridge", "Wallet is encrypted and currently locked"), + QT_TRANSLATE_NOOP("alias-bridge", "Not staking because wallet is locked"), + QT_TRANSLATE_NOOP("alias-bridge", "0 active connection(s) to ALIAS network"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter a label for this address to add it to your address book"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter a address to add it to your address book"), + QT_TRANSLATE_NOOP("alias-bridge", "Inputs"), + QT_TRANSLATE_NOOP("alias-bridge", "Values"), + QT_TRANSLATE_NOOP("alias-bridge", "Outputs"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter a ALIAS address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV)"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter the message you want to sign"), + QT_TRANSLATE_NOOP("alias-bridge", "Click sign message to generate signature"), + QT_TRANSLATE_NOOP("alias-bridge", "Copy the signed message signature"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter a ALIAS address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV)"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter the message you want to verify"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter a ALIAS signature"), + QT_TRANSLATE_NOOP("alias-bridge", "Paste signature from clipboard"), + QT_TRANSLATE_NOOP("alias-bridge", "Your total balance"), + QT_TRANSLATE_NOOP("alias-bridge", "Checking wallet state with network"), + QT_TRANSLATE_NOOP("alias-bridge", "Recent in/out transactions or stakes"), + QT_TRANSLATE_NOOP("alias-bridge", "Select inputs to spend"), + QT_TRANSLATE_NOOP("alias-bridge", "Optional address to receive transaction change"), + QT_TRANSLATE_NOOP("alias-bridge", "Choose from address book"), + QT_TRANSLATE_NOOP("alias-bridge", "Paste address from clipboard"), + QT_TRANSLATE_NOOP("alias-bridge", "Remove this recipient"), + QT_TRANSLATE_NOOP("alias-bridge", "Send from public or private"), + QT_TRANSLATE_NOOP("alias-bridge", "Current spendable send payment balance"), + QT_TRANSLATE_NOOP("alias-bridge", "Send to public or private"), + QT_TRANSLATE_NOOP("alias-bridge", "Current spendable balance to account"), + QT_TRANSLATE_NOOP("alias-bridge", "The label for this address"), + QT_TRANSLATE_NOOP("alias-bridge", "Amount to transfer"), + QT_TRANSLATE_NOOP("alias-bridge", "Send to multiple recipients at once"), + QT_TRANSLATE_NOOP("alias-bridge", "Date and time that the transaction was received."), + QT_TRANSLATE_NOOP("alias-bridge", "Transaction status. Hover over this field to show number of confirmations."), + QT_TRANSLATE_NOOP("alias-bridge", "Type of transaction."), + QT_TRANSLATE_NOOP("alias-bridge", "Destination address of transaction."), + QT_TRANSLATE_NOOP("alias-bridge", "Short payment note."), + QT_TRANSLATE_NOOP("alias-bridge", "Amount removed from or added to balance."), + QT_TRANSLATE_NOOP("alias-bridge", "Name for this Wallet"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter a password"), + QT_TRANSLATE_NOOP("alias-bridge", "Would you like to create a bip44 path?"), + QT_TRANSLATE_NOOP("alias-bridge", "Your recovery phrase (Keep this safe!)"), + QT_TRANSLATE_NOOP("alias-bridge", "Recovery Phrase"), + QT_TRANSLATE_NOOP("alias-bridge", "Wallet Name for recovered account"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter the password for the wallet you are trying to recover"), + QT_TRANSLATE_NOOP("alias-bridge", "Is this a bip44 path?"), + QT_TRANSLATE_NOOP("alias-bridge", "ID"), + QT_TRANSLATE_NOOP("alias-bridge", "Created"), + QT_TRANSLATE_NOOP("alias-bridge", "Active Account"), + QT_TRANSLATE_NOOP("alias-bridge", "Default"), + QT_TRANSLATE_NOOP("alias-bridge", "Path"), + QT_TRANSLATE_NOOP("alias-bridge", "Active"), + QT_TRANSLATE_NOOP("alias-bridge", "Amount"), + QT_TRANSLATE_NOOP("alias-bridge", "Note"), + QT_TRANSLATE_NOOP("alias-bridge", "Public coins, visible on blockchain"), + QT_TRANSLATE_NOOP("alias-bridge", "Private coins, untraceable and unlinkable on blockchain"), + QT_TRANSLATE_NOOP("alias-bridge", "Available coins for spending"), + QT_TRANSLATE_NOOP("alias-bridge", "Reserved coins are not used for staking"), + QT_TRANSLATE_NOOP("alias-bridge", "Staked coins must mature before they can be accessed"), + QT_TRANSLATE_NOOP("alias-bridge", "Public ALIAS requires 1 confirmation
Private ALIAS requires 10 confirmations"), + QT_TRANSLATE_NOOP("alias-bridge", "Type"), + QT_TRANSLATE_NOOP("alias-bridge", "Date"), + QT_TRANSLATE_NOOP("alias-bridge", "Send Payment"), + QT_TRANSLATE_NOOP("alias-bridge", "The address to send the payment to"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter a label for this address"), + QT_TRANSLATE_NOOP("alias-bridge", "Total Balance"), + QT_TRANSLATE_NOOP("alias-bridge", "Balance"), + QT_TRANSLATE_NOOP("alias-bridge", "Available"), + QT_TRANSLATE_NOOP("alias-bridge", "Public"), + QT_TRANSLATE_NOOP("alias-bridge", "Private"), + QT_TRANSLATE_NOOP("alias-bridge", "Tor+OBFS4 connection online"), + QT_TRANSLATE_NOOP("alias-bridge", "Wallet Encryption"), + QT_TRANSLATE_NOOP("alias-bridge", "A short reference for the recipient (max 24 characters)"), + QT_TRANSLATE_NOOP("alias-bridge", "ALIAS Denomination Value"), + QT_TRANSLATE_NOOP("alias-bridge", "No. Owned (* = Immature)"), + QT_TRANSLATE_NOOP("alias-bridge", "No. System Unspent (* = Immature)"), + QT_TRANSLATE_NOOP("alias-bridge", "No. available Mixins (* = Immature)"), + QT_TRANSLATE_NOOP("alias-bridge", "No. System (** = Compromised)"), + QT_TRANSLATE_NOOP("alias-bridge", "The last block a coin of this denomination was created"), + QT_TRANSLATE_NOOP("alias-bridge", "Owned (*)"), + QT_TRANSLATE_NOOP("alias-bridge", "Unspent (*)"), + QT_TRANSLATE_NOOP("alias-bridge", "Mixins (*)"), + QT_TRANSLATE_NOOP("alias-bridge", "System (**)"), + QT_TRANSLATE_NOOP("alias-bridge", "Least Depth"), + QT_TRANSLATE_NOOP("alias-bridge", "Value Out"), + QT_TRANSLATE_NOOP("alias-bridge", "Value"), + QT_TRANSLATE_NOOP("alias-bridge", "Addressbook"), + QT_TRANSLATE_NOOP("alias-bridge", "Refresh"), + QT_TRANSLATE_NOOP("alias-bridge", "Hash"), + QT_TRANSLATE_NOOP("alias-bridge", "Height"), + QT_TRANSLATE_NOOP("alias-bridge", "Timestamp"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter a ALIAS address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M)"), + QT_TRANSLATE_NOOP("alias-bridge", "An address label for the payment senders address book"), + QT_TRANSLATE_NOOP("alias-bridge", "Enter a short note to send with a payment (max 24 characters)"), + QT_TRANSLATE_NOOP("alias-bridge", "Filter by label or address..."), + QT_TRANSLATE_NOOP("alias-bridge", "Note to send with payment (max 24 characters)"), + QT_TRANSLATE_NOOP("alias-bridge", "The private address to transfer the balance to"), + QT_TRANSLATE_NOOP("alias-bridge", "Search by label or address"), + QT_TRANSLATE_NOOP("alias-bridge", "Search"), + QT_TRANSLATE_NOOP("alias-bridge", "Filter outputs"), + QT_TRANSLATE_NOOP("alias-bridge", "Find Block by hash/height/transaction"), + QT_TRANSLATE_NOOP("alias-bridge", "Family vacation funds"), + QT_TRANSLATE_NOOP("alias-bridge", "Grouping will consolidate transactions of chosen"), + QT_TRANSLATE_NOOP("alias-bridge", "Reset form"), + QT_TRANSLATE_NOOP("alias-bridge", "Restore Sub-Wallet"), + QT_TRANSLATE_NOOP("alias-bridge", "Stake"), + QT_TRANSLATE_NOOP("alias-bridge", "Sub-Wallets"), + QT_TRANSLATE_NOOP("alias-bridge", "Start ALIAS on system login"), + QT_TRANSLATE_NOOP("alias-bridge", "Detach databases at shutdown"), + QT_TRANSLATE_NOOP("alias-bridge", "Pay transaction fee"), + QT_TRANSLATE_NOOP("alias-bridge", "Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume."), + QT_TRANSLATE_NOOP("alias-bridge", "Most transactions are 1kB. The minimal fee is 0.0001"), + QT_TRANSLATE_NOOP("alias-bridge", "Enable Staking"), + QT_TRANSLATE_NOOP("alias-bridge", "Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking."), + QT_TRANSLATE_NOOP("alias-bridge", "Staking Donation"), + QT_TRANSLATE_NOOP("alias-bridge", "Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you."), + QT_TRANSLATE_NOOP("alias-bridge", "Reserve"), + QT_TRANSLATE_NOOP("alias-bridge", "Reserved amount does not participate in staking and is therefore spendable at any time."), + QT_TRANSLATE_NOOP("alias-bridge", "Minimum Stake Interval"), + QT_TRANSLATE_NOOP("alias-bridge", "Main"), + QT_TRANSLATE_NOOP("alias-bridge", "Window"), + QT_TRANSLATE_NOOP("alias-bridge", "Display"), + QT_TRANSLATE_NOOP("alias-bridge", "Minimize to the tray instead of the taskbar"), + QT_TRANSLATE_NOOP("alias-bridge", "Minimize on close"), + QT_TRANSLATE_NOOP("alias-bridge", "User Interface language"), + QT_TRANSLATE_NOOP("alias-bridge", "Unit to show amounts in"), + QT_TRANSLATE_NOOP("alias-bridge", "Rows per page"), + QT_TRANSLATE_NOOP("alias-bridge", "Display addresses in transaction list"), + QT_TRANSLATE_NOOP("alias-bridge", "Notifications"), + QT_TRANSLATE_NOOP("alias-bridge", "Visible Transaction Types"), + QT_TRANSLATE_NOOP("alias-bridge", "Cancel"), + QT_TRANSLATE_NOOP("alias-bridge", "Apply"), + QT_TRANSLATE_NOOP("alias-bridge", "Ok"), + QT_TRANSLATE_NOOP("alias-bridge", "Reserved"), + QT_TRANSLATE_NOOP("alias-bridge", "Unconfirmed"), + QT_TRANSLATE_NOOP("alias-bridge", "Immature"), +// QT_TRANSLATE_NOOP("alias-bridge", ""), +// QT_TRANSLATE_NOOP("alias-bridge", ""), + + 0 // Leave this here... +}; +#endif // BRIDGETRANSLATIONS_H diff --git a/src/qt/aliascorestrings.h b/src/qt/aliascorestrings.h new file mode 100644 index 0000000000..ffa20a5da0 --- /dev/null +++ b/src/qt/aliascorestrings.h @@ -0,0 +1,263 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + +#include +// Automatically generated by extract_strings.py +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif +static const char UNUSED *alias_strings[] = { +QT_TRANSLATE_NOOP("alias-core", "To use the %s option"), +QT_TRANSLATE_NOOP("alias-core", "" +"%s, you must set a rpcpassword in the configuration file:\n" +"%s\n" +"It is recommended you use the following random password:\n" +"rpcuser=aliasrpc\n" +"rpcpassword=%s\n" +"(you do not need to remember this password)\n" +"The username and password MUST NOT be the same.\n" +"If the file does not exist, create it with owner-readable-only file " +"permissions.\n" +"It is also recommended to set alertnotify so you are notified of problems;\n" +"for example: alertnotify=echo %%s | mail -s \"ALIAS Alert\" admin@foo." +"com\n"), +QT_TRANSLATE_NOOP("alias-core", "Error"), +QT_TRANSLATE_NOOP("alias-core", "" +"An error occurred while setting up the RPC port %u for listening on IPv6, " +"falling back to IPv4: %s"), +QT_TRANSLATE_NOOP("alias-core", "" +"An error occurred while setting up the RPC port %u for listening on IPv4: %s"), +QT_TRANSLATE_NOOP("alias-core", "" +"You must set rpcpassword= in the configuration file:\n" +"%s\n" +"If the file does not exist, create it with owner-readable-only file " +"permissions."), +QT_TRANSLATE_NOOP("alias-core", "ALIAS version"), +QT_TRANSLATE_NOOP("alias-core", "Usage:"), +QT_TRANSLATE_NOOP("alias-core", "Send command to -server or aliaswalletd"), +QT_TRANSLATE_NOOP("alias-core", "List commands"), +QT_TRANSLATE_NOOP("alias-core", "Get help for a command"), +QT_TRANSLATE_NOOP("alias-core", "ALIAS"), +QT_TRANSLATE_NOOP("alias-core", "Options:"), +QT_TRANSLATE_NOOP("alias-core", "This help message"), +QT_TRANSLATE_NOOP("alias-core", "Specify configuration file (default: alias.conf)"), +QT_TRANSLATE_NOOP("alias-core", "Specify pid file (default: alias.pid)"), +QT_TRANSLATE_NOOP("alias-core", "Specify data directory"), +QT_TRANSLATE_NOOP("alias-core", "Specify wallet file (within data directory)"), +QT_TRANSLATE_NOOP("alias-core", "Set database cache size in megabytes (default: 25)"), +QT_TRANSLATE_NOOP("alias-core", "Set database disk log size in megabytes (default: 100)"), +QT_TRANSLATE_NOOP("alias-core", "Specify connection timeout in milliseconds (default: 5000)"), +QT_TRANSLATE_NOOP("alias-core", "Connect through socks proxy"), +QT_TRANSLATE_NOOP("alias-core", "Select the version of socks proxy to use (4-5, default: 5)"), +QT_TRANSLATE_NOOP("alias-core", "Use proxy to reach tor hidden services (default: same as -proxy)"), +QT_TRANSLATE_NOOP("alias-core", "Allow DNS lookups for -addnode, -seednode and -connect"), +QT_TRANSLATE_NOOP("alias-core", "Listen for connections on (default: 37347 or testnet: 37111)"), +QT_TRANSLATE_NOOP("alias-core", "Maintain at most connections to peers (default: 125)"), +QT_TRANSLATE_NOOP("alias-core", "Add a node to connect to and attempt to keep the connection open"), +QT_TRANSLATE_NOOP("alias-core", "Connect only to the specified node(s)"), +QT_TRANSLATE_NOOP("alias-core", "Connect to a node to retrieve peer addresses, and disconnect"), +QT_TRANSLATE_NOOP("alias-core", "Specify your own public address"), +QT_TRANSLATE_NOOP("alias-core", "Only connect to nodes in network (IPv4, IPv6 or Tor)"), +QT_TRANSLATE_NOOP("alias-core", "Discover own IP address (default: 1 when listening and no -externalip)"), +QT_TRANSLATE_NOOP("alias-core", "Find peers using internet relay chat (default: 0)"), +QT_TRANSLATE_NOOP("alias-core", "Accept connections from outside (default: 1 if no -proxy or -connect)"), +QT_TRANSLATE_NOOP("alias-core", "Bind to given address. Use [host]:port notation for IPv6"), +QT_TRANSLATE_NOOP("alias-core", "Find peers using DNS lookup (default: 1)"), +QT_TRANSLATE_NOOP("alias-core", "Stake your coins to support network and gain reward (default: 1)"), +QT_TRANSLATE_NOOP("alias-core", "" +"Sync time with other nodes. Disable if time on your system is precise e.g. " +"syncing with NTP (default: 1)"), +QT_TRANSLATE_NOOP("alias-core", "Sync checkpoints policy (default: strict)"), +QT_TRANSLATE_NOOP("alias-core", "Threshold for disconnecting misbehaving peers (default: 100)"), +QT_TRANSLATE_NOOP("alias-core", "" +"Number of seconds to keep misbehaving peers from reconnecting (default: " +"86400)"), +QT_TRANSLATE_NOOP("alias-core", "Maximum per-connection receive buffer, *1000 bytes (default: 5000)"), +QT_TRANSLATE_NOOP("alias-core", "Maximum per-connection send buffer, *1000 bytes (default: 1000)"), +QT_TRANSLATE_NOOP("alias-core", "Use UPnP to map the listening port (default: 1 when listening)"), +QT_TRANSLATE_NOOP("alias-core", "Use UPnP to map the listening port (default: 0)"), +QT_TRANSLATE_NOOP("alias-core", "" +"Detach block and address databases. Increases shutdown time (default: 0)"), +QT_TRANSLATE_NOOP("alias-core", "Fee per KB to add to transactions you send"), +QT_TRANSLATE_NOOP("alias-core", "" +"When creating transactions, ignore inputs with value less than this " +"(default: 0.01)"), +QT_TRANSLATE_NOOP("alias-core", "Accept command line and JSON-RPC commands"), +QT_TRANSLATE_NOOP("alias-core", "Run in the background as a daemon and accept commands"), +QT_TRANSLATE_NOOP("alias-core", "Use the test network"), +QT_TRANSLATE_NOOP("alias-core", "Output extra debugging information. Implies all other -debug* options"), +QT_TRANSLATE_NOOP("alias-core", "Output extra network debugging information"), +QT_TRANSLATE_NOOP("alias-core", "Prepend debug output with timestamp"), +QT_TRANSLATE_NOOP("alias-core", "Shrink debug.log file on client startup (default: 1 when no -debug)"), +QT_TRANSLATE_NOOP("alias-core", "Send trace/debug info to console instead of debug.log file"), +QT_TRANSLATE_NOOP("alias-core", "Send trace/debug info to debugger"), +QT_TRANSLATE_NOOP("alias-core", "Username for JSON-RPC connections"), +QT_TRANSLATE_NOOP("alias-core", "Password for JSON-RPC connections"), +QT_TRANSLATE_NOOP("alias-core", "" +"Listen for JSON-RPC connections on (default: 36657 or testnet: 36757)"), +QT_TRANSLATE_NOOP("alias-core", "Allow JSON-RPC connections from specified IP address"), +QT_TRANSLATE_NOOP("alias-core", "Send commands to node running on (default: 127.0.0.1)"), +QT_TRANSLATE_NOOP("alias-core", "" +"Execute command when the best block changes (%s in cmd is replaced by block " +"hash)"), +QT_TRANSLATE_NOOP("alias-core", "" +"Execute command when a wallet transaction changes (%s in cmd is replaced by " +"TxID)"), +QT_TRANSLATE_NOOP("alias-core", "Require a confirmations for change (default: 0)"), +QT_TRANSLATE_NOOP("alias-core", "" +"Enforce transaction scripts to use canonical PUSH operators (default: 1)"), +QT_TRANSLATE_NOOP("alias-core", "" +"Execute command when a relevant alert is received (%s in cmd is replaced by " +"message)"), +QT_TRANSLATE_NOOP("alias-core", "Upgrade wallet to latest format"), +QT_TRANSLATE_NOOP("alias-core", "Set key pool size to (default: 100)"), +QT_TRANSLATE_NOOP("alias-core", "Rescan the block chain for missing wallet transactions"), +QT_TRANSLATE_NOOP("alias-core", "Attempt to recover private keys from a corrupt wallet.dat"), +QT_TRANSLATE_NOOP("alias-core", "How many blocks to check at startup (default: 2500, 0 = all)"), +QT_TRANSLATE_NOOP("alias-core", "How thorough the block verification is (0-6, default: 1)"), +QT_TRANSLATE_NOOP("alias-core", "Imports blocks from external blk000?.dat file"), +QT_TRANSLATE_NOOP("alias-core", "Block creation options:"), +QT_TRANSLATE_NOOP("alias-core", "Set minimum block size in bytes (default: 0)"), +QT_TRANSLATE_NOOP("alias-core", "Set maximum block size in bytes (default: 250000)"), +QT_TRANSLATE_NOOP("alias-core", "" +"Set maximum size of high-priority/low-fee transactions in bytes (default: " +"27000)"), +QT_TRANSLATE_NOOP("alias-core", "SSL options: (see the Bitcoin Wiki for SSL setup instructions)"), +QT_TRANSLATE_NOOP("alias-core", "Use OpenSSL (https) for JSON-RPC connections"), +QT_TRANSLATE_NOOP("alias-core", "Server certificate file (default: server.cert)"), +QT_TRANSLATE_NOOP("alias-core", "Server private key (default: server.pem)"), +QT_TRANSLATE_NOOP("alias-core", "" +"Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:" +"@STRENGTH)"), +QT_TRANSLATE_NOOP("alias-core", "Invalid amount for -paytxfee=: '%s'"), +QT_TRANSLATE_NOOP("alias-core", "" +"Warning: -paytxfee is set very high! This is the transaction fee you will " +"pay if you send a transaction."), +QT_TRANSLATE_NOOP("alias-core", "Invalid amount for -mininput=: '%s'"), +QT_TRANSLATE_NOOP("alias-core", "Wallet %s resides outside data directory %s."), +QT_TRANSLATE_NOOP("alias-core", "" +"Cannot obtain a lock on data directory %s. ALIAS is probably already " +"running."), +QT_TRANSLATE_NOOP("alias-core", "Verifying database integrity..."), +QT_TRANSLATE_NOOP("alias-core", "" +"Error initializing database environment %s! To recover, BACKUP THAT " +"DIRECTORY, then remove everything from it except for wallet.dat."), +QT_TRANSLATE_NOOP("alias-core", "" +"Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as " +"wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect " +"you should restore from a backup."), +QT_TRANSLATE_NOOP("alias-core", "wallet.dat corrupt, salvage failed"), +QT_TRANSLATE_NOOP("alias-core", "Unknown -socks proxy version requested: %i"), +QT_TRANSLATE_NOOP("alias-core", "Unknown network specified in -onlynet: '%s'"), +QT_TRANSLATE_NOOP("alias-core", "Invalid -proxy address: '%s'"), +QT_TRANSLATE_NOOP("alias-core", "Invalid -tor address: '%s'"), +QT_TRANSLATE_NOOP("alias-core", "Cannot resolve -bind address: '%s'"), +QT_TRANSLATE_NOOP("alias-core", "Failed to listen on any port."), +QT_TRANSLATE_NOOP("alias-core", "Failed to listen on any port. Use -listen=0 if you want this."), +QT_TRANSLATE_NOOP("alias-core", "Cannot resolve -externalip address: '%s'"), +QT_TRANSLATE_NOOP("alias-core", "Invalid amount for -reservebalance="), +QT_TRANSLATE_NOOP("alias-core", "Unable to sign checkpoint, wrong checkpointkey?\n"), +QT_TRANSLATE_NOOP("alias-core", "Loading block index..."), +QT_TRANSLATE_NOOP("alias-core", "Error loading blk0001.dat"), +QT_TRANSLATE_NOOP("alias-core", "Loading wallet..."), +QT_TRANSLATE_NOOP("alias-core", "Error loading wallet.dat: Wallet corrupted"), +QT_TRANSLATE_NOOP("alias-core", "" +"Warning: error reading wallet.dat! All keys read correctly, but transaction " +"data or address book entries might be missing or incorrect."), +QT_TRANSLATE_NOOP("alias-core", "Error loading wallet.dat: Wallet requires newer version of ALIAS"), +QT_TRANSLATE_NOOP("alias-core", "Wallet needed to be rewritten: restart ALIAS to complete"), +QT_TRANSLATE_NOOP("alias-core", "Error loading wallet.dat"), +QT_TRANSLATE_NOOP("alias-core", "Cannot downgrade wallet"), +QT_TRANSLATE_NOOP("alias-core", "Cannot initialize keypool"), +QT_TRANSLATE_NOOP("alias-core", "Cannot write default address"), +QT_TRANSLATE_NOOP("alias-core", "Rescanning..."), +QT_TRANSLATE_NOOP("alias-core", "Importing blockchain data file."), +QT_TRANSLATE_NOOP("alias-core", "Importing bootstrap blockchain data file."), +QT_TRANSLATE_NOOP("alias-core", "Loading addresses..."), +QT_TRANSLATE_NOOP("alias-core", "Error: could not start node"), +QT_TRANSLATE_NOOP("alias-core", "Done loading"), +QT_TRANSLATE_NOOP("alias-core", "" +"Unable to bind to %s on this computer. ALIAS is probably already running."), +QT_TRANSLATE_NOOP("alias-core", "Unable to bind to %s on this computer (bind returned error %d, %s)"), +QT_TRANSLATE_NOOP("alias-core", "Error: Wallet locked, unable to create transaction "), +QT_TRANSLATE_NOOP("alias-core", "Error: Wallet unlocked for staking only, unable to create transaction."), +QT_TRANSLATE_NOOP("alias-core", "" +"Error: This transaction requires a transaction fee of at least %s because of " +"its amount, complexity, or use of recently received funds "), +QT_TRANSLATE_NOOP("alias-core", "Error: Transaction creation failed "), +QT_TRANSLATE_NOOP("alias-core", "Sending..."), +QT_TRANSLATE_NOOP("alias-core", "" +"Error: The transaction was rejected. This might happen if some of the coins " +"in your wallet were already spent, such as if you used a copy of wallet.dat " +"and coins were spent in the copy but not marked as spent here."), +QT_TRANSLATE_NOOP("alias-core", "Invalid amount"), +QT_TRANSLATE_NOOP("alias-core", "Insufficient funds"), +QT_TRANSLATE_NOOP("alias-core", "" +"Warning: Please check that your computer's date and time are correct! If " +"your clock is wrong ALIAS will not work properly."), +QT_TRANSLATE_NOOP("alias-core", "Warning: This version is obsolete, upgrade required!"), +QT_TRANSLATE_NOOP("alias-core", "WARNING: syncronized checkpoint violation detected, but skipped!"), +QT_TRANSLATE_NOOP("alias-core", "Warning: Disk space is low!"), +QT_TRANSLATE_NOOP("alias-core", "" +"WARNING: Invalid checkpoint found! Displayed transactions may not be " +"correct! You may need to upgrade, or notify developers."), +QT_TRANSLATE_NOOP("alias-core", "Read ATXOs... (%d)"), +QT_TRANSLATE_NOOP("alias-core", "Read spent ATXOs... (%d)"), +QT_TRANSLATE_NOOP("alias-core", "Note must be 24 characters or less."), +QT_TRANSLATE_NOOP("alias-core", "Error: The transaction was rejected. " +"This might happen if some of the coins in your wallet were already spent, such as " +"if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."), +QT_TRANSLATE_NOOP("alias-core", "Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported."), +QT_TRANSLATE_NOOP("alias-core", "Initialization sanity check failed. ALIAS is shutting down."), +QT_TRANSLATE_NOOP("alias-core", "Loading block index... (%d)"), +QT_TRANSLATE_NOOP("alias-core", "Calculating chain trust... (%d)"), +QT_TRANSLATE_NOOP("alias-core", "Validating last %d block..."), +QT_TRANSLATE_NOOP("alias-core", "-bip44key is not allowed if wallet.dat already exists"), +QT_TRANSLATE_NOOP("alias-core", "Cannot obtain a lock on data directory %s. ALIAS is probably already running."), +QT_TRANSLATE_NOOP("alias-core", "Cannot resolve binding address: '%s'"), +QT_TRANSLATE_NOOP("alias-core", "Error: could not start tor node"), +QT_TRANSLATE_NOOP("alias-core", "Timed out waiting for onion hostname."), +QT_TRANSLATE_NOOP("alias-core", "Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files."), +QT_TRANSLATE_NOOP("alias-core", "Loading wallet items... (%d)"), +QT_TRANSLATE_NOOP("alias-core", "Warning: error reading wallet.dat! All keys read correctly, but transaction data " +"or address book entries might be missing or incorrect."), +QT_TRANSLATE_NOOP("alias-core", "Reindexing from blk000?.dat files."), +QT_TRANSLATE_NOOP("alias-core", "Reindexing block... (%d)"), +QT_TRANSLATE_NOOP("alias-core", "Core started!"), +QT_TRANSLATE_NOOP("alias-core", "Use tor hidden services version 2 instead of version 3"), +QT_TRANSLATE_NOOP("alias-core", "Find peers using .onion seeds (default: 1 unless -connect)"), +QT_TRANSLATE_NOOP("alias-core", "Minimum time in seconds between successful stakes (default: 30)"), +QT_TRANSLATE_NOOP("alias-core", "Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5)"), +QT_TRANSLATE_NOOP("alias-core", "Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500)"), +QT_TRANSLATE_NOOP("alias-core", "Number of seconds to keep soft banned peers from reconnecting (default: 3600)"), +QT_TRANSLATE_NOOP("alias-core", "Simple command line interface - if not run as daemon"), +QT_TRANSLATE_NOOP("alias-core", "Output extra blockchain debugging information"), +QT_TRANSLATE_NOOP("alias-core", "Output extra Proof of Stake debugging information"), +QT_TRANSLATE_NOOP("alias-core", "Send trace/debug info to debug.log file"), +QT_TRANSLATE_NOOP("alias-core", "Wait for RPC server to start"), +QT_TRANSLATE_NOOP("alias-core", "Keep at most MiB of unconnectable blocks in memory (default: %u)"), +QT_TRANSLATE_NOOP("alias-core", "Rebuild block chain index from current blk000?.dat files on startup"), +QT_TRANSLATE_NOOP("alias-core", "Show version and exit"), +QT_TRANSLATE_NOOP("alias-core", "Thin options:"), +QT_TRANSLATE_NOOP("alias-core", "Operate in less secure, less resource hungry 'thin' mode"), +QT_TRANSLATE_NOOP("alias-core", "Keep the entire block index in memory. (default: 0)"), +QT_TRANSLATE_NOOP("alias-core", "When not thinfullindex, the max number of block headers to keep in memory. (default: 4096)"), +QT_TRANSLATE_NOOP("alias-core", "Disable supporting thin nodes. (default: 0)"), +QT_TRANSLATE_NOOP("alias-core", "Disable forwarding, or requesting all stealth txns. (default: 0)"), +QT_TRANSLATE_NOOP("alias-core", "Don't connect to more than thin peers (default: 8)"), +QT_TRANSLATE_NOOP("alias-core", "Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH)"), +QT_TRANSLATE_NOOP("alias-core", "conn"), +QT_TRANSLATE_NOOP("alias-core", "Error: Wallet locked, unable to create transaction."), +QT_TRANSLATE_NOOP("alias-core", "Error: Must be in full mode."), +QT_TRANSLATE_NOOP("alias-core", "Error: Block chain must be fully synced first."), +QT_TRANSLATE_NOOP("alias-core", "Error: ALIAS is not connected!"), +QT_TRANSLATE_NOOP("alias-core", "Update balance..."), +QT_TRANSLATE_NOOP("alias-core", "...Start UI..."), +QT_TRANSLATE_NOOP("alias-core", "Shutdown..."), +}; diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp index f294c2751f..12a018991f 100644 --- a/src/qt/askpassphrasedialog.cpp +++ b/src/qt/askpassphrasedialog.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "askpassphrasedialog.h" #include "ui_askpassphrasedialog.h" @@ -21,13 +28,14 @@ AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) : ui->passEdit1->setMaxLength(MAX_PASSPHRASE_SIZE); ui->passEdit2->setMaxLength(MAX_PASSPHRASE_SIZE); ui->passEdit3->setMaxLength(MAX_PASSPHRASE_SIZE); - + // Setup Caps Lock detection. ui->passEdit1->installEventFilter(this); ui->passEdit2->installEventFilter(this); ui->passEdit3->installEventFilter(this); ui->stakingCheckBox->setChecked(fWalletUnlockStakingOnly); + ui->stakingCheckBox->hide(); switch(mode) { @@ -37,16 +45,24 @@ AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) : ui->warningLabel->setText(tr("Enter the new passphrase to the wallet.
Please use a passphrase of 10 or more random characters, or eight or more words.")); setWindowTitle(tr("Encrypt wallet")); break; + case UnlockRescan: + case UnlockLogin: + ui->stakingCheckBox->setText(tr("Keep wallet unlocked for staking.")); case UnlockStaking: - ui->stakingCheckBox->setChecked(true); + ui->stakingCheckBox->setChecked(mode == UnlockStaking); ui->stakingCheckBox->show(); // fallthru - case Unlock: // Ask passphrase - ui->warningLabel->setText(tr("This operation needs your wallet passphrase to unlock the wallet.")); + case Unlock: ui->passLabel2->hide(); ui->passEdit2->hide(); ui->passLabel3->hide(); ui->passEdit3->hide(); + if (mode==UnlockRescan) + ui->warningLabel->setText(tr("Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your private ALIAS balance might be shown wrong.")); + else if (mode==UnlockLogin) + ui->warningLabel->setText(tr("ALIAS Wallet Login")); + else + ui->warningLabel->setText(tr("This operation needs your wallet passphrase to unlock the wallet.")); setWindowTitle(tr("Unlock wallet")); break; case Decrypt: // Ask passphrase @@ -115,15 +131,15 @@ void AskPassphraseDialog::accept() if(model->setWalletEncrypted(true, newpass1)) { QMessageBox::warning(this, tr("Wallet encrypted"), - "" + - tr("ShadowCoin will close now to finish the encryption process. " + "" + + tr("ALIAS will close now to finish the encryption process. " "Remember that encrypting your wallet cannot fully protect " - "your coins from being stolen by malware infecting your computer.") + - "

" + + "your coins from being stolen by malware infecting your computer.") + + "

" + tr("IMPORTANT: Any previous backups you have made of your wallet file " "should be replaced with the newly generated, encrypted wallet file. " "For security reasons, previous backups of the unencrypted wallet file " - "will become useless as soon as you start using the new, encrypted wallet.") + + "will become useless as soon as you start using the new, encrypted wallet.") + "
"); QApplication::quit(); } @@ -145,6 +161,8 @@ void AskPassphraseDialog::accept() QDialog::reject(); // Cancelled } } break; + case UnlockRescan: + case UnlockLogin: case UnlockStaking: case Unlock: if(!model->setWalletLocked(false, oldpass)) @@ -203,6 +221,8 @@ void AskPassphraseDialog::textChanged() acceptable = !ui->passEdit2->text().isEmpty() && !ui->passEdit3->text().isEmpty(); break; case UnlockStaking: + case UnlockLogin: + case UnlockRescan: case Unlock: // Old passphrase x1 case Decrypt: acceptable = !ui->passEdit1->text().isEmpty(); diff --git a/src/qt/askpassphrasedialog.h b/src/qt/askpassphrasedialog.h index f604ffe142..5aa944b4fb 100644 --- a/src/qt/askpassphrasedialog.h +++ b/src/qt/askpassphrasedialog.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef ASKPASSPHRASEDIALOG_H #define ASKPASSPHRASEDIALOG_H @@ -18,8 +25,10 @@ class AskPassphraseDialog : public QDialog public: enum Mode { Encrypt, /**< Ask passphrase twice and encrypt */ - UnlockStaking, /**< Ask passphrase and unlock */ Unlock, /**< Ask passphrase and unlock */ + UnlockStaking, /**< Ask passphrase and unlock, option to keep unlocked for staking only */ + UnlockRescan, /**< Ask passphrase and unlock, ATXO spending state alert text */ + UnlockLogin, /**< Ask passphrase and unlock, login dialog, option to keep unlocked for staking. */ ChangePass, /**< Ask old passphrase + new passphrase twice */ Decrypt /**< Ask passphrase and decrypt wallet */ }; diff --git a/src/qt/bitcoinaddressvalidator.cpp b/src/qt/bitcoinaddressvalidator.cpp index 5136ea0c40..197f32ca2a 100644 --- a/src/qt/bitcoinaddressvalidator.cpp +++ b/src/qt/bitcoinaddressvalidator.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "bitcoinaddressvalidator.h" /* Base58 characters are: diff --git a/src/qt/bitcoinaddressvalidator.h b/src/qt/bitcoinaddressvalidator.h index 56985162aa..2305f17231 100644 --- a/src/qt/bitcoinaddressvalidator.h +++ b/src/qt/bitcoinaddressvalidator.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef BITCOINADDRESSVALIDATOR_H #define BITCOINADDRESSVALIDATOR_H diff --git a/src/qt/bitcoinamountfield.cpp b/src/qt/bitcoinamountfield.cpp index 9514ec8465..e920b9a7bf 100644 --- a/src/qt/bitcoinamountfield.cpp +++ b/src/qt/bitcoinamountfield.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "bitcoinamountfield.h" #include "qvaluecombobox.h" #include "bitcoinunits.h" diff --git a/src/qt/bitcoinamountfield.h b/src/qt/bitcoinamountfield.h index 66792e00a9..b571c15aed 100644 --- a/src/qt/bitcoinamountfield.h +++ b/src/qt/bitcoinamountfield.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef BITCOINFIELD_H #define BITCOINFIELD_H diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp deleted file mode 100644 index ffa8ed029e..0000000000 --- a/src/qt/bitcoinstrings.cpp +++ /dev/null @@ -1,201 +0,0 @@ -#include -// Automatically generated by extract_strings.py -#ifdef __GNUC__ -#define UNUSED __attribute__((unused)) -#else -#define UNUSED -#endif -static const char UNUSED *bitcoin_strings[] = {QT_TRANSLATE_NOOP("bitcoin-core", "To use the %s option"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"%s, you must set a rpcpassword in the configuration file:\n" -" %s\n" -"It is recommended you use the following random password:\n" -"rpcuser=shadowcoinrpc\n" -"rpcpassword=%s\n" -"(you do not need to remember this password)\n" -"The username and password MUST NOT be the same.\n" -"If the file does not exist, create it with owner-readable-only file " -"permissions.\n" -"It is also recommended to set alertnotify so you are notified of problems;\n" -"for example: alertnotify=echo %%s | mail -s \"ShadowCoin Alert\" admin@foo." -"com\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Error"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"An error occurred while setting up the RPC port %u for listening on IPv6, " -"falling back to IPv4: %s"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"An error occurred while setting up the RPC port %u for listening on IPv4: %s"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"You must set rpcpassword= in the configuration file:\n" -"%s\n" -"If the file does not exist, create it with owner-readable-only file " -"permissions."), -QT_TRANSLATE_NOOP("bitcoin-core", "ShadowCoin version"), -QT_TRANSLATE_NOOP("bitcoin-core", "Usage:"), -QT_TRANSLATE_NOOP("bitcoin-core", "Send command to -server or shadowcoind"), -QT_TRANSLATE_NOOP("bitcoin-core", "List commands"), -QT_TRANSLATE_NOOP("bitcoin-core", "Get help for a command"), -QT_TRANSLATE_NOOP("bitcoin-core", "ShadowCoin"), -QT_TRANSLATE_NOOP("bitcoin-core", "Options:"), -QT_TRANSLATE_NOOP("bitcoin-core", "This help message"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify configuration file (default: shadowcoin.conf)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify pid file (default: shadowcoind.pid)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify data directory"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify wallet file (within data directory)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Set database cache size in megabytes (default: 25)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Set database disk log size in megabytes (default: 100)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify connection timeout in milliseconds (default: 5000)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Connect through socks proxy"), -QT_TRANSLATE_NOOP("bitcoin-core", "Select the version of socks proxy to use (4-5, default: 5)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Use proxy to reach tor hidden services (default: same as -proxy)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Allow DNS lookups for -addnode, -seednode and -connect"), -QT_TRANSLATE_NOOP("bitcoin-core", "Listen for connections on (default: 51737 or testnet: 51997)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Maintain at most connections to peers (default: 125)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Add a node to connect to and attempt to keep the connection open"), -QT_TRANSLATE_NOOP("bitcoin-core", "Connect only to the specified node(s)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Connect to a node to retrieve peer addresses, and disconnect"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify your own public address"), -QT_TRANSLATE_NOOP("bitcoin-core", "Only connect to nodes in network (IPv4, IPv6 or Tor)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Discover own IP address (default: 1 when listening and no -externalip)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Find peers using internet relay chat (default: 0)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Accept connections from outside (default: 1 if no -proxy or -connect)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Bind to given address. Use [host]:port notation for IPv6"), -QT_TRANSLATE_NOOP("bitcoin-core", "Find peers using DNS lookup (default: 1)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Stake your coins to support network and gain reward (default: 1)"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Sync time with other nodes. Disable if time on your system is precise e.g. " -"syncing with NTP (default: 1)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Sync checkpoints policy (default: strict)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Threshold for disconnecting misbehaving peers (default: 100)"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Number of seconds to keep misbehaving peers from reconnecting (default: " -"86400)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Maximum per-connection receive buffer, *1000 bytes (default: 5000)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Maximum per-connection send buffer, *1000 bytes (default: 1000)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Use UPnP to map the listening port (default: 1 when listening)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Use UPnP to map the listening port (default: 0)"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Detach block and address databases. Increases shutdown time (default: 0)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Fee per KB to add to transactions you send"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"When creating transactions, ignore inputs with value less than this " -"(default: 0.01)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Accept command line and JSON-RPC commands"), -QT_TRANSLATE_NOOP("bitcoin-core", "Run in the background as a daemon and accept commands"), -QT_TRANSLATE_NOOP("bitcoin-core", "Use the test network"), -QT_TRANSLATE_NOOP("bitcoin-core", "Output extra debugging information. Implies all other -debug* options"), -QT_TRANSLATE_NOOP("bitcoin-core", "Output extra network debugging information"), -QT_TRANSLATE_NOOP("bitcoin-core", "Prepend debug output with timestamp"), -QT_TRANSLATE_NOOP("bitcoin-core", "Shrink debug.log file on client startup (default: 1 when no -debug)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Send trace/debug info to console instead of debug.log file"), -QT_TRANSLATE_NOOP("bitcoin-core", "Send trace/debug info to debugger"), -QT_TRANSLATE_NOOP("bitcoin-core", "Username for JSON-RPC connections"), -QT_TRANSLATE_NOOP("bitcoin-core", "Password for JSON-RPC connections"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Listen for JSON-RPC connections on (default: 51736 or testnet: 51996)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Allow JSON-RPC connections from specified IP address"), -QT_TRANSLATE_NOOP("bitcoin-core", "Send commands to node running on (default: 127.0.0.1)"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Execute command when the best block changes (%s in cmd is replaced by block " -"hash)"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Execute command when a wallet transaction changes (%s in cmd is replaced by " -"TxID)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Require a confirmations for change (default: 0)"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Enforce transaction scripts to use canonical PUSH operators (default: 1)"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Execute command when a relevant alert is received (%s in cmd is replaced by " -"message)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Upgrade wallet to latest format"), -QT_TRANSLATE_NOOP("bitcoin-core", "Set key pool size to (default: 100)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Rescan the block chain for missing wallet transactions"), -QT_TRANSLATE_NOOP("bitcoin-core", "Attempt to recover private keys from a corrupt wallet.dat"), -QT_TRANSLATE_NOOP("bitcoin-core", "How many blocks to check at startup (default: 2500, 0 = all)"), -QT_TRANSLATE_NOOP("bitcoin-core", "How thorough the block verification is (0-6, default: 1)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Imports blocks from external blk000?.dat file"), -QT_TRANSLATE_NOOP("bitcoin-core", "Block creation options:"), -QT_TRANSLATE_NOOP("bitcoin-core", "Set minimum block size in bytes (default: 0)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Set maximum block size in bytes (default: 250000)"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Set maximum size of high-priority/low-fee transactions in bytes (default: " -"27000)"), -QT_TRANSLATE_NOOP("bitcoin-core", "SSL options: (see the Bitcoin Wiki for SSL setup instructions)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Use OpenSSL (https) for JSON-RPC connections"), -QT_TRANSLATE_NOOP("bitcoin-core", "Server certificate file (default: server.cert)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Server private key (default: server.pem)"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:" -"@STRENGTH)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -paytxfee=: '%s'"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Warning: -paytxfee is set very high! This is the transaction fee you will " -"pay if you send a transaction."), -QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -mininput=: '%s'"), -QT_TRANSLATE_NOOP("bitcoin-core", "Wallet %s resides outside data directory %s."), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Cannot obtain a lock on data directory %s. ShadowCoin is probably already " -"running."), -QT_TRANSLATE_NOOP("bitcoin-core", "Verifying database integrity..."), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Error initializing database environment %s! To recover, BACKUP THAT " -"DIRECTORY, then remove everything from it except for wallet.dat."), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as " -"wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect " -"you should restore from a backup."), -QT_TRANSLATE_NOOP("bitcoin-core", "wallet.dat corrupt, salvage failed"), -QT_TRANSLATE_NOOP("bitcoin-core", "Unknown -socks proxy version requested: %i"), -QT_TRANSLATE_NOOP("bitcoin-core", "Unknown network specified in -onlynet: '%s'"), -QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -proxy address: '%s'"), -QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -tor address: '%s'"), -QT_TRANSLATE_NOOP("bitcoin-core", "Cannot resolve -bind address: '%s'"), -QT_TRANSLATE_NOOP("bitcoin-core", "Failed to listen on any port. Use -listen=0 if you want this."), -QT_TRANSLATE_NOOP("bitcoin-core", "Cannot resolve -externalip address: '%s'"), -QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -reservebalance="), -QT_TRANSLATE_NOOP("bitcoin-core", "Unable to sign checkpoint, wrong checkpointkey?\n"), -QT_TRANSLATE_NOOP("bitcoin-core", "Loading block index..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Error loading blkindex.dat"), -QT_TRANSLATE_NOOP("bitcoin-core", "Loading wallet..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet corrupted"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Warning: error reading wallet.dat! All keys read correctly, but transaction " -"data or address book entries might be missing or incorrect."), -QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet requires newer version of ShadowCoin"), -QT_TRANSLATE_NOOP("bitcoin-core", "Wallet needed to be rewritten: restart ShadowCoin to complete"), -QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat"), -QT_TRANSLATE_NOOP("bitcoin-core", "Cannot downgrade wallet"), -QT_TRANSLATE_NOOP("bitcoin-core", "Cannot initialize keypool"), -QT_TRANSLATE_NOOP("bitcoin-core", "Cannot write default address"), -QT_TRANSLATE_NOOP("bitcoin-core", "Rescanning..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Importing blockchain data file."), -QT_TRANSLATE_NOOP("bitcoin-core", "Importing bootstrap blockchain data file."), -QT_TRANSLATE_NOOP("bitcoin-core", "Loading addresses..."), -QT_TRANSLATE_NOOP("bitcoin-core", "Error: could not start node"), -QT_TRANSLATE_NOOP("bitcoin-core", "Done loading"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Unable to bind to %s on this computer. ShadowCoin is probably already running."), -QT_TRANSLATE_NOOP("bitcoin-core", "Unable to bind to %s on this computer (bind returned error %d, %s)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Error: Wallet locked, unable to create transaction "), -QT_TRANSLATE_NOOP("bitcoin-core", "Error: Wallet unlocked for staking only, unable to create transaction."), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Error: This transaction requires a transaction fee of at least %s because of " -"its amount, complexity, or use of recently received funds "), -QT_TRANSLATE_NOOP("bitcoin-core", "Error: Transaction creation failed "), -QT_TRANSLATE_NOOP("bitcoin-core", "Sending..."), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Error: The transaction was rejected. This might happen if some of the coins " -"in your wallet were already spent, such as if you used a copy of wallet.dat " -"and coins were spent in the copy but not marked as spent here."), -QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount"), -QT_TRANSLATE_NOOP("bitcoin-core", "Insufficient funds"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"Warning: Please check that your computer's date and time are correct! If " -"your clock is wrong ShadowCoin will not work properly."), -QT_TRANSLATE_NOOP("bitcoin-core", "Warning: This version is obsolete, upgrade required!"), -QT_TRANSLATE_NOOP("bitcoin-core", "WARNING: syncronized checkpoint violation detected, but skipped!"), -QT_TRANSLATE_NOOP("bitcoin-core", "Warning: Disk space is low!"), -QT_TRANSLATE_NOOP("bitcoin-core", "" -"WARNING: Invalid checkpoint found! Displayed transactions may not be " -"correct! You may need to upgrade, or notify developers."), -}; diff --git a/src/qt/bitcoinunits.cpp b/src/qt/bitcoinunits.cpp index 40ce6e216b..fed6b94bfe 100644 --- a/src/qt/bitcoinunits.cpp +++ b/src/qt/bitcoinunits.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "bitcoinunits.h" #include @@ -11,10 +18,10 @@ BitcoinUnits::BitcoinUnits(QObject *parent): QList BitcoinUnits::availableUnits() { QList unitlist; - unitlist.append(SDC); - unitlist.append(mSDC); - unitlist.append(uSDC); - unitlist.append(sSDC); + unitlist.append(ALIAS); + unitlist.append(mALIAS); + unitlist.append(uALIAS); + unitlist.append(satALIAS); return unitlist; } @@ -22,10 +29,10 @@ bool BitcoinUnits::valid(int unit) { switch(unit) { - case SDC: - case mSDC: - case uSDC: - case sSDC: + case ALIAS: + case mALIAS: + case uALIAS: + case satALIAS: return true; default: return false; @@ -36,10 +43,10 @@ QString BitcoinUnits::name(int unit) { switch(unit) { - case SDC: return QString("SDC"); - case mSDC: return QString("mSDC"); - case uSDC: return QString::fromUtf8("μSDC"); - case sSDC: return QString::fromUtf8("Shadowshi"); + case ALIAS: return QString("ALIAS"); + case mALIAS: return QString("mALIAS"); + case uALIAS: return QString::fromUtf8("μALIAS"); + case satALIAS: return QString::fromUtf8("satALIAS"); default: return QString("???"); } } @@ -48,10 +55,10 @@ QString BitcoinUnits::description(int unit) { switch(unit) { - case SDC: return QString("ShadowCoins"); - case mSDC: return QString("Milli-ShadowCoins (1 / 1,000)"); - case uSDC: return QString("Micro-ShadowCoins (1 / 1,000,000)"); - case sSDC: return QString("Shadowshi (1 / 100,000,000)"); + case ALIAS: return QString("ALIAS (public)"); + case mALIAS: return QString("Milli-ALIAS (1 / 1,000)"); + case uALIAS: return QString("Micro-ALIAS (1 / 1,000,000)"); + case satALIAS: return QString("Satoshi-ALIAS (1 / 100,000,000)"); default: return QString("???"); } } @@ -60,9 +67,9 @@ qint64 BitcoinUnits::factor(int unit) { switch(unit) { - case mSDC: return 100000; - case uSDC: return 100; - case sSDC: return 1; + case mALIAS: return 100000; + case uALIAS: return 100; + case satALIAS: return 1; default: return 100000000; } } @@ -71,10 +78,10 @@ int BitcoinUnits::amountDigits(int unit) { switch(unit) { - case SDC: return 8; // 21,000,000 (# digits, without commas) - case mSDC: return 11; // 21,000,000,000 - case uSDC: return 14; // 21,000,000,000,000 - case sSDC: return 16; // 2,100,000,000,000,000 + case ALIAS: return 8; // 21,000,000 (# digits, without commas) + case mALIAS: return 11; // 21,000,000,000 + case uALIAS: return 14; // 21,000,000,000,000 + case satALIAS: return 16; // 2,100,000,000,000,000 default: return 0; } } @@ -83,9 +90,9 @@ int BitcoinUnits::decimals(int unit) { switch(unit) { - case SDC: return 8; - case mSDC: return 5; - case uSDC: return 2; + case ALIAS: return 8; + case mALIAS: return 5; + case uALIAS: return 2; default: return 0; } } @@ -122,6 +129,12 @@ QString BitcoinUnits::formatWithUnit(int unit, qint64 amount, bool plussign) return format(unit, amount, plussign) + QString(" ") + name(unit); } + +QString BitcoinUnits::formatWithUnitCurrency(int unit, qint64 amount, Currency currency, bool plussign) +{ + return formatWithUnit(unit, amount, plussign) + QString(" ") + (currency == PUBLIC ? "(public)" : "(private)"); +} + bool BitcoinUnits::parse(int unit, const QString &value, qint64 *val_out) { if(!valid(unit) || value.isEmpty()) diff --git a/src/qt/bitcoinunits.h b/src/qt/bitcoinunits.h index 461cf29f97..955f1c574a 100644 --- a/src/qt/bitcoinunits.h +++ b/src/qt/bitcoinunits.h @@ -1,6 +1,15 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef BITCOINUNITS_H #define BITCOINUNITS_H +#include "wallet/currency.h" + #include #include @@ -17,10 +26,10 @@ class BitcoinUnits: public QAbstractListModel */ enum Unit { - SDC, - mSDC, - uSDC, - sSDC + ALIAS, + mALIAS, + uALIAS, + satALIAS }; //! @name Static API @@ -45,6 +54,8 @@ class BitcoinUnits: public QAbstractListModel static QString format(int unit, qint64 amount, bool plussign=false); //! Format as string (with unit) static QString formatWithUnit(int unit, qint64 amount, bool plussign=false); + //! Format as string (with unit) + static QString formatWithUnitCurrency(int unit, qint64 amount, Currency currency, bool plussign=false); //! Parse string to coin amount static bool parse(int unit, const QString &value, qint64 *val_out); ///@} diff --git a/src/qt/bridgetranslations.h b/src/qt/bridgetranslations.h deleted file mode 100644 index e9ea9ced9b..0000000000 --- a/src/qt/bridgetranslations.h +++ /dev/null @@ -1,143 +0,0 @@ -#ifndef BRIDGETRANSLATIONS_H -#define BRIDGETRANSLATIONS_H -#include - -// Get strings in debug console `dumpStrings()` -// TODO: Automate this process, move into include and generate include... -static const char *html_strings[] = { - QT_TRANSLATE_NOOP("ShadowBridge", "Overview"), - QT_TRANSLATE_NOOP("ShadowBridge", "Wallet"), - QT_TRANSLATE_NOOP("ShadowBridge", "Send"), - QT_TRANSLATE_NOOP("ShadowBridge", "Receive"), - QT_TRANSLATE_NOOP("ShadowBridge", "Transactions"), - QT_TRANSLATE_NOOP("ShadowBridge", "Address Book"), - QT_TRANSLATE_NOOP("ShadowBridge", "Chat"), - QT_TRANSLATE_NOOP("ShadowBridge", "Notifications"), - QT_TRANSLATE_NOOP("ShadowBridge", "Options"), - QT_TRANSLATE_NOOP("ShadowBridge", "Wallet Management"), - QT_TRANSLATE_NOOP("ShadowBridge", "Add New Wallet"), - QT_TRANSLATE_NOOP("ShadowBridge", "Import Wallet"), - QT_TRANSLATE_NOOP("ShadowBridge", "Advanced"), - QT_TRANSLATE_NOOP("ShadowBridge", "Backup"), - QT_TRANSLATE_NOOP("ShadowBridge", "Backup Wallet"), - QT_TRANSLATE_NOOP("ShadowBridge", "Encrypt Wallet"), - QT_TRANSLATE_NOOP("ShadowBridge", "Change Passphrase"), - QT_TRANSLATE_NOOP("ShadowBridge", "(Un)lock Wallet"), - QT_TRANSLATE_NOOP("ShadowBridge", "Tools"), - QT_TRANSLATE_NOOP("ShadowBridge", "Chain Data"), - QT_TRANSLATE_NOOP("ShadowBridge", "Block Explorer"), - QT_TRANSLATE_NOOP("ShadowBridge", "Sign Message"), - QT_TRANSLATE_NOOP("ShadowBridge", "Verify Message"), - QT_TRANSLATE_NOOP("ShadowBridge", "Debug"), - QT_TRANSLATE_NOOP("ShadowBridge", "About Shadow"), - QT_TRANSLATE_NOOP("ShadowBridge", "About QT"), - QT_TRANSLATE_NOOP("ShadowBridge", "QR code"), - QT_TRANSLATE_NOOP("ShadowBridge", "Address:"), - QT_TRANSLATE_NOOP("ShadowBridge", "Label:"), - QT_TRANSLATE_NOOP("ShadowBridge", "Narration:"), - QT_TRANSLATE_NOOP("ShadowBridge", "Amount:"), - QT_TRANSLATE_NOOP("ShadowBridge", "Add new receive address"), - QT_TRANSLATE_NOOP("ShadowBridge", "Add Address"), - QT_TRANSLATE_NOOP("ShadowBridge", "Add a new contact"), - QT_TRANSLATE_NOOP("ShadowBridge", "Address Lookup"), - QT_TRANSLATE_NOOP("ShadowBridge", "Address Type"), - QT_TRANSLATE_NOOP("ShadowBridge", "Normal"), - QT_TRANSLATE_NOOP("ShadowBridge", "Stealth"), - QT_TRANSLATE_NOOP("ShadowBridge", "Group"), - QT_TRANSLATE_NOOP("ShadowBridge", "BIP32"), - QT_TRANSLATE_NOOP("ShadowBridge", "Label"), - QT_TRANSLATE_NOOP("ShadowBridge", "Address"), - QT_TRANSLATE_NOOP("ShadowBridge", "Public Key"), - QT_TRANSLATE_NOOP("ShadowBridge", "Transaction Hash"), - QT_TRANSLATE_NOOP("ShadowBridge", "Recent Transactions"), - QT_TRANSLATE_NOOP("ShadowBridge", "Market"), - QT_TRANSLATE_NOOP("ShadowBridge", "Advanced Options"), - QT_TRANSLATE_NOOP("ShadowBridge", "Coin Control"), - QT_TRANSLATE_NOOP("ShadowBridge", "Make payment"), - QT_TRANSLATE_NOOP("ShadowBridge", "Balance transfer"), - QT_TRANSLATE_NOOP("ShadowBridge", "Select Inputs"), - QT_TRANSLATE_NOOP("ShadowBridge", "Automatically selected"), - QT_TRANSLATE_NOOP("ShadowBridge", "Quantity:"), - QT_TRANSLATE_NOOP("ShadowBridge", "Fee:"), - QT_TRANSLATE_NOOP("ShadowBridge", "After Fee:"), - QT_TRANSLATE_NOOP("ShadowBridge", "Bytes:"), - QT_TRANSLATE_NOOP("ShadowBridge", "Priority:"), - QT_TRANSLATE_NOOP("ShadowBridge", "LowOutput:"), - QT_TRANSLATE_NOOP("ShadowBridge", "Change:"), - QT_TRANSLATE_NOOP("ShadowBridge", "Custom change address"), - QT_TRANSLATE_NOOP("ShadowBridge", "From account"), - QT_TRANSLATE_NOOP("ShadowBridge", "PUBLIC"), - QT_TRANSLATE_NOOP("ShadowBridge", "PRIVATE"), - QT_TRANSLATE_NOOP("ShadowBridge", "Balance:"), - QT_TRANSLATE_NOOP("ShadowBridge", "Ring Size:"), - QT_TRANSLATE_NOOP("ShadowBridge", "To account"), - QT_TRANSLATE_NOOP("ShadowBridge", "Pay to"), - QT_TRANSLATE_NOOP("ShadowBridge", "(no label)"), - QT_TRANSLATE_NOOP("ShadowBridge", "Catching up...\ - downloaded 0 blocks of history..."), - QT_TRANSLATE_NOOP("ShadowBridge", "Tor connection offline"), - QT_TRANSLATE_NOOP("ShadowBridge", "i2p connection offline"), - QT_TRANSLATE_NOOP("ShadowBridge", "Wallet is encrypted and currently locked"), - QT_TRANSLATE_NOOP("ShadowBridge", "Not staking because wallet is locked"), - QT_TRANSLATE_NOOP("ShadowBridge", "0 active connection(s) to ShadowCash network"), - QT_TRANSLATE_NOOP("ShadowBridge", "Wallet is syncing"), - QT_TRANSLATE_NOOP("ShadowBridge", "Open chat list"), - QT_TRANSLATE_NOOP("ShadowBridge", "Enter a label for this address to add it to your address book"), - QT_TRANSLATE_NOOP("ShadowBridge", "Enter a address to add it to your address book"), - QT_TRANSLATE_NOOP("ShadowBridge", "Inputs"), - QT_TRANSLATE_NOOP("ShadowBridge", "Values"), - QT_TRANSLATE_NOOP("ShadowBridge", "Outputs"), - QT_TRANSLATE_NOOP("ShadowBridge", "Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV)"), - QT_TRANSLATE_NOOP("ShadowBridge", "Enter the message you want to sign"), - QT_TRANSLATE_NOOP("ShadowBridge", "Click sign message to generate signature"), - QT_TRANSLATE_NOOP("ShadowBridge", "Copy the signed message signature"), - QT_TRANSLATE_NOOP("ShadowBridge", "Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV)"), - QT_TRANSLATE_NOOP("ShadowBridge", "Enter the message you want to verify"), - QT_TRANSLATE_NOOP("ShadowBridge", "Enter a ShadowCash signature"), - QT_TRANSLATE_NOOP("ShadowBridge", "Paste signature from clipboard"), - QT_TRANSLATE_NOOP("ShadowBridge", "Your total balance"), - QT_TRANSLATE_NOOP("ShadowBridge", "Balances overview"), - QT_TRANSLATE_NOOP("ShadowBridge", "Recent in/out transactions or stakes"), - QT_TRANSLATE_NOOP("ShadowBridge", "Select inputs to spend"), - QT_TRANSLATE_NOOP("ShadowBridge", "Optional address to receive transaction change"), - QT_TRANSLATE_NOOP("ShadowBridge", "Choose from address book"), - QT_TRANSLATE_NOOP("ShadowBridge", "Paste address from clipboard"), - QT_TRANSLATE_NOOP("ShadowBridge", "Remove this recipient"), - QT_TRANSLATE_NOOP("ShadowBridge", "Send from public or private"), - QT_TRANSLATE_NOOP("ShadowBridge", "Current spendable send payment balance"), - QT_TRANSLATE_NOOP("ShadowBridge", "Send to public or private"), - QT_TRANSLATE_NOOP("ShadowBridge", "Current spendable balance to account"), - QT_TRANSLATE_NOOP("ShadowBridge", "The address transfer the balance to"), - QT_TRANSLATE_NOOP("ShadowBridge", "The address to transfer the balance to"), - QT_TRANSLATE_NOOP("ShadowBridge", "The label for this address"), - QT_TRANSLATE_NOOP("ShadowBridge", "Amount to transfer"), - QT_TRANSLATE_NOOP("ShadowBridge", "Send to multiple recipients at once"), - QT_TRANSLATE_NOOP("ShadowBridge", "Date and time that the transaction was received."), - QT_TRANSLATE_NOOP("ShadowBridge", "Transaction status. Hover over this field to show number of confirmations."), - QT_TRANSLATE_NOOP("ShadowBridge", "Type of transaction."), - QT_TRANSLATE_NOOP("ShadowBridge", "Destination address of transaction."), - QT_TRANSLATE_NOOP("ShadowBridge", "Short payment note."), - QT_TRANSLATE_NOOP("ShadowBridge", "Amount removed from or added to balance."), - QT_TRANSLATE_NOOP("ShadowBridge", "The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M)"), - QT_TRANSLATE_NOOP("ShadowBridge", "Choose address from address book"), - QT_TRANSLATE_NOOP("ShadowBridge", "Enter a public key for the address above"), - QT_TRANSLATE_NOOP("ShadowBridge", "Enter a label for this group"), - QT_TRANSLATE_NOOP("ShadowBridge", "Name for this Wallet"), - QT_TRANSLATE_NOOP("ShadowBridge", "Enter a password"), - QT_TRANSLATE_NOOP("ShadowBridge", "Would you like to create a bip44 path?"), - QT_TRANSLATE_NOOP("ShadowBridge", "Your recovery phrase (Keep this safe!)"), - QT_TRANSLATE_NOOP("ShadowBridge", "Recovery Phrase"), - QT_TRANSLATE_NOOP("ShadowBridge", "Wallet Name for recovered account"), - QT_TRANSLATE_NOOP("ShadowBridge", "Enter the password for the wallet you are trying to recover"), - QT_TRANSLATE_NOOP("ShadowBridge", "Is this a bip44 path?"), - QT_TRANSLATE_NOOP("ShadowBridge", "ID"), - QT_TRANSLATE_NOOP("ShadowBridge", "Created"), - QT_TRANSLATE_NOOP("ShadowBridge", "Active Account"), - QT_TRANSLATE_NOOP("ShadowBridge", "Default"), - QT_TRANSLATE_NOOP("ShadowBridge", "Path"), - QT_TRANSLATE_NOOP("ShadowBridge", "Active"), - QT_TRANSLATE_NOOP("ShadowBridge", "Master"), - - 0 // Leave this here... -}; -#endif // BRIDGETRANSLATIONS_H diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 4a5e925a61..2b3eef9885 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "clientmodel.h" #include "guiconstants.h" #include "optionsmodel.h" @@ -7,7 +14,7 @@ #include "alert.h" #include "main.h" -#include "ui_interface.h" +#include "interface.h" #include #include @@ -15,13 +22,12 @@ static const int64_t nClientStartupTime = GetTime(); ClientModel::ClientModel(OptionsModel *optionsModel, QObject *parent) : - QObject(parent), optionsModel(optionsModel), - cachedNumBlocks(0), cachedNumBlocksOfPeers(0), pollTimer(0) + QObject(parent), optionsModel(optionsModel), pollTimer(0) { peerTableModel = new PeerTableModel(this); - - numBlocksAtStartup = -1; + // Some quantities (such as number of blocks) change so fast that we don't want to be notified for each change. + // Periodically fetch data from core with a timer. pollTimer = new QTimer(this); pollTimer->setInterval(MODEL_UPDATE_DELAY); pollTimer->start(); @@ -51,15 +57,7 @@ int ClientModel::getNumConnections(unsigned int flags) const int ClientModel::getNumBlocks() const { - LOCK(cs_main); - return nBestHeight; -} - -int ClientModel::getNumBlocksAtStartup() -{ - if (numBlocksAtStartup == -1) - numBlocksAtStartup = getNumBlocks(); - return numBlocksAtStartup; + return coreInfo.numBlocks; } quint64 ClientModel::getTotalBytesRecv() const @@ -74,48 +72,22 @@ quint64 ClientModel::getTotalBytesSent() const QDateTime ClientModel::getLastBlockDate() const { - LOCK(cs_main); - if (pindexBest) - return QDateTime::fromTime_t(pindexBest->GetBlockTime()); - else - return QDateTime::fromTime_t(GENESIS_BLOCK_TIME); + return QDateTime::fromTime_t(coreInfo.lastBlockTime); } -QDateTime ClientModel::getLastBlockThinDate() const -{ - LOCK(cs_main); - if (pindexBestHeader) - return QDateTime::fromTime_t(pindexBestHeader->GetBlockTime()); - else - return QDateTime::fromTime_t(GENESIS_BLOCK_TIME); +void ClientModel::updateFromCore(const CoreInfoModel &coreInfo) { + this->coreInfo = coreInfo; } - - -void ClientModel::updateTimer() -{ - // Get required lock upfront. This avoids the GUI from getting stuck on - // periodical polls if the core is holding the locks for a longer time - - // for example, during a wallet rescan. - TRY_LOCK(cs_main, lockMain); - if(!lockMain) - return; - // Some quantities (such as number of blocks) change so fast that we don't want to be notified for each change. - // Periodically check and update with a timer. - - int newNumBlocks = getNumBlocks(); - int newNumBlocksOfPeers = getNumBlocksOfPeers(); - - if (cachedNumBlocks != newNumBlocks - || cachedNumBlocksOfPeers != newNumBlocksOfPeers +void ClientModel::updateTimer() { + if (coreInfo.numBlocks != lastPublishedCoreInfo.numBlocks + || coreInfo.numBlocksOfPeers != lastPublishedCoreInfo.numBlocksOfPeers || nNodeState == NS_GET_FILTERED_BLOCKS) { - cachedNumBlocks = newNumBlocks; - cachedNumBlocksOfPeers = newNumBlocksOfPeers; - - emit numBlocksChanged(newNumBlocks, newNumBlocksOfPeers); + lastPublishedCoreInfo = coreInfo; + emit numBlocksChanged(coreInfo.numBlocks, coreInfo.numBlocksOfPeers); } - + emit bytesChanged(getTotalBytesRecv(), getTotalBytesSent()); } @@ -155,12 +127,12 @@ int ClientModel::getClientMode() const bool ClientModel::inInitialBlockDownload() const { - return IsInitialBlockDownload(); + return coreInfo.isInitialBlockDownload; } int ClientModel::getNumBlocksOfPeers() const { - return GetNumBlocksOfPeers(); + return coreInfo.numBlocksOfPeers; } bool ClientModel::isImporting() const { @@ -203,10 +175,10 @@ QString ClientModel::formatClientStartupTime() const } // Handlers for core signals -static void NotifyBlocksChanged(ClientModel *clientmodel) +static void NotifyBlocksChanged(ClientModel *clientmodel, const BlockChangedEvent &blockChangedEvent) { - // This notification is too frequent. Don't trigger a signal. - // Don't remove it, though, as it might be useful later. + CoreInfoModel coreInfoModel = {blockChangedEvent.numBlocks, blockChangedEvent.numBlocksOfPeers, blockChangedEvent.isInitialBlockDownload, blockChangedEvent.lastBlockTime}; + QMetaObject::invokeMethod(clientmodel, "updateFromCore", Qt::QueuedConnection, Q_ARG(CoreInfoModel, coreInfoModel)); } static void NotifyNumConnectionsChanged(ClientModel *clientmodel, int newNumConnections) @@ -227,15 +199,15 @@ static void NotifyAlertChanged(ClientModel *clientmodel, const uint256 &hash, Ch void ClientModel::subscribeToCoreSignals() { // Connect signals to client - uiInterface.NotifyBlocksChanged.connect(boost::bind(NotifyBlocksChanged, this)); - uiInterface.NotifyNumConnectionsChanged.connect(boost::bind(NotifyNumConnectionsChanged, this, _1)); - uiInterface.NotifyAlertChanged.connect(boost::bind(NotifyAlertChanged, this, _1, _2)); + uiInterface.NotifyBlocksChanged.connect(boost::bind(NotifyBlocksChanged, this, boost::placeholders::_1)); + uiInterface.NotifyNumConnectionsChanged.connect(boost::bind(NotifyNumConnectionsChanged, this, boost::placeholders::_1)); + uiInterface.NotifyAlertChanged.connect(boost::bind(NotifyAlertChanged, this, boost::placeholders::_1, boost::placeholders::_2)); } void ClientModel::unsubscribeFromCoreSignals() { // Disconnect signals from client - uiInterface.NotifyBlocksChanged.disconnect(boost::bind(NotifyBlocksChanged, this)); - uiInterface.NotifyNumConnectionsChanged.disconnect(boost::bind(NotifyNumConnectionsChanged, this, _1)); - uiInterface.NotifyAlertChanged.disconnect(boost::bind(NotifyAlertChanged, this, _1, _2)); + uiInterface.NotifyBlocksChanged.disconnect(boost::bind(NotifyBlocksChanged, this, boost::placeholders::_1)); + uiInterface.NotifyNumConnectionsChanged.disconnect(boost::bind(NotifyNumConnectionsChanged, this, boost::placeholders::_1)); + uiInterface.NotifyAlertChanged.disconnect(boost::bind(NotifyAlertChanged, this, boost::placeholders::_1, boost::placeholders::_2)); } diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index 8fb17c0ac2..edf6ebc471 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef CLIENTMODEL_H #define CLIENTMODEL_H @@ -28,6 +35,14 @@ class QDateTime; class QTimer; QT_END_NAMESPACE +struct CoreInfoModel { + int numBlocks; + int numBlocksOfPeers; + bool isInitialBlockDownload; + int64_t lastBlockTime; +}; +Q_DECLARE_METATYPE(CoreInfoModel); + /** Model for Bitcoin network client. */ class ClientModel : public QObject { @@ -42,20 +57,18 @@ class ClientModel : public QObject //! Return number of connections, default is in- and outbound (total) int getNumConnections(unsigned int flags = CONNECTIONS_ALL) const; int getNumBlocks() const; - int getNumBlocksAtStartup(); quint64 getTotalBytesRecv() const; quint64 getTotalBytesSent() const; QDateTime getLastBlockDate() const; - QDateTime getLastBlockThinDate() const; //! Return true if client connected to testnet bool isTestNet() const; - + //! mode (thin/full) client is running in int getClientMode() const; - + //! Return true if core is doing initial block download bool inInitialBlockDownload() const; //! Return conservative estimate of total number of blocks, or 0 if unknown @@ -74,15 +87,14 @@ class ClientModel : public QObject OptionsModel *optionsModel; PeerTableModel *peerTableModel; - int cachedNumBlocks; - int cachedNumBlocksOfPeers; - - int numBlocksAtStartup; + CoreInfoModel coreInfo; + CoreInfoModel lastPublishedCoreInfo; QTimer *pollTimer; void subscribeToCoreSignals(); void unsubscribeFromCoreSignals(); + signals: void numConnectionsChanged(int count); void numBlocksChanged(int count, int countOfPeers); @@ -93,6 +105,7 @@ class ClientModel : public QObject public slots: void updateTimer(); + void updateFromCore(const CoreInfoModel &coreInfo); void updateNumConnections(int numConnections); void updateAlert(const QString &hash, int status); }; diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp index 925980154d..5a97d873a7 100644 --- a/src/qt/coincontroldialog.cpp +++ b/src/qt/coincontroldialog.cpp @@ -1,14 +1,21 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "coincontroldialog.h" #include "ui_coincontroldialog.h" -#include "shadowbridge.h" +#include "spectrebridge.h" -#include "init.h" +#include "init/init.h" #include "bitcoinunits.h" #include "walletmodel.h" #include "addresstablemodel.h" #include "optionsmodel.h" -#include "coincontrol.h" +#include "wallet/coincontrol.h" #include #include @@ -97,7 +104,7 @@ CoinControlDialog::CoinControlDialog(QWidget *parent) : connect(ui->treeWidget, SIGNAL(itemChanged( QTreeWidgetItem*, int)), this, SLOT(viewItemChanged( QTreeWidgetItem*, int))); // click on header - ui->treeWidget->header()->setClickable(true); + ui->treeWidget->header()->setSectionsClickable(true); connect(ui->treeWidget->header(), SIGNAL(sectionClicked(int)), this, SLOT(headerSectionClicked(int))); // ok button @@ -412,7 +419,7 @@ QString CoinControlDialog::getPriorityLabel(double dPriority) else ui->labelLocked->setVisible(false); }*/ -void CoinControlDialog::updateLabels(WalletModel *model, QDialog *dialog, ShadowBridge *bridge) +void CoinControlDialog::updateLabels(WalletModel *model, QDialog *dialog, SpectreBridge *bridge) { if (!model) return; @@ -436,10 +443,10 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog *dialog, Shadow } QString sPriorityLabel = ""; - int64_t nAmount = 0; - int64_t nPayFee = 0; - int64_t nAfterFee = 0; - int64_t nChange = 0; + qint64 nAmount = 0; + qint64 nPayFee = 0; + qint64 nAfterFee = 0; + qint64 nChange = 0; unsigned int nBytes = 0; unsigned int nBytesInputs = 0; double dPriority = 0; @@ -529,7 +536,7 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog *dialog, Shadow } else { // actually update labels - int nDisplayUnit = BitcoinUnits::SDC; + int nDisplayUnit = BitcoinUnits::ALIAS; if (model && model->getOptionsModel()) nDisplayUnit = model->getOptionsModel()->getDisplayUnit(); @@ -562,7 +569,7 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog *dialog, Shadow l5->setStyleSheet((nBytes >= 10000) ? "color:red;" : ""); // Bytes >= 10000 l6->setStyleSheet((dPriority <= 576000) ? "color:red;" : ""); // Priority < "medium" l7->setStyleSheet((fLowOutput) ? "color:red;" : ""); // Low Output = "yes" - l8->setStyleSheet((nChange > 0 && nChange < CENT) ? "color:red;" : ""); // Change < 0.01SDC + l8->setStyleSheet((nChange > 0 && nChange < CENT) ? "color:red;" : ""); // Change < 0.01SPEC // tool tips l5->setToolTip(tr("This label turns red, if the transaction size is bigger than 10000 bytes.\n\n This means a fee of at least %1 per kb is required.\n\n Can vary +/- 1 Byte per input.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CENT))); @@ -584,29 +591,40 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog *dialog, Shadow void CoinControlDialog::updateView() { bool treeMode = ui->radioTreeMode->isChecked(); - + LOCK(cs_main); ui->treeWidget->clear(); ui->treeWidget->setEnabled(false); // performance, otherwise updateLabels would be called for every checked checkbox +#ifndef Q_OS_MAC ui->treeWidget->setAlternatingRowColors(!treeMode); +#endif QFlags flgCheckbox=Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable; QFlags flgTristate=Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsTristate; - int nDisplayUnit = BitcoinUnits::SDC; + int nDisplayUnit = BitcoinUnits::ALIAS; if (model && model->getOptionsModel()) nDisplayUnit = model->getOptionsModel()->getDisplayUnit(); - map > mapCoins; + map> > mapCoins; model->listCoins(mapCoins); - BOOST_FOREACH(PAIRTYPE(QString, vector) coins, mapCoins) + for(const auto & [coinGroupAddress,coins] : mapCoins) { QTreeWidgetItem *itemWalletAddress = new QTreeWidgetItem(); - QString sWalletAddress = coins.first; + QString sWalletAddress = coinGroupAddress; QString sWalletLabel = ""; - if (model->getAddressTableModel()) + bool isStealthAddress = false; + + CStealthAddress stealthAddress; + if (model->getStealthAddress(sWalletAddress, stealthAddress)) { + isStealthAddress = true; + sWalletAddress = QString::fromStdString(stealthAddress.Encoded()); + sWalletLabel = QString::fromStdString(stealthAddress.label); + } + else if (model->getAddressTableModel()) sWalletLabel = model->getAddressTableModel()->labelForAddress(sWalletAddress); + if (sWalletLabel.length() == 0) sWalletLabel = tr("(no label)"); @@ -618,8 +636,10 @@ void CoinControlDialog::updateView() itemWalletAddress->setFlags(flgTristate); itemWalletAddress->setCheckState(COLUMN_CHECKBOX,Qt::Unchecked); +#ifndef Q_OS_MAC for (int i = 0; i < ui->treeWidget->columnCount(); i++) itemWalletAddress->setBackground(i, QColor(248, 247, 246)); +#endif // label itemWalletAddress->setText(COLUMN_LABEL, sWalletLabel); @@ -632,7 +652,7 @@ void CoinControlDialog::updateView() double dPrioritySum = 0; int nChildren = 0; int nInputSum = 0; - BOOST_FOREACH(const COutput& out, coins.second) + for(auto const & [out,isChange] : coins) { int nInputSize = 148; // 180 if uncompressed public key nSum += out.tx->vout[out.i].nValue; @@ -662,7 +682,7 @@ void CoinControlDialog::updateView() } // label - if (!(sAddress == sWalletAddress)) // change + if (isChange) // change { // tooltip from where the change comes from itemOutput->setToolTip(COLUMN_LABEL, tr("change from %1 (%2)").arg(sWalletLabel).arg(sWalletAddress)); @@ -671,7 +691,9 @@ void CoinControlDialog::updateView() if (!treeMode) { QString sLabel = ""; - if (model->getAddressTableModel()) + if (isStealthAddress) + sLabel = sWalletLabel; + else if (model->getAddressTableModel()) sLabel = model->getAddressTableModel()->labelForAddress(sAddress); if (sLabel.length() == 0) sLabel = tr("(no label)"); diff --git a/src/qt/coincontroldialog.h b/src/qt/coincontroldialog.h index 04c6ade803..a614ccf386 100644 --- a/src/qt/coincontroldialog.h +++ b/src/qt/coincontroldialog.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef COINCONTROLDIALOG_H #define COINCONTROLDIALOG_H @@ -14,7 +21,7 @@ namespace Ui { class CoinControlDialog; } class WalletModel; -class ShadowBridge; +class SpectreBridge; class CCoinControl; class CoinControlDialog : public QDialog @@ -28,7 +35,7 @@ class CoinControlDialog : public QDialog void setModel(WalletModel *model); // static because also called from sendcoinsdialog - static void updateLabels(WalletModel*, QDialog*, ShadowBridge *bridge = 0); + static void updateLabels(WalletModel*, QDialog*, SpectreBridge *bridge = 0); static QString getPriorityLabel(double); static QList payAmounts; diff --git a/src/qt/coincontroltreewidget.cpp b/src/qt/coincontroltreewidget.cpp index aa75a49ae6..c8bde9167b 100644 --- a/src/qt/coincontroltreewidget.cpp +++ b/src/qt/coincontroltreewidget.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "coincontroltreewidget.h" #include "coincontroldialog.h" diff --git a/src/qt/coincontroltreewidget.h b/src/qt/coincontroltreewidget.h index d981f72825..70eddec14c 100644 --- a/src/qt/coincontroltreewidget.h +++ b/src/qt/coincontroltreewidget.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef COINCONTROLTREEWIDGET_H #define COINCONTROLTREEWIDGET_H @@ -9,7 +16,7 @@ Q_OBJECT public: explicit CoinControlTreeWidget(QWidget *parent = 0); - + protected: virtual void keyPressEvent(QKeyEvent *event); }; diff --git a/src/qt/csvmodelwriter.cpp b/src/qt/csvmodelwriter.cpp index 8a50bbab3f..d71ee3fd73 100644 --- a/src/qt/csvmodelwriter.cpp +++ b/src/qt/csvmodelwriter.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "csvmodelwriter.h" #include diff --git a/src/qt/csvmodelwriter.h b/src/qt/csvmodelwriter.h index 6c9dcbaf3b..ce36d61320 100644 --- a/src/qt/csvmodelwriter.h +++ b/src/qt/csvmodelwriter.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef CSVMODELWRITER_H #define CSVMODELWRITER_H diff --git a/src/qt/editaddressdialog.cpp b/src/qt/editaddressdialog.cpp index 3effdebebe..c1de0a1730 100644 --- a/src/qt/editaddressdialog.cpp +++ b/src/qt/editaddressdialog.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "editaddressdialog.h" #include "ui_editaddressdialog.h" #include "addresstablemodel.h" @@ -112,7 +119,7 @@ void EditAddressDialog::accept() break; case AddressTableModel::INVALID_ADDRESS: QMessageBox::warning(this, windowTitle(), - tr("The entered address \"%1\" is not a valid ShadowCoin address.").arg(ui->addressEdit->text()), + tr("The entered address \"%1\" is not a valid ALIAS address.").arg(ui->addressEdit->text()), QMessageBox::Ok, QMessageBox::Ok); break; case AddressTableModel::DUPLICATE_ADDRESS: diff --git a/src/qt/editaddressdialog.h b/src/qt/editaddressdialog.h index 0e4183bd52..aa1d6ffc37 100644 --- a/src/qt/editaddressdialog.h +++ b/src/qt/editaddressdialog.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef EDITADDRESSDIALOG_H #define EDITADDRESSDIALOG_H diff --git a/src/qt/forms/aboutdialog.ui b/src/qt/forms/aboutdialog.ui index 6f32227c56..92a59a499e 100644 --- a/src/qt/forms/aboutdialog.ui +++ b/src/qt/forms/aboutdialog.ui @@ -6,51 +6,125 @@ 0 0 - 593 - 319 + 671 + 347 - About ShadowCoin + About ALIAS + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + - - - - 0 - 0 - + + + false - - :/images/about + + background: #382b3f; + + + 0 + + + 3 + + + 0 + + + 3 + + + 20 + + + + + + 0 + 0 + + + + + 90 + 90 + + + + + 0 + 0 + + + + QFrame::NoFrame + + + :/assets/svg/Alias-Stacked-Reverse.svg + + + true + + + Qt::AlignCenter + + + 0 + + + 0 + + + + - - - - Qt::Vertical - - - - 20 - 40 - - - - + + 16 + + + 20 + + + 20 + + + 5 + + + 20 + + + 15 + IBeamCursor - <b>ShadowCoin</b> version + <b>ALIAS</b> version Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -86,104 +160,168 @@ - - - IBeamCursor + + + + 1 + 1 + - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers + + QFrame::NoFrame - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + Qt::ScrollBarAlwaysOff - - - - - - IBeamCursor + + QAbstractScrollArea::AdjustToContents - - -This is experimental software. + + true + + + + + 0 + 0 + 550 + 227 + + + + + 1 + 1 + + + + + 20 + + + 0 + + + 0 + + + 15 + + + + + IBeamCursor + + + © 2025 ALIAS developer +© 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + IBeamCursor + + + This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - Qt::RichText - - - true - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse - + + + Qt::RichText + + + true + + + true + + + Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Ok + + + 15 - + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + - + buttonBox - accepted() + rejected() AboutDialog - accept() + reject() - 360 + 428 308 - 157 + 286 274 buttonBox - rejected() + accepted() AboutDialog - reject() + accept() - 428 + 360 308 - 286 + 157 274 diff --git a/src/qt/forms/askpassphrasedialog.ui b/src/qt/forms/askpassphrasedialog.ui index 02ea8ffcd7..c90bc5af90 100644 --- a/src/qt/forms/askpassphrasedialog.ui +++ b/src/qt/forms/askpassphrasedialog.ui @@ -7,7 +7,7 @@ 0 0 598 - 198 + 209 @@ -28,6 +28,12 @@ + + + 0 + 0 + + Qt::RichText @@ -38,9 +44,15 @@ + + QLayout::SetFixedSize + QFormLayout::AllNonFixedFieldsGrow + + Qt::AlignHCenter|Qt::AlignTop + @@ -50,6 +62,18 @@ + + + 0 + 0 + + + + + 0 + 21 + + QLineEdit::Password @@ -64,6 +88,18 @@ + + + 0 + 0 + + + + + 0 + 21 + + QLineEdit::Password @@ -78,6 +114,18 @@ + + + 0 + 0 + + + + + 0 + 21 + + QLineEdit::Password @@ -99,24 +147,24 @@ - - - - true - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - For staking only - - - false - - - + + + + true + + + true + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + For staking only + + + diff --git a/src/qt/forms/coincontroldialog.ui b/src/qt/forms/coincontroldialog.ui index c24762e6a2..342fed5cbc 100644 --- a/src/qt/forms/coincontroldialog.ui +++ b/src/qt/forms/coincontroldialog.ui @@ -141,7 +141,7 @@ Qt::ActionsContextMenu - 0.00 SDC + 0.00 ALIAS Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -221,7 +221,7 @@ Qt::ActionsContextMenu - 0.00 SDC + 0.00 ALIAS Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -307,7 +307,7 @@ Qt::ActionsContextMenu - 0.00 SDC + 0.00 ALIAS Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -345,7 +345,7 @@ Qt::ActionsContextMenu - 0.00 SDC + 0.00 ALIAS Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -379,7 +379,7 @@ 41 - + 14 @@ -541,7 +541,7 @@ CoinControlTreeWidget QTreeWidget -
coincontroltreewidget.h
+
qt/coincontroltreewidget.h
diff --git a/src/qt/forms/rpcconsole.ui b/src/qt/forms/rpcconsole.ui index 276b49847e..2f18d49062 100644 --- a/src/qt/forms/rpcconsole.ui +++ b/src/qt/forms/rpcconsole.ui @@ -7,17 +7,17 @@ 0 0 740 - 450 + 480 - Shadow - Debug window + ALIAS - Debug window - 0 + 3 @@ -36,7 +36,7 @@ - Shadow Core + ALIAS Core @@ -280,7 +280,7 @@
- + Estimated total blocks @@ -354,7 +354,7 @@ - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. + Open the ALIAS debug log file from the current data directory. This can take a few seconds for large log files. &Open @@ -380,7 +380,7 @@ - Show the Shadow help message to get a list with possible Shadow command-line options. + Show the ALIAS help message to get a list with possible ALIAS command-line options. &Show @@ -462,7 +462,7 @@ - + :/icons/remove:/icons/remove @@ -817,7 +817,7 @@ - + Direction @@ -1164,7 +1164,7 @@ TrafficGraphWidget QWidget -
trafficgraphwidget.h
+
qt/trafficgraphwidget.h
1 clear() @@ -1172,7 +1172,7 @@
- +
diff --git a/src/qt/guiconstants.h b/src/qt/guiconstants.h index 405ba396b7..f62f509f04 100644 --- a/src/qt/guiconstants.h +++ b/src/qt/guiconstants.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef GUICONSTANTS_H #define GUICONSTANTS_H diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 315333e102..7657997894 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -1,9 +1,16 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "guiutil.h" #include "bitcoinaddressvalidator.h" #include "walletmodel.h" #include "bitcoinunits.h" -#include "util.h" -#include "init.h" +#include "util/util.h" +#include "init/init.h" #include #include @@ -20,9 +27,16 @@ #include #include #include +#include +#include +#include +#include +#include +#ifndef Q_MOC_RUN #include #include +#endif #ifdef WIN32 #ifdef _WIN32_WINNT @@ -46,7 +60,7 @@ namespace GUIUtil { QString dateTimeStr(const QDateTime &date) { - return date.date().toString(Qt::SystemLocaleShortDate) + QString(" ") + date.toString("hh:mm"); + return QLocale().toString(date, QLocale::ShortFormat); } QString dateTimeStr(qint64 nTime) @@ -77,8 +91,8 @@ QString formatDurationStr(int secs) QString formatServicesStr(quint64 mask) { QStringList strList; - - // TODO: add sdc + + // TODO: add spec // Just scan the last 8 bits for now. for (int i = 0; i < 8; i++) { @@ -93,7 +107,7 @@ QString formatServicesStr(quint64 mask) //case NODE_GETUTXO: // strList.append("GETUTXO"); // break; - + case THIN_SUPPORT: strList.append("THIN_SUPPORT"); break; @@ -157,13 +171,16 @@ void setupAmountWidget(QLineEdit *widget, QWidget *parent) bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) { // NovaCoin: check prefix - if(uri.scheme() != QString("shadowcoin")) + if(uri.scheme() != QString("alias")) return false; SendCoinsRecipient rv; rv.address = uri.path(); rv.amount = 0; - QList > items = uri.queryItems(); + QUrlQuery urlQuery; + urlQuery.setQuery(uri.query()); + + QList > items = urlQuery.queryItems(); for (QList >::iterator i = items.begin(); i != items.end(); i++) { bool fShouldReturnFalse = false; @@ -178,11 +195,16 @@ bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) rv.label = i->second; fShouldReturnFalse = false; } + else if (i->first == "narration") + { + rv.narration = i->second; + fShouldReturnFalse = false; + } else if (i->first == "amount") { if(!i->second.isEmpty()) { - if(!BitcoinUnits::parse(BitcoinUnits::SDC, i->second, &rv.amount)) + if(!BitcoinUnits::parse(BitcoinUnits::ALIAS, i->second, &rv.amount)) { return false; } @@ -202,13 +224,13 @@ bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) bool parseBitcoinURI(QString uri, SendCoinsRecipient *out) { - // Convert shadowcoin:// to shadowcoin: + // Convert spectrecoin:// to spectrecoin: // // Cannot handle this later, because bitcoin:// will cause Qt to see the part after // as host, // which will lower-case it (and thus invalidate the address). - if(uri.startsWith("shadowcoin://")) + if(uri.startsWith("alias://")) { - uri.replace(0, 12, "shadowcoin:"); + uri.replace("alias://", "alias:"); } QUrl uriInstance(uri); return parseBitcoinURI(uriInstance, out); @@ -228,7 +250,7 @@ void restoreWindowGeometry(const QString& strSetting, const QSize& defaultSize, QSize size = settings.value(strSetting + "Size", defaultSize).toSize(); if (!pos.x() && !pos.y()) { - QRect screen = QApplication::desktop()->screenGeometry(); + QRect screen = QGuiApplication::primaryScreen()->geometry(); pos.setX((screen.width() - size.width()) / 2); pos.setY((screen.height() - size.height()) / 2); } @@ -239,7 +261,7 @@ void restoreWindowGeometry(const QString& strSetting, const QSize& defaultSize, QString HtmlEscape(const QString& str, bool fMultiLine) { - QString escaped = Qt::escape(str); + QString escaped = str.toHtmlEscaped(); if(fMultiLine) { escaped = escaped.replace("\n", "
\n"); @@ -274,7 +296,10 @@ QString getSaveFileName(QWidget *parent, const QString &caption, QString myDir; if(dir.isEmpty()) // Default to user documents location { - myDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); + if (QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).count() == 0) { + qFatal("QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).count() == 0"); + } + myDir = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).at(0); } else { @@ -375,7 +400,7 @@ bool ToolTipToRichTextFilter::eventFilter(QObject *obj, QEvent *evt) #ifdef WIN32 boost::filesystem::path static StartupShortcutPath() { - return GetSpecialFolderPath(CSIDL_STARTUP) / "ShadowCoin.lnk"; + return GetSpecialFolderPath(CSIDL_STARTUP) / "Alias.lnk"; } bool GetStartOnSystemStartup() @@ -457,7 +482,7 @@ boost::filesystem::path static GetAutostartDir() boost::filesystem::path static GetAutostartFilePath() { - return GetAutostartDir() / "shadowcoin.desktop"; + return GetAutostartDir() / "alias.desktop"; } bool GetStartOnSystemStartup() @@ -499,13 +524,13 @@ bool SetStartOnSystemStartup(bool fAutoStart) optionFile << "[Desktop Entry]\n" \ << "Version=" << FormatFullVersion() << "\n" \ << "Type=Application\n" \ - << "Name=ShadowCoin\n" \ + << "Name=ALIAS\n" \ << "Exec=" << pszExePath << "%u -min\n" \ - << "Icon=" << QFileInfo(":/icons/shadow").absoluteFilePath().toStdString() << "\n" \ + << "Icon=" << QFileInfo(":/icons/spectre").absoluteFilePath().toStdString() << "\n" \ << "Terminal=false\n" \ << "Hidden=false\n" \ << "Categories=Application;Network;\n" \ - << "MimeType=x-scheme-handler/shadowcoin;\n"; + << "MimeType=x-scheme-handler/alias;\n"; optionFile.close(); } return true; @@ -523,10 +548,10 @@ bool SetStartOnSystemStartup(bool fAutoStart) { return false; } HelpMessageBox::HelpMessageBox(QWidget *parent) : QMessageBox(parent) { - header = tr("Shadow") + " " + tr("version") + " " + + header = tr("ALIAS") + " " + tr("version") + " " + QString::fromStdString(FormatFullVersion()) + "\n\n" + tr("Usage:") + "\n" + - " shadow [" + tr("command-line options") + "] " + "\n"; + " aliaswallet [" + tr("command-line options") + "] " + "\n"; coreOptions = QString::fromStdString(HelpMessage()); @@ -535,7 +560,7 @@ HelpMessageBox::HelpMessageBox(QWidget *parent) : " -min " + tr("Start minimized") + "\n" + " -splash " + tr("Show splash screen on startup (default: 1)") + "\n"; - setWindowTitle(tr("Shadow")); + setWindowTitle(tr("ALIAS")); setTextFormat(Qt::PlainText); // setMinimumWidth is ignored for QMessageBox so put in non-breaking spaces to make it wider. setText(header + QString(QChar(0x2003)).repeated(50)); @@ -560,5 +585,33 @@ void HelpMessageBox::showOrPrint() #endif } +QPixmap createPixmap(const QString& svgResource, int width, int height) +{ + QScreen *screen = QGuiApplication::primaryScreen(); + double dpr = screen->devicePixelRatio(); + QSvgRenderer renderer(svgResource); + // QT 5.15 renderer.setAspectRatioMode(Qt::KeepAspectRatio); + QImage image(width * dpr, height * dpr, QImage::Format_ARGB32); + image.fill(Qt::transparent); + QPainter painter(&image); + renderer.render(&painter); + image.setDevicePixelRatio(dpr); + return QPixmap::fromImage(image); +} + +QPixmap createPixmap(int width, int height, const QColor& bgColor, const QString& svgResource, const QRect& bounds) +{ + QScreen *screen = QGuiApplication::primaryScreen(); + double dpr = screen->devicePixelRatio(); + QSvgRenderer renderer(svgResource); + // QT 5.15 renderer.setAspectRatioMode(Qt::KeepAspectRatio); + QImage image(width * dpr, height * dpr, QImage::Format_ARGB32); + image.fill(bgColor); + QPainter painter(&image); + renderer.render(&painter, QRectF(bounds.left() * dpr, bounds.top() * dpr, bounds.width() * dpr, bounds.height() * dpr)); + image.setDevicePixelRatio(dpr); + return QPixmap::fromImage(image); +} + } // namespace GUIUtil diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index 7a5bacadfd..7872a9d026 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef GUIUTIL_H #define GUIUTIL_H @@ -23,10 +30,10 @@ namespace GUIUtil // Create human-readable string from date QString dateTimeStr(const QDateTime &datetime); QString dateTimeStr(qint64 nTime); - + /* Convert seconds into a QString with days, hours, mins, secs */ QString formatDurationStr(int secs); - + /* Format CNodeStats.nServices bitmask into a user-readable string */ QString formatServicesStr(quint64 mask); @@ -35,7 +42,7 @@ namespace GUIUtil /* Format a CNodeCombinedStats.nTimeOffset into a user-readable string. */ QString formatTimeOffset(int64_t nTimeOffset); - + // Render Bitcoin addresses in monospace font QFont bitcoinAddressFont(); @@ -44,11 +51,11 @@ namespace GUIUtil void setupAddressWidget(QLineEdit *widget, QWidget *parent); void setupAmountWidget(QLineEdit *widget, QWidget *parent); - // Parse "shadowcoin:" URI into recipient object, return true on successful parsing + // Parse "spectrecoin:" URI into recipient object, return true on successful parsing // See Bitcoin URI definition discussion here: https://bitcointalk.org/index.php?topic=33490.0 bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out); bool parseBitcoinURI(QString uri, SendCoinsRecipient *out); - + /** Save window size and position */ void saveWindowGeometry(const QString& strSetting, QWidget *parent); /** Restore window size and position */ @@ -94,6 +101,12 @@ namespace GUIUtil // Open debug.log void openDebugLogfile(); + // Create a scaled and devicePixelRatio considering pixmap from a SVG resource + QPixmap createPixmap(const QString& svgResource, int width, int height); + + // Create a pixmap with given width and height (considering devicePixelRatio), fill with given color, draw scaled SVG into given bounds + QPixmap createPixmap(int width, int height, const QColor& bgColor, const QString& svgResource, const QRect& bounds); + /** Qt event filter that intercepts ToolTipChange events, and replaces the tooltip with a rich text representation if needed. This assures that Qt can word-wrap long tooltip messages. Tooltips longer than the provided size threshold (in characters) are wrapped. diff --git a/src/qt/locale/alias_af_ZA.ts b/src/qt/locale/alias_af_ZA.ts new file mode 100644 index 0000000000..28374085dc --- /dev/null +++ b/src/qt/locale/alias_af_ZA.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Etiket + + + + Address + Adres + + + + pubkey + + + + + stealth + + + + + (no label) + (geen etiket) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + Tik Wagwoord in + + + + New passphrase + Nuwe wagwoord + + + + Repeat new passphrase + Herhaal nuwe wagwoord + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Tik die nuwe wagwoord vir die beursie in.<br/>Gebruik asseblief 'n wagwoord van <b>ten minste 10 ewekansige karakters</b>, of <b>agt (8) of meer woorde.</b> + + + + Encrypt wallet + Enkripteer beursie + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Hierdie operasie benodig 'n wagwoord om die beursie oop te sluit. + + + + Unlock wallet + Sluit beursie oop + + + + This operation needs your wallet passphrase to decrypt the wallet. + Hierdie operasie benodig 'n wagwoord om die beursie oop te sluit. + + + + Decrypt wallet + Sluit beursie oop + + + + Change passphrase + Verander wagwoord + + + + Enter the old and new passphrase to the wallet. + Tik asseblief die ou en nuwe wagwoord vir die beursie in. + + + + Confirm wallet encryption + Bevestig beursie enkripsie. + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + Die beursie is nou bewaak + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + Die beursie kon nie bewaak word nie + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Beursie bewaaking het misluk as gevolg van 'n interne fout. Die beursie is nie bewaak nie! + + + + + The supplied passphrases do not match. + Die wagwoord stem nie ooreen nie + + + + Wallet unlock failed + Beursie oopsluiting het misluk + + + + + + The passphrase entered for the wallet decryption was incorrect. + Die wagwoord wat ingetik was om die beursie oop te sluit, was verkeerd. + + + + Wallet decryption failed + Beursie dekripsie het misluk + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Bedrag: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Bedrag + + + + Label + + + + + Address + Adres + + + + Date + Datum + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + Maak kopie van adres + + + + Copy label + + + + + + Copy amount + Kopieer bedrag + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (geen etiket) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Nuwe ontvangende adres + + + + New sending address + Nuwe stuurende adres + + + + Edit receiving address + Wysig ontvangende adres + + + + Edit sending address + Wysig stuurende adres + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + Kon nie die beursie oopsluit nie. + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + Transaksie ID + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + Datum + + + + Source + + + + + Generated + + + + + + Credit + Krediet + + + + matures in %n more block(s) + + + + + not accepted + nie aanvaar nie + + + + Transaction fee + Transaksie fooi + + + + Net amount + Netto bedrag + + + + Message + Boodskap + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + Debiet + + + + Transaction + + + + + Inputs + + + + + Amount + Bedrag + + + + true + waar + + + + false + onwaar + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + onbekend + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + Datum + + + + Type + Tipe + + + + Address + Adres + + + + Note + + + + + Amount + Bedrag + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n.v.t) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + Datum en tyd wat die transaksie ontvang was. + + + + Type of transaction. + Tipe transaksie. + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_ar.ts b/src/qt/locale/alias_ar.ts new file mode 100644 index 0000000000..0e00b253d3 --- /dev/null +++ b/src/qt/locale/alias_ar.ts @@ -0,0 +1,4302 @@ + + + AboutDialog + + + About Alias + عن ألياس + + + + <b>Alias</b> version + إصدار ألياس + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + ©2020 مبرمجي ألياس +© 2016 مبرمجي سبكتركوين +© 2014 مبرمجي شادوكوين +© 2014 مبرمجي بلاك كوين +© 2012 مبرمجي نوفا كوين +© 2009 مبرمجي بيتكوين + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + وصف + + + + Address + عنوان + + + + pubkey + + + + + stealth + + + + + (no label) + (لا وصف) + + + + Stealth Address + عنوان خفي + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + حوار كلمة المرور + + + + Enter passphrase + ادخل كلمة المرور + + + + New passphrase + عبارة مرور جديدة + + + + Repeat new passphrase + ادخل الجملة السرية مرة أخرى + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + أدخل عبارة مرور جديدة إلى المحفظة. الرجاء استخدام عبارة مرور تتكون من10 حروف عشوائية على الاقل, أو أكثر من 7 كلمات + + + + Encrypt wallet + تشفير المحفظة + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + هذه العملية تحتاج عبارة المرور محفظتك لفتحها + + + + Unlock wallet + إفتح المحفظة + + + + This operation needs your wallet passphrase to decrypt the wallet. + هذه العملية تحتاج عبارة المرور محفظتك فك تشفيرها + + + + Decrypt wallet + فك تشفير المحفظة + + + + Change passphrase + تغيير عبارة المرور + + + + Enter the old and new passphrase to the wallet. + أدخل عبارة المرور القديمة والجديدة إلى المحفظة. + + + + Confirm wallet encryption + تأكيد التشفير المحفظة + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + تخذير : اذا تم تشفير المحفظة وضيعت كلمة المرور, لن تستطيع الحصول علي البلاك كوين + + + + Are you sure you wish to encrypt your wallet? + هل انت متأكد من رغبتك في تشفير المحفظة؟ + + + + + Wallet encrypted + محفظة مشفرة + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + بلاك كوين + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + فشل تشفير المحفظة + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + + The supplied passphrases do not match. + عبارتي المرور ليستا متطابقتان + + + + + Wallet unlock failed + فشل فتح المحفظة + + + + + + The passphrase entered for the wallet decryption was incorrect. + عبارة المرور التي تم إدخالها لفك شفرة المحفظة غير صحيحة. + + + + + Wallet decryption failed + فشل فك التشفير المحفظة + + + + Wallet passphrase was successfully changed. + كلمة مرور المحفظة تم تغييره بشكل ناجح + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + تحذير الشبكة + + + + CoinControlDialog + + + Coin Control + سيطرة الكوين + + + + Quantity: + الكمية: + + + + Bytes: + + + + + Amount: + المبلغ: + + + + Priority: + اهمية: + + + + Fee: + رسوم: + + + + Low Output: + + + + + After Fee: + بعد الرسوم: + + + + Change: + تغيير: + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + المبلغ + + + + Label + + + + + Address + عنوان + + + + Date + التاريخ + + + + Confirmations + + + + + Confirmed + تأكيد + + + + Priority + + + + + Copy address + انسخ عنوان + + + + Copy label + انسخ التسمية + + + + + Copy amount + نسخ الكمية + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + نعم + + + + + no + لا + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (لا وصف) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + عدل العنوان + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + العنوان + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + عنوان تلقي جديد + + + + New sending address + عنوان إرسال جديد + + + + Edit receiving address + تعديل عنوان التلقي + + + + + Edit sending address + تعديل عنوان الارسال + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + هدا العنوان "%1" موجود مسبقا في دفتر العناوين + + + + Could not unlock wallet. + يمكن فتح المحفظة. + + + + New key generation failed. + فشل توليد مفتاح جديد. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + المعلومات + + + + Alias Core + + + + + Client name + اسم العميل + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + غير معروف + + + + Client version + نسخه العميل + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + وقت البناء + + + + Startup time + + + + + Network + الشبكه + + + + Name + + + + + Number of connections + عدد الاتصالات + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + الفتح + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + مفتوح حتى 1٪ + + + + conflicted + + + + + %1/offline + 1% غير متواجد + + + + %1/unconfirmed + غير مؤكدة/1% + + + + %1 confirmations + تأكيد %1 + + + + Transaction ID + رقم المعاملة + + + + Block Hash + + + + + Status + الحالة. + + + + , has not been successfully broadcast yet + لم يتم حتى الآن البث بنجاح + + + + , broadcast through %n node(s) + + + + + Date + التاريخ + + + + Source + المصدر + + + + Generated + تم اصداره. + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + غير مقبولة + + + + Transaction fee + رسوم التحويل + + + + Net amount + + + + + Message + + + + + Comment + تعليق + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + دين + + + + Transaction + معاملة + + + + Inputs + + + + + Amount + المبلغ + + + + true + صحيح + + + + false + خاطئ + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + غير معروف + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + تفاصيل المعاملة + + + + This pane shows a detailed description of the transaction + يبين هذا الجزء وصفا مفصلا لهده المعاملة + + + + TransactionTableModel + + + Date + التاريخ + + + + Type + النوع + + + + Address + عنوان + + + + Note + + + + + Amount + المبلغ + + + + Open for %n more block(s) + + + + + Open until %1 + مفتوح حتى 1٪ + + + + Offline + غير متصل + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + تأكيد الإرسال Coins + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + غير متوفر + + + + Transaction status. Hover over this field to show number of confirmations. + حالة المعاملة. تحوم حول هذا الحقل لعرض عدد التأكيدات. + + + + Date and time that the transaction was received. + التاريخ والوقت الذي تم فيه تلقي المعاملة. + + + + Type of transaction. + نوع المعاملات + + + + Destination address of transaction. + عنوان وجهة المعاملة + + + + Amount removed from or added to balance. + المبلغ الذي أزيل أو أضيف الى الرصيد + + + + WalletModel + + + + Sending... + ارسال.... + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_be.ts b/src/qt/locale/alias_be.ts new file mode 100644 index 0000000000..7f77cbe95a --- /dev/null +++ b/src/qt/locale/alias_be.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Пазнака + + + + Address + Адрас + + + + pubkey + + + + + stealth + + + + + (no label) + непазначаны + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + Увядзіце кодавую фразу + + + + New passphrase + Новая кодавая фраза + + + + Repeat new passphrase + Паўтарыце новую кодавую фразу + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Увядзіце новую кодавую фразу для гаманца. <br/>Калі ласка, ўжывайце пароль <b>не меньша за 10 адвольных сімвалаў</b>, ці <b>болей васьмі слоў</b>. + + + + Encrypt wallet + Зашыфраваць гаманец. + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Гэтая аперацыя патрабуе кодавую фразу, каб рзблакаваць гаманец. + + + + Unlock wallet + Разблакаваць гаманец + + + + This operation needs your wallet passphrase to decrypt the wallet. + Гэтая аперацыя патрабуе пароль каб расшыфраваць гаманец. + + + + Decrypt wallet + Рачшыфраваць гаманец + + + + Change passphrase + Змяніць пароль + + + + Enter the old and new passphrase to the wallet. + Увядзіце стары і новы пароль да гаманца. + + + + Confirm wallet encryption + Пацвердзіце шыфраванне гаманца + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + Гаманец зашыфраваны + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + Шыфраванне гаманца няўдалае + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Шыфраванне гаманца не адбылося з-за ўнутранай памылкі. Гаманец незашыфраваны. + + + + + The supplied passphrases do not match. + Уведдзеныя паролі не супадаюць + + + + Wallet unlock failed + Разблакаванне гаманца няўдалае + + + + + + The passphrase entered for the wallet decryption was incorrect. + Уведзена пароль дзеля расшыфравання гаманца памылковы + + + + Wallet decryption failed + Расшыфраванне гаманца няўдалае + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Колькасць + + + + Label + + + + + Address + Адрас + + + + Date + Дата + + + + Confirmations + + + + + Confirmed + Пацверджана + + + + Priority + + + + + Copy address + Капіяваць адрас + + + + Copy label + Капіяваць пазнаку + + + + + Copy amount + Капіяваць колькасць + + + + Copy transaction ID + Капіяваць ID транзакцыі + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + непазначаны + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Рэдагаваць Адрас + + + + &Label + Пазнака + + + + The label associated with this address book entry + + + + + &Address + Адрас + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Новы адрас для атрымання + + + + New sending address + Новы адрас для дасылання + + + + Edit receiving address + Рэдагаваць адрас прымання + + + + Edit sending address + Рэдагаваць адрас дасылання + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Уведзены адрас "%1" ужо ў кніге адрасоў + + + + Could not unlock wallet. + Немагчыма разблакаваць гаманец + + + + New key generation failed. + Генерацыя новага ключа няўдалая + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + %1/непацверджана + + + + %1 confirmations + %1 пацверджанняў + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + , пакуль не было паспяхова транслявана + + + + , broadcast through %n node(s) + + + + + Date + Дата + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + Колькасць + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + невядома + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Дэталі транзакцыі + + + + This pane shows a detailed description of the transaction + Гэтая панэль паказвае дэтальнае апісанне транзакцыі + + + + TransactionTableModel + + + Date + Дата + + + + Type + Тып + + + + Address + Адрас + + + + Note + + + + + Amount + Колькасць + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Пацверджана (%1 пацверджанняў) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Статус транзакцыі. Навядзіце курсар на гэтае поле, каб паказаць колькасць пацверджанняў. + + + + Date and time that the transaction was received. + Дата і час, калі транзакцыя была прынята. + + + + Type of transaction. + Тып транзакцыі + + + + Destination address of transaction. + Адрас прызначэння транзакцыі. + + + + Amount removed from or added to balance. + Колькасць аднятая ці даданая да балансу. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_bg.ts b/src/qt/locale/alias_bg.ts new file mode 100644 index 0000000000..4571075faa --- /dev/null +++ b/src/qt/locale/alias_bg.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Име + + + + Address + Адрес + + + + pubkey + + + + + stealth + + + + + (no label) + (без име) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + Въведи парола + + + + New passphrase + Нова парола + + + + Repeat new passphrase + Още веднъж + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Въведете нова парола за портфейла.<br/>Моля използвайте <b>поне 10 случайни символа</b> или <b>8 или повече думи</b>. + + + + Encrypt wallet + Криптиране на портфейла + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Тази операция изисква Вашата парола за отключване на портфейла. + + + + Unlock wallet + Отключване на портфейла + + + + This operation needs your wallet passphrase to decrypt the wallet. + Тази операция изисква Вашата парола за декриптиране на портфейла. + + + + Decrypt wallet + Декриптиране на портфейла + + + + Change passphrase + Смяна на паролата + + + + Enter the old and new passphrase to the wallet. + Въведете текущата и новата парола за портфейла. + + + + Confirm wallet encryption + Потвърждаване на криптирането + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + Портфейлът е криптиран + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + Криптирането беше неуспешно + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Криптирането на портфейла беше неуспешно поради неизвестен проблем. Портфейлът не е криптиран. + + + + + The supplied passphrases do not match. + Паролите не съвпадат + + + + Wallet unlock failed + Отключването беше неуспешно + + + + + + The passphrase entered for the wallet decryption was incorrect. + Паролата въведена за декриптиране на портфейла е грешна. + + + + Wallet decryption failed + Декриптирането беше неуспешно + + + + Wallet passphrase was successfully changed. + Паролата на портфейла беше променена успешно. + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Сума: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Сума + + + + Label + + + + + Address + Адрес + + + + Date + Дата + + + + Confirmations + + + + + Confirmed + Потвърдени + + + + Priority + + + + + Copy address + Копирай адрес + + + + Copy label + Копирай име + + + + + Copy amount + Копирай сума + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (без име) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Редактиране на адрес + + + + &Label + &Име + + + + The label associated with this address book entry + + + + + &Address + &Адрес + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Нов адрес за получаване + + + + New sending address + Нов адрес за изпращане + + + + Edit receiving address + Редактиране на входящ адрес + + + + Edit sending address + Редактиране на изходящ адрес + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Вече има адрес "%1" в списъка с адреси. + + + + Could not unlock wallet. + Отключването на портфейла беше неуспешно. + + + + New key generation failed. + Създаването на ключ беше неуспешно. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + Мрежа + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + Изчисти конзолата + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Използвайте стрелки надолу и нагореза разглеждане на историятаот команди и <b>Ctrl-L</b> за изчистване на конзолата. + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Подлежи на промяна до %1 + + + + conflicted + + + + + %1/offline + %1/офлайн + + + + %1/unconfirmed + %1/непотвърдени + + + + %1 confirmations + включена в %1 блока + + + + Transaction ID + ID + + + + Block Hash + + + + + Status + Статус + + + + , has not been successfully broadcast yet + , все още не е изпратено + + + + , broadcast through %n node(s) + + + + + Date + Дата + + + + Source + Източник + + + + Generated + Издадени + + + + + Credit + Кредит + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + Такса + + + + Net amount + Сума нето + + + + Message + Съобщение + + + + Comment + Коментар + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + Дебит + + + + Transaction + Транзакция + + + + Inputs + + + + + Amount + Сума + + + + true + true + + + + false + false + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + неизвестен + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Транзакция + + + + This pane shows a detailed description of the transaction + Описание на транзакцията + + + + TransactionTableModel + + + Date + Дата + + + + Type + Тип + + + + Address + Адрес + + + + Note + + + + + Amount + Сума + + + + Open for %n more block(s) + + + + + Open until %1 + Подлежи на промяна до %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Потвърдени (%1 потвърждения) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Състояние на транзакцията. Задръжте върху това поле за брой потвърждения. + + + + Date and time that the transaction was received. + Дата и час на получаване. + + + + Type of transaction. + Тип на транзакцията. + + + + Destination address of transaction. + Получател на транзакцията. + + + + Amount removed from or added to balance. + Сума извадена или добавена към баланса. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_bs.ts b/src/qt/locale/alias_bs.ts new file mode 100644 index 0000000000..294ca8d586 --- /dev/null +++ b/src/qt/locale/alias_bs.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + + + + + Address + + + + + pubkey + + + + + stealth + + + + + (no label) + + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + + + + + New passphrase + + + + + Repeat new passphrase + + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + + Encrypt wallet + + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + + Unlock wallet + + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + + Decrypt wallet + + + + + Change passphrase + + + + + Enter the old and new passphrase to the wallet. + + + + + Confirm wallet encryption + + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + + The supplied passphrases do not match. + + + + + Wallet unlock failed + + + + + + + The passphrase entered for the wallet decryption was incorrect. + + + + + Wallet decryption failed + + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + + + + + Label + + + + + Address + + + + + Date + + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + + + + + Type + + + + + Address + + + + + Note + + + + + Amount + + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_ca.ts b/src/qt/locale/alias_ca.ts new file mode 100644 index 0000000000..65cbe8fb44 --- /dev/null +++ b/src/qt/locale/alias_ca.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Etiqueta + + + + Address + Adreça + + + + pubkey + + + + + stealth + + + + + (no label) + (sense etiqueta) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + Introduïu la frase-contrasenya + + + + New passphrase + Nova frase-contrasenya + + + + Repeat new passphrase + Repetiu la nova frase-contrasenya + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Introduïu la nova frase-contrasenya per a la cartera.<br/>Empreu una frase-contrasenya de <b>10 o més caràcters aleatoris<b/>, o <b>vuit o més paraules<b/>. + + + + Encrypt wallet + Encriptar cartera + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Cal que introduïu la frase-contrasenya de la cartera per a desbloquejar-la. + + + + Unlock wallet + Desbloquejar cartera + + + + This operation needs your wallet passphrase to decrypt the wallet. + Cal que introduïu la frase-contrasenya de la cartera per a desencriptar-la. + + + + Decrypt wallet + Desencriptar cartera + + + + Change passphrase + Canviar frase-contrasenya + + + + Enter the old and new passphrase to the wallet. + Introduïu l'antiga i la nova frase-contrasenya per a la cartera. + + + + Confirm wallet encryption + Confirmeu l'encriptació de cartera + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + Cartera encriptada + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + L'encriptació de cartera ha fallat + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + L'encriptació de cartera ha fallat degut a un error intern. La vostra cartera no ha estat encriptada. + + + + + The supplied passphrases do not match. + Les frases-contrasenya no concorden. + + + + Wallet unlock failed + El desbloqueig de cartera ha fallat + + + + + + The passphrase entered for the wallet decryption was incorrect. + La frase-contrasenya per a la desencriptació de cartera és incorrecta. + + + + Wallet decryption failed + La desencriptació de cartera ha fallat + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + + + + + Label + + + + + Address + Adreça + + + + Date + + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (sense etiqueta) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Editar adreça + + + + &Label + &Etiqueta + + + + The label associated with this address book entry + + + + + &Address + &Adreça + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + + + + + Type + + + + + Address + Adreça + + + + Note + + + + + Amount + + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_ca_ES.ts b/src/qt/locale/alias_ca_ES.ts new file mode 100644 index 0000000000..dc834ea157 --- /dev/null +++ b/src/qt/locale/alias_ca_ES.ts @@ -0,0 +1,4304 @@ + + + AboutDialog + + + About Alias + Sobre Alias + + + + <b>Alias</b> version + versió <b>Alias</b> + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Etiqueta + + + + Address + Adreça + + + + pubkey + + + + + stealth + + + + + (no label) + (sense etiqueta) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Dialeg de contrasenya + + + + Enter passphrase + Introdueix contrasenya + + + + New passphrase + Nova contrasenya + + + + Repeat new passphrase + Repeteix la nova contrasenya + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Serveix per desactivar l'enviament trivial de diners quan el compte del sistema operatiu ha estat compromès. No ofereix seguretat real. + + + + For staking only + Només per a fer "stake" + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Introdueixi la nova contrasenya al moneder<br/>Si us plau useu una contrasenya de <b>10 o més caracters aleatoris</b>, o <b>vuit o més paraules</b>. + + + + Encrypt wallet + Xifrar el moneder + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Aquesta operació requereix la seva contrasenya del moneder per a desbloquejar-lo. + + + + Unlock wallet + Desbloqueja el moneder + + + + This operation needs your wallet passphrase to decrypt the wallet. + Aquesta operació requereix la seva contrasenya del moneder per a desencriptar-lo. + + + + Decrypt wallet + Desencripta el moneder + + + + Change passphrase + Canviar la contrasenya + + + + Enter the old and new passphrase to the wallet. + Introdueixi tant l'antiga com la nova contrasenya de moneder. + + + + Confirm wallet encryption + Confirmar l'encriptació del moneder + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Avís: Si xifra el seu moneder i perd la contrasenya, podrà <b> PERDRE TOTES LES SEVES MONEDES </ b>! + + + + Are you sure you wish to encrypt your wallet? + Esteu segur que voleu encriptar el vostre moneder? + + + + + Wallet encrypted + Moneder encriptat + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias tancarà ara per acabar el procés de xifrat. Recordeu que l'encriptació del seu moneder no pot protegir completament les seves monedes de ser robades pel malware que pugui infectar al seu equip. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANT: Tota copia de seguretat que hagis realitzat hauria de ser reemplaçada pel, recentment generat, arxiu encriptat del moneder. + + + + + + + Wallet encryption failed + L'encriptació del moneder ha fallat + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + L'encriptació del moneder ha fallat per un error intern. El seu moneder no ha estat encriptat. + + + + + The supplied passphrases do not match. + La contrasenya introduïda no coincideix. + + + + Wallet unlock failed + El desbloqueig del moneder ha fallat + + + + + + The passphrase entered for the wallet decryption was incorrect. + La contrasenya introduïda per a desencriptar el moneder és incorrecte. + + + + Wallet decryption failed + La desencriptació del moneder ha fallat + + + + Wallet passphrase was successfully changed. + La contrasenya del moneder ha estat modificada correctament. + + + + + Warning: The Caps Lock key is on! + Advertència: Les lletres majúscules estàn activades! + + + + ClientModel + + + Network Alert + Alerta de xarxa + + + + CoinControlDialog + + + Coin Control + Opcions del control de monedes + + + + Quantity: + Quantitat: + + + + Bytes: + Bytes: + + + + Amount: + Quantitat: + + + + Priority: + Prioritat: + + + + Fee: + Quota: + + + + Low Output: + Sortida baixa: + + + + After Fee: + Quota posterior: + + + + Change: + Canvi: + + + + (un)select all + (de)seleccionar tot + + + + Tree mode + Mode arbre + + + + List mode + Mode llista + + + + Amount + Quantitat + + + + Label + Etiqueta + + + + Address + Adreça + + + + Date + Data + + + + Confirmations + Confirmacions + + + + Confirmed + Confirmat + + + + Priority + Prioritat + + + + Copy address + Copiar adreça + + + + Copy label + Copiar etiqueta + + + + + Copy amount + Copiar quantitat + + + + Copy transaction ID + Copiar ID de transacció + + + + Copy quantity + Copiar quantitat + + + + Copy fee + Copiar comisió + + + + Copy after fee + Copiar després de comisió + + + + Copy bytes + Copiar bytes + + + + Copy priority + Copiar prioritat + + + + Copy low output + Copiar sortida baixa + + + + Copy change + Copiar canvi + + + + highest + El més alt + + + + high + Alt + + + + medium-high + mig-alt + + + + medium + mig + + + + low-medium + baix-mig + + + + low + baix + + + + lowest + el més baix + + + + + DUST + POLS + + + + + yes + si + + + + + no + no + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Aquesta etiqueta es tornarà vermell, si la mida de la transacció és més gran que 10000 bytes. + +En aquest cas es requereix una comisió d'almenys el 1% per kb. + +Pot variar + / - 1 Byte per entrada. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Les operacions amb més prioritat entren mes facilment a un bloc. + +Aquesta etiqueta es torna vermella, si la prioritat és menor que "mitja". + +En aquest cas es requereix una comisió d'almenys el 1% per kb. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Aquesta etiqueta es torna vermella, si el canvi és menor que 1%. + +En aquest cas es requereix una comisió d'almenys 2%. + + + + + (no label) + (sense etiqueta) + + + + change from %1 (%2) + canvi desde %1 (%2) + + + + (change) + (canviar) + + + + EditAddressDialog + + + Edit Address + Editar Adreça + + + + &Label + &Etiqueta + + + + The label associated with this address book entry + L'etiqueta associada amb aquesta entrada de la llibreta d'adreces + + + + &Address + &Direcció + + + + The address associated with this address book entry. This can only be modified for sending addresses. + La direcció associada amb aquesta entrada de la llibreta d'adreces. Només pot ser modificada per a l'enviament d'adreces. + + + + &Stealth Address + + + + + New receiving address + Nova adreça de recepció. + + + + New sending address + Nova adreça d'enviament + + + + Edit receiving address + Editar adreces de recepció + + + + Edit sending address + Editar adreces d'enviament + + + + The entered address "%1" is not a valid Alias address. + La direcció introduïda "%1" no és una adreça Alias vàlida. + + + + The entered address "%1" is already in the address book. + L'adreça introduïda "%1" ja és present a la llibreta d'adreces. + + + + Could not unlock wallet. + No s'ha pogut desbloquejar el moneder. + + + + New key generation failed. + Ha fallat la generació d'una nova clau. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + versió + + + + Usage: + Ús: + + + + command-line options + Opcions de la línia d'ordres + + + + UI options + Opcions de IU + + + + Set language, for example "de_DE" (default: system locale) + Definir llenguatge, per exemple "de_DE" (per defecte: Preferències locals de sistema) + + + + Start minimized + Iniciar minimitzat + + + + Show splash screen on startup (default: 1) + Mostrar finestra de benvinguda a l'inici (per defecte: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informació + + + + Alias Core + + + + + Client name + Nom del client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Versió del client + + + + Using OpenSSL version + Utilitzant OpenSSL versió + + + + Using BerkeleyDB version + + + + + Build date + Data de compilació + + + + Startup time + &Temps d'inici + + + + Network + Xarxa + + + + Name + + + + + Number of connections + Nombre de connexions + + + + Block chain + Bloquejar cadena + + + + Current number of blocks + Nombre de blocs actuals + + + + Estimated total blocks + Total estimat de blocs + + + + Last block time + Últim temps de bloc + + + + Debug log file + Dietàri de depuració + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Obrir + + + + Command-line options + Opcions de la línia d'ordres + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + &Mostra + + + + &Console + &Consola + + + + Clear console + Netejar consola + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Utilitza les fletxes d'amunt i avall per navegar per l'històric, i <b>Ctrl-L<\b> per netejar la pantalla. + + + + Type <b>help</b> for an overview of available commands. + Escriu <b>help<\b> per a obtenir una llistat de les ordres disponibles. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Obert fins %1 + + + + conflicted + conflicte + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/sense confirmar + + + + %1 confirmations + %1 confrimacions + + + + Transaction ID + ID de transacció + + + + Block Hash + + + + + Status + Estat + + + + , has not been successfully broadcast yet + , encara no ha estat emès correctement + + + + , broadcast through %n node(s) + + + + + Date + Data + + + + Source + Font + + + + Generated + Generat + + + + + Credit + Crèdit + + + + matures in %n more block(s) + + + + + not accepted + no acceptat + + + + Transaction fee + Comissió de transacció + + + + Net amount + Quantitat neta + + + + Message + Missatge + + + + Comment + Comentar + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Informació de depuració + + + + Debit + Dèbit + + + + Transaction + Transacció + + + + Inputs + Entrades + + + + Amount + Quantitat + + + + true + cert + + + + false + fals + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + desconegut + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Detall de la transacció + + + + This pane shows a detailed description of the transaction + Aquest panell mostra una descripció detallada de la transacció + + + + TransactionTableModel + + + Date + Data + + + + Type + Tipus + + + + Address + Direcció + + + + Note + + + + + Amount + Quantitat + + + + Open for %n more block(s) + + + + + Open until %1 + Obert fins %1 + + + + Offline + Desconnectat + + + + Unconfirmed + Sense confirmar + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Confirmant (%1 de %2 confirmacions recomanat) + + + + Confirmed (%1 confirmations) + Confirmat (%1 confirmacions) + + + + Conflicted + Conflicte + + + + Immature (%1 confirmations, will be available after %2) + Immadurs (%1 confirmacions, estaran disponibles després de %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Estat de la transacció. Desplaça't per aquí sobre per mostrar el nombre de confirmacions. + + + + Date and time that the transaction was received. + Data i hora en que la transacció va ser rebuda. + + + + Type of transaction. + Tipus de transacció. + + + + Destination address of transaction. + Adreça del destinatari de la transacció. + + + + Amount removed from or added to balance. + Quantitat extreta o afegida del balanç. + + + + WalletModel + + + + Sending... + Enviant... + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_cs.ts b/src/qt/locale/alias_cs.ts new file mode 100644 index 0000000000..8578dd01ee --- /dev/null +++ b/src/qt/locale/alias_cs.ts @@ -0,0 +1,4294 @@ + + + AboutDialog + + + About Alias + O Aliascoinu + + + + <b>Alias</b> version + Verze <b>Aliascoinu</b> + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Označení + + + + Address + Adresa + + + + pubkey + + + + + stealth + + + + + (no label) + (bez označení) + + + + Stealth Address + + + + + n/a + neurčeno + + + + AskPassphraseDialog + + + Passphrase Dialog + Změna hesla + + + + Enter passphrase + Zadej platné heslo + + + + New passphrase + Zadej nové heslo + + + + Repeat new passphrase + Totéž heslo ještě jednou + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Zadej nové heslo k peněžence.<br/>Použij <b>alespoň 10 náhodných znaků</b> nebo <b>alespoň osm slov</b>. + + + + Encrypt wallet + Zašifruj peněženku + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + K provedení této operace musíš zadat heslo k peněžence, aby se mohla odemknout. + + + + Unlock wallet + Odemkni peněženku + + + + This operation needs your wallet passphrase to decrypt the wallet. + K provedení této operace musíš zadat heslo k peněžence, aby se mohla dešifrovat. + + + + Decrypt wallet + Dešifruj peněženku + + + + Change passphrase + Změň heslo + + + + Enter the old and new passphrase to the wallet. + Zadej staré a nové heslo k peněžence. + + + + Confirm wallet encryption + Potvrď zašifrování peněženky + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + Jsi si jistý, že chceš peněženku zašifrovat? + + + + + Wallet encrypted + Peněženka je zašifrována + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + DŮLEŽITÉ: Všechny předchozí zálohy peněženky by měly být nahrazeny nově vygenerovanou, zašifrovanou peněženkou. Z bezpečnostních důvodů budou předchozí zálohy nešifrované peněženky nepoužitelné, jakmile začneš používat novou zašifrovanou peněženku. + + + + + + + Wallet encryption failed + Zašifrování peněženky selhalo + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Zašifrování peněženky selhalo kvůli vnitřní chybě. Tvá peněženka tedy nebyla zašifrována. + + + + + The supplied passphrases do not match. + Zadaná hesla nejsou shodná. + + + + Wallet unlock failed + Odemčení peněženky selhalo + + + + + + The passphrase entered for the wallet decryption was incorrect. + Nezadal jsi správné heslo pro dešifrování peněženky. + + + + Wallet decryption failed + Dešifrování peněženky selhalo + + + + Wallet passphrase was successfully changed. + Heslo k peněžence bylo v pořádku změněno. + + + + + Warning: The Caps Lock key is on! + Upozornění: Caps Lock je zapnutý! + + + + ClientModel + + + Network Alert + Upozornění sítě + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Částka: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Částka + + + + Label + + + + + Address + Adresa + + + + Date + Datum + + + + Confirmations + + + + + Confirmed + Potvrzeno + + + + Priority + Priorita + + + + Copy address + Kopírovat sdresu + + + + Copy label + Kopírovat popis + + + + + Copy amount + Kopíruj částku + + + + Copy transaction ID + Kopíruj ID transakce + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + nejvyšší + + + + high + vysoký + + + + medium-high + středně vysoký + + + + medium + střední + + + + low-medium + + + + + low + nízký + + + + lowest + nejnižší + + + + + DUST + + + + + + yes + ano + + + + + no + ne + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (bez popisu) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Uprav adresu + + + + &Label + &Označení + + + + The label associated with this address book entry + + + + + &Address + &Adresa + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Nová přijímací adresa + + + + New sending address + Nová odesílací adresa + + + + Edit receiving address + Uprav přijímací adresu + + + + Edit sending address + Uprav odesílací adresu + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Zadaná adresa "%1" už v adresáři je. + + + + Could not unlock wallet. + Nemohu odemknout peněženku. + + + + New key generation failed. + Nepodařilo se mi vygenerovat nový klíč. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + Chyba + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + verze + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + Importovat wallet.dat + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + Chyba + + + + Failed to copy wallet.dat: %1 + Nelze zkopírovat wallet.dat: %1 + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + Chyba + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informace + + + + Alias Core + + + + + Client name + Název klienta + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Verze klienta + + + + Using OpenSSL version + Používaná verze OpenSSL + + + + Using BerkeleyDB version + + + + + Build date + Datum kompilace + + + + Startup time + Čas spuštění + + + + Network + Síť + + + + Name + Jméno + + + + Number of connections + Počet spojení + + + + Block chain + Řetězec bloků + + + + Current number of blocks + Aktuální počet bloků + + + + Estimated total blocks + Odhad celkového počtu bloků + + + + Last block time + Čas posledního bloku + + + + Debug log file + Soubor s ladicími záznamy + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Otevřít + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Konzole + + + + Clear console + Vyčistit konzoli + + + + &Network Traffic + + + + + &Clear + + + + + Totals + Celkem + + + + + In: + Vstup: + + + + + Out: + Výstup: + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + Směr + + + + Version + Verze + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + V historii se pohybuješ šipkami nahoru a dolů a pomocí <b>Ctrl-L</b> čistíš obrazovku. + + + + Type <b>help</b> for an overview of available commands. + Napsáním <b>help</b> si vypíšeš přehled dostupných příkazů. + + + + via %1 + + + + + + never + nikdy + + + + Inbound + Příchozí + + + + Outbound + Odchozí + + + + Unknown + Neznámý + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + Chyba + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + výchozí + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + Chyba: + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + a + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + Chyba: Nelze vytvořit transakci. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Otřevřeno dokud %1 + + + + conflicted + + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/nepotvrzeno + + + + %1 confirmations + %1 potvrzení + + + + Transaction ID + ID transakce + + + + Block Hash + + + + + Status + Stav + + + + , has not been successfully broadcast yet + , ještě nebylo rozesláno + + + + , broadcast through %n node(s) + + + + + Date + Datum + + + + Source + Zdroj + + + + Generated + Vygenerováno + + + + + Credit + Příjem + + + + matures in %n more block(s) + + + + + not accepted + neakceptováno + + + + Transaction fee + Transakční poplatek + + + + Net amount + Čistá částka + + + + Message + Zpráva + + + + Comment + Komentář + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Ladicí informace + + + + Debit + Výdaj + + + + Transaction + Transakce + + + + Inputs + Vstupy + + + + Amount + Částka + + + + true + true + + + + false + false + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + neznámo + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Detaily transakce + + + + This pane shows a detailed description of the transaction + Toto okno zobrazuje detailní popis transakce + + + + TransactionTableModel + + + Date + Datum + + + + Type + Typ + + + + Address + Adresa + + + + Note + + + + + Amount + Částka + + + + Open for %n more block(s) + + + + + Open until %1 + Otřevřeno dokud %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Potvrzeno (%1 potvrzení) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Stav transakce. Najetím myši na toto políčko si zobrazíš počet potvrzení. + + + + Date and time that the transaction was received. + Datum a čas přijetí transakce. + + + + Type of transaction. + Druh transakce. + + + + Destination address of transaction. + Cílová adresa transakce. + + + + Amount removed from or added to balance. + Částka odečtená z nebo přičtená k účtu. + + + + WalletModel + + + + Sending... + + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_cy.ts b/src/qt/locale/alias_cy.ts new file mode 100644 index 0000000000..cc3df8306f --- /dev/null +++ b/src/qt/locale/alias_cy.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Label + + + + Address + Cyfeiriad + + + + pubkey + + + + + stealth + + + + + (no label) + (heb label) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + Teipiwch gyfrinymadrodd + + + + New passphrase + Cyfrinymadrodd newydd + + + + Repeat new passphrase + Ailadroddwch gyfrinymadrodd newydd + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Dewiswch gyfrinymadrodd newydd ar gyfer y waled. <br/> Defnyddiwch cyfrinymadrodd o <b>10 neu fwy o lythyrennau hapgyrch</b>, neu <b> wyth neu fwy o eiriau. + + + + Encrypt wallet + Amgryptio'r waled + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Mae angen i'r gweithred hon ddefnyddio'ch cyfrinymadrodd er mwyn datgloi'r waled. + + + + Unlock wallet + Datgloi'r waled + + + + This operation needs your wallet passphrase to decrypt the wallet. + Mae angen i'r gweithred hon ddefnyddio'ch cyfrinymadrodd er mwyn dadgryptio'r waled. + + + + Decrypt wallet + Dadgryptio'r waled + + + + Change passphrase + Newid cyfrinymadrodd + + + + Enter the old and new passphrase to the wallet. + Teipiwch yr hen cyfrinymadrodd a chyfrinymadrodd newydd i mewn i'r waled. + + + + Confirm wallet encryption + Cadarnau amgryptiad y waled + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + Waled wedi'i amgryptio + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + Amgryptiad waled wedi methu + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Methodd amgryptiad y waled oherwydd gwall mewnol. Ni amgryptwyd eich waled. + + + + + The supplied passphrases do not match. + Dydy'r cyfrinymadroddion a ddarparwyd ddim yn cyd-fynd â'u gilydd. + + + + Wallet unlock failed + Methodd ddatgloi'r waled + + + + + + The passphrase entered for the wallet decryption was incorrect. + + + + + Wallet decryption failed + Methodd dadgryptiad y waled + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + + + + + Label + + + + + Address + Cyfeiriad + + + + Date + Dyddiad + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (heb label) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Golygu'r cyfeiriad + + + + &Label + &Label + + + + The label associated with this address book entry + + + + + &Address + &Cyfeiriad + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Cyfeiriad derbyn newydd + + + + New sending address + Cyfeiriad anfon newydd + + + + Edit receiving address + Golygu'r cyfeiriad derbyn + + + + Edit sending address + Golygu'r cyfeiriad anfon + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Mae'r cyfeiriad "%1" sydd newydd gael ei geisio gennych yn y llyfr cyfeiriad yn barod. + + + + Could not unlock wallet. + Methodd ddatgloi'r waled. + + + + New key generation failed. + Methodd gynhyrchu allwedd newydd. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Agor tan %1 + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + Dyddiad + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + Neges + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + Dyddiad + + + + Type + Math + + + + Address + Cyfeiriad + + + + Note + + + + + Amount + + + + + Open for %n more block(s) + + + + + Open until %1 + Agor tan %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_da.ts b/src/qt/locale/alias_da.ts new file mode 100644 index 0000000000..09762b20f4 --- /dev/null +++ b/src/qt/locale/alias_da.ts @@ -0,0 +1,3996 @@ + + + AboutDialog + + + About Alias + Om Alias + + + + <b>Alias</b> version + <b>Alias</b> version + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Mærkat + + + + Address + Adresse + + + + pubkey + + + + + stealth + + + + + (no label) + (ingen mærkat) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Adgangskodedialog + + + + Enter passphrase + Indtast adgangskode + + + + New passphrase + Ny adgangskode + + + + Repeat new passphrase + Gentag ny adgangskode + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Deaktivere trivielle sendmoney når OS konto er kompromitteret. Giver ingen reel sikkerhed. + + + + For staking only + Kun til renteberegning + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Indtast den nye adgangskode til tegnebogen.<br/>Brug venligst en adgangskode på <b>10 eller flere tilfældige tegn</b> eller <b>otte eller flere ord</b>. + + + + Encrypt wallet + Krypter tegnebog + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Denne funktion har brug for din tegnebogs adgangskode for at låse tegnebogen op. + + + + Unlock wallet + Lås tegnebog op + + + + This operation needs your wallet passphrase to decrypt the wallet. + Denne funktion har brug for din tegnebogs adgangskode for at dekryptere tegnebogen. + + + + Decrypt wallet + Dekrypter tegnebog + + + + Change passphrase + Skift adgangskode + + + + Enter the old and new passphrase to the wallet. + Indtast den gamle og den nye adgangskode til tegnebogen. + + + + Confirm wallet encryption + Bekræft tegnebogskryptering + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Advarsel: Hvis du krypterer din tegnebog og mister din adgangskode, vil du <b> miste alle dine mønter </ b>! + + + + Are you sure you wish to encrypt your wallet? + Er du sikker på, at du ønsker at kryptere din tegnebog? + + + + + Wallet encrypted + Tegnebog krypteret + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias lukker nu for at afslutte krypteringen. Husk at en krypteret tegnebog ikke fuldt ud beskytter dine mønter mod at blive stjålet af malware som har inficeret din computer. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + VIGTIGT: Enhver tidligere sikkerhedskopi, som du har lavet af tegnebogsfilen, bør blive erstattet af den nyligt genererede, krypterede tegnebogsfil. Af sikkerhedsmæssige årsager vil tidligere sikkerhedskopier af den ikke-krypterede tegnebogsfil blive ubrugelig i det øjeblik, du starter med at anvende den nye, krypterede tegnebog. + + + + + + + Wallet encryption failed + Tegnebogskryptering mislykkedes + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Tegnebogskryptering mislykkedes på grund af en intern fejl. Din tegnebog blev ikke krypteret. + + + + + The supplied passphrases do not match. + De angivne adgangskoder stemmer ikke overens. + + + + Wallet unlock failed + Tegnebogsoplåsning mislykkedes + + + + + + The passphrase entered for the wallet decryption was incorrect. + Den angivne adgangskode for tegnebogsdekrypteringen er forkert. + + + + Wallet decryption failed + Tegnebogsdekryptering mislykkedes + + + + Wallet passphrase was successfully changed. + Tegnebogens adgangskode blev ændret. + + + + + Warning: The Caps Lock key is on! + Advarsel: Caps Lock-tasten er aktiveret! + + + + ClientModel + + + Network Alert + Netværksadvarsel + + + + CoinControlDialog + + + Coin Control + Mønt Kontrol + + + + Quantity: + Antal: + + + + Bytes: + Bytes: + + + + Amount: + Beløb: + + + + Priority: + Prioritet: + + + + Fee: + Gebyr: + + + + Low Output: + Lav Udgangseffekt: + + + + After Fee: + Efter Gebyr: + + + + Change: + Ændre: + + + + (un)select all + (fra)vælg alle + + + + Tree mode + Træ tilstand + + + + List mode + Liste tilstand + + + + Amount + Beløb + + + + Label + Mærkat + + + + Address + Adresse + + + + Date + Dato + + + + Confirmations + Bekræftelser + + + + Confirmed + Bekræftet + + + + Priority + Prioritet + + + + Copy address + Kopier adresse + + + + Copy label + Kopier mærkat + + + + + Copy amount + Kopier beløb + + + + Copy transaction ID + Kopier transaktionens ID + + + + Copy quantity + Kopier antal + + + + Copy fee + Kopier transkationsgebyr + + + + Copy after fee + Kopier efter transkationsgebyr + + + + Copy bytes + Kopier bytes + + + + Copy priority + Kopier prioritet + + + + Copy low output + Lav udgangseffekt + + + + Copy change + Kopier ændring + + + + highest + højeste + + + + high + høj + + + + medium-high + medium-høj + + + + medium + medium + + + + low-medium + lav-medium + + + + low + lav + + + + lowest + lavest + + + + + DUST + DUST + + + + + yes + ja + + + + + no + nej + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Denne etiket bliver rød, hvis transaktionen størrelse er større end 10000 byte. + +Det betyder, at et gebyr på mindst %1 per kb er påkrævet. + +Kan variere + / - 1 byte per indgang. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Transaktioner med højere prioritet får mere sandsynligt en blok. + +Denne etiket bliver rød, hvis prioritet er mindre end "medium". + +Det betyder, at et gebyr på mindst %1 per kb er påkrævet. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Denne etiket bliver rød, hvis nogen modtager et beløb, der er mindre end %1. + +Det betyder, at et gebyr på mindst %2 er påkrævet. + +Beløb under 0,546 gange det minimale gebyr er vist som DUST. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Denne etiket bliver rød, hvis ændringen er mindre end %1. + +Det betyder, at et gebyr på mindst %2 er påkrævet. + + + + + (no label) + (ingen mærkat) + + + + change from %1 (%2) + skift fra %1 (%2) + + + + (change) + (skift) + + + + EditAddressDialog + + + Edit Address + Rediger adresse + + + + &Label + Mærkat + + + + The label associated with this address book entry + Etiketten er forbundet med denne post i adressekartoteket + + + + &Address + Adresse + + + + The address associated with this address book entry. This can only be modified for sending addresses. + Adressen er forbundet med denne post i adressekartoteket. Dette kan kun ændres til sende adresser. + + + + &Stealth Address + + + + + New receiving address + Ny modtagelsesadresse + + + + New sending address + Ny afsendelsesadresse + + + + Edit receiving address + Rediger modtagelsesadresse + + + + Edit sending address + Rediger afsendelsesadresse + + + + The entered address "%1" is not a valid Alias address. + Den indtastede adresse "%1" er ikke en gyldig Alias adresse. + + + + The entered address "%1" is already in the address book. + Den indtastede adresse "%1" er allerede i adressebogen. + + + + Could not unlock wallet. + Kunne ikke låse tegnebog op. + + + + New key generation failed. + Ny nøglegenerering mislykkedes. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + version + + + + Usage: + Anvendelse: + + + + command-line options + Kommandolinjeparametrene + + + + UI options + UI opsætning + + + + Set language, for example "de_DE" (default: system locale) + Indstil sprog, for eksempel "de_DE" (standard: system locale) + + + + Start minimized + Start minimeret + + + + Show splash screen on startup (default: 1) + Vis splash skærm ved opstart (default: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + Information + + + + Alias Core + + + + + Client name + Klientnavn + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Klientversion + + + + Using OpenSSL version + Anvender OpenSSL-version + + + + Using BerkeleyDB version + + + + + Build date + Byggedato + + + + Startup time + Opstartstid + + + + Network + Netværk + + + + Name + + + + + Number of connections + Antal forbindelser + + + + Block chain + Blokkæde + + + + Current number of blocks + Nuværende antal blokke + + + + Estimated total blocks + Estimeret antal blokke + + + + Last block time + Tidsstempel for seneste blok + + + + Debug log file + Fejlsøgningslogfil + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + Åbn + + + + Command-line options + Kommandolinjeparametrene + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + &Vis + + + + &Console + Konsol + + + + Clear console + Ryd konsol + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Brug op og ned-piletasterne til at navigere historikken og <b>Ctrl-L</b> til at rydde skærmen. + + + + Type <b>help</b> for an overview of available commands. + Tast <b>help</b> for en oversigt over de tilgængelige kommandoer. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Åben indtil %1 + + + + conflicted + konflikt + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/ubekræftet + + + + %1 confirmations + %1 bekræftelser + + + + Transaction ID + Transaktionens ID + + + + Block Hash + + + + + Status + Status + + + + , has not been successfully broadcast yet + , er ikke blevet transmitteret endnu + + + + , broadcast through %n node(s) + + + + + Date + Dato + + + + Source + Kilde + + + + Generated + Genereret + + + + + Credit + Kredit + + + + matures in %n more block(s) + + + + + not accepted + ikke accepteret + + + + Transaction fee + Transaktionsgebyr + + + + Net amount + Nettobeløb + + + + Message + Besked + + + + Comment + Kommentar + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Fejlsøgningsinformation + + + + Debit + Debet + + + + Transaction + Transaktion + + + + Inputs + Input + + + + Amount + Beløb + + + + true + sand + + + + false + falsk + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + ukendt + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Transaktionsdetaljer + + + + This pane shows a detailed description of the transaction + Denne rude viser en detaljeret beskrivelse af transaktionen + + + + TransactionTableModel + + + Date + Dato + + + + Type + Type + + + + Address + Adresse + + + + Note + + + + + Amount + Beløb + + + + Open for %n more block(s) + + + + + Open until %1 + Åben indtil %1 + + + + Offline + Offline + + + + Unconfirmed + Ubekræftede + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Bekræftelse (% 1 af% 2 anbefalede bekræftelser) + + + + Confirmed (%1 confirmations) + Bekræftet (%1 bekræftelser) + + + + Conflicted + Konflikt + + + + Immature (%1 confirmations, will be available after %2) + Umodne (% 1 bekræftelser, vil være tilgængelige efter% 2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Transaktionsstatus. Hold musen over dette felt for at vise antallet af bekræftelser. + + + + Date and time that the transaction was received. + Dato og klokkeslæt for modtagelse af transaktionen. + + + + Type of transaction. + Transaktionstype. + + + + Destination address of transaction. + Destinationsadresse for transaktion. + + + + Amount removed from or added to balance. + Beløb fjernet eller tilføjet balance. + + + + WalletModel + + + + Sending... + Sender... + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_de.ts b/src/qt/locale/alias_de.ts new file mode 100644 index 0000000000..eeb2e24dd9 --- /dev/null +++ b/src/qt/locale/alias_de.ts @@ -0,0 +1,4320 @@ + + + AboutDialog + + + About Alias + Über Alias + + + + <b>Alias</b> version + <b>Alias</b> Version + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + AddressTableModel + + + Label + Bezeichnung + + + + Address + Adresse + + + + pubkey + öffentlicher Schlüssel + + + + stealth + Stealth + + + + (no label) + (keine Bezeichnung) + + + + Stealth Address + Stealth Adresse + + + + n/a + n/a + + + + AskPassphraseDialog + + + Passphrase Dialog + Passphrase Dialog + + + + Enter passphrase + Passphrase eingeben + + + + New passphrase + Neue Passphrase + + + + Repeat new passphrase + Neue Passphrase bestätigen + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Schaltet die Zahlungsfunktion ab, wenn der Betriebssystemaccount kompromittiert wurde. Bietet aber keine wirkliche Sicherheit. + + + + For staking only + Anteil der im Netz reift und nur Zinsen kreiert. + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Geben Sie die neue Passphrase für die Wallet ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>10 oder mehr zufälligen Zeichen</b> oder <b>8 oder mehr Wörtern</b>. + + + + Encrypt wallet + Wallet verschlüsseln + + + + Keep wallet unlocked for staking. + Wallet ausschliesslich zum staken entsperrt lassen. + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + Ihr Wallet enthält gesperrte ATXOs, für welche der Ausgegeben-Status nur mit Ihrem privaten Schlüssel ermittelt werden kann. <b>Ihr angezeigtes Guthaben kann daher falsch sein</b>. + + + + <b>Alias Wallet Login</b> + <b>Alias Wallet Login</b> + + + + This operation needs your wallet passphrase to unlock the wallet. + Dieser Vorgang benötigt ihre Passphrase, um das Wallet zu entsperren. + + + + Unlock wallet + Wallet entsperren + + + + This operation needs your wallet passphrase to decrypt the wallet. + Dieser Vorgang benötigt ihre Passphrase, um das Wallet zu entschlüsseln. + + + + Decrypt wallet + Wallet entschlüsseln + + + + Change passphrase + Passphrase ändern + + + + Enter the old and new passphrase to the wallet. + Geben Sie bitte die alte und neue Wallet-Passphrase ein. + + + + Confirm wallet encryption + Wallet-Verschlüsselung bestätigen + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Warnung: wenn sie ihr Wallet verschlüsseln und ihre Passphrase verlieren, werden sie auch alle Münzen verlieren. + + + + Are you sure you wish to encrypt your wallet? + Sind Sie sich sicher, dass Sie ihre Wallet verschlüsseln möchten? + + + + + Wallet encrypted + Wallet verschlüsselt + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias schließt sich jetzt um die Verschlüsselung abzuschließen. Merke: Dass ein verschlüsseltes Wallet nicht absolut vor Diebstahl, durch Computer Malware, geschützt ist. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + WICHTIG: Alle vorherigen Wallet-Sicherungen sollten durch die neu erzeugte, verschlüsselte Wallet ersetzt werden. Aus Sicherheitsgründen werden vorherige Sicherungen der unverschlüsselten Wallet nutzlos, sobald Sie die neue, verschlüsselte Wallet verwenden. + + + + + + + Wallet encryption failed + Wallet-Verschlüsselung fehlgeschlagen + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Die Wallet-Verschlüsselung ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Wallet wurde nicht verschlüsselt. + + + + + The supplied passphrases do not match. + Die eingegebenen Passphrasen stimmen nicht überein. + + + + Wallet unlock failed + Wallet-Entsperrung fehlgeschlagen + + + + + + The passphrase entered for the wallet decryption was incorrect. + Die eingegebene Passphrase zur Wallet-Entschlüsselung war nicht korrekt. + + + + Wallet decryption failed + Wallet-Entschlüsselung fehlgeschlagen + + + + Wallet passphrase was successfully changed. + Die Wallet-Passphrase wurde erfolgreich geändert. + + + + + Warning: The Caps Lock key is on! + Warnung: Die Feststelltaste ist aktiviert! + + + + ClientModel + + + Network Alert + Netzwerkalarm + + + + CoinControlDialog + + + Coin Control + Coin-Details + + + + Quantity: + Anzahl: + + + + Bytes: + Byte: + + + + Amount: + Betrag: + + + + Priority: + Priorität: + + + + Fee: + Gebühr: + + + + Low Output: + Zu geringer Ausgabebetrag: + + + + After Fee: + Abzüglich Gebühr: + + + + Change: + Wechselgeld: + + + + (un)select all + Alles (de)selektieren + + + + Tree mode + Baumansicht + + + + List mode + Listenansicht + + + + Amount + Betrag + + + + Label + Bezeichnung + + + + Address + Adresse + + + + Date + Datum + + + + Confirmations + Bestätigungen + + + + Confirmed + Bestätigt + + + + Priority + Priorität + + + + Copy address + Adresse kopieren + + + + Copy label + Bezeichnung kopieren + + + + + Copy amount + Betrag kopieren + + + + Copy transaction ID + Transaktions-ID kopieren + + + + Copy quantity + Anzahl kopieren + + + + Copy fee + Gebühr kopieren + + + + Copy after fee + Abzüglich Gebühr kopieren + + + + Copy bytes + Byte kopieren + + + + Copy priority + Priorität kopieren + + + + Copy low output + Zu geringen Ausgabebetrag kopieren + + + + Copy change + Wechselgeld kopieren + + + + highest + am höchsten + + + + high + hoch + + + + medium-high + mittel-hoch + + + + medium + mittel + + + + low-medium + niedrig-mittel + + + + low + niedrig + + + + lowest + am niedrigsten + + + + + DUST + STAUB + + + + + yes + ja + + + + + no + nein + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Diese Bezeichnung wird rot, wenn die Transaktion größer als 10000 Bytes ist. + +Dies bedeutet eine Gebühr von min. %1 per kb ist benötigt. + +Kann je nach +/- 1 Byte per Eingabe variieren. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Transaktionen mit höherer Priorität gehen schneller in einen Block. + +Diese Bezeichnung wird rot, sobald die Priorität niedriger ist als Mittel. + +Dies bedeutet eine Gebühr von min. %1 per kb ist benötigt. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Diese Bezeichnung wird rot, wenn der empfangene Wert kleiner als %1 ist. + +Dies bedeutet eine Gebühr von min. %2 ist benötigt. + +Werte unter 0.546 mal der minimalen Gebühr werden als Staub angezeigt. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Diese Bezeichnung wird rot, wenn die Änderung ist kleiner als %1 + +Dies bedeutet eine Gebühr von min %2 ist benötigt + + + + + (no label) + (keine Bezeichnung) + + + + change from %1 (%2) + Wechselgeld von %1 (%2) + + + + (change) + (Wechselgeld) + + + + EditAddressDialog + + + Edit Address + Adresse bearbeiten + + + + &Label + &Bezeichnung + + + + The label associated with this address book entry + Die Kennzeichnung verbunden mit diesem Adressbucheintrag. + + + + &Address + &Adresse + + + + The address associated with this address book entry. This can only be modified for sending addresses. + Die Adresse verknüpft mit diesem Adressbucheintrag. Kann nur bei Ausgangsadressen verändert werden. + + + + &Stealth Address + Stealth Adresse + + + + New receiving address + Neue Empfangsadresse + + + + New sending address + Neue Zahlungsadresse + + + + Edit receiving address + Empfangsadresse bearbeiten + + + + Edit sending address + Zahlungsadresse bearbeiten + + + + The entered address "%1" is not a valid Alias address. + Die eingegebene Adresse "%1" ist keine gültige Alias Adresse. + + + + The entered address "%1" is already in the address book. + Die eingegebene Adresse "%1" befindet sich bereits im Adressbuch. + + + + Could not unlock wallet. + Wallet konnte nicht entsperrt werden. + + + + New key generation failed. + Generierung eines neuen Schlüssels fehlgeschlagen. + + + + EncryptWalletPage + + + Wallet Encryption + Verschlüsselung + + + + Please enter a password to encrypt the wallet.dat file. + Bitte geben Sie ein Passwort ein, um die Datei wallet.dat zu verschlüsseln. + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + Das Passwort schützt ihre privaten Schlüssel und wird beim Start sowie bei kritischen Operationen abgefragt. + + + + &Wallet Password: + &Wallet-Passwort: + + + + &Verify Password: + &Passwort überprüfen: + + + + Create and encrypt wallet.dat ... + wallet.dat anlegen und verschlüsseln... + + + + Error + Fehler + + + + Failed to create wallet.dat. ErrorCode: %1 + Erzeugen des wallet.dat fehlgeschlagen. Fehlercode %1 + + + + GUIUtil::HelpMessageBox + + + + Alias + Alias + + + + version + version + + + + Usage: + Benutzung: + + + + command-line options + Kommandozeilen optionen + + + + UI options + Interface Optionen + + + + Set language, for example "de_DE" (default: system locale) + Sprache einstellen, zum Beispiel "de_DE" (default: system locale) + + + + Start minimized + Minimiert starten + + + + Show splash screen on startup (default: 1) + Zeige Splash Screen beim starten (default: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + Datei wallet.dat importieren + + + + Please import a wallet.dat file with your private keys. + Bitte importieren Sie die Datei wallet.dat, welche Ihre privaten Schlüssel enthält. + + + + &Select wallet.dat + &wallet.dat auswählen + + + + QFileDialog::getOpenFileName() + QFileDialog::getOpenFileName() + + + + Wallet Files (*.dat) + Wallet-Dateien (*.dat) + + + + Error + Fehler + + + + Failed to copy wallet.dat: %1 + Fehler beim kopieren von wallet.dat: %1 + + + + IntroPage + + + Set Up Your Wallet + Persönliches Wallet einrichten + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + Es wurde festgestellt, dass kein wallet.dat existiert, welches Ihre privaten Schlüssel enthält. Bitte wählen Sie, wie Sie weiter verfahren möchten, um Ihre privaten Schlüssel zu erzeugen oder wiederherzustellen. + + + + &Create new mnemonic recovery seed words + &Neue Mnemonic Seed Words erzeugen + + + + &Recover from your existing mnemonic seed words + &Wallet aus vorhandenen Mnemonic Seed Words wiederherstellen + + + + &Import wallet.dat file + &Vorhandene wallet.dat Datei importieren + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + Private Schlüssel mit Mnemonic Seed Words wiederherstellen + + + + Step 2/3: Write down your mnemonic recovery seed words. + Schritt 2/3: Mnemonic Seed Words niederschreiben. + + + + Mnemonic Recovery Seed Words: + Mnemonic Seed Words zur Wiederherstellung: + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + Sie benötigen ihre Mnemonic Seed Words zur Wiederherstellung dieses Wallets. Schreiben Sie sie auf und verwahren sie an einem sicheren Ort.<br>Im nächsten Schritt werden Sie dazu aufgefordert, die Seed Words zu bestätigen. Damit wird sichergestellt, dass Sie sie korrekt notiert haben. + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + Private Schlüssel mit Mnemonic Seed Words erzeugen + + + + Step 1/3: Please define language to use and optional password to protect your seed. + Schritt 1/3: Bitte wählen Sie die zu verwendende Sprache aus und geben Sie (optional) ein Passwort für die Seed Words ein. + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + Die Erzeugung der Mnemonic Seed Words ist ein dreistufiger Vorgang:<ol><li>Festlegen der zu verwendenden Sprache und Eingabe eines optionalen Passwortes.</li><li>Niederschreiben der erzeugten Seed Words.</li><li>Überprüfen der Seed Words sowie des Passwortes.</li></ol> + + + + &Language: + &Sprache: + + + + &Seed Password: + &Seed-Passwort: + + + + &Verify Password: + &Passwort überprüfen + + + + Error + Fehler + + + + Failed to create Mnemonic Seed Words. %1 + Fehler bei der Generierung der Mnemonic Seed Words. %1 + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + Erzeuge private Schlüssel mit Mnemonic Seed Words + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + Schritt 3/3: Prüfen, ob Sie die korrekten Seed Words sowie das (optionale) Passwort notiert haben. + + + + &Seed Password: + &Seed-Passwort: + + + + <br>Enter Mnemonic Seed Words: + <br>Mnemonic Seed Words eingeben: + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + Fenster konnte nicht gestartet werden: click-to-pay handler + + + + PeerTableModel + + + Address/Hostname + Adresse/Hostnamen + + + + User Agent + Benutzer Agent + + + + Ping Time + Ping Zeit + + + + QObject + + + %1 d + %1 Tag + + + + %1 h + %1 Std. + + + + %1 m + %1 Min. + + + + + %1 s + %1 Sek. + + + + None + Keine + + + + N/A + N/A + + + + %1 ms + %1 ms + + + + RPCConsole + + + Alias - Debug window + Alias Debug Fenster + + + + &Information + &Information + + + + Alias Core + Alias Core + + + + Client name + Clientname + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + k.A. + + + + Client version + Clientversion + + + + Using OpenSSL version + Verwendete OpenSSL-Version + + + + Using BerkeleyDB version + Verwendete BerkeleyDB Version + + + + Build date + Erstellungsdatum + + + + Startup time + Startzeit + + + + Network + Netzwerk + + + + Name + Name + + + + Number of connections + Anzahl Verbindungen + + + + Block chain + Block kette + + + + Current number of blocks + Aktuelle Anzahl Blöcke + + + + Estimated total blocks + Geschätzte Gesamtzahl Blöcke + + + + Last block time + Letzte Blockzeit + + + + Debug log file + Debugprotokolldatei + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + Öffne die Alias Debug Datei vom derzeitigen Ordner Pfad. Dies kann ein paar Sekunden für eine größere Datei sein. + + + + &Open + &Öffnen + + + + Command-line options + Kommandozeilen Optionen: + + + + Show the Alias help message to get a list with possible Alias command-line options. + Zeige eine Hilfe Liste für Alias an, um Terminal befehle zu erhalten. + + + + &Show + &Zeigen + + + + &Console + &Konsole + + + + Clear console + Konsole zurücksetzen + + + + &Network Traffic + & Netzwerk Traffic + + + + &Clear + &Leeren + + + + Totals + Total + + + + + In: + In: + + + + + Out: + Out: + + + + &Peers + &Nutzer + + + + + + Select a peer to view detailed information. + Einen Nutzer auswählen um detaillierte Informationen zu sehen. + + + + Peer ID + Nutzer ID + + + + Direction + Richtung + + + + Version + Version + + + + User Agent + Nutzer Agent + + + + Services + Dienste + + + + Starting Height + Starthöhe + + + + Sync Height + Sync Höhe + + + + Ban Score + Verbiete Score + + + + Connection Time + Verbindungszeit + + + + Last Send + Zuletzt gesendet + + + + Last Receive + Zuletzt Empfangen + + + + Bytes Sent + Bytes gesendet + + + + Bytes Received + Bytes Empfangen + + + + Ping Time + Ping + + + + Time Offset + Versetzte Zeit + + + + Welcome to the Alias Core RPC console. + Willkommen zur Alias Core RPC Konsole + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Pfeiltaste hoch und runter, um den Verlauf durchzublättern und <b>Strg-L</b>, um die Konsole zurückzusetzen. + + + + Type <b>help</b> for an overview of available commands. + Bitte <b>help</b> eingeben, um eine Übersicht verfügbarer Befehle zu erhalten. + + + + via %1 + mit %1 + + + + + never + Niemals + + + + Inbound + Eingehend + + + + Outbound + Ausgehend + + + + Unknown + Unbekannt + + + + + Fetching... + Holen... + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + Private Schlüssel aus Mnemonic Seed Words wiederherstellen + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + Bitte geben Sie das (optionale) Passwort und Ihre Mnemonic Seed Words ein, um die privaten Schlüssel wiederherzustellen. + + + + &Seed Password: + &Seed-Passwort: + + + + &Verify Password: + &Passwort überprüfen: + + + + <br>Enter Mnemonic Seed Words: + <br>Bitte Mnemonic Seed Words eingeben: + + + + Error + Fehler + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + Fehler bei der Wiederherstellung der privaten Schlüssel aus den Mnemonic Seed Words. %1 + + + + SetupWalletWizard + + + Alias Wallet Setup + Alias Wallet Einrichtung + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + Die Datei 'wallet.dat', welche Ihre privaten Schlüssel enthält, wurde beim Wallet-Start nicht gefunden und muss daher angelegt werden. <br><br>Ein privater Schlüssel besteht aus alphanumerischen Zeichen, welche dem Benutzer Zugriff auf und Kontrolle über das Guthaben in der entsprechenden Kryptowährung geben. In anderen Worten: Mit dem privaten Schlüssel können einzigartige digitale Signaturen für jede Transaktion erstellt werden, womit der Benutzer befähigt wird, sein Guthaben zu verwalten und zugleich nachzuweisen, dass er der Besitzer dieses Guthabens ist. + + + + If you have a backup of a wallet.dat, you can import this file. + Wenn Sie ein Backup des 'wallet.dat' haben, können Sie es importieren. + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + Mnemonic Seed Words erlauben es, private Schlüssel initial zu generieren und später wiederherzustellen. Sie bestehen aus 24 Wörtern und einem optionalen Passwort (als 25. Wort), welche Sie geheimhalten müssen. + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + We wird empfohlen, mehrere Kopien der Seed Words anzulegen und diese an verschiedenen Orten aufzubewahren. <br><br><b>Achtung:</b>Seed Words können nicht später erstellt werden!<br>Wenn Sie die Seed Words verlieren und kein Backup des 'wallet.dat' haben, sind Ihre Coins verloren! + + + + Please enter the mnemonic words and password given on the previous screen. + Bitte geben Sie die Mnemonic Seed Words und das Passwort so ein, wie auf dem vorherigen Bildschirm gesehen. + + + + Please enter your mnemonic words and (optional) password. + Bitte geben Sie ihre Mnemonic Seed Words und das (optionale) Passwort ein. + + + + This help is likely not to be of any help. + Diese Hilfe ist nicht wirklich hilfreich... + + + + Alias Wallet Setup Help + Alias Wallet Einrichtung Hilfe + + + + SpectreBridge + + + default + Standard + + + + <b>%1</b> from your public balance to %2 (%3) + <b>%1</b> von Ihrem öffentlichen Guthaben an %2 (%3) + + + + <b>%1</b> from public to private, using address %2 (%3) + <b>%1</b> vom öffentlichen an das private Guthaben unter Verwendung von Adresse %2 (%3) + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + <b>%1</b> von Ihrem privaten Guthaben, Ring-Grösse %2, an %3 (%4) + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + <b>%1</b> vom privaten an das öffentliche Guthaben mit Ring-Grösse %2 unter Verwendung von Adresse %3 (%4) + + + + + + + Error: + Fehler: + + + + Unknown txn type detected %1. + Unbekannten Transaktionstyp '%1' gefunden. + + + + Input types must match for all recipients. + Eingangstyp muss für alle Empfänger übereinstimmen. + + + + Ring sizes must match for all recipients. + Ringgrösse muss für alle Empfänger übereinstimmen. + + + + Ring size must be %1. + Ringgrösse muss %1 sein. + + + + Ring size outside range [%1, %2]. + Ringgrösse ausserhalb des Bereiches [%1, %2]. + + + + + Confirm send coins + Bitte das Senden der Coins bestätigen + + + + Are you sure you want to send? +Ring size of one is not anonymous. + Sind Sie sicher, dass Sie abschicken möchten? Eine Ring-Grösse von 1 ist nicht anonym! + + + + + and + und + + + + Are you sure you want to convert %1? + Sind Sie sicher %1 zu konvertieren? + + + + Are you sure you want to send %1? + Sind Sie sicher %1 zu senden? + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + Schicke Coins + + + + The change address is not valid, please recheck. + Die Wechselgeldadresse ist nicht gültig, bitte prüfen. + + + + The recipient address is not valid, please recheck. + Die Empfängeradresse ist nicht gültig, bitte prüfen. + + + + Only ALIAS from your Private balance can be send to a stealth address. + Nur private ALIAS können an eine private Adresse geschickt werden. + + + + Transfer from Public to Private is only allowed within your account. + Transfer von öffentlichem an privates Guthaben ist nur innerhalb des Wallets möglich. + + + + Transfer from Private to Public is only allowed within your account. + Transfer von privatem an öffentliches Guthaben ist nur innerhalb des Wallets möglich. + + + + The amount to pay must be larger than 0. + Der Betrag muss grösser 0 sein. + + + + The amount exceeds your balance. + Der Betrag überschreitet das Guthaben. + + + + The total exceeds your balance when the %1 transaction fee is included. + Die Summe überschreitet das Guthaben, wenn %1 Transaktionsgebühren enthalten sind. + + + + Duplicate address found, can only send to each address once per send operation. + Doppelte Empfängeradresse gefunden. Die Empfänger je Transaktion müssen eindeutig sein. + + + + Error: Transaction creation failed. + Fehler: Erzeugen der Transaktion fehlgeschlagen. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Fehler: Transaktion wurde abgelehnt. Das kann passieren, wenn einige der zu verwendenden Coins bereits ausgegeben wurden. Das wiederum kann passieren, wenn eine Kopie der wallet.dat verwendet wird, in welcher diese Coins nicht als ausgegeben markiert wurden. + + + + Error: Note is too long. + Fehler: Die Notiz ist zu lang. + + + + Error: Ring Size Error. + Fehler: Ringgrösse falsch. + + + + Error: Input Type Error. + Fehler: Input-Typ falsch. + + + + Error: Must be in full mode to send anon. + Fehler: Zum senden privater Coins den Full-Mode aktivieren. + + + + Error: Invalid Stealth Address. + Fehler: Ungültige private Adresse + + + + Convert Alias from Private to Public + Konvertiere Alias von privat nach öffentlich + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + Fehler: Ungültige private Adresse. Konvertierung von privat zu öffentlich braucht eine Stealth-Adresse. + + + + The amount exceeds your ALIAS balance. + Der Betrag überschreitet das ALIAS Guthaben + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + Die Summe überschreitet das ALIAS Guthaben, wenn %1 Transaktionsgebühren enthalten sind. + + + + Error generating transaction. + Fehler beim Erzeugen der Transaktion. + + + + Error generating transaction: %1 + Fehler beim Erzeugen der Transaktion: %1 + + + + Transaction successfully created. + Transaktion erfolgreich erzeugt. + + + + Please restart wallet + Bitte starten Sie das Wallet neu + + + + The used language has changed. +Please restart the wallet! + Die zu verwendende Sprache wurde geändert. +Bitte starten Sie das Wallet neu! + + + + SpectreGUI + + + Public received with + Öffentlich empfangen mit + + + + Public received from + Öffentlich empfangen von + + + + Public sent to + Öffentlich gesendet an + + + + Public sent to self + Öffentlich an sich selbst gesendet + + + + Private sent to self + Privat an sich selbst gesendet + + + + Public staked + Öffentlich gestaked + + + + Public donated + Öffentlich gespendet + + + + Public contributed + Öffentlich beigetragen + + + + Private staked + Privat gestaked + + + + Private donated + Privat gespendet + + + + Private contributed + Privat beigetragen + + + + Private received with + Privat empfangen mit + + + + Private sent to + Privat gesendet an + + + + Private to Public + Privat an öffentlich + + + + Public to Private + Öffentlich an privat + + + + Other + Andere + + + + + + + Alias + Alias + + + + Client + Klient + + + + ..Start UI.. + .. Starte UI .. + + + + .Start UI. + . Starte UI . + + + + Ready! + Fertig! + + + + E&xit + Beenden + + + + Quit application + Programm beenden + + + + &About Alias + &Über Alias + + + + Show information about Alias + Zeige Informationen über Alias + + + + About &Qt + Über &Qt + + + + Show information about Qt + Zeige Informationen über Qt + + + + &Options... + &Optionen... + + + + Modify configuration options for Alias + Alias Konfigurationsoptionen bearbeiten + + + + &Show / Hide + &Anzeigen / Verbergen + + + + &Encrypt Wallet... + &Wallet verschlüsseln... + + + + Encrypt or decrypt wallet + Wallet ver- oder entschlüsseln + + + + &Backup Wallet... + &Backup des Wallet erzeugen... + + + + Backup wallet to another location + Wallet an separate Stelle sichern + + + + &Change Passphrase... + &Passphrase ändern... + + + + Change the passphrase used for wallet encryption + Passphrase der Wallet-Verschlüsselung ändern + + + + &Unlock Wallet... + &Wallet entsperren + + + + Unlock wallet + Wallet entsperren + + + + &Lock Wallet + &Wallet sperren + + + + Lock wallet + Wallet sperren + + + + &Debug window + &Debug-Fenster + + + + Open debugging and diagnostic console + Debug- und Diagnose-Konsole öffnen + + + + &File + &Datei + + + + &Settings + &Einstellungen + + + + &Help + &Hilfe + + + + Wallet + Wallet + + + + + [testnet] + [Testnetz] + + + + %n active connection(s) to Alias network + %n aktive Verbindung zum Alias-Netzwerk%n aktive Verbindungen zum Alias-Netzwerk + + + + block + Block + + + + header + Kopfzeile + + + + blocks + Blöcken + + + + headers + Kopfzeilen + + + + + Synchronizing with network... + Synchronisiere mit dem Netzwerk... + + + + Downloading filtered blocks... + Herunterladen gefilterter Blöcke... + + + + ~%1 filtered block(s) remaining (%2% done). + ~%1 gefilterte Blöcke verbleiben (%2% erledigt). + + + + Importing blocks... + Importiere Blöcke + + + + ~%n block(s) remaining + %n Block verbleibend%n Blöcke verbleibend + + + + Imported %1 of %2 %3 of transaction history (%4% done). + %1 von %2 %3 Transaktionshistorie importiert (%4% erledigt). + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + %1 von %2 %3 der Transaktionshistorie heruntergeladen (%4% erledigt). + + + + Imported %n block(s) of transaction history. + %nBlock Transaktionshistorie importiert.%n Blöcke Transaktionshistorie importiert. + + + + Downloaded %n block(s) of transaction history. + %n Block Transaktionshistorie heruntergeladen.%n Blöcke Transaktionshistorie heruntergeladen. + + + + %n second(s) ago + vor %n Sekundevor %n Sekunden + + + + %n minute(s) ago + vor %n Minutevor %n Minuten + + + + %n hour(s) ago + vor %n Stundevor %n Stunden + + + + %n day(s) ago + vor %n Tagvor %n Tagen + + + + Up to date + Aktuell + + + + Catching up... + Nachladen... + + + + Last received %1 was generated %2. + Letzter empfangener %1 wurde %2 erzeugt. + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + Um die Transaktion durchzuführen, wird eine Gebühr von %1 zum Unterhalt des Netzwerkes verlangt. Möchten Sie die Transaktion ausführen? + + + + Confirm transaction fee + Transkationsgebühr bestätigen + + + + %1 %2 + %1 %2 + + + + Address: %1 +Note: %2 + + Adresse: %1 +Bemerkung: %2 + + + + + Address: %1 + + Adresse: %1 + + + + + + URI handling + URI-Handhabung + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + URI kann nicht geparsed werden! Mglw. ist die Alias-Adresse ungültig oder die URI-Parameter sind falsch. + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + Wallet ist <b>verschlüsselt</b> und momentan lediglich zum staken <b>entsperrt</b> + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Wallet ist <b>verschlüsselt</b> und momentan <b>entsperrt</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Wallet ist <b>verschlüsselt</b> und momentan <b>gesperrt</b> + + + + Backup Wallet + Wallet sichern + + + + Wallet Data (*.dat) + Wallet-Daten (*.dat) + + + + Backup Failed + Sicherung fehlgeschlagen + + + + There was an error trying to save the wallet data to the new location. + Es gab einen Fehler beim Speichern der Wallet-Datei am neuen Ort. + + + + Lock Wallet + Wallet sperren + + + + Error: Wallet must first be encrypted to be locked. + Fehler: Wallet muss zum sperren verschlüsselt sein. + + + + %1 second(s) + %1 Sekunde(n) + + + + %1 minute(s), %2 second(s) + %1 Minute(n), %2 Sekunde(n) + + + + %1 hour(s), %2 minute(s) + %1 Stunde(n), %2 Minute(n) + + + + %1 day(s), %2 hour(s) + %1 Tag(e), %2 Stunde(n) + + + + (last 72 blocks %1) + (letzte 72 Blücke %1) + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + Staking.<br/>Ihre Gewichtung ist %1<br/>Gewichtung des Netzwerkes ist %2%3<br/>Durchschnittliche Zeit zwischen zwei Vergütungen ist %4 + + + + Not staking because wallet is in thin mode + Es wird nicht gestaked, Wallet wird im Thin-Mode betrieben + + + + Not staking, staking is disabled + Staking ist abgeschaltet + + + + Not staking because wallet is locked + Es wird nicht gestaked, Wallet ist gesperrt + + + + Not staking because wallet is offline + Es wird nicht gestaked, Wallet ist nicht mit dem Netzwerk verbunden + + + + Not staking because wallet is syncing + Es wird nicht gestaked, Wallet synchronisiert gerade + + + + Initializing staking... + Initialisiere Staking + + + + Not staking because you don't have mature coins + Staking deaktiviert, da nicht ausreichend gealterte Coins vorhanden sind + + + + Not staking + Staking deaktiviert + + + + TrafficGraphWidget + + + KB/s + KB/s + + + + TransactionDesc + + + Open for %n block(s) + Offen für %n BlockOffen für %n Blöcke + + + + Open until %1 + Offen bis %1 + + + + conflicted + kollidiert + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/unbestätigt + + + + %1 confirmations + %1 Bestätigungen + + + + Transaction ID + Transaktions-ID + + + + Block Hash + Block-Prüfsumme + + + + Status + Status + + + + , has not been successfully broadcast yet + , wurde noch nicht erfolgreich übertragen + + + + , broadcast through %n node(s) + , verteilt über %n Knoten, verteilt über %n Knoten + + + + Date + Datum + + + + Source + Quelle + + + + Generated + Generiert + + + + + Credit + Gutschrift + + + + matures in %n more block(s) + gereift in %n weiterem Blockgereift in %n weiteren Blöcken + + + + not accepted + nicht angenommen + + + + Transaction fee + Transaktionsgebühr + + + + Net amount + Nettobetrag + + + + Message + Nachricht signieren + + + + Comment + Kommentar + + + + Comment-To + Kommentar an + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + Debuginformationen + + + + Debit + Belastung + + + + Transaction + Transaktion + + + + Inputs + Eingaben + + + + Amount + Betrag + + + + true + wahr + + + + false + falsch + + + + + Converted + Konvertiert + + + + from public to private + von öffentlich an privat + + + + from private to public + von privat an öffentlich + + + + Address + Adresse + + + + + Note + Bemerkung + + + + unknown + unbekannt + + + + <dd> + <dd> + + + + TransactionDescDialog + + + Transaction details + Transaktionsdetails + + + + This pane shows a detailed description of the transaction + Dieser Bereich zeigt eine detaillierte Beschreibung der Transaktion an + + + + TransactionTableModel + + + Date + Datum + + + + Type + Typ + + + + Address + Adresse + + + + Note + Bemerkung + + + + Amount + Betrag + + + + Open for %n more block(s) + Offen für %n weiteren BlockOffen für %n weitere Blöcke + + + + Open until %1 + Offen bis %1 + + + + Offline + Offline + + + + Unconfirmed + Unbestätigt: + + + + Confirming (%1 of %2 required confirmations) + Wird bestätigt (%1 von %2 benötigten Bestätigungen erhalten) + + + + Confirming (%1 of %2 recommended confirmations) + wird Bestätigt (%1 von %2 Bestätigungen) + + + + Confirmed (%1 confirmations) + Bestätigt (%1 Bestätigungen) + + + + Conflicted + Konflikt + + + + Immature (%1 confirmations, will be available after %2) + Unreif (bisher %1, verfügbar nach %2 Bestätigungen) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + Stake %1 ist verwaist, Block wurde von keinem anderen Knoten empfangen und wird vermutlich nicht akzeptiert werden! + + + + Orphan %1 stake, someone else submitted the block before you. + Stake %1 ist verwaist, jemand anderes hat den Block vor Ihnen übertragen. + + + + (n/a) + (k.A.) + + + + Transaction status. Hover over this field to show number of confirmations. + Transaktionsstatus. Fahren Sie mit der Maus über dieses Feld, um die Anzahl der Bestätigungen zu sehen. + + + + Date and time that the transaction was received. + Datum und Uhrzeit als die Transaktion empfangen wurde. + + + + Type of transaction. + Art der Transaktion + + + + Destination address of transaction. + Zieladresse der Transaktion + + + + Amount removed from or added to balance. + Der Betrag, der dem Kontostand abgezogen oder hinzugefügt wurde. + + + + WalletModel + + + + Sending... + Wird gesendet... + + + + alias-bridge + + + Overview + Übersicht + + + + Wallet + Wallet + + + + Send + Senden + + + + Receive + Empfangen + + + + Transactions + Transaktionen + + + + Address Book + Adressbuch + + + + Options + Optionen + + + + Advanced + Erweitert + + + + Backup Wallet + Wallet sichern + + + + Encrypt Wallet + Wallet verschlüsseln + + + + Change Passphrase + Passphrase ändern + + + + (Un)lock Wallet + Wallet (ent-)sperren + + + + Tools + Werkzeuge + + + + Chain Data + Chain-Daten + + + + Block Explorer + Block-Explorer + + + + Sign Message + Nachricht signieren + + + + Verify Message + Nachricht überprüfen + + + + Debug + Fehlersuche + + + + About Alias + Über Alias + + + + About QT + Über Qt + + + + QR code + QR-Code + + + + Address: + Adresse: + + + + Label: + Bezeichnung: + + + + Amount: + Betrag: + + + + Add new receive address + Neue Empfänger-Adresse hinzufügen + + + + Add Address + Adresse hinzufügen + + + + Add a new contact + Neuen Kontakt hinzufügen + + + + Address Lookup + Adresse suchen + + + + Address Type + Adresstyp + + + + Stealth + Unsichtbar + + + + Group + Gruppe + + + + BIP32 + BIP32 + + + + Label + Bezeichnung + + + + Address + Adresse + + + + Public Key + Öffentlicher Schlüssel + + + + Transaction Hash + Transaktionsprüfsumme + + + + Recent Transactions + Letzte Transaktionen + + + + Coin Control + Coin-Control + + + + Make payment + Zahlung durchführen + + + + Balance transfer + Guthaben übertragen + + + + Select Inputs + Eingänge auswählen + + + + Automatically selected + Automatisch ausgewählt + + + + Quantity: + Menge: + + + + Fee: + Gebühr: + + + + After Fee: + Nach Gebühr: + + + + Bytes: + Bytes: + + + + Priority: + Priorität: + + + + LowOutput: + LowOutput: + + + + Change: + Wechselgeld: + + + + Custom change address + Spezielle Wechselgeldadresse + + + + From account + Von Konto + + + + PUBLIC + Öffentlich + + + + PRIVATE + Privat + + + + Balance: + Guthaben: + + + + Ring Size: + Ringgrösse: + + + + To account + An Konto + + + + Pay to + Zahlen an + + + + (no label) + (keine Bezeichnung) + + + + Master + Master + + + + Wallet is encrypted and currently locked + Wallet ist verschlüsselt und momentan gesperrt + + + + Not staking because wallet is locked + Nicht stakend, da Wallet gesperrt ist + + + + 0 active connection(s) to Alias network + 0 aktive Verbindungen zum Alias-Netzwerk + + + + Enter a label for this address to add it to your address book + Bezeichnung für Adressbuch + + + + Enter a address to add it to your address book + Adresse zum hinzufügen zum Adressbuch eingeben + + + + Inputs + Eingänge + + + + Values + Werte + + + + Outputs + Ausgänge + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Alias-Adresse eingeben, um die Nachricht damit zu signieren (bspw. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to sign + Zu signierende Nachricht eingeben + + + + Click sign message to generate signature + Klicke auf "Signiere Nachricht", um eine Signatur zu erzeugen + + + + Copy the signed message signature + Signatur der signierten Nachricht kopieren + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Alias-Adresse eingeben, um die Nachricht damit zu überprüfen (bspw. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to verify + Nachricht eingeben, welche überprüft werden soll + + + + Enter a Alias signature + Alias-Signatur eingeben + + + + Paste signature from clipboard + Aus Zwischenablage einfügen + + + + Your total balance + Ihr Gesamtguthaben + + + + Recent in/out transactions or stakes + Letzte ein- bzw. ausgehende Transaktionen oder Stakes + + + + Select inputs to spend + Zu verwendende Eingänge auswählen + + + + Optional address to receive transaction change + Optionale Adresse zum Empfang des Wechselgeldes + + + + Choose from address book + Vom Adressbuch wählen + + + + Paste address from clipboard + Adresse aus der Zwischenablage einfügen + + + + Remove this recipient + Diesen Empfänge entfernen + + + + Send from public or private + Von öffentlich oder privat senden + + + + Current spendable send payment balance + Momentan zum Senden verfügbares Guthaben + + + + Send to public or private + An öffentliche oder private Adresse senden + + + + Current spendable balance to account + Momentan verfügbares Guthaben dieses Kontos + + + + The label for this address + Bezeichnung für diese Adresse + + + + Amount to transfer + Zu transferierender Betrag + + + + Send to multiple recipients at once + An mehrere Empfänger auf einmal überweisen + + + + Date and time that the transaction was received. + Datum und Zeit des Empfangs der Transaktion + + + + Transaction status. Hover over this field to show number of confirmations. + Transaktionsstatus. Darüber fahren, um Anzahl der Bestätigungen zu sehen. + + + + Type of transaction. + Typ der Transaktion. + + + + Destination address of transaction. + Zieladresse der Transaktion. + + + + Short payment note. + Kurze Zahlungsmitteilung. + + + + Amount removed from or added to balance. + Zum Guthaben hinzugefügter oder entfernter Betrag + + + + Name for this Wallet + Name für dieses Wallet + + + + Enter a password + Passwort eingeben + + + + Would you like to create a bip44 path? + Möchten Sie einen BIP44-Pfad anlegen? + + + + Your recovery phrase (Keep this safe!) + Ihre Wiederherstellungsphrase (Sicher verwahren!) + + + + Recovery Phrase + Wiederherstellungsphrase + + + + Wallet Name for recovered account + Wallet-Name für das wiederhergestellte Konto + + + + Enter the password for the wallet you are trying to recover + Bitte Passwort für das Wallet eingeben, welche Sie gerade versuchen wiederherzustellen + + + + Is this a bip44 path? + Is das ein BIP44-Pfad? + + + + ID + ID + + + + Created + Erzeugt + + + + Active Account + Aktives Konto + + + + Default + Standard + + + + Path + Pfad + + + + Active + Aktiv + + + + Amount + Betrag + + + + Note + Notiz + + + + Public coins, visible on blockchain + Öffentliche Coins, sichtbar auf der Blockchain + + + + Private coins, untraceable and unlinkable on blockchain + Private Coins, auf der Blockchain nicht verfolg- und verlinkbar + + + + Available coins for spending + Zum ausgeben verfügbare Coins + + + + Reserved coins are not used for staking + Zurückgehaltene Coins können zum Staken nicht verwendet werden + + + + Staked coins must mature before they can be accessed + Via Staking erhaltene Coins müssen erst reifen, bevor sie verwendet werden können + + + + Stake + Stake + + + + Sub-Wallets + Sub-Wallets + + + + Start Alias on system login + Alias beim Systemstart starten + + + + Detach databases at shutdown + Datenbanken beim Herunterfahren abhängen + + + + Pay transaction fee + Zahlung der Transaktionsgebühr + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + Transaktionsgebühr je Kilobyte. Eine höhere Gebühr stellt sicher, dass Ihre Transaktionen bei hohem Transaktionsaufkommen schneller bearbeitet werden. + + + + Most transactions are 1kB. The minimal fee is 0.0001 + Die meissten Transaktionen sind 1 Kilobyte gross. Minimale Gebühr ist 0.0001 + + + + Enable Staking + Staking aktivieren + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + Schaltet den Staking-Vorgang ein oder aus. Wenn Ihr Wallet verschlüsselt ist, muss es für das Staking entsperrt werden. + + + + Staking Donation + Staking-Spende + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + Jeder sechste BLock der Blockchain ist ein sog. Development Contribution Block (DCB). Die Entlohnung für einen solchen Block wird einem Entwickler-Fonds gutgeschrieben, unabhängig des eingestellten Prozentwertes. Sie können zusätzliche Spenden von Ihren Entlohnungen durch die Angabe eines Prozentwertes der Weiterentwicklung zukommen lassen. Vielen Dank! + + + + Reserve + Reserve + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + Der Reservebetrag wird nicht zum Staking verwendet und kann somit jederzeit ausgegeben werden. + + + + Minimum Stake Interval + Minimales Staking-Interval + + + + Main + Allgemein + + + + Window + Fenster + + + + Display + Darstellung + + + + Minimize to the tray instead of the taskbar + In den Benachrichtigungsbereich anstatt die Task-Leiste minimieren + + + + Minimize on close + Beim schliessen minimieren + + + + User Interface language + Sprache der Bedienoberfläche + + + + Unit to show amounts in + Einheit, in welcher Beträge angezeigt werden sollen + + + + Rows per page + Zeilen pro Seite + + + + Display addresses in transaction list + Adressen in der Transaktionsliste anzeigen + + + + Notifications + Benachrichtigungen + + + + Visible Transaction Types + Sichtbare Transaktionstypen + + + + Cancel + Abbrechen + + + + Apply + Anwenden + + + + Ok + Ok + + + + Reserved + Reserviert + + + + Unconfirmed + Unbestätigt + + + + Immature + Am reifen + + + + Type + Typ + + + + Date + Datum + + + + Send Payment + Zahlung senden + + + + The address to send the payment to + Adresse, an welche die Zahlung gesendet werden soll + + + + Enter a label for this address + Bezeichnung für diese Adresse + + + + Add Sub-Wallet + Sub-Wallet hinzufügen + + + + Immature generated coins with Proof-of-Work + Unreife via PoW erzeugte Coins + + + + Blockchain Info + Blockchain Info + + + + Checking wallet state with network + Prüfe Wallet-Status mit dem Netzwerk + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + Öffentliche ALIAS benötigen eine<br>private ALIAS benötigen zehn Bestätigungen. + + + + Total Balance + Gesamtguthaben + + + + Balance + Guthaben + + + + Available + Verfügbar + + + + Public + Öffentlich + + + + Private + Privat + + + + Tor+OBFS4 connection online + Tor- u/o OBFS4-Verbindung besteht + + + + Wallet Encryption + Wallet-Verschlüsselung + + + + A short reference for the recipient (max 24 characters) + Kurzbemerkung für den Empfänger (max. 24 Zeichen) + + + + ALIAS Denomination Value + ALIAS Stückelungswert + + + + No. Owned (* = Immature) + Menge in Besitz (*=unreif) + + + + No. System Unspent (* = Immature) + Menge nicht ausgegeben (*=unreif) + + + + No. available Mixins (* = Immature) + Menge verfügbarer Mixins (*=unreif) + + + + No. System (** = Compromised) + Menge System (**=kompromittiert) + + + + The last block a coin of this denomination was created + Der letzte Block mit dieser Stückelung wurde bei dieser Chain-Höhe erzeugt + + + + Owned (*) + In Besitz (*) + + + + Unspent (*) + Nicht ausgegeben (*) + + + + Mixins (*) + Mixins (*) + + + + System (**) + System (**) + + + + Least Depth + Geringste Höhe + + + + Value Out + Ausgehender Wert + + + + Value + Wert + + + + Addressbook + Adressbuch + + + + Refresh + Auffrischen + + + + Hash + Prüfsumme + + + + Height + Höhe + + + + Timestamp + Zeitstempel + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + Alias-Adresse eingeben (bspw. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + An address label for the payment senders address book + Bezeichnung für das Adressbuch des Absenders + + + + Enter a short note to send with a payment (max 24 characters) + Kurzbemerkung, welche mit der Zahlung verschickt werden soll (max. 24 Zeichen) + + + + Filter by label or address... + Nach Bezeichnung oder Adresse filtern... + + + + Note to send with payment (max 24 characters) + Mit der Zahlung zu verschickende Kurzbermerkung (max. 24 Zeichen) + + + + The private address to transfer the balance to + Die private Adresse, an welche das Guthaben transferiert werden soll + + + + Search by label or address + Suche nach Bezeichnung oder Adresse + + + + Search + Suche + + + + Family vacation funds + Familienurlaubskasse + + + + Grouping will consolidate transactions of chosen + Gruppierung wird gewählte Transaktionen zusammenführen + + + + Reset form + Formular zurücksetzen + + + + Restore Sub-Wallet + Sub-Wallet wiederherstellen + + + + Filter outputs + Ausgänge filtern + + + + Find Block by hash/height/transaction + Block über Prüfsumme, Höhe oder Transaktion suchen + + + + alias-core + + + To use the %s option + Um die Option %s zu verwenden + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + %s, der Parameter rpcpassword muss in der Konfigurationsdatei gesetzt werden: +%s +Es wird empfohlen, ein zufälliges Passwort zu verwenden: +rpcuser=aliasrpc +rpcpassword=%s +(Das Passwort muss nicht gesichert/notiert werden) +Username und Passwort müssen unterschiedlich sein. +Wenn die Datei nicht existiert, bitte mit Leserechten für den Besitzer anlegen. +Es wird empfohlen, alertnotify einzurichten, um im Problemfall benachrichtigt zu werden, bspw. so: +alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + Error + Fehler + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + Beim Einrichten des RPC-Port %u für IPv6-Verbindungen ist ein Fehler aufgetreten. Gehe zurück auf IPv4: %s + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + Beim Einrichten des RPC-Port %u für IPv4-Verbindungen ist ein Fehler aufgetreten: %s + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + Sie müssen rpcpassword=<password> in der Konfigurationsdatei einrichten: +%s +Wenn die Datei nicht existiert, bitte mit Nur-Besitzer-Leserechten anlegen. + + + + Alias version + Alias Version + + + + Usage: + Verwendung: + + + + Send command to -server or aliaswalletd + Sende Kommando an -server oder aliaswalletd + + + + List commands + Liste verfügbare Kommandos auf + + + + Get help for a command + Zeige die Hilfe zu einem Kommando + + + + Alias + Alias + + + + Options: + Optionen: + + + + This help message + Dieser Hilfetext + + + + Specify configuration file (default: alias.conf) + Bitte Konfigurationsdatei angeben (Standard: alias.conf) + + + + Specify pid file (default: alias.pid) + Bitte PID-Datei angeben (Standard: alias.pid) + + + + Specify data directory + Bitte Datenverzeichnis angeben + + + + Specify wallet file (within data directory) + Bitte Wallet-Datei (im Datenverzeichnis) angeben + + + + Set database cache size in megabytes (default: 25) + Setze Datenbank Cache-Grösse in Megabyte (Standard: 25) + + + + Set database disk log size in megabytes (default: 100) + Setzte Grösse der Datenbank-Log-Datei in Megabyte (Standard: 100) + + + + Specify connection timeout in milliseconds (default: 5000) + Verbindungstimeout in Millisekunden (Standard: 5000) + + + + Connect through socks proxy + Verbinde via SOCKS-Proxy + + + + Select the version of socks proxy to use (4-5, default: 5) + Auswählen der SOCKS-Proxy Version (4-5, Standard: 5) + + + + Use proxy to reach tor hidden services (default: same as -proxy) + Proxy für die Verbindung zu den Hidden-Services verwenden (Standard: wie -proxy) + + + + Allow DNS lookups for -addnode, -seednode and -connect + Erlaube DNS-Anfragen für -addnode, -seednode und -connect + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + Höre auf Verbindungen an <port> (Standard: 37347 bzw. beim Testnetz 37111) + + + + Maintain at most <n> connections to peers (default: 125) + Verwalte maximal <n> Verbindungen zu anderen Knoten (Standard: 125) + + + + Add a node to connect to and attempt to keep the connection open + Füge einen Knoten hinzu und versuche diese Verbindung aufrecht zu erhalten + + + + Connect only to the specified node(s) + Verbinde nur zu den angegebenen Knoten + + + + Connect to a node to retrieve peer addresses, and disconnect + Verbinde zum angegebenen Knoten, empfange weitere Knoten-Adressen und trenne danach die Verbindung zu diesem Knoten + + + + Specify your own public address + Eigene öffentliche Adresse spezifizieren + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Nur zu Knoten im Netz <net> verbinden (IPv4, IPv6 oder Tor) + + + + Discover own IP address (default: 1 when listening and no -externalip) + Eigene IP-Adresse herausfinden (Standard: 1 wenn hörend und nicht -externalip verwendet wird) + + + + Find peers using internet relay chat (default: 0) + Suche Gegenstellen mithilfe des Internet Relay Chat (Standard: 0) + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Erlaube Verbindungen von aussen (Standard: 1, wenn die Optionen -proxy oder -connect nicht verwendet werden) + + + + Bind to given address. Use [host]:port notation for IPv6 + Binde an die gegebene Adresse. Bei IPv6 [host]:port Notation verwenden + + + + Find peers using DNS lookup (default: 1) + Suche Gegenstellen durch DNS-Lookup (Standard: 1) + + + + Stake your coins to support network and gain reward (default: 1) + Staken Sie Ihre Coins um das Netzwerk zu unterstützen und eine Vergütung zu erhalten (Standard: 1) + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + Zeit mit anderen Knoten synchronisieren. Abschalten, wenn die lokale Zeit präzise genug ist, bspw. durch NTP (Standard: 1) + + + + Sync checkpoints policy (default: strict) + Checkpoint-Synchronisierungsregel (Standard: strict) + + + + Threshold for disconnecting misbehaving peers (default: 100) + Schwellwert zur Trennung von sich falsch verhaltenden Knoten (Standard: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Sekunden, wie lang die Wiederverbindung fehlerhafter Nodes verhindert wird (Standard: 86400) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Maximale Empfangspuffergrösse je Verbindung: <n> x 1000 Byte (Standard: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Maximale Sendepuffergrösse je Verbindung: 1 x 1000 Byte (Standard: 1000) + + + + Use UPnP to map the listening port (default: 1 when listening) + UPnP für die Listening-Ports verwenden (Standard: 1 beim Hören) + + + + Use UPnP to map the listening port (default: 0) + UPnP für die Listening-Ports verwenden (Standard: 0) + + + + Detach block and address databases. Increases shutdown time (default: 0) + Block- und Adressdatenbank abhängen. Erhöht die Dauer des Herunterfahrens. (Standard: 0) + + + + Fee per KB to add to transactions you send + Gebühr je Kilobyte, welche zu den zu sendenden Transaktionen hinzugefügt wird + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + Ignoriere beim Erzeugen einer Transaktion Inputs, welche einen Wert kleiner als diesen Wert haben (Standard: 0.01) + + + + Accept command line and JSON-RPC commands + Akzeptiere Befehle von der Kommandozeile sowie via JSON-RPC + + + + Run in the background as a daemon and accept commands + Ausführung als Daemon im Hintergrund und nimm Kommandos entgegen + + + + Use the test network + Benutze das Testnetz + + + + Output extra debugging information. Implies all other -debug* options + Zeige zusätzliche Debug-Informationen. Das enthält alle anderen -debug* Optionen. + + + + Output extra network debugging information + Zeige zusätzliche Netzwerk-Informationen + + + + Prepend debug output with timestamp + Füge Zeitstempel zum Debug-Output hinzu + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Kürze das Debug-Logfile debug.log beim Start des Client (Standard: 1, wenn keine Debug-Option verwendet wird) + + + + Send trace/debug info to console instead of debug.log file + Debug- und Tracing-Informationen auf der Konsole ausgeben anstelle in die debug.log Datei + + + + Send trace/debug info to debugger + Trace- und Debug-Informationen an den Debugger schicken + + + + Username for JSON-RPC connections + Benutzername für JSON-RPC-Verbindungen + + + + Password for JSON-RPC connections + Passwort für JSON-RPC-Verbindungen + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + Auf JSON-RPC-Verbindungen auf Port <port> hören (Standard: 36657 bzw. beim Testnet 36757) + + + + Allow JSON-RPC connections from specified IP address + JSON-RPC-Verbindungen von angegebener IP-Adresse zulassen + + + + Send commands to node running on <ip> (default: 127.0.0.1) + Kommandos an Knoten mit der IP <ip> senden (Standard: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Kommando ausführen, wenn sich der "beste Block" ändert (%s im Kommando wird durch die Block-Prüfsumme ersetzt) + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Kommando ausführen, wenn sich eine Transaktion im Wallet ändert (%s im Kommando wird durch die Transaktions-ID ersetzt) + + + + Require a confirmations for change (default: 0) + Für Änderungen wird eine Bestätigung erwartet (Standard: 0) + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + Forciere die Verwendung von Canonical-PUSH-Operatoren (Standard: 1) + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + Kommando ausführen, wenn ein relevanter Alarm empfangen wird (%s im Kommando wird durch die Alarmmeldung ersetzt) + + + + Upgrade wallet to latest format + Aktualisiere wallet.dat zum aktuellen Format + + + + Set key pool size to <n> (default: 100) + Setzte Schlüssel-Poolgrösse auf <n> (Standard: 100) + + + + Rescan the block chain for missing wallet transactions + Blockchain erneut einlesen, um fehlende Transaktionen zu finden + + + + Attempt to recover private keys from a corrupt wallet.dat + Versuche, private Schlüssel aus beschädigter wallet.dat Datei wiederherzustellen + + + + How many blocks to check at startup (default: 2500, 0 = all) + Wieviele Blöcke sollen beim Start geprüft werden (Standard: 2500, 0=alle) + + + + How thorough the block verification is (0-6, default: 1) + Wie gründlich soll die Blockprüfung sein (0-6, Standard: 1) + + + + Imports blocks from external blk000?.dat file + Importiere Blöcke von externer blk000?.dat-Datei + + + + Block creation options: + Optionen zur Block-Erzeugung: + + + + Set minimum block size in bytes (default: 0) + Setze minimale Block-Grösse in Bytes (Standard: 0) + + + + Set maximum block size in bytes (default: 250000) + Setze maximale Block-Grösse in Bytes (Standard: 250000) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Setze maximale Grösse von High-Prio/Low-Fee Transaktionen in Bytes (Standard: 27000) + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + SSL-Optionen (siehe Bitcoin-Wiki für Einrichtungsoptionen) + + + + Use OpenSSL (https) for JSON-RPC connections + Benutze OpenSSL (https) für JSON-RPC-Verbindungen + + + + Server certificate file (default: server.cert) + Zertifikatsdatei des Servers (Standard: server.cert) + + + + Server private key (default: server.pem) + Privater Schlüssel des Servers (Standard: server.pem) + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + Akzeptierte Ciphers (Standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + Invalid amount for -paytxfee=<amount>: '%s' + Ungültiger Betrag für -paytxfee=<amount>: '%s' + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Achtung: -paytxfee ist auf einen sehr kleinen Wert gesetzt! Das ist die Gebühr, welche Sie zahlen, wenn die Transaktion gesendet wird. + + + + Invalid amount for -mininput=<amount>: '%s' + Ungültiger Betrag für -mininput=<amount>: '%s' + + + + Wallet %s resides outside data directory %s. + Wallet %s befindet sich ausserhalb des Datenverzeichnis %s. + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + Kann Datenverzeichnis %s nicht blockieren. Alias läuft mglw. schon. + + + + Verifying database integrity... + Prüfe Datenbankintegrität... + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + Fehler beim Initialisieren der Datenbankumgebung %s! Zur Wiederherstellung dieses Verzeichnis sichern und dann alles dort ausser der Datei wallet.dat löschen. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Achtung: Die Datei wallet.dat ist beschädigt, es konnten aber Daten gerettet werden! Die originale Datei wurde unter wallet.{timestamp}.bak in %s gespeichert. Wenn fehlerhaftes Guthaben angezeigt wird oder Transaktionen fehlen, sollten Sie von einer Sicherung wiederherstellen. + + + + wallet.dat corrupt, salvage failed + Datei wallet.dat ist beschädigt, Wiederherstellung fehlgeschlagen + + + + Unknown -socks proxy version requested: %i + Unbekannte Proxy-Version angefordert: -socks '%i' + + + + Unknown network specified in -onlynet: '%s' + Unbekanntes Netzwerk in -onlynet '%s' angegeben + + + + Invalid -proxy address: '%s' + Ungültige Proxy-Adresse -proxy '%s' + + + + Invalid -tor address: '%s' + Ungültige Tor-Adresse -tor '%s' + + + + Cannot resolve -bind address: '%s' + Kann Bind-Adresse -bind '%s' nicht auflösen + + + + Failed to listen on any port. + Kann auf keinem Port hören. + + + + Failed to listen on any port. Use -listen=0 if you want this. + Kann auf keinem Port hören. Bitte -listen=0 verwenden, wenn das so gewünscht ist. + + + + Cannot resolve -externalip address: '%s' + Kann externe IP-Adresse -externalip '%s' nicht auflösen + + + + Invalid amount for -reservebalance=<amount> + Ungültiger Betrag für -reservebalance=<amount>: '%s' + + + + Unable to sign checkpoint, wrong checkpointkey? + + Kann Fixpunkt nicht signieren. Falscher Fixpunktschlüssel? + + + + Loading block index... + Lade Block-Index... + + + + Error loading blk0001.dat + Fehler beim Laden von blk0001.dat + + + + Loading wallet... + Lade Wallet... + + + + Error loading wallet.dat: Wallet corrupted + Fehler beim Laden von wallet.dat, Datei beschädigt + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Warnung: Fehler beim Lesen von wallet.dat! Alle Schlüssel wurden korrekt gelesen aber die Transaktionsdaten oder das Adressbuch fehlen oder sind fehlerhaft. + + + + Error loading wallet.dat: Wallet requires newer version of Alias + Fehler beim Laden von wallet.dat, neuere Alias-Version benötigt + + + + Wallet needed to be rewritten: restart Alias to complete + Wallet muss neu geschrieben werden. Alias neu starten, um das abzuschliessen. + + + + Error loading wallet.dat + Fehler beim Laden von wallet.dat + + + + Cannot downgrade wallet + Kann Wallet nicht downgraden + + + + Cannot initialize keypool + Kann Schlüsselpool nicht initialisieren + + + + Cannot write default address + Kann Standard-Adresse nicht schreiben + + + + Rescanning... + Lese erneut ein... + + + + Importing blockchain data file. + Importiere Blockchaindaten + + + + Importing bootstrap blockchain data file. + Importiere Bootstrap-Blockchaindaten + + + + Loading addresses... + Lade Adressen... + + + + Error: could not start node + Fehler: Konnte Knoten nicht starten + + + + Done loading + Laden abgeschlossen + + + + Unable to bind to %s on this computer. Alias is probably already running. + Kann nicht mit Port %s verbinden, Alias läuft mglw. bereits. + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Kann nicht mit Port %s verbinden (bind hat Fehler %d gemeldet, %s) + + + + Error: Wallet locked, unable to create transaction + Fehler: Wallet gesperrt, kann Transaktion nicht anlegen + + + + Error: Wallet unlocked for staking only, unable to create transaction. + Fehler: Wallet ist nur zum Staken freigeschaltet, kann Transaktion nicht anlegen + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + Fehler: Diese Transaktion benötigt aufgrund von Grösse, Komplexität oder Verwendung von kürzlich empfangenem Guthaben Transaktionsgebühren von mindestens %s. + + + + Error: Transaction creation failed + Fehler: Erzeugen der Transaktion fehlgeschlagen + + + + Sending... + Sende... + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Fehler: Die Transaktion wurde abgelehnt. Das kann passieren, wenn Coins aus Ihrem Wallet bereits ausgegeben wurden, dies in Ihrem Wallet aber nicht vermerkt ist, bspw. bei Verwendung einer Kopie des wallet.dat. + + + + Invalid amount + Ungültiger Betrag + + + + Insufficient funds + Guthaben nicht ausreichend + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + Warnung: Bitte sicherstellen, dass Datum und Zeit korrekt sind! Das Alias Wallet wird nicht korrekt funktionieren, wenn die Uhr falsch ist. + + + + Warning: This version is obsolete, upgrade required! + Warnung: Diese Wallet-Version ist veraltet, bitte aktualisieren! + + + + WARNING: syncronized checkpoint violation detected, but skipped! + Achtung, Checkpoint-Synchronisation wurde verletzt aber übersprungen! + + + + Warning: Disk space is low! + Warnung: Freier Speicherplatz ist knapp! + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + Achtung, ungültigen Checkpoint gefunden! Dargestellte Transaktionen können falsch sein. Sie sollten die Software aktualisieren oder die Entwickler benachrichtigen. + + + + Read ATXOs... (%d) + Lade ATXOs... (%d) + + + + Read spent ATXOs... (%d) + Lade verwendete ATXOs... (%d) + + + + Note must be 24 characters or less. + Notiz darf maximal 24 Zeichen lang sein. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Fehler: Die Transaktion wurde abgelehnt. Das kann passieren, wenn Coins aus Ihrem Wallet bereits ausgegeben wurden, dies in Ihrem Wallet aber nicht vermerkt ist, bspw. bei Verwendung einer Kopie des wallet.dat. + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + Fehler: Ungültige Option -socks verwendet. Wird nicht mehr verwendet, da nur noch SOCKS5-Proxies unterstützt werden. + + + + Initialization sanity check failed. Alias is shutting down. + Initiale Plausibilitätsprüfung fehlgeschlagen. Alias wird beendet. + + + + Loading block index... (%d) + Lade Block-Index... (%d) + + + + Calculating chain trust... (%d) + Berechne Vertrauenskette... (%d) + + + + Validating last %d block... + Überprüfe letzte %d Blöcke... + + + + -bip44key is not allowed if wallet.dat already exists + Parameter -bip44key ist nicht möglich, wenn wallet.dat bereits existiert + + + + Cannot resolve binding address: '%s' + Kann Bind-Adresse '%s' nicht auflösen + + + + Error: could not start tor node + Fehler: Kann Tor nicht starten + + + + Timed out waiting for onion hostname. + Zeitüberschreitung beim Warten auf einen Onion-Hostname + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + Fehler beim Laden von blk0001.dat: Ungültige Blockchain entdeckt. Bitte erneut synchronisieren oder Bootstrap-Archiv verwenden. + + + + Loading wallet items... (%d) + Lade Wallet-Inhalt... (%d) + + + + Reindexing from blk000?.dat files. + Erneute Indexierung von blk000?.dat Dateien + + + + Reindexing block... (%d) + Reindexiere Blöcke... (%d) + + + + Core started! + Kern gestartet! + + + + Use tor hidden services version 2 instead of version 3 + Benutze Tor-Hidden-Services in Version 2 anstatt Version 3 + + + + Find peers using .onion seeds (default: 1 unless -connect) + Suche Gegenstellen via .onion-Seeds (Standard: 1, wenn nicht -connect verwendet wird) + + + + Minimum time in seconds between successful stakes (default: 30) + Minimale Zeit zwischen erfolgreichen Stakes (Standard: 30) + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + Prozentwert der Staking-Belohnungen, welcher an die Entwickler gespendet werden soll (0-100, Standard: 5) + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + Millisekunden zwischen Staking-Versuchen. Verringerung dieses Parameters führt nicht zu mehr Stakes! (Standard: 500) + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + Wieveiel Sekunden wird verhindert, dass sich gesperrte Knoten wieder verbinden können (Standard: 3600) + + + + Simple command line interface - if not run as daemon + Einfache Kommandozeilenschnittstelle, wenn nicht als Daemon gestartet wird + + + + Output extra blockchain debugging information + Zur Fehlersuche zusätzliche Blockchain-Informationen ausgeben + + + + Output extra Proof of Stake debugging information + Zur Fehlersuche zusätzliche ProofOfStake-Informationen ausgeben + + + + Send trace/debug info to debug.log file + Trace- und Debug-Informationen in debug.log schreiben + + + + Wait for RPC server to start + Warte auf Start des RPC-Server + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + Behalte maximal <n>MiB von nicht verbundenen Blöcken im Speicher (Standard: %u) + + + + Rebuild block chain index from current blk000?.dat files on startup + Erzeuge Blockchain-Index von aktueller blk000?.dat-Datei beim Start + + + + Show version and exit + Version zeigen und beenden + + + + Thin options: + Thinmode Optionen: + + + + Operate in less secure, less resource hungry 'thin' mode + Arbeite im weniger sicheren und weniger Resourcenhungrigen Thin-Mode + + + + Keep the entire block index in memory. (default: 0) + Gesamten Block-Index im Arbeitsspeicher halten. (Standard: 0) + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + Wenn nicht 'thinfullindex', die maximale Anzahl an im Speicher zu haltenden Block-Headern. (Standard: 4096) + + + + Disable supporting thin nodes. (default: 0) + Thin-Node-Unterstützung abschalten. (Standard: 0) + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + Forwarding abschalten (Standard: 0) + + + + Don't connect to more than <n> thin peers (default: 8) + Nicht zu mehr als <n> Thin-Nodes verbinden (Standard: 8) + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Akzeptierte Ciphers (Standard: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + conn + conn + + + + Error: Wallet locked, unable to create transaction. + Fehler: Kann Transaktion nicht anlegen, da Wallet gesperrt ist. + + + + Error: Must be in full mode. + Fehler: Wallet muss im Full-Mode laufen. + + + + Error: Block chain must be fully synced first. + Fehler: Blockchain muss vollständig synchronisiert sein. + + + + Error: Alias is not connected! + Fehler: Nicht mit dem Alias-Netzwerk verbunden + + + + Update balance... + Aktualisiere Guthaben... + + + + ...Start UI... + ... Starte UI ... + + + + Shutdown... + Herunterfahren... + + + \ No newline at end of file diff --git a/src/qt/locale/alias_el.ts b/src/qt/locale/alias_el.ts new file mode 100644 index 0000000000..caa414942d --- /dev/null +++ b/src/qt/locale/alias_el.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + + + + + Address + + + + + pubkey + + + + + stealth + + + + + (no label) + + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + + + + + New passphrase + + + + + Repeat new passphrase + + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + + Encrypt wallet + + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + + Unlock wallet + + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + + Decrypt wallet + + + + + Change passphrase + + + + + Enter the old and new passphrase to the wallet. + + + + + Confirm wallet encryption + + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + + The supplied passphrases do not match. + + + + + Wallet unlock failed + + + + + + + The passphrase entered for the wallet decryption was incorrect. + + + + + Wallet decryption failed + + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + + + + + Label + + + + + Address + + + + + Date + + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + + + + + Type + + + + + Address + + + + + Note + + + + + Amount + + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_el_GR.ts b/src/qt/locale/alias_el_GR.ts new file mode 100644 index 0000000000..c7a6a2f7c1 --- /dev/null +++ b/src/qt/locale/alias_el_GR.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Ετικέτα + + + + Address + Διεύθυνση + + + + pubkey + + + + + stealth + + + + + (no label) + (χωρίς ετικέτα) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Φράση πρόσβασης + + + + Enter passphrase + Βάλτε κωδικό πρόσβασης + + + + New passphrase + Νέος κωδικός πρόσβασης + + + + Repeat new passphrase + Επανέλαβε τον νέο κωδικό πρόσβασης + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Εισάγετε τον νέο κωδικό πρόσβασης στον πορτοφόλι <br/> Παρακαλώ χρησιμοποιείστε ένα κωδικό με <b> 10 ή περισσότερους τυχαίους χαρακτήρες</b> ή <b> οχτώ ή παραπάνω λέξεις</b>. + + + + Encrypt wallet + Κρυπτογράφησε το πορτοφόλι + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Αυτη η ενεργεία χρειάζεται τον κωδικό του πορτοφολιού για να ξεκλειδώσει το πορτοφόλι. + + + + Unlock wallet + Ξεκλειδωσε το πορτοφολι + + + + This operation needs your wallet passphrase to decrypt the wallet. + Αυτη η ενεργεια χρειάζεται τον κωδικο του πορτοφολιου για να αποκρυπτογραφησειι το πορτοφολι. + + + + Decrypt wallet + Αποκρυπτογράφησε το πορτοφολι + + + + Change passphrase + Άλλαξε κωδικο πρόσβασης + + + + Enter the old and new passphrase to the wallet. + Εισάγετε τον παλιό και τον νεο κωδικο στο πορτοφολι. + + + + Confirm wallet encryption + Επιβεβαίωσε την κρυπτογραφηση του πορτοφολιού + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + Είστε σίγουροι ότι θέλετε να κρυπτογραφήσετε το πορτοφόλι σας; + + + + + Wallet encrypted + Κρυπτογραφημενο πορτοφολι + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + ΣΗΜΑΝΤΙΚΟ: Τα προηγούμενα αντίγραφα ασφαλείας που έχετε κάνει από το αρχείο του πορτοφόλιου σας θα πρέπει να αντικατασταθουν με το νέο που δημιουργείται, κρυπτογραφημένο αρχείο πορτοφόλιου. Για λόγους ασφαλείας, τα προηγούμενα αντίγραφα ασφαλείας του μη κρυπτογραφημένου αρχείου πορτοφόλιου θα καταστουν άχρηστα μόλις αρχίσετε να χρησιμοποιείτε το νέο κρυπτογραφημένο πορτοφόλι. + + + + + + + Wallet encryption failed + Η κρυπτογραφηση του πορτοφολιού απέτυχε + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Η κρυπτογράφηση του πορτοφολιού απέτυχε λογω εσωτερικού σφάλματος. Το πορτοφολι δεν κρυπτογραφηθηκε. + + + + + The supplied passphrases do not match. + Οι εισαχθέντες κωδικοί δεν ταιριάζουν. + + + + Wallet unlock failed + το ξεκλείδωμα του πορτοφολιού απέτυχε + + + + + + The passphrase entered for the wallet decryption was incorrect. + Ο κωδικος που εισήχθη για την αποκρυπτογραφηση του πορτοφολιού ήταν λαθος. + + + + Wallet decryption failed + Η αποκρυπτογραφηση του πορτοφολιού απέτυχε + + + + Wallet passphrase was successfully changed. + Ο κωδικος του πορτοφολιού άλλαξε με επιτυχία. + + + + + Warning: The Caps Lock key is on! + Προσοχη: το πλήκτρο Caps Lock είναι ενεργο. + + + + ClientModel + + + Network Alert + Ειδοποίηση Δικτύου + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Ποσό: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Ποσό + + + + Label + + + + + Address + Διεύθυνση + + + + Date + Ημερομηνία + + + + Confirmations + + + + + Confirmed + Επικυρωμένες + + + + Priority + + + + + Copy address + Αντιγραφή διεύθυνσης + + + + Copy label + Αντιγραφή επιγραφής + + + + + Copy amount + Αντιγραφή ποσού + + + + Copy transaction ID + Αντιγραφη του ID Συναλλαγής + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (χωρίς ετικέτα) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Επεξεργασία Διεύθυνσης + + + + &Label + &Επιγραφή + + + + The label associated with this address book entry + + + + + &Address + &Διεύθυνση + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Νέα διεύθυνση λήψης + + + + New sending address + Νέα διεύθυνση αποστολής + + + + Edit receiving address + Επεξεργασία διεύθυνσης λήψης + + + + Edit sending address + Επεξεργασία διεύθυνσης αποστολής + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Η διεύθυνση "%1" βρίσκεται ήδη στο βιβλίο διευθύνσεων. + + + + Could not unlock wallet. + Δεν είναι δυνατό το ξεκλείδωμα του πορτοφολιού. + + + + New key generation failed. + Η δημιουργία νέου κλειδιού απέτυχε. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Πληροφορία + + + + Alias Core + + + + + Client name + Όνομα Πελάτη + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + Μη διαθέσιμο + + + + Client version + Έκδοση Πελάτη + + + + Using OpenSSL version + Χρησιμοποιηση της OpenSSL εκδοσης + + + + Using BerkeleyDB version + + + + + Build date + Ημερομηνία κατασκευής + + + + Startup time + Χρόνος εκκίνησης + + + + Network + Δίκτυο + + + + Name + + + + + Number of connections + Αριθμός συνδέσεων + + + + Block chain + Αλυσίδα μπλοκ + + + + Current number of blocks + Τρέχον αριθμός μπλοκ + + + + Estimated total blocks + Κατ' εκτίμηση συνολικά μπλοκς + + + + Last block time + Χρόνος τελευταίου μπλοκ + + + + Debug log file + Αρχείο καταγραφής εντοπισμού σφαλμάτων + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Άνοιγμα + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Κονσόλα + + + + Clear console + Καθαρισμός κονσόλας + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Χρησιμοποιήστε το πάνω και κάτω βέλος για να περιηγηθείτε στο ιστορικο, και <b>Ctrl-L</b> για εκκαθαριση οθονης. + + + + Type <b>help</b> for an overview of available commands. + Γράψτε <b>help</b> για μια επισκόπηση των διαθέσιμων εντολών + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Ανοιχτό μέχρι %1 + + + + conflicted + + + + + %1/offline + %1/χωρίς σύνδεση; + + + + %1/unconfirmed + %1/χωρίς επιβεβαίωση + + + + %1 confirmations + %1 επιβεβαιώσεις + + + + Transaction ID + ID Συναλλαγής: + + + + Block Hash + + + + + Status + Κατάσταση + + + + , has not been successfully broadcast yet + , δεν έχει ακόμα μεταδοθεί μ' επιτυχία + + + + , broadcast through %n node(s) + + + + + Date + Ημερομηνία + + + + Source + Πηγή + + + + Generated + Δημιουργία + + + + + Credit + Πίστωση + + + + matures in %n more block(s) + + + + + not accepted + μη αποδεκτό + + + + Transaction fee + Τέλος συναλλαγής + + + + Net amount + Καθαρό ποσό + + + + Message + Μήνυμα + + + + Comment + Σχόλιο: + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Πληροφορίες αποσφαλμάτωσης + + + + Debit + Debit + + + + Transaction + Συναλλαγή + + + + Inputs + εισροές + + + + Amount + Ποσό + + + + true + αληθής + + + + false + αναληθής + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + άγνωστο + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Λεπτομέρειες συναλλαγής + + + + This pane shows a detailed description of the transaction + Αυτό το παράθυρο δείχνει μια λεπτομερή περιγραφή της συναλλαγής + + + + TransactionTableModel + + + Date + Ημερομηνία + + + + Type + Τύπος + + + + Address + Διεύθυνση + + + + Note + + + + + Amount + Ποσό + + + + Open for %n more block(s) + + + + + Open until %1 + Ανοιχτό μέχρι %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Επικυρωμένη (%1 επικυρώσεις) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (δ/α) + + + + Transaction status. Hover over this field to show number of confirmations. + Κατάσταση συναλλαγής. Πηγαίνετε το ποντίκι πάνω από αυτό το πεδίο για να δείτε τον αριθμό των επικυρώσεων + + + + Date and time that the transaction was received. + Ημερομηνία κι ώρα λήψης της συναλλαγής. + + + + Type of transaction. + Είδος συναλλαγής. + + + + Destination address of transaction. + Διεύθυνση αποστολής της συναλλαγής. + + + + Amount removed from or added to balance. + Ποσό που αφαιρέθηκε ή προστέθηκε στο υπόλοιπο. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_en.ts b/src/qt/locale/alias_en.ts new file mode 100644 index 0000000000..7e0a20c975 --- /dev/null +++ b/src/qt/locale/alias_en.ts @@ -0,0 +1,4360 @@ + + + + + AboutDialog + + + About Alias + About Alias + + + + <b>Alias</b> version + <b>Alias</b> version + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + AddressTableModel + + + Label + Label + + + + Address + Address + + + + pubkey + pubkey + + + + stealth + stealth + + + + (no label) + (no label) + + + + Stealth Address + Stealth Address + + + + n/a + n/a + + + + AskPassphraseDialog + + + Passphrase Dialog + Passphrase Dialog + + + + Enter passphrase + Enter passphrase + + + + New passphrase + New passphrase + + + + Repeat new passphrase + Repeat new passphrase + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + For staking only + For staking only + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + Encrypt wallet + + + + Keep wallet unlocked for staking. + Keep wallet unlocked for staking. + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + <b>Alias Wallet Login</b> + <b>Alias Wallet Login</b> + + + + This operation needs your wallet passphrase to unlock the wallet. + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + Decrypt wallet + + + + Change passphrase + Change passphrase + + + + Enter the old and new passphrase to the wallet. + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + Are you sure you wish to encrypt your wallet? + Are you sure you wish to encrypt your wallet? + + + + + Wallet encrypted + Wallet encrypted + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + Wallet encryption failed + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + The supplied passphrases do not match. + The supplied passphrases do not match. + + + + Wallet unlock failed + Wallet unlock failed + + + + + + The passphrase entered for the wallet decryption was incorrect. + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + Wallet passphrase was successfully changed. + + + + + Warning: The Caps Lock key is on! + Warning: The Caps Lock key is on! + + + + ClientModel + + + Network Alert + Network Alert + + + + CoinControlDialog + + + Coin Control + Coin Control + + + + Quantity: + Quantity: + + + + Bytes: + Bytes: + + + + Amount: + Amount: + + + + Priority: + Priority: + + + + Fee: + Fee: + + + + Low Output: + Low Output: + + + + After Fee: + After Fee: + + + + Change: + Change: + + + + (un)select all + (un)select all + + + + Tree mode + Tree mode + + + + List mode + List mode + + + + Amount + Amount + + + + Label + Label + + + + Address + Address + + + + Date + Date + + + + Confirmations + Confirmations + + + + Confirmed + Confirmed + + + + Priority + Priority + + + + Copy address + Copy address + + + + Copy label + Copy label + + + + + Copy amount + Copy amount + + + + Copy transaction ID + Copy transaction ID + + + + Copy quantity + Copy quantity + + + + Copy fee + Copy fee + + + + Copy after fee + Copy after fee + + + + Copy bytes + Copy bytes + + + + Copy priority + Copy priority + + + + Copy low output + Copy low output + + + + Copy change + Copy change + + + + highest + highest + + + + high + high + + + + medium-high + medium-high + + + + medium + medium + + + + low-medium + low-medium + + + + low + low + + + + lowest + lowest + + + + + DUST + DUST + + + + + yes + yes + + + + + no + no + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + (no label) + (no label) + + + + change from %1 (%2) + change from %1 (%2) + + + + (change) + (change) + + + + EditAddressDialog + + + Edit Address + Edit Address + + + + &Label + &Label + + + + The label associated with this address book entry + The label associated with this address book entry + + + + &Address + &Address + + + + The address associated with this address book entry. This can only be modified for sending addresses. + The address associated with this address book entry. This can only be modified for sending addresses. + + + + &Stealth Address + &Stealth Address + + + + New receiving address + New receiving address + + + + New sending address + New sending address + + + + Edit receiving address + Edit receiving address + + + + Edit sending address + Edit sending address + + + + The entered address "%1" is not a valid Alias address. + The entered address "%1" is not a valid Alias address. + + + + The entered address "%1" is already in the address book. + The entered address "%1" is already in the address book. + + + + Could not unlock wallet. + Could not unlock wallet. + + + + New key generation failed. + New key generation failed. + + + + EncryptWalletPage + + + Wallet Encryption + Wallet Encryption + + + + Please enter a password to encrypt the wallet.dat file. + Please enter a password to encrypt the wallet.dat file. + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + &Wallet Password: + &Wallet Password: + + + + &Verify Password: + &Verify Password: + + + + Create and encrypt wallet.dat ... + Create and encrypt wallet.dat ... + + + + Error + Error + + + + Failed to create wallet.dat. ErrorCode: %1 + Failed to create wallet.dat. ErrorCode: %1 + + + + GUIUtil::HelpMessageBox + + + + Alias + Alias + + + + version + version + + + + Usage: + Usage: + + + + command-line options + command-line options + + + + UI options + UI options + + + + Set language, for example "de_DE" (default: system locale) + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + Start minimized + + + + Show splash screen on startup (default: 1) + Show splash screen on startup (default: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + Import wallet.dat + + + + Please import a wallet.dat file with your private keys. + Please import a wallet.dat file with your private keys. + + + + &Select wallet.dat + &Select wallet.dat + + + + QFileDialog::getOpenFileName() + QFileDialog::getOpenFileName() + + + + Wallet Files (*.dat) + Wallet Files (*.dat) + + + + Error + Error + + + + Failed to copy wallet.dat: %1 + Failed to copy wallet.dat: %1 + + + + IntroPage + + + Set Up Your Wallet + Set Up Your Wallet + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + &Create new mnemonic recovery seed words + &Create new mnemonic recovery seed words + + + + &Recover from your existing mnemonic seed words + &Recover from your existing mnemonic seed words + + + + &Import wallet.dat file + &Import wallet.dat file + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + Create private keys with Mnemonic Recovery Seed Words + + + + Step 2/3: Write down your mnemonic recovery seed words. + Step 2/3: Write down your mnemonic recovery seed words. + + + + Mnemonic Recovery Seed Words: + Mnemonic Recovery Seed Words: + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + Create private keys with Mnemonic Recovery Seed Words + + + + Step 1/3: Please define language to use and optional password to protect your seed. + Step 1/3: Please define language to use and optional password to protect your seed. + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + &Language: + &Language: + + + + &Seed Password: + &Seed Password: + + + + &Verify Password: + &Verify Password: + + + + Error + Error + + + + Failed to create Mnemonic Seed Words. %1 + Failed to create Mnemonic Seed Words. %1 + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + Create private keys with Mnemonic Recovery Seed Words + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + &Seed Password: + &Seed Password: + + + + <br>Enter Mnemonic Seed Words: + <br>Enter Mnemonic Seed Words: + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + Cannot start Alias: click-to-pay handler + + + + PeerTableModel + + + Address/Hostname + Address/Hostname + + + + User Agent + User Agent + + + + Ping Time + Ping Time + + + + QObject + + + %1 d + %1 d + + + + %1 h + %1 h + + + + %1 m + %1 m + + + + + %1 s + %1 s + + + + None + None + + + + N/A + N/A + + + + %1 ms + %1 ms + + + + RPCConsole + + + Alias - Debug window + Alias - Debug window + + + + &Information + &Information + + + + Alias Core + Alias Core + + + + Client name + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Client version + + + + Using OpenSSL version + Using OpenSSL version + + + + Using BerkeleyDB version + Using BerkeleyDB version + + + + Build date + Build date + + + + Startup time + Startup time + + + + Network + Network + + + + Name + Name + + + + Number of connections + Number of connections + + + + Block chain + Block chain + + + + Current number of blocks + Current number of blocks + + + + Estimated total blocks + Estimated total blocks + + + + Last block time + Last block time + + + + Debug log file + Debug log file + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + &Open + &Open + + + + Command-line options + Command-line options + + + + Show the Alias help message to get a list with possible Alias command-line options. + Show the Alias help message to get a list with possible Alias command-line options. + + + + &Show + &Show + + + + &Console + &Console + + + + Clear console + Clear console + + + + &Network Traffic + &Network Traffic + + + + &Clear + &Clear + + + + Totals + Totals + + + + + In: + In: + + + + + Out: + Out: + + + + &Peers + &Peers + + + + + + Select a peer to view detailed information. + Select a peer to view detailed information. + + + + Peer ID + Peer ID + + + + Direction + Direction + + + + Version + Version + + + + User Agent + User Agent + + + + Services + Services + + + + Starting Height + Starting Height + + + + Sync Height + Sync Height + + + + Ban Score + Ban Score + + + + Connection Time + Connection Time + + + + Last Send + Last Send + + + + Last Receive + Last Receive + + + + Bytes Sent + Bytes Sent + + + + Bytes Received + Bytes Received + + + + Ping Time + Ping Time + + + + Time Offset + Time Offset + + + + Welcome to the Alias Core RPC console. + Welcome to the Alias Core RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + Type <b>help</b> for an overview of available commands. + + + + via %1 + via %1 + + + + + never + never + + + + Inbound + Inbound + + + + Outbound + Outbound + + + + Unknown + Unknown + + + + + Fetching... + Fetching... + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + Recover private keys from Mnemonic Seed Words + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + &Seed Password: + &Seed Password: + + + + &Verify Password: + &Verify Password: + + + + <br>Enter Mnemonic Seed Words: + <br>Enter Mnemonic Seed Words: + + + + Error + Error + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + SetupWalletWizard + + + Alias Wallet Setup + Alias Wallet Setup + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + If you have a backup of a wallet.dat, you can import this file. + If you have a backup of a wallet.dat, you can import this file. + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + Please enter the mnemonic words and password given on the previous screen. + Please enter the mnemonic words and password given on the previous screen. + + + + Please enter your mnemonic words and (optional) password. + Please enter your mnemonic words and (optional) password. + + + + This help is likely not to be of any help. + This help is likely not to be of any help. + + + + Alias Wallet Setup Help + Alias Wallet Setup Help + + + + SpectreBridge + + + default + default + + + + <b>%1</b> from your public balance to %2 (%3) + <b>%1</b> from your public balance to %2 (%3) + + + + <b>%1</b> from public to private, using address %2 (%3) + <b>%1</b> from public to private, using address %2 (%3) + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + Error: + Error: + + + + Unknown txn type detected %1. + Unknown txn type detected %1. + + + + Input types must match for all recipients. + Input types must match for all recipients. + + + + Ring sizes must match for all recipients. + Ring sizes must match for all recipients. + + + + Ring size must be %1. + Ring size must be %1. + + + + Ring size outside range [%1, %2]. + Ring size outside range [%1, %2]. + + + + + Confirm send coins + Confirm send coins + + + + Are you sure you want to send? +Ring size of one is not anonymous. + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + and + and + + + + Are you sure you want to convert %1? + Are you sure you want to convert %1? + + + + Are you sure you want to send %1? + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + Send Coins + + + + The change address is not valid, please recheck. + The change address is not valid, please recheck. + + + + The recipient address is not valid, please recheck. + The recipient address is not valid, please recheck. + + + + Only ALIAS from your Private balance can be send to a stealth address. + Only ALIAS from your Private balance can be send to a stealth address. + + + + Transfer from Public to Private is only allowed within your account. + Transfer from Public to Private is only allowed within your account. + + + + Transfer from Private to Public is only allowed within your account. + Transfer from Private to Public is only allowed within your account. + + + + The amount to pay must be larger than 0. + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + Duplicate address found, can only send to each address once per send operation. + + + + Error: Transaction creation failed. + Error: Transaction creation failed. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: Note is too long. + Error: Note is too long. + + + + Error: Ring Size Error. + Error: Ring Size Error. + + + + Error: Input Type Error. + Error: Input Type Error. + + + + Error: Must be in full mode to send anon. + Error: Must be in full mode to send anon. + + + + Error: Invalid Stealth Address. + Error: Invalid Stealth Address. + + + + Convert Alias from Private to Public + Convert Alias from Private to Public + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + The amount exceeds your ALIAS balance. + The amount exceeds your ALIAS balance. + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + Error generating transaction. + Error generating transaction. + + + + Error generating transaction: %1 + Error generating transaction: %1 + + + + Transaction successfully created. + Transaction successfully created. + + + + Please restart wallet + Please restart wallet + + + + The used language has changed. +Please restart the wallet! + The used language has changed. +Please restart the wallet! + + + + SpectreGUI + + + Public received with + Public received with + + + + Public received from + Public received from + + + + Public sent to + Public sent to + + + + Public sent to self + Public sent to self + + + + Private sent to self + Private sent to self + + + + Public staked + Public staked + + + + Public donated + Public donated + + + + Public contributed + Public contributed + + + + Private staked + Private staked + + + + Private donated + Private donated + + + + Private contributed + Private contributed + + + + Private received with + Private received with + + + + Private sent to + Private sent to + + + + Private to Public + Private to Public + + + + Public to Private + Public to Private + + + + Other + Other + + + + + + + Alias + Alias + + + + Client + Client + + + + ..Start UI.. + ..Start UI.. + + + + .Start UI. + .Start UI. + + + + Ready! + Ready! + + + + E&xit + E&xit + + + + Quit application + Quit application + + + + &About Alias + &About Alias + + + + Show information about Alias + Show information about Alias + + + + About &Qt + About &Qt + + + + Show information about Qt + Show information about Qt + + + + &Options... + &Options... + + + + Modify configuration options for Alias + Modify configuration options for Alias + + + + &Show / Hide + &Show / Hide + + + + &Encrypt Wallet... + &Encrypt Wallet... + + + + Encrypt or decrypt wallet + Encrypt or decrypt wallet + + + + &Backup Wallet... + &Backup Wallet... + + + + Backup wallet to another location + Backup wallet to another location + + + + &Change Passphrase... + &Change Passphrase... + + + + Change the passphrase used for wallet encryption + Change the passphrase used for wallet encryption + + + + &Unlock Wallet... + &Unlock Wallet... + + + + Unlock wallet + Unlock wallet + + + + &Lock Wallet + &Lock Wallet + + + + Lock wallet + Lock wallet + + + + &Debug window + &Debug window + + + + Open debugging and diagnostic console + Open debugging and diagnostic console + + + + &File + &File + + + + &Settings + &Settings + + + + &Help + &Help + + + + Wallet + Wallet + + + + + [testnet] + [testnet] + + + + %n active connection(s) to Alias network + + %n active connection to Alias network + %n active connections to Alias network + + + + + block + block + + + + header + header + + + + blocks + blocks + + + + headers + headers + + + + + Synchronizing with network... + Synchronizing with network... + + + + Downloading filtered blocks... + Downloading filtered blocks... + + + + ~%1 filtered block(s) remaining (%2% done). + ~%1 filtered block(s) remaining (%2% done). + + + + Importing blocks... + Importing blocks... + + + + ~%n block(s) remaining + + %n block remaining + %n blocks remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + Imported %1 of %2 %3 of transaction history (%4% done). + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + Imported %n block(s) of transaction history. + + Imported %n block of transaction history. + Imported %n blocks of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + Downloaded %n block of transaction history. + Downloaded %n blocks of transaction history. + + + + + %n second(s) ago + + %n second ago + %n seconds ago + + + + + %n minute(s) ago + + %n minute ago + %n minutes ago + + + + + %n hour(s) ago + + %n hour ago + %n hours ago + + + + + %n day(s) ago + + %n day ago + %n days ago + + + + + Up to date + Up to date + + + + Catching up... + Catching up... + + + + Last received %1 was generated %2. + Last received %1 was generated %2. + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + Confirm transaction fee + Confirm transaction fee + + + + %1 %2 + %1 %2 + + + + Address: %1 +Note: %2 + + Address: %1 +Note: %2 + + + + + Address: %1 + + Address: %1 + + + + + + URI handling + URI handling + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + Backup Wallet + Backup Wallet + + + + Wallet Data (*.dat) + Wallet Data (*.dat) + + + + Backup Failed + Backup Failed + + + + There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to the new location. + + + + Lock Wallet + Lock Wallet + + + + Error: Wallet must first be encrypted to be locked. + Error: Wallet must first be encrypted to be locked. + + + + %1 second(s) + %1 second(s) + + + + %1 minute(s), %2 second(s) + %1 minute(s), %2 second(s) + + + + %1 hour(s), %2 minute(s) + %1 hour(s), %2 minute(s) + + + + %1 day(s), %2 hour(s) + %1 day(s), %2 hour(s) + + + + (last 72 blocks %1) + (last 72 blocks %1) + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + Not staking because wallet is in thin mode + Not staking because wallet is in thin mode + + + + Not staking, staking is disabled + Not staking, staking is disabled + + + + Not staking because wallet is locked + Not staking because wallet is locked + + + + Not staking because wallet is offline + Not staking because wallet is offline + + + + Not staking because wallet is syncing + Not staking because wallet is syncing + + + + Initializing staking... + Initializing staking... + + + + Not staking because you don't have mature coins + Not staking because you don't have mature coins + + + + Not staking + Not staking + + + + TrafficGraphWidget + + + KB/s + KB/s + + + + TransactionDesc + + + Open for %n block(s) + + Open for %n block + Open for %n blocks + + + + + Open until %1 + Open until %1 + + + + conflicted + conflicted + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/unconfirmed + + + + %1 confirmations + %1 confirmations + + + + Transaction ID + Transaction ID + + + + Block Hash + Block Hash + + + + Status + Status + + + + , has not been successfully broadcast yet + , has not been successfully broadcast yet + + + + , broadcast through %n node(s) + + , broadcast through %n node + , broadcast through %n nodes + + + + + Date + Date + + + + Source + Source + + + + Generated + Generated + + + + + Credit + Credit + + + + matures in %n more block(s) + + matures in %n more block + matures in %n more blocks + + + + + not accepted + not accepted + + + + Transaction fee + Transaction fee + + + + Net amount + Net amount + + + + Message + Message + + + + Comment + Comment + + + + Comment-To + Comment-To + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + Debug information + + + + Debit + Debit + + + + Transaction + Transaction + + + + Inputs + Inputs + + + + Amount + Amount + + + + true + true + + + + false + false + + + + + Converted + Converted + + + + from public to private + from public to private + + + + from private to public + from private to public + + + + Address + Address + + + + + Note + Note + + + + unknown + unknown + + + + <dd> + <dd> + + + + TransactionDescDialog + + + Transaction details + Transaction details + + + + This pane shows a detailed description of the transaction + This pane shows a detailed description of the transaction + + + + TransactionTableModel + + + Date + Date + + + + Type + Type + + + + Address + Address + + + + Note + Note + + + + Amount + Amount + + + + Open for %n more block(s) + + Open for %n more block + Open for %n more blocks + + + + + Open until %1 + Open until %1 + + + + Offline + Offline + + + + Unconfirmed + Unconfirmed + + + + Confirming (%1 of %2 required confirmations) + Confirming (%1 of %2 required confirmations) + + + + Confirming (%1 of %2 recommended confirmations) + Confirming (%1 of %2 recommended confirmations) + + + + Confirmed (%1 confirmations) + Confirmed (%1 confirmations) + + + + Conflicted + Conflicted + + + + Immature (%1 confirmations, will be available after %2) + Immature (%1 confirmations, will be available after %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + Orphan %1 stake, someone else submitted the block before you. + Orphan %1 stake, someone else submitted the block before you. + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + Date and time that the transaction was received. + + + + Type of transaction. + Type of transaction. + + + + Destination address of transaction. + Destination address of transaction. + + + + Amount removed from or added to balance. + Amount removed from or added to balance. + + + + WalletModel + + + + Sending... + Sending... + + + + alias-bridge + + + Overview + Overview + + + + Wallet + Wallet + + + + Send + Send + + + + Receive + Receive + + + + Transactions + Transactions + + + + Address Book + Address Book + + + + Options + Options + + + + Advanced + Advanced + + + + Backup Wallet + Backup Wallet + + + + Encrypt Wallet + Encrypt Wallet + + + + Change Passphrase + Change Passphrase + + + + (Un)lock Wallet + (Un)lock Wallet + + + + Tools + Tools + + + + Chain Data + Chain Data + + + + Block Explorer + Block Explorer + + + + Sign Message + Sign Message + + + + Verify Message + Verify Message + + + + Debug + Debug + + + + About Alias + About Alias + + + + About QT + About QT + + + + QR code + QR code + + + + Address: + Address: + + + + Label: + Label: + + + + Amount: + Amount: + + + + Add new receive address + Add new receive address + + + + Add Address + Add Address + + + + Add a new contact + Add a new contact + + + + Address Lookup + Address Lookup + + + + Address Type + Address Type + + + + Stealth + Stealth + + + + Group + Group + + + + BIP32 + BIP32 + + + + Label + Label + + + + Address + Address + + + + Public Key + Public Key + + + + Transaction Hash + Transaction Hash + + + + Recent Transactions + Recent Transactions + + + + Coin Control + Coin Control + + + + Make payment + Make payment + + + + Balance transfer + Balance transfer + + + + Select Inputs + Select Inputs + + + + Automatically selected + Automatically selected + + + + Quantity: + Quantity: + + + + Fee: + Fee: + + + + After Fee: + After Fee: + + + + Bytes: + Bytes: + + + + Priority: + Priority: + + + + LowOutput: + LowOutput: + + + + Change: + Change: + + + + Custom change address + Custom change address + + + + From account + From account + + + + PUBLIC + PUBLIC + + + + PRIVATE + PRIVATE + + + + Balance: + Balance: + + + + Ring Size: + Ring Size: + + + + To account + To account + + + + Pay to + Pay to + + + + (no label) + (no label) + + + + Master + Master + + + + Wallet is encrypted and currently locked + Wallet is encrypted and currently locked + + + + Not staking because wallet is locked + Not staking because wallet is locked + + + + 0 active connection(s) to Alias network + 0 active connection(s) to Alias network + + + + Enter a label for this address to add it to your address book + Enter a label for this address to add it to your address book + + + + Enter a address to add it to your address book + Enter a address to add it to your address book + + + + Inputs + Inputs + + + + Values + Values + + + + Outputs + Outputs + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to sign + Enter the message you want to sign + + + + Click sign message to generate signature + Click sign message to generate signature + + + + Copy the signed message signature + Copy the signed message signature + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to verify + Enter the message you want to verify + + + + Enter a Alias signature + Enter a Alias signature + + + + Paste signature from clipboard + Paste signature from clipboard + + + + Your total balance + Your total balance + + + + Recent in/out transactions or stakes + Recent in/out transactions or stakes + + + + Select inputs to spend + Select inputs to spend + + + + Optional address to receive transaction change + Optional address to receive transaction change + + + + Choose from address book + Choose from address book + + + + Paste address from clipboard + Paste address from clipboard + + + + Remove this recipient + Remove this recipient + + + + Send from public or private + Send from public or private + + + + Current spendable send payment balance + Current spendable send payment balance + + + + Send to public or private + Send to public or private + + + + Current spendable balance to account + Current spendable balance to account + + + + The label for this address + The label for this address + + + + Amount to transfer + Amount to transfer + + + + Send to multiple recipients at once + Send to multiple recipients at once + + + + Date and time that the transaction was received. + Date and time that the transaction was received. + + + + Transaction status. Hover over this field to show number of confirmations. + Transaction status. Hover over this field to show number of confirmations. + + + + Type of transaction. + Type of transaction. + + + + Destination address of transaction. + Destination address of transaction. + + + + Short payment note. + Short payment note. + + + + Amount removed from or added to balance. + Amount removed from or added to balance. + + + + Name for this Wallet + Name for this Wallet + + + + Enter a password + Enter a password + + + + Would you like to create a bip44 path? + Would you like to create a bip44 path? + + + + Your recovery phrase (Keep this safe!) + Your recovery phrase (Keep this safe!) + + + + Recovery Phrase + Recovery Phrase + + + + Wallet Name for recovered account + Wallet Name for recovered account + + + + Enter the password for the wallet you are trying to recover + Enter the password for the wallet you are trying to recover + + + + Is this a bip44 path? + Is this a bip44 path? + + + + ID + ID + + + + Created + Created + + + + Active Account + Active Account + + + + Default + Default + + + + Path + Path + + + + Active + Active + + + + Amount + Amount + + + + Note + Note + + + + Public coins, visible on blockchain + Public coins, visible on blockchain + + + + Private coins, untraceable and unlinkable on blockchain + Private coins, untraceable and unlinkable on blockchain + + + + Available coins for spending + Available coins for spending + + + + Reserved coins are not used for staking + Reserved coins are not used for staking + + + + Staked coins must mature before they can be accessed + Staked coins must mature before they can be accessed + + + + Stake + Stake + + + + Sub-Wallets + Sub-Wallets + + + + Start Alias on system login + Start Alias on system login + + + + Detach databases at shutdown + Detach databases at shutdown + + + + Pay transaction fee + Pay transaction fee + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + Most transactions are 1kB. The minimal fee is 0.0001 + Most transactions are 1kB. The minimal fee is 0.0001 + + + + Enable Staking + Enable Staking + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + Staking Donation + Staking Donation + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + Reserve + Reserve + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + Minimum Stake Interval + Minimum Stake Interval + + + + Main + Main + + + + Window + Window + + + + Display + Display + + + + Minimize to the tray instead of the taskbar + Minimize to the tray instead of the taskbar + + + + Minimize on close + Minimize on close + + + + User Interface language + User Interface language + + + + Unit to show amounts in + Unit to show amounts in + + + + Rows per page + Rows per page + + + + Display addresses in transaction list + Display addresses in transaction list + + + + Notifications + Notifications + + + + Visible Transaction Types + Visible Transaction Types + + + + Cancel + Cancel + + + + Apply + Apply + + + + Ok + Ok + + + + Reserved + Reserved + + + + Unconfirmed + Unconfirmed + + + + Immature + Immature + + + + Type + Type + + + + Date + Date + + + + Send Payment + Send Payment + + + + The address to send the payment to + The address to send the payment to + + + + Enter a label for this address + Enter a label for this address + + + + Add Sub-Wallet + Add Sub-Wallet + + + + Immature generated coins with Proof-of-Work + Immature generated coins with Proof-of-Work + + + + Blockchain Info + Blockchain Info + + + + Checking wallet state with network + Checking wallet state with network + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + Total Balance + Total Balance + + + + Balance + Balance + + + + Available + Available + + + + Public + Public + + + + Private + Private + + + + Tor+OBFS4 connection online + Tor+OBFS4 connection online + + + + Wallet Encryption + Wallet Encryption + + + + A short reference for the recipient (max 24 characters) + A short reference for the recipient (max 24 characters) + + + + ALIAS Denomination Value + ALIAS Denomination Value + + + + No. Owned (* = Immature) + No. Owned (* = Immature) + + + + No. System Unspent (* = Immature) + No. System Unspent (* = Immature) + + + + No. available Mixins (* = Immature) + No. available Mixins (* = Immature) + + + + No. System (** = Compromised) + No. System (** = Compromised) + + + + The last block a coin of this denomination was created + The last block a coin of this denomination was created + + + + Owned (*) + Owned (*) + + + + Unspent (*) + Unspent (*) + + + + Mixins (*) + Mixins (*) + + + + System (**) + System (**) + + + + Least Depth + Least Depth + + + + Value Out + Value Out + + + + Value + Value + + + + Addressbook + Addressbook + + + + Refresh + Refresh + + + + Hash + Hash + + + + Height + Height + + + + Timestamp + Timestamp + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + An address label for the payment senders address book + An address label for the payment senders address book + + + + Enter a short note to send with a payment (max 24 characters) + Enter a short note to send with a payment (max 24 characters) + + + + Filter by label or address... + Filter by label or address... + + + + Note to send with payment (max 24 characters) + Note to send with payment (max 24 characters) + + + + The private address to transfer the balance to + The private address to transfer the balance to + + + + Search by label or address + Search by label or address + + + + Search + Search + + + + Family vacation funds + Family vacation funds + + + + Grouping will consolidate transactions of chosen + Grouping will consolidate transactions of chosen + + + + Reset form + Reset form + + + + Restore Sub-Wallet + Restore Sub-Wallet + + + + Filter outputs + Filter outputs + + + + Find Block by hash/height/transaction + Find Block by hash/height/transaction + + + + alias-core + + + To use the %s option + To use the %s option + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + Error + Error + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + Alias version + Alias version + + + + Usage: + Usage: + + + + Send command to -server or aliaswalletd + Send command to -server or aliaswalletd + + + + List commands + List commands + + + + Get help for a command + Get help for a command + + + + Alias + Alias + + + + Options: + Options: + + + + This help message + This help message + + + + Specify configuration file (default: alias.conf) + Specify configuration file (default: alias.conf) + + + + Specify pid file (default: alias.pid) + Specify pid file (default: alias.pid) + + + + Specify data directory + Specify data directory + + + + Specify wallet file (within data directory) + Specify wallet file (within data directory) + + + + Set database cache size in megabytes (default: 25) + Set database cache size in megabytes (default: 25) + + + + Set database disk log size in megabytes (default: 100) + Set database disk log size in megabytes (default: 100) + + + + Specify connection timeout in milliseconds (default: 5000) + Specify connection timeout in milliseconds (default: 5000) + + + + Connect through socks proxy + Connect through socks proxy + + + + Select the version of socks proxy to use (4-5, default: 5) + Select the version of socks proxy to use (4-5, default: 5) + + + + Use proxy to reach tor hidden services (default: same as -proxy) + Use proxy to reach tor hidden services (default: same as -proxy) + + + + Allow DNS lookups for -addnode, -seednode and -connect + Allow DNS lookups for -addnode, -seednode and -connect + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + Maintain at most <n> connections to peers (default: 125) + Maintain at most <n> connections to peers (default: 125) + + + + Add a node to connect to and attempt to keep the connection open + Add a node to connect to and attempt to keep the connection open + + + + Connect only to the specified node(s) + Connect only to the specified node(s) + + + + Connect to a node to retrieve peer addresses, and disconnect + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + Specify your own public address + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Discover own IP address (default: 1 when listening and no -externalip) + Discover own IP address (default: 1 when listening and no -externalip) + + + + Find peers using internet relay chat (default: 0) + Find peers using internet relay chat (default: 0) + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + Bind to given address. Use [host]:port notation for IPv6 + Bind to given address. Use [host]:port notation for IPv6 + + + + Find peers using DNS lookup (default: 1) + Find peers using DNS lookup (default: 1) + + + + Stake your coins to support network and gain reward (default: 1) + Stake your coins to support network and gain reward (default: 1) + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + Sync checkpoints policy (default: strict) + Sync checkpoints policy (default: strict) + + + + Threshold for disconnecting misbehaving peers (default: 100) + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Use UPnP to map the listening port (default: 1 when listening) + Use UPnP to map the listening port (default: 1 when listening) + + + + Use UPnP to map the listening port (default: 0) + Use UPnP to map the listening port (default: 0) + + + + Detach block and address databases. Increases shutdown time (default: 0) + Detach block and address databases. Increases shutdown time (default: 0) + + + + Fee per KB to add to transactions you send + Fee per KB to add to transactions you send + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + Accept command line and JSON-RPC commands + Accept command line and JSON-RPC commands + + + + Run in the background as a daemon and accept commands + Run in the background as a daemon and accept commands + + + + Use the test network + Use the test network + + + + Output extra debugging information. Implies all other -debug* options + Output extra debugging information. Implies all other -debug* options + + + + Output extra network debugging information + Output extra network debugging information + + + + Prepend debug output with timestamp + Prepend debug output with timestamp + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Send trace/debug info to console instead of debug.log file + Send trace/debug info to console instead of debug.log file + + + + Send trace/debug info to debugger + Send trace/debug info to debugger + + + + Username for JSON-RPC connections + Username for JSON-RPC connections + + + + Password for JSON-RPC connections + Password for JSON-RPC connections + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + Allow JSON-RPC connections from specified IP address + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Require a confirmations for change (default: 0) + Require a confirmations for change (default: 0) + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + Upgrade wallet to latest format + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + Rescan the block chain for missing wallet transactions + + + + Attempt to recover private keys from a corrupt wallet.dat + Attempt to recover private keys from a corrupt wallet.dat + + + + How many blocks to check at startup (default: 2500, 0 = all) + How many blocks to check at startup (default: 2500, 0 = all) + + + + How thorough the block verification is (0-6, default: 1) + How thorough the block verification is (0-6, default: 1) + + + + Imports blocks from external blk000?.dat file + Imports blocks from external blk000?.dat file + + + + Block creation options: + Block creation options: + + + + Set minimum block size in bytes (default: 0) + Set minimum block size in bytes (default: 0) + + + + Set maximum block size in bytes (default: 250000) + Set maximum block size in bytes (default: 250000) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + Use OpenSSL (https) for JSON-RPC connections + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + Server private key (default: server.pem) + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + Invalid amount for -paytxfee=<amount>: '%s' + Invalid amount for -paytxfee=<amount>: '%s' + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Invalid amount for -mininput=<amount>: '%s' + Invalid amount for -mininput=<amount>: '%s' + + + + Wallet %s resides outside data directory %s. + Wallet %s resides outside data directory %s. + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + Verifying database integrity... + Verifying database integrity... + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + wallet.dat corrupt, salvage failed + wallet.dat corrupt, salvage failed + + + + Unknown -socks proxy version requested: %i + Unknown -socks proxy version requested: %i + + + + Unknown network specified in -onlynet: '%s' + Unknown network specified in -onlynet: '%s' + + + + Invalid -proxy address: '%s' + Invalid -proxy address: '%s' + + + + Invalid -tor address: '%s' + Invalid -tor address: '%s' + + + + Cannot resolve -bind address: '%s' + Cannot resolve -bind address: '%s' + + + + Failed to listen on any port. + Failed to listen on any port. + + + + Failed to listen on any port. Use -listen=0 if you want this. + Failed to listen on any port. Use -listen=0 if you want this. + + + + Cannot resolve -externalip address: '%s' + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -reservebalance=<amount> + Invalid amount for -reservebalance=<amount> + + + + Unable to sign checkpoint, wrong checkpointkey? + + Unable to sign checkpoint, wrong checkpointkey? + + + + + Loading block index... + Loading block index... + + + + Error loading blk0001.dat + Error loading blk0001.dat + + + + Loading wallet... + Loading wallet... + + + + Error loading wallet.dat: Wallet corrupted + Error loading wallet.dat: Wallet corrupted + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Error loading wallet.dat: Wallet requires newer version of Alias + Error loading wallet.dat: Wallet requires newer version of Alias + + + + Wallet needed to be rewritten: restart Alias to complete + Wallet needed to be rewritten: restart Alias to complete + + + + Error loading wallet.dat + Error loading wallet.dat + + + + Cannot downgrade wallet + Cannot downgrade wallet + + + + Cannot initialize keypool + Cannot initialize keypool + + + + Cannot write default address + Cannot write default address + + + + Rescanning... + Rescanning... + + + + Importing blockchain data file. + Importing blockchain data file. + + + + Importing bootstrap blockchain data file. + Importing bootstrap blockchain data file. + + + + Loading addresses... + Loading addresses... + + + + Error: could not start node + Error: could not start node + + + + Done loading + Done loading + + + + Unable to bind to %s on this computer. Alias is probably already running. + Unable to bind to %s on this computer. Alias is probably already running. + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Error: Wallet locked, unable to create transaction + Error: Wallet locked, unable to create transaction + + + + Error: Wallet unlocked for staking only, unable to create transaction. + Error: Wallet unlocked for staking only, unable to create transaction. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + Error: Transaction creation failed + Error: Transaction creation failed + + + + Sending... + Sending... + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Invalid amount + Invalid amount + + + + Insufficient funds + Insufficient funds + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + Warning: This version is obsolete, upgrade required! + Warning: This version is obsolete, upgrade required! + + + + WARNING: syncronized checkpoint violation detected, but skipped! + WARNING: syncronized checkpoint violation detected, but skipped! + + + + Warning: Disk space is low! + Warning: Disk space is low! + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + Read ATXOs... (%d) + Read ATXOs... (%d) + + + + Read spent ATXOs... (%d) + Read spent ATXOs... (%d) + + + + Note must be 24 characters or less. + Note must be 24 characters or less. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + Initialization sanity check failed. Alias is shutting down. + Initialization sanity check failed. Alias is shutting down. + + + + Loading block index... (%d) + Loading block index... (%d) + + + + Calculating chain trust... (%d) + Calculating chain trust... (%d) + + + + Validating last %d block... + Validating last %d block... + + + + -bip44key is not allowed if wallet.dat already exists + -bip44key is not allowed if wallet.dat already exists + + + + Cannot resolve binding address: '%s' + Cannot resolve binding address: '%s' + + + + Error: could not start tor node + Error: could not start tor node + + + + Timed out waiting for onion hostname. + Timed out waiting for onion hostname. + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + Loading wallet items... (%d) + Loading wallet items... (%d) + + + + Reindexing from blk000?.dat files. + Reindexing from blk000?.dat files. + + + + Reindexing block... (%d) + Reindexing block... (%d) + + + + Core started! + Core started! + + + + Use tor hidden services version 2 instead of version 3 + Use tor hidden services version 2 instead of version 3 + + + + Find peers using .onion seeds (default: 1 unless -connect) + Find peers using .onion seeds (default: 1 unless -connect) + + + + Minimum time in seconds between successful stakes (default: 30) + Minimum time in seconds between successful stakes (default: 30) + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + Simple command line interface - if not run as daemon + Simple command line interface - if not run as daemon + + + + Output extra blockchain debugging information + Output extra blockchain debugging information + + + + Output extra Proof of Stake debugging information + Output extra Proof of Stake debugging information + + + + Send trace/debug info to debug.log file + Send trace/debug info to debug.log file + + + + Wait for RPC server to start + Wait for RPC server to start + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + Rebuild block chain index from current blk000?.dat files on startup + Rebuild block chain index from current blk000?.dat files on startup + + + + Show version and exit + Show version and exit + + + + Thin options: + Thin options: + + + + Operate in less secure, less resource hungry 'thin' mode + Operate in less secure, less resource hungry 'thin' mode + + + + Keep the entire block index in memory. (default: 0) + Keep the entire block index in memory. (default: 0) + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + Disable supporting thin nodes. (default: 0) + Disable supporting thin nodes. (default: 0) + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + Don't connect to more than <n> thin peers (default: 8) + Don't connect to more than <n> thin peers (default: 8) + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + conn + conn + + + + Error: Wallet locked, unable to create transaction. + Error: Wallet locked, unable to create transaction. + + + + Error: Must be in full mode. + Error: Must be in full mode. + + + + Error: Block chain must be fully synced first. + Error: Block chain must be fully synced first. + + + + Error: Alias is not connected! + Error: Alias is not connected! + + + + Update balance... + Update balance... + + + + ...Start UI... + ...Start UI... + + + + Shutdown... + Shutdown... + + + diff --git a/src/qt/locale/alias_eo.ts b/src/qt/locale/alias_eo.ts new file mode 100644 index 0000000000..1308bc5b4a --- /dev/null +++ b/src/qt/locale/alias_eo.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Etikedo + + + + Address + Adreso + + + + pubkey + + + + + stealth + + + + + (no label) + (neniu etikedo) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Dialogo pri pasfrazo + + + + Enter passphrase + Enigu pasfrazon + + + + New passphrase + Nova pasfrazo + + + + Repeat new passphrase + Ripetu la novan pasfrazon + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Enigu novan pasfrazon por la monujo.<br/>Bonvolu uzi pasfrazon kun <b>almenaŭ 10 hazardaj signoj</b>, aŭ <b>almenaŭ ok vortoj</b>. + + + + Encrypt wallet + Ĉifri la monujon + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Ĉi tiu operacio bezonas vian monujan pasfrazon, por malŝlosi la monujon. + + + + Unlock wallet + Malŝlosi la monujon + + + + This operation needs your wallet passphrase to decrypt the wallet. + Ĉi tiu operacio bezonas vian monujan pasfrazon, por malĉifri la monujon. + + + + Decrypt wallet + Malĉifri la monujon + + + + Change passphrase + Ŝanĝi la pasfrazon + + + + Enter the old and new passphrase to the wallet. + Tajpu la malnovan kaj novan monujajn pasfrazojn. + + + + Confirm wallet encryption + Konfirmo de ĉifrado de la monujo + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + Ĉu vi certas, ke vi volas ĉifri la monujon? + + + + + Wallet encrypted + La monujo estas ĉifrita + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + GRAVE: antaŭaj sekur-kopioj de via monujo-dosiero estas forigindaj kiam vi havas nove kreitan ĉifritan monujo-dosieron. Pro sekureco, antaŭaj kopioj de la neĉifrita dosiero ne plu funkcios tuj kiam vi ekuzos la novan ĉifritan dosieron. + + + + + + + Wallet encryption failed + Ĉifrado de la monujo fiaskis + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Ĉifrado de monujo fiaskis pro interna eraro. Via monujo ne estas ĉifrita. + + + + + The supplied passphrases do not match. + La pasfrazoj entajpitaj ne samas. + + + + Wallet unlock failed + Malŝloso de la monujo fiaskis + + + + + + The passphrase entered for the wallet decryption was incorrect. + La pasfrazo enigita por ĉifrado de monujo ne ĝustas. + + + + Wallet decryption failed + Malĉifrado de la monujo fiaskis + + + + Wallet passphrase was successfully changed. + Vi sukcese ŝanĝis la pasfrazon de la monujo. + + + + + Warning: The Caps Lock key is on! + Atentu: la majuskla baskulo estas ŝaltita! + + + + ClientModel + + + Network Alert + Reta Averto + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + Kvanto: + + + + Bytes: + Bajtoj: + + + + Amount: + Sumo: + + + + Priority: + Prioritato: + + + + Fee: + Krompago: + + + + Low Output: + Malalta Eligo: + + + + After Fee: + Post krompago: + + + + Change: + Restmono: + + + + (un)select all + (mal)elekti ĉion + + + + Tree mode + Arboreĝimo + + + + List mode + Listreĝimo + + + + Amount + Sumo + + + + Label + + + + + Address + Adreso + + + + Date + Dato + + + + Confirmations + Konfirmoj + + + + Confirmed + Konfirmita + + + + Priority + Prioritato + + + + Copy address + Kopii adreson + + + + Copy label + Kopii etikedon + + + + + Copy amount + Kopii sumon + + + + Copy transaction ID + Kopii transakcian ID-on + + + + Copy quantity + Kopii kvanton + + + + Copy fee + Kopii krompagon + + + + Copy after fee + Kopii post krompago + + + + Copy bytes + Kopii bajtojn + + + + Copy priority + Kopii prioritaton + + + + Copy low output + Kopii malaltan eligon + + + + Copy change + Kopii restmonon + + + + highest + plej alta + + + + high + alta + + + + medium-high + mezalta + + + + medium + meza + + + + low-medium + mezmalalta + + + + low + malalta + + + + lowest + plej malalta + + + + + DUST + + + + + + yes + jes + + + + + no + ne + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (neniu etikedo) + + + + change from %1 (%2) + restmono de %1 (%2) + + + + (change) + (restmono) + + + + EditAddressDialog + + + Edit Address + Redakti Adreson + + + + &Label + &Etikedo + + + + The label associated with this address book entry + + + + + &Address + &Adreso + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Nova adreso por ricevi + + + + New sending address + Nova adreso por sendi + + + + Edit receiving address + Redakti adreson por ricevi + + + + Edit sending address + Redakti adreson por sendi + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + La adreso enigita "%1" jam ekzistas en la adresaro. + + + + Could not unlock wallet. + Ne eblis malŝlosi monujon. + + + + New key generation failed. + Fiaskis kreo de nova ŝlosilo. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informoj + + + + Alias Core + + + + + Client name + Nomo de kliento + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + neaplikebla + + + + Client version + Versio de kliento + + + + Using OpenSSL version + uzas OpenSSL-version + + + + Using BerkeleyDB version + + + + + Build date + Dato de kompilado + + + + Startup time + Horo de lanĉo + + + + Network + Reto + + + + Name + + + + + Number of connections + Nombro de konektoj + + + + Block chain + Blokĉeno + + + + Current number of blocks + Aktuala nombro de blokoj + + + + Estimated total blocks + Supozita totalo da blokoj + + + + Last block time + Horo de la lasta bloko + + + + Debug log file + Sencimiga protokoldosiero + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Malfermi + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Konzolo + + + + Clear console + Malplenigi konzolon + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Uzu la sagojn supran kaj malsupran por esplori la historion, kaj <b>stir-L</b> por malplenigi la ekranon. + + + + Type <b>help</b> for an overview of available commands. + Tajpu <b>help</b> por superrigardo de la disponeblaj komandoj. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Malferma ĝis %1 + + + + conflicted + + + + + %1/offline + %1/senkonekte + + + + %1/unconfirmed + %1/nekonfirmite + + + + %1 confirmations + %1 konfirmoj + + + + Transaction ID + Transakcia ID + + + + Block Hash + + + + + Status + Stato + + + + , has not been successfully broadcast yet + , ankoraŭ ne elsendita sukcese + + + + , broadcast through %n node(s) + + + + + Date + Dato + + + + Source + Fonto + + + + Generated + Kreita + + + + + Credit + Kredito + + + + matures in %n more block(s) + + + + + not accepted + ne akceptita + + + + Transaction fee + Krompago + + + + Net amount + Neta sumo + + + + Message + Mesaĝo + + + + Comment + Komento + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Sencimigaj informoj + + + + Debit + Debeto + + + + Transaction + Transakcio + + + + Inputs + Enigoj + + + + Amount + Sumo + + + + true + vera + + + + false + malvera + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + nekonata + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Transakciaj detaloj + + + + This pane shows a detailed description of the transaction + Tiu ĉi panelo montras detalan priskribon de la transakcio + + + + TransactionTableModel + + + Date + Dato + + + + Type + Tipo + + + + Address + Adreso + + + + Note + + + + + Amount + Sumo + + + + Open for %n more block(s) + + + + + Open until %1 + Malferma ĝis %1 + + + + Offline + Senkonekte + + + + Unconfirmed + Nekonfirmita + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Konfirmita (%1 konfirmoj) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + neaplikebla + + + + Transaction status. Hover over this field to show number of confirmations. + Transakcia stato. Ŝvebi super tiu ĉi kampo por montri la nombron de konfirmoj. + + + + Date and time that the transaction was received. + Dato kaj horo kiam la transakcio alvenis. + + + + Type of transaction. + Tipo de transakcio. + + + + Destination address of transaction. + Celadreso de la transakcio. + + + + Amount removed from or added to balance. + Sumo elprenita de aŭ aldonita al la saldo. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_es.ts b/src/qt/locale/alias_es.ts new file mode 100644 index 0000000000..c86a13aeb7 --- /dev/null +++ b/src/qt/locale/alias_es.ts @@ -0,0 +1,4323 @@ + + + AboutDialog + + + About Alias + Acerca de Alias + + + + <b>Alias</b> version + <b>Alias</b> versión + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + ©2020 Desarrolladores de alias +© 2016 desarrolladores de Spectrecoin +© 2014 desarrolladores de ShadowCash +© 2014 desarrolladores de BlackCoin +© 2012 desarrolladores de NovaCoin +© 2009 desarrolladores de Bitcoin + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + Este es un software experimental. + +Distribuido bajo la licencia de software MIT/X11, véase el archivo adjunto COPYING o <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php. </a> + +Este producto incluye software desarrollado por el Proyecto OpenSSL para su uso en el OpenSSL Toolkit <a href="https://www.openssl.org/">(https://www.openssl.org/</a>) y software criptográfico escrito por Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) y software UPnP escrito por Thomas Bernard. + + + + AddressTableModel + + + Label + Etiqueta + + + + Address + Dirección + + + + pubkey + pubkey + + + + stealth + Oculto + + + + (no label) + (sin etiqueta) + + + + Stealth Address + Direccion Oculta + + + + n/a + n/a + + + + AskPassphraseDialog + + + Passphrase Dialog + Diálogo de contraseña + + + + Enter passphrase + Introducir contraseña + + + + New passphrase + Nueva contraseña + + + + Repeat new passphrase + Repita la nueva contraseña + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Sirve para desactivar SendMoney cuando la cuenta del Sistema Operativo está comprometida. No ofrece seguridad real. + + + + For staking only + Para "Staking" solamente + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Introduzca la nueva contraseña de la Billetera.<br/>Por favor elija una con <b>10 o más caracteres aleatorios</b>, u <b>ocho o más palabras</b>. + + + + Encrypt wallet + Cifrar la Billetera + + + + Keep wallet unlocked for staking. + Mantenga la billetera desbloqueada para apostar. + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + Su Billetera contiene ATXOs bloqueados cuyo estado de gasto sólo puede determinarse con su clave privada. Su<b> saldo privado de ALIAS podría mostrarse de forma errónea</b>. + + + + <b>Alias Wallet Login</b> + <b>Inicio de sesión de Alias Wallet</b> + + + + This operation needs your wallet passphrase to unlock the wallet. + Esta operación requiere su contraseña para desbloquear la billetera. + + + + Unlock wallet + Desbloquear billetera + + + + This operation needs your wallet passphrase to decrypt the wallet. + Esta operación requiere su contraseña para descifrar la billetera. + + + + Decrypt wallet + Descifrar la billetera + + + + Change passphrase + Cambiar contraseña + + + + Enter the old and new passphrase to the wallet. + Introduzca la contraseña anterior de la billetera y la nueva. + + + + Confirm wallet encryption + Confirmar cifrado de la billetera + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Advertencia: Si encripta su billetera y pierde su frase de contraseña, puede <b>PERDER TODAS SUS MONEDAS</ b>! + + + + Are you sure you wish to encrypt your wallet? + ¿Seguro que desea cifrar su billetera? + + + + + Wallet encrypted + Billetera cifrada + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias cerrará para terminar el proceso de encriptación. Recuerde que la encriptación de su billetera no puede proteger completamente que sus monedas sean robadas por malware infectando su computadora. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANTE: Cualquier copia de seguridad que haya realizado previamente de su archivo de billetera debe reemplazarse con el nuevo archivo de billetera cifrada. Por razones de seguridad, las copias de seguridad previas del archivo de billetera no cifradas serán inservibles en cuanto comience a usar el nuevo billetera cifrada. + + + + + + + Wallet encryption failed + Ha fallado el cifrado de la billetera + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Ha fallado el cifrado de la billetera debido a un error interno. La Billetera no ha sido cifrado. + + + + + The supplied passphrases do not match. + Las contraseñas no coinciden. + + + + Wallet unlock failed + Ha fallado el desbloqueo de la billetera + + + + + + The passphrase entered for the wallet decryption was incorrect. + La contraseña introducida para descifrar la billetera es incorrecta. + + + + Wallet decryption failed + Ha fallado el descifrado de la billetera + + + + Wallet passphrase was successfully changed. + Se ha cambiado correctamente la contraseña de la billetera. + + + + + Warning: The Caps Lock key is on! + Aviso: ¡La tecla de bloqueo de mayúsculas está activada! + + + + ClientModel + + + Network Alert + Alerta de red + + + + CoinControlDialog + + + Coin Control + Control de Moneda + + + + Quantity: + Cantidad: + + + + Bytes: + Bytes: + + + + Amount: + Cantidad: + + + + Priority: + Prioridad: + + + + Fee: + Comisión: + + + + Low Output: + Envío pequeño: + + + + After Fee: + Después de Comisiones: + + + + Change: + Cambio: + + + + (un)select all + (des)marcar todos + + + + Tree mode + Modo árbol + + + + List mode + Modo lista + + + + Amount + Cuantía + + + + Label + Etiqueta + + + + Address + Dirección + + + + Date + Fecha + + + + Confirmations + Confirmaciones + + + + Confirmed + Confirmado + + + + Priority + Prioridad + + + + Copy address + Copiar dirección + + + + Copy label + Copiar etiqueta + + + + + Copy amount + Copiar cuantía + + + + Copy transaction ID + Copiar identificador de transacción + + + + Copy quantity + Copiar cantidad + + + + Copy fee + Copiar comisiones + + + + Copy after fee + Copiar después de aplicar comisiones + + + + Copy bytes + Copiar bytes + + + + Copy priority + Copiar prioridad + + + + Copy low output + Copiar envío pequeño + + + + Copy change + Copiar cambio + + + + highest + lo más alto + + + + high + alto + + + + medium-high + medio-alto + + + + medium + medio + + + + low-medium + bajo-medio + + + + low + bajo + + + + lowest + lo más bajo + + + + + DUST + DUST + + + + + yes + si + + + + + no + no + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Esta etiqueta se convierte en rojo, si el tamaño de la transacción es mayor que 10000 bytes. + +Esto significa que se requiere una cuota de al menos el %1 por kb. + +Puede variar + / - 1 Byte por entrada. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Las transacciones con mayor prioridad son más probables en entrar hacia un bloque. + +Esta etiqueta se convierte en rojo, si la prioridad es menor que "medium". + +Esto significa que se requiere una cuota de al menos el %1 por kb. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Esta etiqueta se vuelve roja, si algún destinatario recibe una cantidad menor que% 1. + +Esto significa que se requiere una tarifa de al menos% 2. + +Las cantidades inferiores a 0,546 veces la tarifa mínima de retransmisión se muestran como DUST. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Esta etiqueta se convierte en rojo, si el cambio es menor que %1. + +Esto significa que se requiere una cuota de al menos %2. + + + + + (no label) + (sin etiqueta) + + + + change from %1 (%2) + Enviar desde %1 (%2) + + + + (change) + (cambio) + + + + EditAddressDialog + + + Edit Address + Editar Dirección + + + + &Label + &Etiqueta + + + + The label associated with this address book entry + La etiqueta asociada con esta entrada de la libreta de direcciones + + + + &Address + &Dirección + + + + The address associated with this address book entry. This can only be modified for sending addresses. + La dirección asociada con esta entrada de la libreta de direcciones. Esto sólo puede ser modificada para direcciones de envío. + + + + &Stealth Address + & Dirección Oculta + + + + New receiving address + Nueva dirección de recepción + + + + New sending address + Nueva dirección de envío + + + + Edit receiving address + Editar dirección de recepción + + + + Edit sending address + Editar dirección de envío + + + + The entered address "%1" is not a valid Alias address. + La dirección introducida "%1" no es una dirección válida de Alias. + + + + The entered address "%1" is already in the address book. + La dirección introducida "%1" ya está presente en la libreta de direcciones. + + + + Could not unlock wallet. + No se pudo desbloquear el monedero. + + + + New key generation failed. + Ha fallado la generación de la nueva clave. + + + + EncryptWalletPage + + + Wallet Encryption + Cifrado de Billetera + + + + Please enter a password to encrypt the wallet.dat file. + Por favor, introduzca una contraseña para cifrar el archivo wallet.dat. + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + La contraseña protege sus claves privadas y la billetera la solicitará al inicio y para operaciones críticas. + + + + &Wallet Password: + & Contraseña de la Billetera: + + + + &Verify Password: + &Verifique la contraseña: + + + + Create and encrypt wallet.dat ... + Crear y cifrar wallet.dat ... + + + + Error + Error + + + + Failed to create wallet.dat. ErrorCode: %1 + No se pudo crear wallet.dat. Código de error:% 1 + + + + GUIUtil::HelpMessageBox + + + + Alias + Alias + + + + version + Versión + + + + Usage: + Uso: + + + + command-line options + opciones de líneas de comandos + + + + UI options + opciones del interfaz de usuario + + + + Set language, for example "de_DE" (default: system locale) + Defina el idioma, por ejemplo "de_DE" (predeterminado: región del sistema) + + + + Start minimized + Iniciar minimizado + + + + Show splash screen on startup (default: 1) + Mostrar pantalla de bienvenida al iniciar (predeterminado: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + Importar el archivo wallet.dat + + + + Please import a wallet.dat file with your private keys. + Por favor, importe un archivo wallet.dat con sus claves privadas. + + + + &Select wallet.dat + & Seleccione wallet.dat + + + + QFileDialog::getOpenFileName() + QFileDialog::getOpenFileName() + + + + Wallet Files (*.dat) + Archivos de billetera (*.dat) + + + + Error + Error + + + + Failed to copy wallet.dat: %1 + Fallo al copiar wallet.dat: %1 + + + + IntroPage + + + Set Up Your Wallet + Configurar su Billetera + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + La aplicación ha detectado que no tienes un archivo wallet.dat, que contiene tus claves privadas. Por favor, elige cómo quieres crear o restaurar tus claves privadas. + + + + &Create new mnemonic recovery seed words + & Cree nuevas palabras semilla de recuperación mnemotécnica + + + + &Recover from your existing mnemonic seed words + & Recuperarse de sus palabras semilla mnemotécnicas existentes + + + + &Import wallet.dat file + &Importar archivo wallet.dat + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + Crear claves privadas con palabras clave de recuperación mnemotécnica + + + + Step 2/3: Write down your mnemonic recovery seed words. + Paso 2/3: Escriba sus palabras semilla de recuperación mnemotécnica. + + + + Mnemonic Recovery Seed Words: + Palabras semilla de recuperación mnemotécnica: + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + Necesita las palabras semilla de recuperación mnemotécnica para restaurar esta billetera. Escríbalos y guárdelos en un lugar seguro.<br> Se le pedirá que confirme las Palabras semilla de recuperación en la siguiente pantalla para asegurarse de haberlas escrito correctamente. + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + Cree claves privadas con palabras semilla de recuperación mnemotécnica + + + + Step 1/3: Please define language to use and optional password to protect your seed. + Paso 1/3: Por favor, defina el idioma a utilizar y la contraseña opcional para proteger su semilla. + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + La creación de palabras semilla mnemónicas es un procedimiento de tres pasos:<ol><li>Defina el idioma y la contraseña opcional para su semilla.</li><li>Escriba las palabras semilla creadas.</li><li>Verifique las palabras semilla y la contraseña de la semilla.</li></ol> + + + + &Language: + &Idioma: + + + + &Seed Password: + &Contraseña de la semilla: + + + + &Verify Password: + &Verificar la contraseña: + + + + Error + Error + + + + Failed to create Mnemonic Seed Words. %1 + Error al crear palabras semilla mnemotécnicas. % 1 + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + Cree claves privadas con palabras semilla de recuperación mnemotécnica + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + Paso 3/3: Verifique que tiene las palabras correctas y la contraseña (opcional) anotada. + + + + &Seed Password: + &Contraseña de semilla: + + + + <br>Enter Mnemonic Seed Words: + <br>Introduzca las palabras semilla mnemotécnicas + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + No se puede iniciar Alias: haga clic- para-pagar manejador + + + + PeerTableModel + + + Address/Hostname + Dirección/Nombre de host + + + + User Agent + Agente de usuario + + + + Ping Time + Tiempo de ping + + + + QObject + + + %1 d + %1 d + + + + %1 h + %1 h + + + + %1 m + %1 m + + + + + %1 s + %1 s + + + + None + Ninguno + + + + N/A + N/A + + + + %1 ms + %1 ms + + + + RPCConsole + + + Alias - Debug window + Alias - Ventana de depuración + + + + &Information + &Información + + + + Alias Core + Núcleo de Alias + + + + Client name + Nombre del cliente + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/D + + + + Client version + Versión del cliente + + + + Using OpenSSL version + Utilizando la versión OpenSSL + + + + Using BerkeleyDB version + Uso de la versión de BerkeleyDB + + + + Build date + Fecha de compilación + + + + Startup time + Hora de inicio + + + + Network + Red + + + + Name + Nombre + + + + Number of connections + Número de conexiones + + + + Block chain + Cadena de bloques + + + + Current number of blocks + Número actual de bloques + + + + Estimated total blocks + Bloques totales estimados + + + + Last block time + Hora del último bloque + + + + Debug log file + Archivo de registro de depuración + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + Abra el archivo de registro de depuración de Alias desde el directorio de datos actual. Esto puede tardar unos segundos en el caso de archivos de registro grandes. + + + + &Open + &Abrir + + + + Command-line options + Opciones de línea de comandos + + + + Show the Alias help message to get a list with possible Alias command-line options. + Muestre el mensaje de ayuda de Alias ​​para obtener una lista con las posibles opciones de línea de comandos de Alias. + + + + &Show + &Mostrar + + + + &Console + &Consola + + + + Clear console + Borrar consola + + + + &Network Traffic + &Tráfico de red + + + + &Clear + &Limpiar + + + + Totals + Totales + + + + + In: + En: + + + + + Out: + Fuera: + + + + &Peers + &Colaboradores + + + + + + Select a peer to view detailed information. + Seleccione un par para ver información detallada. + + + + Peer ID + ID de pares + + + + Direction + Dirección + + + + Version + Versión + + + + User Agent + Agente de usuario + + + + Services + Servicios + + + + Starting Height + Altura de inicio + + + + Sync Height + Altura de sincronización + + + + Ban Score + Puntuación de la prohibición + + + + Connection Time + Tiempo de conexión + + + + Last Send + Último envío + + + + Last Receive + Última recepción + + + + Bytes Sent + Bytes enviados + + + + Bytes Received + Bytes recibidos + + + + Ping Time + Tiempo de ping + + + + Time Offset + Desplazamiento en el tiempo + + + + Welcome to the Alias Core RPC console. + Bienvenido a la consola de Alias Core RPC. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Use las flechas arriba y abajo para navegar por el historial y <b>Control+L</b> para vaciar la pantalla. + + + + Type <b>help</b> for an overview of available commands. + Escriba <b>help</b> para ver un resumen de los comandos disponibles. + + + + via %1 + via %1 + + + + + never + nunca + + + + Inbound + Entrada + + + + Outbound + Salida + + + + Unknown + Desconocido + + + + + Fetching... + recuperando... + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + Recuperar claves privadas a partir de palabras semilla mnemónicas + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + Por favor, introduzca la contraseña (opcional) y sus palabras semilla mnemotécnicas para recuperar las claves privadas. + + + + &Seed Password: + &Contraseña de semilla: + + + + &Verify Password: + &Verifique la contraseña: + + + + <br>Enter Mnemonic Seed Words: + <br>Introduzca las palabras semilla mnemotécnicas: + + + + Error + Error + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + Fallo en la recuperación de claves privadas de Mnemonic Seed Words. %1 + + + + SetupWalletWizard + + + Alias Wallet Setup + Configuración de la Billetera Alias + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + El archivo 'wallet.dat', que contiene sus claves privadas, no pudo ser encontrado durante el inicio.<br><br> La clave privada consiste en caracteres alfanuméricos que dan al usuario acceso y control sobre sus fondos a su correspondiente dirección de criptomoneda. En otras palabras, la clave privada crea firmas digitales únicas para cada transacción que permiten a un usuario gastar sus fondos, demostrando que el usuario tiene de hecho la propiedad de esos fondos. + + + + If you have a backup of a wallet.dat, you can import this file. + Si tienes una copia de seguridad de un wallet.dat, puedes importar este archivo. + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + Las palabras semilla mnemónicas le permiten crear y recuperar posteriormente sus claves privadas. La semilla consta de 24 palabras y la contraseña opcional funciona como una 25ª palabra que puedes mantener en secreto para proteger tu semilla. + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + Se recomienda hacer varias copias de las palabras clave, almacenadas en diferentes lugares.<br><br><b> Atención: </b>Las palabras clave no pueden ser (r)creadas de nuevo a partir de las claves privadas existentes.<br> Si pierdes tus palabras clave y no tienes una copia de seguridad del archivo wallet.dat, ¡perderás tus monedas! + + + + Please enter the mnemonic words and password given on the previous screen. + Por favor, introduzca las palabras mnemotécnicas y la contraseña dadas en la pantalla anterior. + + + + Please enter your mnemonic words and (optional) password. + Por favor, introduzca sus palabras mnemónicas y su contraseña (opcional). + + + + This help is likely not to be of any help. + Es probable que esta ayuda no sirva de nada. + + + + Alias Wallet Setup Help + Ayuda para la configuración de la Billetera Alias + + + + SpectreBridge + + + default + por defecto + + + + <b>%1</b> from your public balance to %2 (%3) + <b>%1</b>de su saldo público a %2 (%3) + + + + <b>%1</b> from public to private, using address %2 (%3) + <b>%1</b>de público a privado, utilizando la dirección% 2 (% 3) + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + <b>%1</b>de su saldo privado, talla de anillo %2, a %3 (%4) + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + <b>%1</b>de privado a público, tamaño de anillo %2, utilizando la dirección %3 (%4) + + + + + + + Error: + Error: + + + + Unknown txn type detected %1. + Se ha detectado un tipo de transmisión desconocido %1 + + + + Input types must match for all recipients. + Los tipos de entrada deben coincidir para todos los destinatarios. + + + + Ring sizes must match for all recipients. + Las tallas de los anillos deben coincidir para todos los destinatarios. + + + + Ring size must be %1. + El tamaño del anillo debe ser %1. + + + + Ring size outside range [%1, %2]. + Tamaño del anillo fuera del rango [%1, %2]. + + + + + Confirm send coins + Confirmar envío de monedas + + + + Are you sure you want to send? +Ring size of one is not anonymous. + ¿Estás seguro de que quieres enviar? +El tamaño del anillo de uno no es anónimo. + + + + + and + y + + + + Are you sure you want to convert %1? + ¿Estás seguro de que quieres convertir %1? + + + + Are you sure you want to send %1? + ¿Está seguro de que quiere enviar %1? + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + Enviar monedas + + + + The change address is not valid, please recheck. + El cambio de dirección no es válido, por favor, vuelva a comprobarlo. + + + + The recipient address is not valid, please recheck. + La dirección del destinatario no es válida, vuelva a comprobarla + + + + Only ALIAS from your Private balance can be send to a stealth address. + Sólo los ALIAS de su saldo privado pueden ser enviados a una dirección sigilosa. + + + + Transfer from Public to Private is only allowed within your account. + La transferencia de Público a Privado sólo se permite dentro de su cuenta. + + + + Transfer from Private to Public is only allowed within your account. + La transferencia de Privado a Público sólo se permite dentro de su cuenta. + + + + The amount to pay must be larger than 0. + El importe a pagar debe ser mayor que 0. + + + + The amount exceeds your balance. + El importe excede su saldo. + + + + The total exceeds your balance when the %1 transaction fee is included. + El total supera su saldo cuando se incluye la comisión de transacción del %1. + + + + Duplicate address found, can only send to each address once per send operation. + Se ha encontrado una dirección duplicada, sólo se puede enviar a cada dirección una vez por operación de envío. + + + + Error: Transaction creation failed. + Error: La creación de la transacción ha fallado. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Error: La transacción fue rechazada. Esto puede ocurrir si algunas de las monedas de su monedero ya se han gastado, por ejemplo, si ha utilizado una copia de wallet.dat y las monedas se han gastado en la copia pero no se han marcado como gastadas aquí. + + + + Error: Note is too long. + Error: La nota es demasiado larga. + + + + Error: Ring Size Error. + Error: Error de Tamaño de Ring. + + + + Error: Input Type Error. + Error: Error de Tipo de Input. + + + + Error: Must be in full mode to send anon. + Error: Debe estar en modo completo para enviar anon. + + + + Error: Invalid Stealth Address. + Error: Dirección Stealth no válida. + + + + Convert Alias from Private to Public + Convertir Alias de Privada a Pública + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + Error: Dirección Stealth no válida. La conversión de privada a pública requiere una dirección stealth. + + + + The amount exceeds your ALIAS balance. + La cantidad excede tu saldo ALIAS. + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + El total excede tu saldo privado de ALIAS cuando se incluye el %1 de comisión de transacción. + + + + Error generating transaction. + Error al generar la transacción. + + + + Error generating transaction: %1 + Error al generar la transacción: %1 + + + + Transaction successfully created. + Transacción creada con éxito. + + + + Please restart wallet + Por favor, reinicie la billetera. + + + + The used language has changed. +Please restart the wallet! + El idioma utilizado ha cambiado. +¡Por favor, reinicie la billetera! + + + + SpectreGUI + + + Public received with + Público recibido con + + + + Public received from + Público recibido de + + + + Public sent to + Público enviado a + + + + Public sent to self + Público enviado a sí mismo + + + + Private sent to self + Privado enviado a sí mismo + + + + Public staked + Público apostado + + + + Public donated + Público donado + + + + Public contributed + Contribución pública + + + + Private staked + Privado apostado + + + + Private donated + Privado donado + + + + Private contributed + Contribución Privada + + + + Private received with + Privado recibido con + + + + Private sent to + Privado enviado a + + + + Private to Public + De privado a público + + + + Public to Private + De público a privado + + + + Other + Otro + + + + + + + Alias + Alias + + + + Client + Cliente + + + + ..Start UI.. + ...Comienza la UI... + + + + .Start UI. + .Iniciar UI. + + + + Ready! + Listo! + + + + E&xit + Sa$lida + + + + Quit application + Salir de la aplicación + + + + &About Alias + &Acerca de Alias + + + + Show information about Alias + Mostrar información sobre Alias + + + + About &Qt + Acerca de &Qt + + + + Show information about Qt + Mostrar información sobre Qt + + + + &Options... + &Opciones... + + + + Modify configuration options for Alias + Modificar las opciones de configuración de Alias + + + + &Show / Hide + &Show / Hide + + + + &Encrypt Wallet... + &Encriptar billetera... + + + + Encrypt or decrypt wallet + Cifrar o descifrar la billetera + + + + &Backup Wallet... + &Billetera de respaldo... + + + + Backup wallet to another location + Copia de seguridad de la billetera en otra ubicación + + + + &Change Passphrase... + &Cambiar frase de paso... + + + + Change the passphrase used for wallet encryption + Cambiar la frase de contraseña utilizada para el cifrado del monedero + + + + &Unlock Wallet... + &Desbloquear la billetera... + + + + Unlock wallet + Desbloquear la billetera + + + + &Lock Wallet + &Billetera bloqueada + + + + Lock wallet + Billetera bloqueada + + + + &Debug window + &Ventana de depuración + + + + Open debugging and diagnostic console + Abrir la consola de depuración y diagnóstico + + + + &File + &Archivo + + + + &Settings + &Configuración + + + + &Help + &Ayuda + + + + Wallet + Billetera + + + + + [testnet] + [testnet] + + + + %n active connection(s) to Alias network + %n conexiones activas a la red Alias%n conexiones activas a la red Alias + + + + block + Bloqueo + + + + header + encabezado + + + + blocks + bloques + + + + headers + encabezados + + + + + Synchronizing with network... + Sincronización con la red... + + + + Downloading filtered blocks... + Descarga de bloques filtrados... + + + + ~%1 filtered block(s) remaining (%2% done). + ~%1 bloque(s) filtrados restantes (%2% hecho). + + + + Importing blocks... + Importando bloques.. + + + + ~%n block(s) remaining + %n bloques restantes%n bloques restantes + + + + Imported %1 of %2 %3 of transaction history (%4% done). + Importado %1 de %2 %3 del historial de transacciones (%4% hecho). + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + Descargado %1 de %2 %3 del historial de transacciones (%4% realizado). + + + + Imported %n block(s) of transaction history. + Importados %n bloques del historial de transacciones.Importados %n bloques del historial de transacciones. + + + + Downloaded %n block(s) of transaction history. + Descargado %n bloques del historial de transacciones.Descargado %n bloques del historial de transacciones. + + + + %n second(s) ago + %n segundos atrás%n segundos antes + + + + %n minute(s) ago + %n minutos atrás%n minutos antes + + + + %n hour(s) ago + %n horas atrás%n horas antes + + + + %n day(s) ago + %n días antes%n días antes + + + + Up to date + Hasta la fecha + + + + Catching up... + Poniéndose al día... + + + + Last received %1 was generated %2. + El último recibido %1 fue generado %2. + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + Para procesar esta transacción, se cobrará una tasa de %1 para apoyar la red. Desea enviar la transacción? + + + + Confirm transaction fee + Confirmar tasa de transacción + + + + %1 %2 + %1 %2 + + + + Address: %1 +Note: %2 + + Dirección: %1 +Nota: %2 + + + + + Address: %1 + + Direccion: %1 + + + + + + URI handling + Gestión de URIs + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + El URI no puede ser analizado. Esto puede ser causado por una dirección de Alias inválida o por parámetros URI mal formados. + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + El monedero está<b> encriptado</b> y actualmente<b> está desbloqueado</b> sólo para las apuestas + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + La billetera está <b>encriptada</b> y actualmente <b>desbloqueada</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + La billetera está <b>encriptada</b> y actualmente <b>bloqueada</b> + + + + Backup Wallet + Billetera de respaldo + + + + Wallet Data (*.dat) + Datos de la billetera (*.dat) + + + + Backup Failed + Copia de respaldo fallida + + + + There was an error trying to save the wallet data to the new location. + Hubo un error al intentar guardar los datos de la billetera en la nueva ubicación. + + + + Lock Wallet + Billetera Bloqueada + + + + Error: Wallet must first be encrypted to be locked. + Error: La billetera debe ser encriptada primero para ser bloqueada. + + + + %1 second(s) + %1 segundo(s) + + + + %1 minute(s), %2 second(s) + %1 minuto(s), %2 segundo(s) + + + + %1 hour(s), %2 minute(s) + %1 hora(s), %2 minuto(s) + + + + %1 day(s), %2 hour(s) + %1 day(s), %2 hour(s) + + + + (last 72 blocks %1) + (últimos 72 bloques %1) + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + Apuesta. <br/>Su peso es %1 <br/>El peso de la red es %2%3 <br/>El tiempo medio entre recompensas es %4 + + + + Not staking because wallet is in thin mode + No apostar porque la billetera está en modo delgado + + + + Not staking, staking is disabled + No hay apuestas, las apuestas están desactivadas + + + + Not staking because wallet is locked + No se puede apostar porque la billetera está bloqueada + + + + Not staking because wallet is offline + No apostar porque la billetera está desconectada + + + + Not staking because wallet is syncing + No se puede apostar porque la billetera se está sincronizando + + + + Initializing staking... + Iniciando la apuesta.. + + + + Not staking because you don't have mature coins + No apostar por no tener monedas antiguas + + + + Not staking + No apostar + + + + TrafficGraphWidget + + + KB/s + KB/s + + + + TransactionDesc + + + Open for %n block(s) + Abierto para %n bloquesAbierto para %n bloques + + + + Open until %1 + Abierto hasta %1 + + + + conflicted + en conflicto + + + + %1/offline + %1/fuera de línea + + + + %1/unconfirmed + %1/no confirmado + + + + %1 confirmations + %1 confirmaciones + + + + Transaction ID + Identificador de transacción + + + + Block Hash + Hash del bloque + + + + Status + Estado + + + + , has not been successfully broadcast yet + , todavía no se ha sido difundido satisfactoriamente + + + + , broadcast through %n node(s) + , emitido a través de %n nodos, emitido a través de %n nodos + + + + Date + Fecha + + + + Source + Fuente + + + + Generated + Generado + + + + + Credit + Crédito + + + + matures in %n more block(s) + vence en %n bloques másvence en %n bloques más + + + + not accepted + no aceptada + + + + Transaction fee + Comisión de transacción + + + + Net amount + Cantidad neta + + + + Message + Mensaje + + + + Comment + Comentario + + + + Comment-To + Comentario a + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Las monedas generadas deben madurar 450 bloques antes de poder ser gastadas. Cuando generaste este bloque, fue transmitido a la red para ser añadido a la cadena de bloques. Si no consigue entrar en la cadena, su estado cambiará a "no aceptado" y no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a los pocos segundos del tuyo. + + + + Debug information + Información de depuración + + + + Debit + Débito + + + + Transaction + Transacción + + + + Inputs + entradas + + + + Amount + Cantidad + + + + true + verdadero + + + + false + falso + + + + + Converted + Convertido + + + + from public to private + del público al privado + + + + from private to public + del privado al público + + + + Address + Dirección + + + + + Note + Nota + + + + unknown + desconocido + + + + <dd> + <dd> + + + + TransactionDescDialog + + + Transaction details + Detalles de transacción + + + + This pane shows a detailed description of the transaction + Esta ventana muestra información detallada sobre la transacción + + + + TransactionTableModel + + + Date + Fecha + + + + Type + Tipo + + + + Address + Dirección + + + + Note + Nota + + + + Amount + Cantidad + + + + Open for %n more block(s) + Abierto para %n bloques másAbierto para %n bloques más + + + + Open until %1 + Abierto hasta %1 + + + + Offline + Sin conexión + + + + Unconfirmed + Sin confirmar + + + + Confirming (%1 of %2 required confirmations) + Confirmando (%1 de %2 confirmaciones requeridas) + + + + Confirming (%1 of %2 recommended confirmations) + Confirmando (%1 de %2 confirmaciones recomendadas) + + + + Confirmed (%1 confirmations) + Confirmado (%1 confirmaciones) + + + + Conflicted + En conflicto + + + + Immature (%1 confirmations, will be available after %2) + No vencidos (%1 confirmaciones. Estarán disponibles al cabo de %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + Apuesta huérfana %1, ¡el bloque no fue recibido por ningún otro nodo y probablemente no será aceptado! + + + + Orphan %1 stake, someone else submitted the block before you. + Huérfano %1 apostar, alguien más presentó el bloque antes que tú. + + + + (n/a) + (nd) + + + + Transaction status. Hover over this field to show number of confirmations. + Estado de transacción. Pasa el ratón sobre este campo para ver el número de confirmaciones. + + + + Date and time that the transaction was received. + Fecha y hora en que se recibió la transacción. + + + + Type of transaction. + Tipo de transacción. + + + + Destination address of transaction. + Dirección de destino de la transacción. + + + + Amount removed from or added to balance. + Cantidad retirada o añadida al saldo. + + + + WalletModel + + + + Sending... + Enviando... + + + + alias-bridge + + + Overview + Resumen + + + + Wallet + Billetera + + + + Send + Enviar + + + + Receive + Recibir + + + + Transactions + Transacciones + + + + Address Book + Agenda de direcciones + + + + Options + Opciones + + + + Advanced + Avanzado + + + + Backup Wallet + Billetera de respaldo + + + + Encrypt Wallet + Billetera Encriptada + + + + Change Passphrase + Cambiar la frase de acceso + + + + (Un)lock Wallet + Billetera (des)bloqueada + + + + Tools + Herramientas + + + + Chain Data + Datos de la cadena + + + + Block Explorer + Explorador de bloques + + + + Sign Message + Señalización del mensaje + + + + Verify Message + Verificar mensaje + + + + Debug + Depurar + + + + About Alias + Acerca de Alias + + + + About QT + Acerca de QT + + + + QR code + Código QR + + + + Address: + Dirección: + + + + Label: + Etiqueta: + + + + Amount: + Cantidad: + + + + Add new receive address + Añadir una nueva dirección de recibo + + + + Add Address + Añadir dirección + + + + Add a new contact + Añadir un nuevo contacto + + + + Address Lookup + Búsqueda de direcciones + + + + Address Type + Tipo de dirección + + + + Stealth + Sigiloso + + + + Group + Grupo + + + + BIP32 + BIP32 + + + + Label + Etiqueta + + + + Address + Dirección + + + + Public Key + Llave pública + + + + Transaction Hash + Hash de la transacción + + + + Recent Transactions + Transacciones recientes + + + + Coin Control + Control de monedas + + + + Make payment + Realiza el pago + + + + Balance transfer + Transferencia de saldo + + + + Select Inputs + Seleccione las entradas + + + + Automatically selected + Selección automática + + + + Quantity: + Cantidad: + + + + Fee: + Tasa: + + + + After Fee: + Después de la tasa: + + + + Bytes: + Bytes: + + + + Priority: + Prioridad: + + + + LowOutput: + Baja producción: + + + + Change: + Cambios: + + + + Custom change address + Cambio de dirección personalizado + + + + From account + Desde la cuenta + + + + PUBLIC + PÚBLICO + + + + PRIVATE + PRIVADO + + + + Balance: + Balance: + + + + Ring Size: + Medida del Anillo: + + + + To account + A la cuenta + + + + Pay to + Pagar a + + + + (no label) + (sin etiqueta) + + + + Master + Principal + + + + Wallet is encrypted and currently locked + La cartera está encriptada y actualmente bloqueada + + + + Not staking because wallet is locked + No apostar porque la billetera está bloqueada + + + + 0 active connection(s) to Alias network + 0 conexión(es) activas a la red Alias + + + + Enter a label for this address to add it to your address book + Introduzca una etiqueta para esta dirección para añadirla a su libreta de direcciones + + + + Enter a address to add it to your address book + Introduce una dirección para añadirla a tu agenda + + + + Inputs + Entradas + + + + Values + Valores + + + + Outputs + Salidas + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Introduzca una dirección de alias para firmar el mensaje (por ejemplo, SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to sign + Introduzca el mensaje que desea firmar + + + + Click sign message to generate signature + Haga clic en firmar el mensaje para generar la firma + + + + Copy the signed message signature + Copiar la firma del mensaje firmado + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Introduzca una dirección de alias para verificar el mensaje (por ejemplo, SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to verify + Introduzca el mensaje que desea verificar + + + + Enter a Alias signature + Introduzca una firma Alias + + + + Paste signature from clipboard + Pegar la firma desde el portapapeles + + + + Your total balance + Su saldo total + + + + Recent in/out transactions or stakes + Transacciones de entrada/salida o apuestas recientes + + + + Select inputs to spend + Seleccione las entradas para gastar + + + + Optional address to receive transaction change + Dirección opcional para recibir el cambio de transacción + + + + Choose from address book + Elija de la libreta de direcciones + + + + Paste address from clipboard + Pegar la dirección desde el portapapeles + + + + Remove this recipient + Eliminar este destinatario + + + + Send from public or private + Enviar desde público o privado + + + + Current spendable send payment balance + Saldo actual del pago de envío gastado + + + + Send to public or private + Enviar a público o privado + + + + Current spendable balance to account + Saldo actual gastable a cuenta + + + + The label for this address + La etiqueta de esta dirección + + + + Amount to transfer + Cantidad a transferir + + + + Send to multiple recipients at once + Enviar a varios destinatarios a la vez + + + + Date and time that the transaction was received. + Fecha y hora en que se recibió la transacción. + + + + Transaction status. Hover over this field to show number of confirmations. + Estado de la transacción. Pase el ratón sobre este campo para mostrar el número de confirmaciones. + + + + Type of transaction. + Tipo de operación. + + + + Destination address of transaction. + Dirección de destino de la transacción. + + + + Short payment note. + Nota de pago breve. + + + + Amount removed from or added to balance. + Cantidad retirada o añadida al saldo. + + + + Name for this Wallet + Nombre para esta billetera + + + + Enter a password + Introducir la contraseña + + + + Would you like to create a bip44 path? + ¿Desea crear una ruta bip44? + + + + Your recovery phrase (Keep this safe!) + Su frase de recuperación (¡Mantenga esto a salvo!) + + + + Recovery Phrase + Frase de recuperación + + + + Wallet Name for recovered account + Nombre de la billetera para la cuenta recuperada + + + + Enter the password for the wallet you are trying to recover + Introduzca la contraseña de la billetera que está intentando recuperar + + + + Is this a bip44 path? + ¿Es una ruta bip44? + + + + ID + ID + + + + Created + Creada + + + + Active Account + Cuenta activa + + + + Default + Por defecto + + + + Path + Ruta + + + + Active + Activa + + + + Amount + Cantidad + + + + Note + Nota + + + + Public coins, visible on blockchain + Monedas públicas, visibles en la cadena de bloques + + + + Private coins, untraceable and unlinkable on blockchain + Monedas privadas, imposibles de rastrear y de vincular en la cadena de bloques + + + + Available coins for spending + Monedas disponibles para gastar + + + + Reserved coins are not used for staking + Las monedas reservadas no se utilizan para apostar + + + + Staked coins must mature before they can be accessed + Las monedas apostadas deben vencerse antes de poder acceder a ellas + + + + Stake + Apostar + + + + Sub-Wallets + Sub-Billeteras + + + + Start Alias on system login + Activar Alias al iniciar la sesión del sistema + + + + Detach databases at shutdown + Separar las bases de datos en el momento del cierre + + + + Pay transaction fee + Pagar la tasa de transacción + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + Tasa de transacción por kB. Una tarifa más alta asegura que sus transacciones se procesen rápidamente en tiempos de alto volumen de transacciones. + + + + Most transactions are 1kB. The minimal fee is 0.0001 + La mayoría de las transacciones son de 1kB. La tasa mínima es de 0,0001 + + + + Enable Staking + Habilitar las apuestas + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + Activa o desactiva el proceso de apostar. Si tu cartera está encriptada, tendrás que desbloquearla para apostar. + + + + Staking Donation + Donación de apuestas + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + Uno de cada seis bloques de la cadena de bloques es un bloque de contribución al desarrollo (DCB). Las recompensas de las apuestas de los DCBs se contribuyen al fondo de desarrollo sin importar la configuración del porcentaje de donación. Por favor, siéntase libre de donar adicionalmente de sus recompensas de apuestas restantes definiendo una oportunidad de donación. Gracias. + + + + Reserve + Reservar + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + La cantidad reservada no participa en la apuesta y, por lo tanto, se puede gastar en cualquier momento. + + + + Minimum Stake Interval + Intervalo mínimo de apuestas + + + + Main + Principal + + + + Window + Ventana + + + + Display + Visualizar + + + + Minimize to the tray instead of the taskbar + Minimizar a la bandeja en lugar de la barra de tareas + + + + Minimize on close + Minimizar al cerrar + + + + User Interface language + Lenguaje de la interfaz de usuario + + + + Unit to show amounts in + Unidad para mostrar los saldos en + + + + Rows per page + Líneas por página + + + + Display addresses in transaction list + Mostrar direcciones en la lista de transacciones + + + + Notifications + Notificaciones + + + + Visible Transaction Types + Tipos de transacciones visibles + + + + Cancel + Cancelar + + + + Apply + Aplique + + + + Ok + Ok + + + + Reserved + Reservado + + + + Unconfirmed + Sin confirmar + + + + Immature + Inmaduro + + + + Type + Tipo + + + + Date + Fecha + + + + Send Payment + Enviar pago + + + + The address to send the payment to + La dirección a la que se debe enviar el pago + + + + Enter a label for this address + Introduzca una etiqueta para esta dirección + + + + Add Sub-Wallet + Añadir sub-Billetera + + + + Immature generated coins with Proof-of-Work + Monedas generadas de forma inmadura con prueba-de-trabajo + + + + Blockchain Info + Información sobre la cadena de bloques + + + + Checking wallet state with network + Comprobación del estado de la billetera con la red + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + El ALIAS público requiere 1 confirmación <br>El ALIAS privado requiere 10 confirmaciones + + + + Total Balance + Balance Total + + + + Balance + Balance + + + + Available + Disponible + + + + Public + Público + + + + Private + Privado + + + + Tor+OBFS4 connection online + Conexión Tor+OBFS4 online + + + + Wallet Encryption + Encriptación de la billetera + + + + A short reference for the recipient (max 24 characters) + Una breve referencia para el destinatario (máximo 24 caracteres) + + + + ALIAS Denomination Value + Valor de la denominación ALIAS + + + + No. Owned (* = Immature) + Número de propietarios (* = inmaduro) + + + + No. System Unspent (* = Immature) + No. Sistema no gastado (* = Inmaduro) + + + + No. available Mixins (* = Immature) + Número de Mixins disponibles (* = Inmaduro) + + + + No. System (** = Compromised) + No. Sistema (** = Comprometido) + + + + The last block a coin of this denomination was created + El último bloque en el que se creó una moneda de esta denominación + + + + Owned (*) + Propio (*) + + + + Unspent (*) + No gastado (*) + + + + Mixins (*) + Mezclas (*) + + + + System (**) + Sistema (**) + + + + Least Depth + Menor profundidad + + + + Value Out + Valor de salida + + + + Value + Valor + + + + Addressbook + Libreta de direcciones + + + + Refresh + Actualizar + + + + Hash + Hash + + + + Height + Altura + + + + Timestamp + Marca de tiempo + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + Introduzca una dirección Alias (por ejemplo, SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + An address label for the payment senders address book + Una etiqueta de dirección para la libreta de direcciones del remitente del pago + + + + Enter a short note to send with a payment (max 24 characters) + Introduzca una breve nota para enviar con un pago (máximo 24 caracteres) + + + + Filter by label or address... + Filtrar por etiqueta o dirección... + + + + Note to send with payment (max 24 characters) + Nota para enviar con el pago (máximo 24 caracteres) + + + + The private address to transfer the balance to + La dirección privada a la que transferir el saldo + + + + Search by label or address + Búsqueda por etiqueta o dirección + + + + Search + Buscar + + + + Family vacation funds + Fondos para las vacaciones familiares + + + + Grouping will consolidate transactions of chosen + La agrupación consolidará las transacciones de los + + + + Reset form + Formulario de reinicio + + + + Restore Sub-Wallet + Restaurar Sub billetera + + + + Filter outputs + Salidas de los filtros + + + + Find Block by hash/height/transaction + Encontrar un bloque por hash/altura/transacción + + + + alias-core + + + To use the %s option + Para utilizar la opción %s + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + %s, debe establecer una contraseña rpc en el archivo de configuración: +%s +Se recomienda utilizar la siguiente contraseña aleatoria: +rpcuser=aliasrpc +rpccontraseña=%s +(no es necesario recordar esta contraseña) +El nombre de usuario y la contraseña NO DEBEN ser iguales. +Si el archivo no existe, créelo con permisos de archivo de sólo lectura para el propietario. +También se recomienda establecer alertnotify para que se le notifique de los problemas; +por ejemplo: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + Error + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + Se ha producido un error al configurar el puerto RPC %u para escuchar en IPv6, volviendo a IPv4: %s + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + Se ha producido un error al configurar el puerto RPC %u para escuchar en IPv4: %s + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + Debe establecer rpcpassword=<password> en el archivo de configuración: +%s +Si el archivo no existe, créelo con permisos de archivo de sólo lectura para el propietario. + + + + Alias version + Alias version + + + + Usage: + Uso: + + + + Send command to -server or aliaswalletd + Enviar comando a -servidor o aliaswalletd + + + + List commands + Lista de comandos + + + + Get help for a command + Obtener ayuda para un comando + + + + Alias + Alias + + + + Options: + Opciones: + + + + This help message + Este mensaje de ayuda + + + + Specify configuration file (default: alias.conf) + Especifica el archivo de configuración (por defecto: alias.conf) + + + + Specify pid file (default: alias.pid) + Especifica el archivo pid (por defecto: alias.pid) + + + + Specify data directory + Especifique el directorio de datos + + + + Specify wallet file (within data directory) + Especifique el archivo de la billetera (dentro del directorio de datos) + + + + Set database cache size in megabytes (default: 25) + Establecer el tamaño de la caché de la base de datos en megabytes (por defecto: 25) + + + + Set database disk log size in megabytes (default: 100) + Establecer el tamaño del registro del disco de la base de datos en megabytes (por defecto: 100) + + + + Specify connection timeout in milliseconds (default: 5000) + Especifica el tiempo de espera de la conexión en milisegundos (por defecto: 5000) + + + + Connect through socks proxy + Conectar a través de proxy de sockets + + + + Select the version of socks proxy to use (4-5, default: 5) + Seleccione la versión de socks proxy a utilizar (4-5, por defecto: 5) + + + + Use proxy to reach tor hidden services (default: same as -proxy) + Utilizar un proxy para acceder a los servicios ocultos de Tor (por defecto: igual que -proxy) + + + + Allow DNS lookups for -addnode, -seednode and -connect + Permitir búsquedas de DNS para - addnode, -seednode y -connect + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + Escucha de conexiones en<port> (por defecto: 37347 o testnet: 37111) + + + + Maintain at most <n> connections to peers (default: 125) + Mantener como máximo<n> las conexiones con los pares (por defecto: 125) + + + + Add a node to connect to and attempt to keep the connection open + Añade un nodo al que conectarse e intenta mantener la conexión abierta + + + + Connect only to the specified node(s) + Conectar sólo con el/los nodo(s) especificados + + + + Connect to a node to retrieve peer addresses, and disconnect + Conectarse a un nodo para recuperar las direcciones de los compañeros y desconectarse + + + + Specify your own public address + Especifique su propia dirección pública + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Sólo se conecta a los nodos de la red<net> (IPv4, IPv6 o Tor) + + + + Discover own IP address (default: 1 when listening and no -externalip) + Descubrir la propia dirección IP (por defecto: 1 cuando se escucha y sin -externalip) + + + + Find peers using internet relay chat (default: 0) + Buscar compañeros que utilicen el chat de retransmisión por Internet (por defecto: 0) + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Aceptar conexiones desde el exterior (por defecto: 1 si no hay -proxy o -connect) + + + + Bind to given address. Use [host]:port notation for IPv6 + Vincular a una dirección dada. Utilice la notación [host]:puerto para IPv6 + + + + Find peers using DNS lookup (default: 1) + Buscar pares mediante la búsqueda de DNS (por defecto: 1) + + + + Stake your coins to support network and gain reward (default: 1) + Apuesta tus monedas para apoyar a la red y obtener una recompensa (por defecto: 1) + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + Sincronizar la hora con otros nodos. Desactivar si la hora de su sistema es precisa, por ejemplo, sincronizando con NTP (por defecto: 1) + + + + Sync checkpoints policy (default: strict) + Política de sincronización de puntos de control (por defecto: estricta) + + + + Threshold for disconnecting misbehaving peers (default: 100) + Umbral para desconectar a los compañeros que se comportan mal (por defecto: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Número de segundos para evitar que los pares que se comportan mal vuelvan a conectarse (por defecto: 86400) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Buffer de recepción máximo por conexión, <n>*1000 bytes (por defecto: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Buffer máximo de envío por conexión, <n>*1000 bytes (por defecto: 1000) + + + + Use UPnP to map the listening port (default: 1 when listening) + Usar UPnP para asignar el puerto de escucha (por defecto: 1 cuando se escucha) + + + + Use UPnP to map the listening port (default: 0) + Usar UPnP para asignar el puerto de escucha (por defecto: 0) + + + + Detach block and address databases. Increases shutdown time (default: 0) + Desconecta las bases de datos de bloques y direcciones. Aumenta el tiempo de apagado (por defecto: 0) + + + + Fee per KB to add to transactions you send + Tasa por KB a añadir a las transacciones que envíe + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + Al crear transacciones, ignorar las entradas con un valor inferior a este (por defecto: 0,01) + + + + Accept command line and JSON-RPC commands + Acepta la línea de comandos y los comandos JSON-RPC + + + + Run in the background as a daemon and accept commands + Se ejecuta en segundo plano como un demonio y acepta comandos + + + + Use the test network + Utilizar la red de pruebas + + + + Output extra debugging information. Implies all other -debug* options + Muestra información de depuración adicional. Implica todas las demás opciones -debug*. + + + + Output extra network debugging information + Salida de información adicional de depuración de la red + + + + Prepend debug output with timestamp + Preagregar la salida de depuración con la marca de tiempo + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Reducir el archivo debug.log al iniciar el cliente (por defecto: 1 cuando no -depuración) + + + + Send trace/debug info to console instead of debug.log file + Enviar información de rastreo/depuración a la consola en lugar del archivo debug.log + + + + Send trace/debug info to debugger + Enviar información de rastreo/depuración al depurador + + + + Username for JSON-RPC connections + Nombre de usuario para conexiones JSON-RPC + + + + Password for JSON-RPC connections + Contraseña para conexiones JSON-RPC + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + Escucha de conexiones JSON-RPC en (por defecto: 36657 o testnet: 36757) + + + + Allow JSON-RPC connections from specified IP address + Permitir conexiones JSON-RPC desde la dirección IP especificada + + + + Send commands to node running on <ip> (default: 127.0.0.1) + Enviar comandos al nodo que se ejecuta en (por defecto: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Ejecutar el comando cuando el mejor bloque cambia (%s en cmd se sustituye por el hash del bloque) + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Ejecutar el comando cuando una transacción de la cartera cambia (%s en cmd se sustituye por TxID) + + + + Require a confirmations for change (default: 0) + Requiere una confirmación para el cambio (por defecto: 0) + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + Obligar a los scripts de transacciones a utilizar operadores PUSH canónicos (por defecto: 1) + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + Ejecutar el comando cuando se recibe una alerta relevante (%s en cmd se sustituye por el mensaje) + + + + Upgrade wallet to latest format + Actualizar la billetera al último formato + + + + Set key pool size to <n> (default: 100) + Establecer el tamaño del grupo de claves <n> (por defecto: 100) + + + + Rescan the block chain for missing wallet transactions + Reexaminar la cadena de bloques en busca de transacciones de billeteras perdidas + + + + Attempt to recover private keys from a corrupt wallet.dat + Intento de recuperar las claves privadas de un wallet.dat corrupto + + + + How many blocks to check at startup (default: 2500, 0 = all) + Cuántos bloques comprobar al inicio (por defecto: 2500, 0 = todos) + + + + How thorough the block verification is (0-6, default: 1) + Cómo de exhaustiva es la verificación de bloques (0-6, por defecto: 1) + + + + Imports blocks from external blk000?.dat file + Importar bloques desde el archivo externo blk000?.dat + + + + Block creation options: + Opciones de creación de bloques: + + + + Set minimum block size in bytes (default: 0) + Establecer tamaño mínimo de bloque en bytes (predeterminado: 0) + + + + Set maximum block size in bytes (default: 250000) + Establecer el tamaño máximo de bloque en bytes (por defecto: 250000) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Establecer el tamaño máximo de las transacciones alta-prioridad/baja-comisión en bytes (por defecto: 27000) + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + Opciones de SSL: (consulte la Wiki de Bitcoin para ver las instrucciones de configuración de SSL) + + + + Use OpenSSL (https) for JSON-RPC connections + Usar OpenSSL (https) para las conexiones JSON-RPC + + + + Server certificate file (default: server.cert) + Certificado del servidor (predeterminado: server.cert) + + + + Server private key (default: server.pem) + Clave privada del servidor (predeterminado: server.pem) + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + Cifras aceptables: (por defecto: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + Invalid amount for -paytxfee=<amount>: '%s' + Cantidad inválida para -paytxfee=<amount>: '%s' + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Aviso: ¡-paytxfee tiene un valor muy alto! Esta es la comisión que pagará si envía una transacción. + + + + Invalid amount for -mininput=<amount>: '%s' + Cantidad no válida para -mininput=<amount>: '%s' + + + + Wallet %s resides outside data directory %s. + La billetera %s reside fuera del directorio de datos %s. + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + No se puede obtener un bloqueo en el directorio de datos %s. Alias probablemente ya esté en funcionamiento. + + + + Verifying database integrity... + Verificando la integridad de la base de datos... + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + Error al inicializar el entorno de base de datos %s! Para recuperar, HAGA UNA COPIA DE SEGURIDAD DEL DIRECTORIO, a continuación, elimine todo de ella excepto el archivo wallet.dat. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Aviso: ¡Recuperados datos de wallet.dat corrupto! El wallet.dat original se ha guardado como wallet.{timestamp}.bak en %s; si hubiera errores en su saldo o transacciones, deberá restaurar una copia de seguridad. + + + + wallet.dat corrupt, salvage failed + wallet.dat corrupto. Ha fallado la recuperación. + + + + Unknown -socks proxy version requested: %i + Solicitada versión de proxy -socks desconocida: %i + + + + Unknown network specified in -onlynet: '%s' + La red especificada en -onlynet '%s' es desconocida + + + + Invalid -proxy address: '%s' + Dirección -proxy inválida: '%s' + + + + Invalid -tor address: '%s' + Dirección -tor inválida: '%s' + + + + Cannot resolve -bind address: '%s' + No se puede resolver la dirección de -bind: '%s' + + + + Failed to listen on any port. + No se puede escuchar en ningún puerto. + + + + Failed to listen on any port. Use -listen=0 if you want this. + Ha fallado la escucha en todos los puertos. Use -listen=0 si desea esto. + + + + Cannot resolve -externalip address: '%s' + No se puede resolver la dirección de -externalip: '%s' + + + + Invalid amount for -reservebalance=<amount> + Cantidad no válida para -reservebalance=<amount> + + + + Unable to sign checkpoint, wrong checkpointkey? + + No se puede firmar el punto de control, ¿clave de control incorrecta? + + + + + Loading block index... + Cargando el índice de bloques... + + + + Error loading blk0001.dat + Error al cargar blk0001.dat + + + + Loading wallet... + Cargando billetera... + + + + Error loading wallet.dat: Wallet corrupted + Error al cargar wallet.dat: la billetera está dañado + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Aviso: ¡Error al leer wallet.dat! Todas las claves se han leído correctamente, pero podrían faltar o ser incorrectos los datos de transacciones o las entradas de la libreta de direcciones. + + + + Error loading wallet.dat: Wallet requires newer version of Alias + Error cargando wallet.dat: La billetera requiere una nueva versión de Alias + + + + Wallet needed to be rewritten: restart Alias to complete + La Billetera necesita ser reescrito: reinicie Alias para completar + + + + Error loading wallet.dat + Error al cargar wallet.dat + + + + Cannot downgrade wallet + No se puede rebajar La billetera + + + + Cannot initialize keypool + No se puede inicializar el keypool + + + + Cannot write default address + No se puede escribir la dirección por defecto + + + + Rescanning... + Reexaminando... + + + + Importing blockchain data file. + Importando el archivo de datos de la cadena de bloques. + + + + Importing bootstrap blockchain data file. + Importando el archivo de datos de arranque de la cadena de bloques. + + + + Loading addresses... + Cargando direcciones... + + + + Error: could not start node + Error: no se pudo iniciar el nodo + + + + Done loading + Carga terminada + + + + Unable to bind to %s on this computer. Alias is probably already running. + No se puede enlazar con %s en este ordenador. Es probable que el alias ya se esté ejecutando. + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + No se ha podido enlazar con %s en este ordenador (el enlace ha devuelto el error %d, %s) + + + + Error: Wallet locked, unable to create transaction + Error: Billetera bloqueada, no es posible crear una transacción + + + + Error: Wallet unlocked for staking only, unable to create transaction. + Error: Billetera desbloqueada sólo para apostar, no se puede crear la transacción. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + Error: Esta transacción requiere una tasa de transacción de al menos %s debido a su importe, complejidad o uso de fondos recientemente recibidos + + + + Error: Transaction creation failed + Error: La creación de la transacción ha fallado. + + + + Sending... + Enviando... + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Error: La transacción fue rechazada. Esto puede ocurrir si algunas de las monedas de su monedero ya se han gastado, por ejemplo, si ha utilizado una copia de wallet.dat y las monedas se han gastado en la copia pero no se han marcado como gastadas aquí. + + + + Invalid amount + Cantidad inválida + + + + Insufficient funds + Fondos insuficientes + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + Advertencia: Compruebe que la fecha y la hora de su ordenador son correctas. Si su reloj es incorrecto, Alias no funcionará correctamente. + + + + Warning: This version is obsolete, upgrade required! + Aviso: Esta versión es obsoleta, actualización necesaria! + + + + WARNING: syncronized checkpoint violation detected, but skipped! + ADVERTENCIA: ¡violación de punto de control sincronizado detectada, pero omitida! + + + + Warning: Disk space is low! + Advertencia: Poco espacio en el disco! + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + ADVERTENCIA: ¡Se ha encontrado un punto de control no válido! Las transacciones mostradas pueden no ser correctas. Es posible que tenga que actualizar, o notificar a los desarrolladores. + + + + Read ATXOs... (%d) + Leer ATXOs... (%d) + + + + Read spent ATXOs... (%d) + Leer ATXOs gastados... (%d) + + + + Note must be 24 characters or less. + La nota debe tener 24 caracteres o menos. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Error: La transacción fue rechazada. Esto puede ocurrir si algunas de las monedas de su monedero ya se han gastado, por ejemplo, si ha utilizado una copia de wallet.dat y las monedas se han gastado en la copia pero no se han marcado como gastadas aquí. + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + Error: Se ha encontrado un argumento no soportado -socks. Ya no es posible configurar la versión de SOCKS, sólo se admiten proxies SOCKS5. + + + + Initialization sanity check failed. Alias is shutting down. + La comprobación de la sanidad de la inicialización ha fallado. Alias se está apagando. + + + + Loading block index... (%d) + Cargando el índice del bloque... (%d) + + + + Calculating chain trust... (%d) + Calculando la confianza de la cadena... (%d) + + + + Validating last %d block... + Validando el último bloque %d... + + + + -bip44key is not allowed if wallet.dat already exists + -bip44key no está permitido si wallet.dat ya existe + + + + Cannot resolve binding address: '%s' + No se puede resolver la dirección de enlace: '%s + + + + Error: could not start tor node + Error: no se ha podido iniciar el nodo tor + + + + Timed out waiting for onion hostname. + Se ha agotado el tiempo de espera del nombre de host de la cebolla. + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + Error al cargar blk0001.dat: Se ha detectado una cadena no válida, por favor resincronice o utilice los archivos de arranque. + + + + Loading wallet items... (%d) + Cargando elementos de la billetera (%d) + + + + Reindexing from blk000?.dat files. + Reindexación de los archivos blk000?.dat. + + + + Reindexing block... (%d) + Reindexando el bloque... (%d) + + + + Core started! + ¡El núcleo ha comenzado! + + + + Use tor hidden services version 2 instead of version 3 + Utilizar la versión 2 de los servicios ocultos de Tor en lugar de la versión 3 + + + + Find peers using .onion seeds (default: 1 unless -connect) + Buscar pares usando semillas .onion (por defecto: 1 a menos que -connect) + + + + Minimum time in seconds between successful stakes (default: 30) + Tiempo mínimo en segundos entre apuestas exitosas (por defecto: 30) + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + Porcentaje de las recompensas de las apuestas para donar a los desarrolladores (entre 0 y 100 inclusive, por defecto 5) + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + Milisegundos entre los intentos de apostar. Si se reduce este parámetro, no se producirán más apuestas. (por defecto: 500) + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + Número de segundos para evitar que los pares prohibidos por software se vuelvan a conectar (por defecto: 3600) + + + + Simple command line interface - if not run as daemon + Interfaz de línea de comandos simple - si no se ejecuta como demonio + + + + Output extra blockchain debugging information + Salida de información adicional de depuración de la cadena de bloques + + + + Output extra Proof of Stake debugging information + Salida de información adicional de depuración de Proof of Stake + + + + Send trace/debug info to debug.log file + Enviar información de rastreo/depuración al archivo debug.log + + + + Wait for RPC server to start + Esperar a que se inicie el servidor RPC + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + Mantener como máximo<n> MiB de bloques no conectables en memoria (por defecto: %u) + + + + Rebuild block chain index from current blk000?.dat files on startup + Reconstruir el índice de la cadena de bloques a partir de los archivos blk000?.dat actuales al iniciarse + + + + Show version and exit + Mostrar versión y salida + + + + Thin options: + Opciones delgadas: + + + + Operate in less secure, less resource hungry 'thin' mode + Operar en modo "ligero", menos seguro y con menos recursos + + + + Keep the entire block index in memory. (default: 0) + Mantener todo el índice del bloque en la memoria. (por defecto: 0) + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + Cuando no es thinfullindex, el número máximo de cabeceras de bloque a mantener en memoria. (por defecto: 4096) + + + + Disable supporting thin nodes. (default: 0) + Desactivar el apoyo a los nodos delgados. (por defecto: 0) + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + Desactivar el reenvío, o solicitar todas las txns sigilosas. (por defecto: 0) + + + + Don't connect to more than <n> thin peers (default: 8) + No conectarse a más de <n>pares finos (por defecto: 8) + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Cifras aceptables (por defecto: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + conn + conn + + + + Error: Wallet locked, unable to create transaction. + Error: Billetera bloqueada, no es posible crear una transacción + + + + Error: Must be in full mode. + Error: Debe estar en modo completo. + + + + Error: Block chain must be fully synced first. + Error: La cadena de bloques debe estar completamente sincronizada primero. + + + + Error: Alias is not connected! + Error: ¡Alias no está conectado! + + + + Update balance... + Actualizar el balance... + + + + ...Start UI... + ...Comienza la UI... + + + + Shutdown... + Cierre... + + + \ No newline at end of file diff --git a/src/qt/locale/alias_es_MX.ts b/src/qt/locale/alias_es_MX.ts new file mode 100644 index 0000000000..02187372c9 --- /dev/null +++ b/src/qt/locale/alias_es_MX.ts @@ -0,0 +1,4324 @@ + + + AboutDialog + + + About Alias + Acerca de Alias + + + + <b>Alias</b> version + <b>Alias</b> version + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + ©2020 Desarrolladores de Alias +©2016 Desarrolladores de Spectrecoin +©2014 Desarrolladores de ShadowCash +©2014 Desarrolladores de BlackCoin +©2012 Desarrolladores de NovaCoin +©2009 Desarrolladores de Bitcoin + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + Este es un software experimental. + +Se distribuye bajo la licencia de software MIT/X11, véase el archivo adjunto COPYING o<a href="http://www.opensource.org/licenses/mit-license.php"> http://www.opensource.org/licenses/mit-license.php</a>. + +Este producto incluye software desarrollado por el Proyecto OpenSSL para su uso en el OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) y software criptográfico escrito por Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) y software UPnP escrito por Thomas Bernard. + + + + AddressTableModel + + + Label + Etiqueta + + + + Address + Dirección + + + + pubkey + pubkey + + + + stealth + oculto + + + + (no label) + (sin etiqueta) + + + + Stealth Address + Dirección oculta + + + + n/a + n/a + + + + AskPassphraseDialog + + + Passphrase Dialog + Diálogo de la contraseña + + + + Enter passphrase + Ingrese la contraseña + + + + New passphrase + Nueva contraseña + + + + Repeat new passphrase + Repita la nueva contraseña + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Sirve para desactivar el trivial sendmoney cuando se compromete la cuenta del SO. No proporciona ninguna seguridad real. + + + + For staking only + Sólo para apostar + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Ingrese la nueva contraseña del monedero<br/>Por favor use una contraseña de<b>10 o más caracteres aleatorios</b> o <b>ocho o más palabras</b>. + + + + Encrypt wallet + Monedero encriptado. + + + + Keep wallet unlocked for staking. + Mantenga el monedero desbloqueado para apostar. + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + Su monedero contiene ATXOs bloqueados cuyo estado de gasto sólo puede determinarse con su clave privada. Su <b>saldo privado de ALIAS podría mostrarse de forma errónea</b>. + + + + <b>Alias Wallet Login</b> + <b>Inicio de sesión del monedero Alias</b> + + + + This operation needs your wallet passphrase to unlock the wallet. + Esta operación necesita la contraseña de su Monedero para desbloquear su monedero. + + + + Unlock wallet + Desbloquear monedero. + + + + This operation needs your wallet passphrase to decrypt the wallet. + Esta operación necesita la contraseña de su cartera para desencriptar su cartera. + + + + Decrypt wallet + Desencriptar la cartera + + + + Change passphrase + Cambiar contraseña + + + + Enter the old and new passphrase to the wallet. + Ingrese la antigua y nueva contraseña del monedero + + + + Confirm wallet encryption + Confirmar la encriptación del monedero + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Advertencia: Si encriptas tu monedero y pierdes tu frase de acceso,<b> ¡perderás todas tus monedas</b>! + + + + Are you sure you wish to encrypt your wallet? + ¿Está seguro de que desea cifrar su monedero? + + + + + Wallet encrypted + Monedero encriptado + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias se cerrará ahora para terminar el proceso de encriptación. Recuerda que cifrar tu monedero no puede proteger completamente tus monedas de ser robadas por un malware que infecte tu ordenador. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANTE: Cualquier copia de seguridad anterior que hayas hecho de tu archivo de monedero debe ser reemplazada por el nuevo archivo de monedero encriptado. Por razones de seguridad, las copias de seguridad anteriores del archivo del monedero sin cifrar serán inútiles en cuanto empieces a utilizar el nuevo monedero cifrado. + + + + + + + Wallet encryption failed + La encriptación del monedero falló + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + La encriptación de la cartera falló debido a un error interno. Su monedero no fue encriptado. + + + + + The supplied passphrases do not match. + Las contraseñas dadas no coinciden + + + + Wallet unlock failed + El desbloqueo del monedero Fallo + + + + + + The passphrase entered for the wallet decryption was incorrect. + La contraseña ingresada para la des encriptación del monedero es incorrecto + + + + Wallet decryption failed + La desencriptación del monedero fallo + + + + Wallet passphrase was successfully changed. + La contraseña de la cartera ha sido cambiada con éxito. + + + + + Warning: The Caps Lock key is on! + Advertencia: ¡La tecla de bloqueo de mayúsculas está activada! + + + + ClientModel + + + Network Alert + Alerta de red + + + + CoinControlDialog + + + Coin Control + Control de Monedas + + + + Quantity: + Cantidad: + + + + Bytes: + Bytes: + + + + Amount: + Monto: + + + + Priority: + Prioridad: + + + + Fee: + Tasa: + + + + Low Output: + Baja salida: + + + + After Fee: + Después de la tasa: + + + + Change: + Cambios: + + + + (un)select all + (des)seleccionar todo + + + + Tree mode + Modo árbol + + + + List mode + Modo lista + + + + Amount + Monto + + + + Label + Etiqueta + + + + Address + Dirección + + + + Date + Fecha + + + + Confirmations + Confirmaciones + + + + Confirmed + Confirmado + + + + Priority + Prioridad + + + + Copy address + Copiar dirección + + + + Copy label + Copiar Etiqueta + + + + + Copy amount + copiar monto + + + + Copy transaction ID + Copiar el ID de la transacción + + + + Copy quantity + copiar cantidad + + + + Copy fee + copiar cuota + + + + Copy after fee + copiar despues de cuota + + + + Copy bytes + copiar bytes + + + + Copy priority + copiar prioridad + + + + Copy low output + Copiar salida baja + + + + Copy change + copiar cambio + + + + highest + más alta + + + + high + alto + + + + medium-high + media-alta + + + + medium + media + + + + low-medium + Media-baja + + + + low + bajo + + + + lowest + mas bajo + + + + + DUST + DUST + + + + + yes + si + + + + + no + no + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Esta etiqueta se vuelve roja si el tamaño de la transacción es mayor que 10000 bytes. + +Esto significa que se requiere una tarifa de al menos% 1 por kb. + +Puede variar +/- 1 Byte por entrada. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Las transacciones con mayor prioridad tienen más probabilidades de entrar en un bloque. + +Esta etiqueta se vuelve roja, si la prioridad es menor que "media". + +Esto significa que se requiere una tarifa de al menos %1 por kb. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Esta etiqueta se vuelve roja, si algún destinatario recibe un importe inferior a %1. + +Esto significa que se requiere una tasa de al menos %2. + +Los importes inferiores a 0,546 veces la tasa mínima de retransmisión se muestran como DUST + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Esta etiqueta se vuelve roja, si el cambio es inferior a %1. + +Esto significa que se requiere una cuota de al menos %2. + + + + + (no label) + (sin etiqueta) + + + + change from %1 (%2) + cambio de %1 (%2) + + + + (change) + (cambio) + + + + EditAddressDialog + + + Edit Address + Editar dirección + + + + &Label + &Etiqueta + + + + The label associated with this address book entry + La etiqueta asociada con esta entrada de la libreta de direcciones + + + + &Address + &Dirección + + + + The address associated with this address book entry. This can only be modified for sending addresses. + La dirección asociada a esta entrada de la libreta de direcciones. Sólo se puede modificar para las direcciones de envío. + + + + &Stealth Address + &Dirección oculta + + + + New receiving address + Nueva dirección de recepción + + + + New sending address + Nueva dirección de envío + + + + Edit receiving address + Editar dirección de entregas + + + + Edit sending address + Editar la dirección de envío + + + + The entered address "%1" is not a valid Alias address. + La dirección introducida "%1" no es una dirección Alias válida. + + + + The entered address "%1" is already in the address book. + El domicilio ingresado "%1" ya existe en la libreta de direcciones + + + + Could not unlock wallet. + No se puede desbloquear el monedero + + + + New key generation failed. + La generación de la nueva clave fallo + + + + EncryptWalletPage + + + Wallet Encryption + Encriptación del monedero + + + + Please enter a password to encrypt the wallet.dat file. + Por favor, introduzca una contraseña para cifrar el archivo wallet.dat + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + La contraseña protege tus claves privadas y te la pedirá el monedero al iniciarse y en operaciones críticas. + + + + &Wallet Password: + &Contraseña del Monedero + + + + &Verify Password: + &Verifique la contraseña: + + + + Create and encrypt wallet.dat ... + Crear y encriptar wallet.dat ... + + + + Error + Error + + + + Failed to create wallet.dat. ErrorCode: %1 + Fallo al crear wallet.dat. ErrorCode: %1 + + + + GUIUtil::HelpMessageBox + + + + Alias + Alias + + + + version + version + + + + Usage: + Uso: + + + + command-line options + opciones de la línea de comandos + + + + UI options + Opciones de IU + + + + Set language, for example "de_DE" (default: system locale) + Establecer el idioma, por ejemplo "de_DE" (por defecto: configuración regional del sistema) + + + + Start minimized + Inicio minimizado + + + + Show splash screen on startup (default: 1) + Mostrar la pantalla de inicio en el arranque (por defecto: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + Importar wallet.dat + + + + Please import a wallet.dat file with your private keys. + Por favor, importe un archivo wallet.dat con sus claves privadas. + + + + &Select wallet.dat + &Seleccionar wallet.dat + + + + QFileDialog::getOpenFileName() + QFileDialog::getOpenFileName() + + + + Wallet Files (*.dat) + Archivos de Wallet (*.dat) + + + + Error + Error + + + + Failed to copy wallet.dat: %1 + Error al copiar wallet.dat: %1 + + + + IntroPage + + + Set Up Your Wallet + Configurar el monedero + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + La aplicación ha detectado que no tienes un archivo wallet.dat, que contiene tus claves privadas. Por favor, elige cómo quieres crear o restaurar tus claves privadas. + + + + &Create new mnemonic recovery seed words + &Crear nuevas palabras semilla de recuperación mnemónica + + + + &Recover from your existing mnemonic seed words + &Recuperar a partir de sus palabras semilla mnemotécnicas existentes + + + + &Import wallet.dat file + &Importar archivo wallet.dat + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + Crear claves privadas con palabras clave de recuperación mnemónica + + + + Step 2/3: Write down your mnemonic recovery seed words. + Paso 2/3: Escriba sus palabras semilla de recuperación mnemotécnica. + + + + Mnemonic Recovery Seed Words: + Palabras semilla de recuperación mnemotécnica: + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + Necesitas las Palabras Semilla de Recuperación Mnemónicas para restaurar este monedero. Escríbalos y guárdelos en un lugar seguro.<br> Se le pedirá que confirme las palabras clave de recuperación en la siguiente pantalla para asegurarse de que las ha escrito correctamente. + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + Crear claves privadas con palabras clave de recuperación mnemónica + + + + Step 1/3: Please define language to use and optional password to protect your seed. + Paso 1/3: Por favor, defina el idioma a utilizar y la contraseña opcional para proteger su semilla. + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + La creación de palabras semilla mnemónicas es un procedimiento de tres pasos:<ol><li>Defina el idioma y la contraseña opcional para su semilla.</li><li>Escriba las palabras semilla creadas.</li><li>Verifique las palabras semilla y la contraseña de la semilla.</li></ol> + + + + &Language: + &Idioma: + + + + &Seed Password: + &Semilla Contraseña: + + + + &Verify Password: + &Verificar contraseña: + + + + Error + Error + + + + Failed to create Mnemonic Seed Words. %1 + Fallo en la creación de Palabras Semilla Mnemónicas. %1 + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + Crear claves privadas con palabras clave de recuperación mnemónica + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + Paso 3/3: Verifique que tiene las palabras correctas y la contraseña (opcional) anotada. + + + + &Seed Password: + &Semilla Contraseña: + + + + <br>Enter Mnemonic Seed Words: + <br>Introduzca las palabras semilla mnemotécnicas: + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + No se puede iniciar Alias: clic-para-gestor de pagos + + + + PeerTableModel + + + Address/Hostname + Dirección/Nombre de host + + + + User Agent + Agente de usuario + + + + Ping Time + Tiempo de ping + + + + QObject + + + %1 d + %1 d + + + + %1 h + %1 h + + + + %1 m + %1 m + + + + + %1 s + %1 s + + + + None + Ninguno + + + + N/A + N/A + + + + %1 ms + %1 ms + + + + RPCConsole + + + Alias - Debug window + Alias - Ventana de depuración + + + + &Information + &Información + + + + Alias Core + Núcleo de Alias + + + + Client name + Nombre del cliente + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Versión cliente + + + + Using OpenSSL version + Usando la versión de OpenSSL + + + + Using BerkeleyDB version + Uso de la versión de BerkeleyDB + + + + Build date + Fecha de construcción + + + + Startup time + Tiempo de arranque + + + + Network + Red + + + + Name + Nombre + + + + Number of connections + Número de conexiones + + + + Block chain + Cadena de bloques + + + + Current number of blocks + Número actual de bloques + + + + Estimated total blocks + Bloques totales estimados + + + + Last block time + Última hora del bloque + + + + Debug log file + Archivo de registro de depuración + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + Abra el archivo de registro de depuración de Alias desde el directorio de datos actual. Esto puede tardar unos segundos en el caso de archivos de registro grandes. + + + + &Open + &Abrir + + + + Command-line options + Opciones de línea de comandos + + + + Show the Alias help message to get a list with possible Alias command-line options. + Muestra el mensaje de ayuda de Alias para obtener una lista con las posibles opciones de la línea de comandos. + + + + &Show + &Mostrar + + + + &Console + &Consola + + + + Clear console + Consola despejada + + + + &Network Traffic + &Tráfico de red + + + + &Clear + &Limpiar + + + + Totals + Totales + + + + + In: + En: + + + + + Out: + Fuera: + + + + &Peers + &Colaboradores + + + + + + Select a peer to view detailed information. + Seleccione un par para ver información detallada. + + + + Peer ID + ID de pares + + + + Direction + Dirección + + + + Version + Version + + + + User Agent + Agente de usuario + + + + Services + Servicios + + + + Starting Height + Altura de inicio + + + + Sync Height + Altura de sincronización + + + + Ban Score + Puntuación de prohibición + + + + Connection Time + Tiempo de conexión + + + + Last Send + Último envío + + + + Last Receive + Última recepción + + + + Bytes Sent + Bytes enviados + + + + Bytes Received + Bytes recibidos + + + + Ping Time + Tiempo de ping + + + + Time Offset + Desplazamiento en el tiempo + + + + Welcome to the Alias Core RPC console. + Bienvenido a la consola de Alias Core RPC. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Usa las flechas arriba y abajo para navegar por el historial, y <b>Ctrl-L</b> para borrar la pantalla. + + + + Type <b>help</b> for an overview of available commands. + Escriba<b> ayuda </b>para obtener una visión general de los comandos disponibles. + + + + via %1 + via %1 + + + + + never + nunca. + + + + Inbound + Entrante + + + + Outbound + Salida + + + + Unknown + Desconocido + + + + + Fetching... + Buscando... + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + Recuperar claves privadas a partir de palabras semilla mnemónicas + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + Por favor, introduzca la contraseña (opcional) y sus palabras semilla mnemotécnicas para recuperar las claves privadas. + + + + &Seed Password: + &Contraseña de semilla: + + + + &Verify Password: + &Verifique la contraseña: + + + + <br>Enter Mnemonic Seed Words: + <br>Introduzca las palabras semilla mnemotécnicas: + + + + Error + Error + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + Fallo en la recuperación de claves privadas de Mnemonic de palabras Semillas. %1 + + + + SetupWalletWizard + + + Alias Wallet Setup + Configuración del monedero Alias + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + El archivo 'wallet.dat', que contiene sus claves privadas, no pudo ser encontrado durante el inicio. Debe ser creado ahora. <br><br>La clave privada consiste en caracteres alfanuméricos que dan al usuario acceso y control sobre sus fondos a su correspondiente dirección de criptomoneda. En otras palabras, la clave privada crea firmas digitales únicas para cada transacción que permiten a un usuario gastar sus fondos, demostrando que el usuario tiene de hecho la propiedad de esos fondos. + + + + If you have a backup of a wallet.dat, you can import this file. + Si tienes una copia de seguridad de un wallet.dat, puedes importar este archivo. + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + Las palabras semilla mnemónicas le permiten crear y recuperar posteriormente sus claves privadas. La semilla consta de 24 palabras y la contraseña opcional funciona como una 25ª palabra que puedes mantener en secreto para proteger tu semilla. + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + Se recomienda hacer varias copias de las palabras clave, almacenadas en diferentes lugares.<br><br><b> Atención:</b> Las palabras clave no pueden ser creadas (de nuevo) a partir de las claves privadas existentes. <br>Si pierdes tus Seed Words y no tienes una copia de seguridad del archivo wallet.dat, ¡perderás tus monedas! + + + + Please enter the mnemonic words and password given on the previous screen. + Por favor, introduzca las palabras mnemotécnicas y la contraseña dadas en la pantalla anterior. + + + + Please enter your mnemonic words and (optional) password. + Por favor, introduzca sus palabras mnemónicas y su contraseña (opcional). + + + + This help is likely not to be of any help. + Es probable que esta ayuda no sirva de nada. + + + + Alias Wallet Setup Help + Ayuda para la configuración del monedero Alias + + + + SpectreBridge + + + default + por defecto + + + + <b>%1</b> from your public balance to %2 (%3) + <b>%1 </b>de su saldo público a %2 (%3) + + + + <b>%1</b> from public to private, using address %2 (%3) + <b>%1</b> of its public balance to %2 (%3) + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + <b>%1</b> de su saldo privado, talla de anillo %2, a %3 (%4) + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + <b>%1 </b>de privado a público, tamaño de anillo %2, utilizando la dirección %3 (%4) + + + + + + + Error: + Error: + + + + Unknown txn type detected %1. + Se ha detectado un tipo de transmisión desconocido %1. + + + + Input types must match for all recipients. + Los tipos de entrada deben coincidir para todos los destinatarios + + + + Ring sizes must match for all recipients. + Las tallas de los anillos deben coincidir para todos los destinatarios. + + + + Ring size must be %1. + El tamaño del anillo debe ser %1. + + + + Ring size outside range [%1, %2]. + Tamaño del anillo fuera del rango [%1, %2]. + + + + + Confirm send coins + Confirmar envío de monedas + + + + Are you sure you want to send? +Ring size of one is not anonymous. + ¿Estás seguro de que quieres enviar? +El tamaño del anillo de uno no es anónimo. + + + + + and + y + + + + Are you sure you want to convert %1? + ¿Estás seguro de que quieres convertir %1? + + + + Are you sure you want to send %1? + ¿Está seguro de que quiere enviar %1? + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + Enviar monedas + + + + The change address is not valid, please recheck. + El cambio de dirección no es válido, por favor, vuelva a comprobarlo. + + + + The recipient address is not valid, please recheck. + La dirección del destinatario no es válida, por favor, vuelva a comprobarla. + + + + Only ALIAS from your Private balance can be send to a stealth address. + Sólo los ALIAS de su saldo privado pueden ser enviados a una dirección sigilosa + + + + Transfer from Public to Private is only allowed within your account. + La transferencia de Público a Privado sólo se permite dentro de su cuenta + + + + Transfer from Private to Public is only allowed within your account. + La transferencia de Privado a Público sólo se permite dentro de su cuenta. + + + + The amount to pay must be larger than 0. + El importe a pagar debe ser superior a 0 + + + + The amount exceeds your balance. + El importe es superior a su saldo. + + + + The total exceeds your balance when the %1 transaction fee is included. + El total supera su saldo cuando se incluye la comisión de transacción del %1. + + + + Duplicate address found, can only send to each address once per send operation. + Se ha encontrado una dirección duplicada, sólo se puede enviar a cada dirección una vez por operación de envío. + + + + Error: Transaction creation failed. + Error: Fallo en la creación de la transacción + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Error: La transacción fue rechazada. Esto puede ocurrir si algunas de las monedas de su monedero ya se han gastado, por ejemplo, si ha utilizado una copia de wallet.dat y las monedas se han gastado en la copia pero no se han marcado como gastadas aquí + + + + Error: Note is too long. + Error: La nota es demasiado larga. + + + + Error: Ring Size Error. + Error: Error en el tamaño del anillo + + + + Error: Input Type Error. + Error: Error de tipo de entrada. + + + + Error: Must be in full mode to send anon. + Error: Debe estar en modo completo para enviar anon + + + + Error: Invalid Stealth Address. + Error: Dirección invisible no válida + + + + Convert Alias from Private to Public + Convertir Alias de Privado a Público + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + Error: Dirección oculta no válida. La conversión de privado a público requiere una dirección oculta. + + + + The amount exceeds your ALIAS balance. + El importe supera su saldo de ALIAS. + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + El total supera su saldo privado de ALIAS cuando se incluye la tasa de transacción del %1 + + + + Error generating transaction. + Error al generar la transacción. + + + + Error generating transaction: %1 + Error al generar la transacción: %1 + + + + Transaction successfully created. + Transacción creada con éxito. + + + + Please restart wallet + Por favor, reinicie el monedero + + + + The used language has changed. +Please restart the wallet! + El idioma utilizado ha cambiado. +Por favor, reinicie el monedero. + + + + SpectreGUI + + + Public received with + Público recibido con + + + + Public received from + Público recibido de + + + + Public sent to + Público enviado a + + + + Public sent to self + Público enviado a sí mismo + + + + Private sent to self + Privado enviado a sí mismo + + + + Public staked + Público apostado + + + + Public donated + Donación pública + + + + Public contributed + Contribución pública + + + + Private staked + Privado apostado + + + + Private donated + Donación privada + + + + Private contributed + Privado aportado + + + + Private received with + Privado recibido con + + + + Private sent to + Privado enviado a + + + + Private to Public + De privado a público + + + + Public to Private + De público a privado + + + + Other + Otros + + + + + + + Alias + Alias + + + + Client + Cliente + + + + ..Start UI.. + ...Comienza la UI... + + + + .Start UI. + .Comienza la UI. + + + + Ready! + ¡Listo! + + + + E&xit + Sa$lida + + + + Quit application + Salir de la aplicación + + + + &About Alias + &Acerca de Alias + + + + Show information about Alias + Mostrar información sobre Alias + + + + About &Qt + Acerca de &Qt + + + + Show information about Qt + Mostrar información sobre Qt + + + + &Options... + &Opciones... + + + + Modify configuration options for Alias + Modificar las opciones de configuración de Alias + + + + &Show / Hide + &Mostrar / Ocultar + + + + &Encrypt Wallet... + &Cifrar Monedero... + + + + Encrypt or decrypt wallet + Cifrar o descifrar la cartera + + + + &Backup Wallet... + &Monedero de respaldo... + + + + Backup wallet to another location + Copia de seguridad del monedero en otra ubicación + + + + &Change Passphrase... + &Cambiar contraseña + + + + Change the passphrase used for wallet encryption + Cambiar la frase de contraseña utilizada para el cifrado del monedero + + + + &Unlock Wallet... + &Desbloquear monedero. + + + + Unlock wallet + Desbloquear monedero. + + + + &Lock Wallet + &Bloquear Monedero + + + + Lock wallet + Bloquear Monedero + + + + &Debug window + &Ventana de depuración + + + + Open debugging and diagnostic console + Abrir la consola de depuración y diagnóstico + + + + &File + &Archivo + + + + &Settings + &Configuraciónes + + + + &Help + &Ayuda + + + + Wallet + Monedero + + + + + [testnet] + [red de prueba] + + + + %n active connection(s) to Alias network + %n conexiones activas a la red Alias%n conexiones activas a la red Alias + + + + block + bloque + + + + header + encabezado + + + + blocks + bloques + + + + headers + encabezados + + + + + Synchronizing with network... + Sincronización con la red... + + + + Downloading filtered blocks... + Descarga de bloques filtrados... + + + + ~%1 filtered block(s) remaining (%2% done). + ~%1 bloque(s) filtrados restantes (%2% hecho). + + + + Importing blocks... + Importando bloques... + + + + ~%n block(s) remaining + %n bloques restantes%n bloques restantes + + + + Imported %1 of %2 %3 of transaction history (%4% done). + Importado %1 de %2 %3 del historial de transacciones (%4% hecho) + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + Descargado %1 de %2 %3 del historial de transacciones (%4% realizado). + + + + Imported %n block(s) of transaction history. + Importados %n bloques del historial de transacciones.Importados %n bloques del historial de transacciones. + + + + Downloaded %n block(s) of transaction history. + Descarga de %n bloques del historial de transacciones.Descarga de %n bloques del historial de transacciones. + + + + %n second(s) ago + %n segundos atrás%n segundos atrás + + + + %n minute(s) ago + %n minutos atrás%n minutos atrás + + + + %n hour(s) ago + %n horas atrás%n horas atrás + + + + %n day(s) ago + %n días atrás%n días atrás + + + + Up to date + Hasta la fecha + + + + Catching up... + Poniéndose al día... + + + + Last received %1 was generated %2. + El último recibido %1 fue generado %2. + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + Para procesar esta transacción, se cobrará una tasa de %1 para apoyar la red. Desea enviar la transacción? + + + + Confirm transaction fee + Confirmar tasa de transacción + + + + %1 %2 + %1 %2 + + + + Address: %1 +Note: %2 + + Dirección: %1 +Nota: %2 + + + + + Address: %1 + + Dirección: %1 + + + + + + URI handling + Manejo de URIs + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + El URI no puede ser analizado. Esto puede ser causado por una dirección de Alias inválida o por parámetros URI mal formados. + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + El Monedero está<b> encriptado</b>y actualmente <b>está desbloqueado</b> sólo para apostar + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + El monedero está<b> encriptado</b> y actualmente <b>desbloqueado</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + El monedero está <b>encriptado</b> y actualmente <b>bloqueado</b> + + + + Backup Wallet + Monedero de respaldo + + + + Wallet Data (*.dat) + Wallet Data (*.dat) + + + + Backup Failed + Fallo en la copia de seguridad + + + + There was an error trying to save the wallet data to the new location. + Hubo un error al intentar guardar los datos del monedero en la nueva ubicación. + + + + Lock Wallet + Bloquear Monedero + + + + Error: Wallet must first be encrypted to be locked. + Error: El monedero debe ser encriptado primero para ser bloqueado. + + + + %1 second(s) + %1 segundo(s) + + + + %1 minute(s), %2 second(s) + %1 minuto(s), %2 segundo(s) + + + + %1 hour(s), %2 minute(s) + %1 hora(s), %2 minuto(s) + + + + %1 day(s), %2 hour(s) + %1 día(s), %2 hora(s) + + + + (last 72 blocks %1) + (últimos 72 bloques %1) + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + Apostando. <br/>Su peso es %1<br/>El peso de la red es %2%3<br/>El tiempo medio entre recompensas es %4 + + + + Not staking because wallet is in thin mode + No apostar porque el monedero está en modo delgado + + + + Not staking, staking is disabled + No apostar, apostar está desactivado + + + + Not staking because wallet is locked + No apostar porque el monedero está bloqueado + + + + Not staking because wallet is offline + No apostar porque el monedero está desconectado + + + + Not staking because wallet is syncing + No apostar porque el monedero se sincroniza + + + + Initializing staking... + Inicializando la apuesta... + + + + Not staking because you don't have mature coins + No apostar por no tener monedas maduras + + + + Not staking + No apostar + + + + TrafficGraphWidget + + + KB/s + KB/s + + + + TransactionDesc + + + Open for %n block(s) + Abierto para %n bloquesAbierto para %n bloques + + + + Open until %1 + Abrir hasta %1 + + + + conflicted + en conflicto + + + + %1/offline + %1/no hay línea + + + + %1/unconfirmed + %1/No confirmado + + + + %1 confirmations + %1 confirmaciones + + + + Transaction ID + ID de la transacción + + + + Block Hash + Bloque Hash + + + + Status + Estado + + + + , has not been successfully broadcast yet + , no ha sido transmitido aun + + + + , broadcast through %n node(s) + , emitido a través de %n nodos, emitido a través de %n nodos + + + + Date + Fecha + + + + Source + Fuente + + + + Generated + Generado + + + + + Credit + Crédito + + + + matures in %n more block(s) + vence en %n bloques másvence en %n bloques más + + + + not accepted + no aceptado + + + + Transaction fee + Tasa de transacción + + + + Net amount + Cantidad neta + + + + Message + Mensaje + + + + Comment + Comentario + + + + Comment-To + Comentario a + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Las monedas generadas deben madurar 450 bloques antes de poder ser gastadas. Cuando usted generó este bloque, lo transmitió a la red para que se añadiera a la cadena de bloques. Si no consigue entrar en la cadena, su estado cambiará a "no aceptado" y no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a los pocos segundos del tuyo. + + + + Debug information + Información de depuración + + + + Debit + Débito + + + + Transaction + Transacción + + + + Inputs + Entradas + + + + Amount + Monto + + + + true + verdadero + + + + false + falso + + + + + Converted + Convertido + + + + from public to private + de lo público a lo privado + + + + from private to public + de lo privado a lo público + + + + Address + Dirección + + + + + Note + Nota + + + + unknown + desconocido + + + + <dd> + <dd> + + + + TransactionDescDialog + + + Transaction details + Detalles de la transacción + + + + This pane shows a detailed description of the transaction + Este panel muestras una descripción detallada de la transacción + + + + TransactionTableModel + + + Date + Fecha + + + + Type + Tipo + + + + Address + Dirección + + + + Note + Nota + + + + Amount + Monto + + + + Open for %n more block(s) + Abierto para %n bloques másAbierto para %n bloques más + + + + Open until %1 + Abrir hasta %1 + + + + Offline + Fuera de línea + + + + Unconfirmed + Sin confirmar + + + + Confirming (%1 of %2 required confirmations) + Confirmando (%1 de %2 confirmaciones requeridas) + + + + Confirming (%1 of %2 recommended confirmations) + Confirmando (%1 de %2 confirmaciones recomendadas) + + + + Confirmed (%1 confirmations) + Confimado (%1 confirmaciones) + + + + Conflicted + en conflicto + + + + Immature (%1 confirmations, will be available after %2) + Inmaduro (%1 confirmaciones, estará disponible después de %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + Apuesta huérfana %1, ¡el bloque no fue recibido por ningún otro nodo y probablemente no será aceptado! + + + + Orphan %1 stake, someone else submitted the block before you. + Huérfano %1 apostado, alguien ha enviado el bloque antes que tú. + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Estado de la transacción. Pase el ratón sobre este campo para mostrar el número de confirmaciones. + + + + Date and time that the transaction was received. + Fecha y hora en que la transacción fue recibida + + + + Type of transaction. + Escriba una transacción + + + + Destination address of transaction. + Direccion del destinatario de la transacción + + + + Amount removed from or added to balance. + Cantidad removida del saldo o agregada + + + + WalletModel + + + + Sending... + Enviando... + + + + alias-bridge + + + Overview + Resumen + + + + Wallet + Monedero + + + + Send + Enviar + + + + Receive + Recibir + + + + Transactions + Transacciones + + + + Address Book + Agenda de direcciones + + + + Options + Opciones + + + + Advanced + Avanzado + + + + Backup Wallet + Monedero de respaldo + + + + Encrypt Wallet + Monedero encriptado. + + + + Change Passphrase + Cambiar contraseña + + + + (Un)lock Wallet + (Des)bloquear monedero. + + + + Tools + Herramientas + + + + Chain Data + Datos de la cadena + + + + Block Explorer + Explorador de bloques + + + + Sign Message + Mensaje de señalización + + + + Verify Message + Verificar mensaje + + + + Debug + Depurar + + + + About Alias + Acerca de Alias + + + + About QT + Acerca de Qt + + + + QR code + Codigo QR + + + + Address: + Dirección + + + + Label: + Etiqueta + + + + Amount: + Monto: + + + + Add new receive address + Añadir una nueva dirección de recepción + + + + Add Address + Añadir Direccion + + + + Add a new contact + Añadir un nuevo contacto + + + + Address Lookup + Búsqueda de direcciones + + + + Address Type + Tipo de dirección + + + + Stealth + oculto + + + + Group + Grupo + + + + BIP32 + BIP32 + + + + Label + Etiqueta + + + + Address + Dirección + + + + Public Key + Clave pública + + + + Transaction Hash + Hash de la transacción + + + + Recent Transactions + Transacciones recientes + + + + Coin Control + Control de monedas + + + + Make payment + Hacer el pago + + + + Balance transfer + Transferencia de saldo + + + + Select Inputs + Seleccionar entradas + + + + Automatically selected + Selección automática + + + + Quantity: + Cantidad: + + + + Fee: + Tasa: + + + + After Fee: + Después de la tasa: + + + + Bytes: + Bytes: + + + + Priority: + Prioridad: + + + + LowOutput: + Baja producción: + + + + Change: + Cambios: + + + + Custom change address + Cambio de dirección personalizado + + + + From account + Desde la cuenta + + + + PUBLIC + PUBLICO + + + + PRIVATE + PRIVADO + + + + Balance: + Balance: + + + + Ring Size: + Tamaño del anillo: + + + + To account + A la cuenta + + + + Pay to + Pague a + + + + (no label) + (sin etiqueta) + + + + Master + Maestro + + + + Wallet is encrypted and currently locked + El Monedero está encriptado y actualmente bloqueado + + + + Not staking because wallet is locked + No apostar porque el monedero está bloqueado + + + + 0 active connection(s) to Alias network + 0 conexión(es) activas a la red Alias + + + + Enter a label for this address to add it to your address book + Introduzca una etiqueta para esta dirección para añadirla a su libreta de direcciones + + + + Enter a address to add it to your address book + Introduzca una etiqueta para esta dirección para añadirla a su libreta de direcciones + + + + Inputs + Entradas + + + + Values + Valores + + + + Outputs + Salidas + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Introduzca una dirección de alias para firmar el mensaje (por ejemplo, SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to sign + Introduzca el mensaje que desea firmar + + + + Click sign message to generate signature + Haga clic en firmar el mensaje para generar la firma + + + + Copy the signed message signature + Copiar la firma del mensaje firmado + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Introduzca una dirección Alias con la que verificar el mensaje (por ejemplo, SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to verify + Introduzca el mensaje que desea verificar + + + + Enter a Alias signature + Introduzca una firma Alias + + + + Paste signature from clipboard + Pegar la firma desde el portapapeles + + + + Your total balance + Su balance total + + + + Recent in/out transactions or stakes + Transacciones de entrada/salida o apuestas recientes + + + + Select inputs to spend + Seleccione las entradas para gastar + + + + Optional address to receive transaction change + Dirección opcional para recibir el cambio de transacción + + + + Choose from address book + Elija de la libreta de direcciones + + + + Paste address from clipboard + Pegar la dirección desde el portapapeles + + + + Remove this recipient + Eliminar este destinatario + + + + Send from public or private + Enviar desde público o privado + + + + Current spendable send payment balance + Saldo actual del pago de envío gastado + + + + Send to public or private + Enviar a público o privado + + + + Current spendable balance to account + Saldo actual disponible en la cuenta + + + + The label for this address + La etiqueta de esta dirección + + + + Amount to transfer + Cantidad a transferir + + + + Send to multiple recipients at once + Enviar a varios destinatarios a la vez + + + + Date and time that the transaction was received. + Fecha y hora en que se recibió la transacción. + + + + Transaction status. Hover over this field to show number of confirmations. + Estado de la transacción. Pase el ratón sobre este campo para mostrar el número de confirmaciones. + + + + Type of transaction. + Tipo de transacción. + + + + Destination address of transaction. + Dirección de destino de la transacción. + + + + Short payment note. + Nota de pago breve + + + + Amount removed from or added to balance. + Cantidad retirada o añadida al saldo. + + + + Name for this Wallet + Nombre para esta Cartera + + + + Enter a password + Introduzca una contraseña + + + + Would you like to create a bip44 path? + ¿Quiere crear una ruta bip44? + + + + Your recovery phrase (Keep this safe!) + Su frase de recuperación (¡Mantenga esto a salvo!) + + + + Recovery Phrase + Frase de recuperación + + + + Wallet Name for recovered account + Nombre del monedero para la cuenta recuperada + + + + Enter the password for the wallet you are trying to recover + Introduzca la contraseña del monedero que intenta recuperar + + + + Is this a bip44 path? + ¿Es un camino bip44? + + + + ID + ID + + + + Created + Creada + + + + Active Account + Cuenta activa + + + + Default + Por defecto + + + + Path + Ruta + + + + Active + Activa + + + + Amount + Monto + + + + Note + Nota + + + + Public coins, visible on blockchain + Monedas públicas, visibles en la cadena de bloques + + + + Private coins, untraceable and unlinkable on blockchain + Monedas privadas, imposibles de rastrear y de vincular en la cadena de bloques + + + + Available coins for spending + Monedas disponibles para gastar + + + + Reserved coins are not used for staking + Las monedas reservadas no se utilizan para apostar + + + + Staked coins must mature before they can be accessed + Las monedas apostadas deben madurar antes de poder acceder a ellas + + + + Stake + Apostar + + + + Sub-Wallets + Sub-Monederos + + + + Start Alias on system login + Iniciar Alias en el inicio de sesión del sistema + + + + Detach databases at shutdown + Separar las bases de datos en el momento del cierre + + + + Pay transaction fee + Pagar la tasa de transacción + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + Tasa de transacción por kB. Una tarifa más alta asegura que sus transacciones se procesen rápidamente en tiempos de alto volumen de transacciones. + + + + Most transactions are 1kB. The minimal fee is 0.0001 + La mayoría de las transacciones son de 1kB. La tasa mínima es de 0,0001 + + + + Enable Staking + Habilitar las apuestas + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + Activa o desactiva el proceso de apostar. Si tu monedero está encriptado, tendrás que desbloquearlo para apostar. + + + + Staking Donation + Donación de apuestas + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + Uno de cada seis bloques de la cadena de bloques es un bloque de contribución al desarrollo (DCB). Las recompensas de las apuestas de los DCBs se contribuyen al fondo de desarrollo sin importar la configuración del porcentaje de donación. Por favor, siéntase libre de donar adicionalmente de sus recompensas de apuestas restantes definiendo una oportunidad de donación. Gracias. + + + + Reserve + Reservar + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + La cantidad reservada no participa en la apuesta y, por lo tanto, se puede gastar en cualquier momento. + + + + Minimum Stake Interval + Intervalo mínimo de apuestas + + + + Main + Principal + + + + Window + Ventana + + + + Display + Display + + + + Minimize to the tray instead of the taskbar + Minimizar a la bandeja en lugar de la barra de tareas + + + + Minimize on close + Minimizar al cerrar + + + + User Interface language + Lenguaje de la interfaz de usuario + + + + Unit to show amounts in + Unidad para mostrar los saldos en + + + + Rows per page + Líneas por página + + + + Display addresses in transaction list + Mostrar direcciones en la lista de transacciones + + + + Notifications + Notificaciones + + + + Visible Transaction Types + Tipos de transacciones visibles + + + + Cancel + Cancelar + + + + Apply + Aplique + + + + Ok + Ok + + + + Reserved + Reservado + + + + Unconfirmed + Sin confirmar + + + + Immature + Inmaduro + + + + Type + Tipo + + + + Date + Fecha + + + + Send Payment + Enviar pago + + + + The address to send the payment to + La dirección a la que se debe enviar el pago + + + + Enter a label for this address + Introduzca una etiqueta para esta dirección + + + + Add Sub-Wallet + Añadir sub-Monedero + + + + Immature generated coins with Proof-of-Work + Monedas generadas de forma inmadura con prueba-de-trabajo + + + + Blockchain Info + Información sobre la cadena de bloques + + + + Checking wallet state with network + Comprobación del estado del monedero con la red + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + El ALIAS público requiere 1 confirmación <br>El ALIAS privado requiere 10 confirmaciones + + + + Total Balance + Balance Total + + + + Balance + Balance + + + + Available + Disponible + + + + Public + Público + + + + Private + Privado + + + + Tor+OBFS4 connection online + Conexión Tor+OBFS4 online + + + + Wallet Encryption + Encriptación del monedero + + + + A short reference for the recipient (max 24 characters) + Una breve referencia para el destinatario (máximo 24 caracteres) + + + + ALIAS Denomination Value + Valor de la denominación ALIAS + + + + No. Owned (* = Immature) + Número de propietarios (* = inmaduro) + + + + No. System Unspent (* = Immature) + No. Sistema no gastado (* = Inmaduro) + + + + No. available Mixins (* = Immature) + Número de Mixins disponibles (* = Inmaduro) + + + + No. System (** = Compromised) + No. Sistema (** = Comprometido) + + + + The last block a coin of this denomination was created + El último bloque en el que se creó una moneda de esta denominación + + + + Owned (*) + Propio (*) + + + + Unspent (*) + No gastado (*) + + + + Mixins (*) + Mezclas (*) + + + + System (**) + Sistema (**) + + + + Least Depth + Menor profundidad + + + + Value Out + Valor de salida + + + + Value + Valor + + + + Addressbook + Libreta de direcciones + + + + Refresh + Actualizar + + + + Hash + Hash + + + + Height + Altura + + + + Timestamp + Marca de tiempo + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + Introduzca una dirección Alias (por ejemplo, SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + An address label for the payment senders address book + Una etiqueta de dirección para la libreta de direcciones del remitente del pago + + + + Enter a short note to send with a payment (max 24 characters) + Introduzca una breve nota para enviar con un pago (máximo 24 caracteres) + + + + Filter by label or address... + Filtrar por etiqueta o dirección... + + + + Note to send with payment (max 24 characters) + Nota para enviar con el pago (máximo 24 caracteres) + + + + The private address to transfer the balance to + La dirección privada a la que transferir el saldo + + + + Search by label or address + Búsqueda por etiqueta o dirección + + + + Search + Buscar + + + + Family vacation funds + Fondos para las vacaciones familiares + + + + Grouping will consolidate transactions of chosen + La agrupación consolidará las transacciones de los + + + + Reset form + Formulario de reinicio + + + + Restore Sub-Wallet + Restaurar Sub-monedero + + + + Filter outputs + Salidas de los filtros + + + + Find Block by hash/height/transaction + Encontrar un bloque por hash/altura/transacción + + + + alias-core + + + To use the %s option + Para utilizar la opción %s + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + %s, debe establecer una contraseña rpc en el archivo de configuración: +%s +Se recomienda utilizar la siguiente contraseña aleatoria: +rpcuser=aliasrpc +rpccontraseña=%s +(no es necesario recordar esta contraseña) +El nombre de usuario y la contraseña NO DEBEN ser iguales. +Si el archivo no existe, créelo con permisos de archivo de sólo lectura para el propietario. +También se recomienda establecer alertnotify para que se le notifique de los problemas; +por ejemplo: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + Error + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + Se ha producido un error al configurar el puerto RPC %u para escuchar en IPv6, volviendo a IPv4: %s + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + Se ha producido un error al configurar el puerto RPC %u para escuchar en IPv4: %s + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + Debe establecer rpcpassword= en el archivo de configuración: +%s +Si el archivo no existe, créelo con permisos de archivo de sólo lectura para el propietario + + + + Alias version + Alias version + + + + Usage: + Uso: + + + + Send command to -server or aliaswalletd + Enviar comando a -servidor o aliaswalletd + + + + List commands + Lista de comandos + + + + Get help for a command + Obtener ayuda para un comando + + + + Alias + Alias + + + + Options: + Opciones: + + + + This help message + Este mensaje de ayuda + + + + Specify configuration file (default: alias.conf) + Especifica el archivo de configuración (por defecto: alias.conf) + + + + Specify pid file (default: alias.pid) + Especifica el archivo pid (por defecto: alias.pid) + + + + Specify data directory + Especifique el directorio de datos + + + + Specify wallet file (within data directory) + Especifique el archivo de la billetera (dentro del directorio de datos) + + + + Set database cache size in megabytes (default: 25) + Establecer el tamaño de la caché de la base de datos en megabytes (por defecto: 25) + + + + Set database disk log size in megabytes (default: 100) + Establecer el tamaño del registro del disco de la base de datos en megabytes (por defecto: 100) + + + + Specify connection timeout in milliseconds (default: 5000) + Especifica el tiempo de espera de la conexión en milisegundos (por defecto: 5000) + + + + Connect through socks proxy + Conectar a través de proxy de sockets + + + + Select the version of socks proxy to use (4-5, default: 5) + Seleccione la versión de socks proxy a utilizar (4-5, por defecto: 5) + + + + Use proxy to reach tor hidden services (default: same as -proxy) + Utilizar un proxy para acceder a los servicios ocultos de Tor (por defecto: igual que -proxy) + + + + Allow DNS lookups for -addnode, -seednode and -connect + Permitir búsquedas de DNS para - addnode, -seednode y -connect + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + Escucha de conexiones en<port> (por defecto: 37347 o testnet: 37111) + + + + Maintain at most <n> connections to peers (default: 125) + Mantener como máximo<n> las conexiones con los pares (por defecto: 125) + + + + Add a node to connect to and attempt to keep the connection open + Añade un nodo al que conectarse e intenta mantener la conexión abierta + + + + Connect only to the specified node(s) + Conectar sólo con el/los nodo(s) especificados + + + + Connect to a node to retrieve peer addresses, and disconnect + Conectarse a un nodo para recuperar las direcciones de los compañeros y desconectarse + + + + Specify your own public address + Especifique su propia dirección pública + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Sólo se conecta a los nodos de la red<net> (IPv4, IPv6 o Tor) + + + + Discover own IP address (default: 1 when listening and no -externalip) + Descubrir la propia dirección IP (por defecto: 1 cuando se escucha y sin -externalip) + + + + Find peers using internet relay chat (default: 0) + Buscar compañeros que utilicen el chat de retransmisión por Internet (por defecto: 0) + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Aceptar conexiones desde el exterior (por defecto: 1 si no hay -proxy o -connect) + + + + Bind to given address. Use [host]:port notation for IPv6 + Vincular a una dirección dada. Utilice la notación [host]:puerto para IPv6 + + + + Find peers using DNS lookup (default: 1) + Buscar pares mediante la búsqueda de DNS (por defecto: 1) + + + + Stake your coins to support network and gain reward (default: 1) + Apuesta tus monedas para apoyar a la red y obtener una recompensa (por defecto: 1) + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + Sincronizar la hora con otros nodos. Desactivar si la hora de su sistema es precisa, por ejemplo, sincronizando con NTP (por defecto: 1) + + + + Sync checkpoints policy (default: strict) + Política de sincronización de puntos de control (por defecto: estricta) + + + + Threshold for disconnecting misbehaving peers (default: 100) + Umbral para desconectar a los compañeros que se comportan mal (por defecto: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Número de segundos para evitar que los pares que se comportan mal vuelvan a conectarse (por defecto: 86400) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Buffer de recepción máximo por conexión, <n>*1000 bytes (por defecto: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Buffer máximo de envío por conexión, <n>*1000 bytes (por defecto: 1000) + + + + Use UPnP to map the listening port (default: 1 when listening) + Usar UPnP para asignar el puerto de escucha (por defecto: 1 cuando se escucha) + + + + Use UPnP to map the listening port (default: 0) + Usar UPnP para asignar el puerto de escucha (por defecto: 0) + + + + Detach block and address databases. Increases shutdown time (default: 0) + Desconecta las bases de datos de bloques y direcciones. Aumenta el tiempo de apagado (por defecto: 0) + + + + Fee per KB to add to transactions you send + Tasa por KB a añadir a las transacciones que envíe + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + Al crear transacciones, ignorar las entradas con un valor inferior a este (por defecto: 0,01) + + + + Accept command line and JSON-RPC commands + Acepta la línea de comandos y los comandos JSON-RPC + + + + Run in the background as a daemon and accept commands + Se ejecuta en segundo plano como un demonio y acepta comandos + + + + Use the test network + Utilizar la red de pruebas + + + + Output extra debugging information. Implies all other -debug* options + Muestra información de depuración adicional. Implica todas las demás opciones -debug*. + + + + Output extra network debugging information + Salida de información adicional de depuración de la red + + + + Prepend debug output with timestamp + Preagregar la salida de depuración con la marca de tiempo + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Reducir el archivo debug.log al iniciar el cliente (por defecto: 1 cuando no -depuración) + + + + Send trace/debug info to console instead of debug.log file + Enviar información de rastreo/depuración a la consola en lugar del archivo debug.log + + + + Send trace/debug info to debugger + Enviar información de rastreo/depuración al depurador + + + + Username for JSON-RPC connections + Nombre de usuario para conexiones JSON-RPC + + + + Password for JSON-RPC connections + Contraseña para conexiones JSON-RPC + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + Escucha de conexiones JSON-RPC en<port> (por defecto: 36657 o testnet: 36757) + + + + Allow JSON-RPC connections from specified IP address + Permitir conexiones JSON-RPC desde la dirección IP especificada + + + + Send commands to node running on <ip> (default: 127.0.0.1) + Enviar comandos al nodo que se ejecuta en<ip> (por defecto: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Ejecutar el comando cuando el mejor bloque cambia (%s en cmd se sustituye por el hash del bloque) + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Ejecutar el comando cuando una transacción de la cartera cambia (%s en cmd se sustituye por TxID) + + + + Require a confirmations for change (default: 0) + Requiere una confirmación para el cambio (por defecto: 0) + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + Obligar a los scripts de transacciones a utilizar operadores PUSH canónicos (por defecto: 1) + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + Ejecutar el comando cuando se recibe una alerta relevante (%s en cmd se sustituye por el mensaje) + + + + Upgrade wallet to latest format + Actualizar el monedero al último formato + + + + Set key pool size to <n> (default: 100) + Establecer el tamaño del grupo de claves <n> (por defecto: 100) + + + + Rescan the block chain for missing wallet transactions + Reexaminar la cadena de bloques en busca de transacciones de monederos perdidas + + + + Attempt to recover private keys from a corrupt wallet.dat + Intento de recuperar las claves privadas de un wallet.dat corrupto + + + + How many blocks to check at startup (default: 2500, 0 = all) + Cuántos bloques comprobar al inicio (por defecto: 2500, 0 = todos) + + + + How thorough the block verification is (0-6, default: 1) + Cómo de exhaustiva es la verificación de bloques (0-6, por defecto: 1) + + + + Imports blocks from external blk000?.dat file + Importar bloques desde el archivo externo blk000?.dat + + + + Block creation options: + Opciones de creación de bloques: + + + + Set minimum block size in bytes (default: 0) + Establecer tamaño mínimo de bloque en bytes (predeterminado: 0) + + + + Set maximum block size in bytes (default: 250000) + Establecer el tamaño máximo de bloque en bytes (por defecto: 250000) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) +   +Establecer el tamaño máximo de las transacciones alta-prioridad/baja-comisión en bytes (por defecto: 27000) + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + Opciones de SSL: (consulte la Wiki de Bitcoin para ver las instrucciones de configuración de SSL) + + + + Use OpenSSL (https) for JSON-RPC connections + Usar OpenSSL (https) para las conexiones JSON-RPC + + + + Server certificate file (default: server.cert) + Certificado del servidor (predeterminado: server.cert) + + + + Server private key (default: server.pem) + Clave privada del servidor (predeterminado: server.pem) + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + Cifras aceptables: (por defecto: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + Invalid amount for -paytxfee=<amount>: '%s' + Cantidad inválida para -paytxfee=<amount>: '%s' + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Aviso: ¡-paytxfee tiene un valor muy alto! Esta es la comisión que pagará si envía una transacción. + + + + Invalid amount for -mininput=<amount>: '%s' + Cantidad no válida para -mininput=<amount>: '%s' + + + + Wallet %s resides outside data directory %s. + La billetera %s reside fuera del directorio de datos %s. + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + No se puede obtener un bloqueo en el directorio de datos %s. Alias probablemente ya esté en funcionamiento. + + + + Verifying database integrity... + Verificando la integridad de la base de datos... + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + Error al inicializar el entorno de base de datos %s! Para recuperar, HAGA UNA COPIA DE SEGURIDAD DEL DIRECTORIO, a continuación, elimine todo de ella excepto el archivo wallet.dat. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Aviso: ¡Recuperados datos de wallet.dat corrupto! El wallet.dat original se ha guardado como wallet.{timestamp}.bak en %s; si hubiera errores en su saldo o transacciones, deberá restaurar una copia de seguridad. + + + + wallet.dat corrupt, salvage failed + wallet.dat corrupto. Ha fallado la recuperación. + + + + Unknown -socks proxy version requested: %i + Solicitada versión de proxy -socks desconocida: %i + + + + Unknown network specified in -onlynet: '%s' + La red especificada en -onlynet '%s' es desconocida + + + + Invalid -proxy address: '%s' + Dirección -proxy inválida: '%s' + + + + Invalid -tor address: '%s' + Dirección -tor inválida: '%s' + + + + Cannot resolve -bind address: '%s' + No se puede resolver la dirección de -bind: '%s' + + + + Failed to listen on any port. + No se puede escuchar en ningún puerto. + + + + Failed to listen on any port. Use -listen=0 if you want this. + Ha fallado la escucha en todos los puertos. Use -listen=0 si desea esto. + + + + Cannot resolve -externalip address: '%s' + No se puede resolver la dirección de -externalip: '%s' + + + + Invalid amount for -reservebalance=<amount> + Cantidad inválida para -reservebalance=<amount> + + + + Unable to sign checkpoint, wrong checkpointkey? + + Cantidad no válida para -reservebalance= + + + + + Loading block index... + Cargando el índice de bloques... + + + + Error loading blk0001.dat + Error al cargar blk0001.dat + + + + Loading wallet... + Cargando monedero... + + + + Error loading wallet.dat: Wallet corrupted + Error al cargar wallet.dat: el monedero está dañado + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Aviso: ¡Error al leer wallet.dat! Todas las claves se han leído correctamente, pero podrían faltar o ser incorrectos los datos de transacciones o las entradas de la libreta de direcciones. + + + + Error loading wallet.dat: Wallet requires newer version of Alias + Error cargando wallet.dat: El monedero requiere una nueva versión de Alias + + + + Wallet needed to be rewritten: restart Alias to complete + El Monedero necesita ser reescrito: reinicie Alias para completar + + + + Error loading wallet.dat + Error al cargar wallet.dat + + + + Cannot downgrade wallet + No se puede degradar El Monedero + + + + Cannot initialize keypool + No se puede inicializar el keypool + + + + Cannot write default address + No se puede escribir la dirección por defecto + + + + Rescanning... + Reexaminando... + + + + Importing blockchain data file. + Importando el archivo de datos de la cadena de bloques. + + + + Importing bootstrap blockchain data file. + Importando el archivo de datos de arranque de la cadena de bloques. + + + + Loading addresses... + Cargando direcciones... + + + + Error: could not start node + Error: no se pudo iniciar el nodo + + + + Done loading + Carga terminada + + + + Unable to bind to %s on this computer. Alias is probably already running. + No se puede enlazar con %s en este ordenador. Es probable que el alias ya se esté ejecutando. + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + No se ha podido enlazar con %s en este ordenador (el enlace ha devuelto el error %d, %s) + + + + Error: Wallet locked, unable to create transaction + Error: Monedero bloqueado, no es posible crear una transacción + + + + Error: Wallet unlocked for staking only, unable to create transaction. + Error: Monedero desbloqueado sólo para apostar, no se puede crear la transacción. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + Error: Esta transacción requiere una tasa de transacción de al menos %s debido a su importe, complejidad o uso de fondos recientemente recibidos + + + + Error: Transaction creation failed + Error: La creación de la transacción ha fallado. + + + + Sending... + Enviando... + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Error: La transacción ha sido rechazada. Esto puede ocurrir si algunas de sus monedas en el monedero ya se gastaron, por ejemplo, si se usa una copia del wallet.dat y se gastaron las monedas de la copia pero no se han marcado como gastadas aquí. + + + + Invalid amount + Cantidad inválida + + + + Insufficient funds + Fondos Insuficientes + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + Advertencia: Compruebe que la fecha y la hora de su ordenador son correctas. Si su reloj es incorrecto, Alias no funcionará correctamente. + + + + Warning: This version is obsolete, upgrade required! + Aviso: Esta versión es obsoleta, actualización necesaria! + + + + WARNING: syncronized checkpoint violation detected, but skipped! + ADVERTENCIA: ¡violación de punto de control sincronizado detectada, pero omitida! + + + + Warning: Disk space is low! + Advertencia: Poco espacio en el disco! + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + ADVERTENCIA: ¡Se ha encontrado un punto de control no válido! Las transacciones mostradas pueden no ser correctas. Es posible que tenga que actualizar, o notificar a los desarrolladores. + + + + Read ATXOs... (%d) + Leer ATXOs... (%d) + + + + Read spent ATXOs... (%d) + Leer ATXOs gastados... (%d) + + + + Note must be 24 characters or less. + La nota debe tener 24 caracteres o menos. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Error: La transacción fue rechazada. Esto puede ocurrir si algunas de las monedas de su monedero ya se han gastado, por ejemplo, si ha utilizado una copia de wallet.dat y las monedas se han gastado en la copia pero no se han marcado como gastadas aquí. + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + Error: Se ha encontrado un argumento no soportado -socks. Ya no es posible configurar la versión de SOCKS, sólo se admiten proxies SOCKS5. + + + + Initialization sanity check failed. Alias is shutting down. + La comprobación de la sanidad de la inicialización ha fallado. Alias se está apagando. + + + + Loading block index... (%d) + Cargando el índice del bloque... (%d) + + + + Calculating chain trust... (%d) + Calculando la confianza de la cadena... (%d) + + + + Validating last %d block... + Validating last %d block... + + + + -bip44key is not allowed if wallet.dat already exists + -bip44key no está permitido si wallet.dat ya existe + + + + Cannot resolve binding address: '%s' + No se puede resolver la dirección de enlace: '%s + + + + Error: could not start tor node + Error: no se ha podido iniciar el nodo tor + + + + Timed out waiting for onion hostname. + Se ha agotado el tiempo de espera del nombre de host de la cebolla. + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + Error al cargar blk0001.dat: Se ha detectado una cadena no válida, por favor resincronice o utilice los archivos de arranque. + + + + Loading wallet items... (%d) + Cargando elementos del Monedero (%d) + + + + Reindexing from blk000?.dat files. + Reindexación de los archivos blk000?.dat. + + + + Reindexing block... (%d) + Reindexando el bloque... (%d) + + + + Core started! + ¡El núcleo ha comenzado! + + + + Use tor hidden services version 2 instead of version 3 + Utilizar la versión 2 de los servicios ocultos de Tor en lugar de la versión 3 + + + + Find peers using .onion seeds (default: 1 unless -connect) + Buscar pares usando semillas .onion (por defecto: 1 a menos que -connect) + + + + Minimum time in seconds between successful stakes (default: 30) + Tiempo mínimo en segundos entre apuestas exitosas (por defecto: 30) + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + Porcentaje de las recompensas de las apuestas para donar a los desarrolladores (entre 0 y 100 inclusive, por defecto 5) + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + Milisegundos entre los intentos de apostar. Si se reduce este parámetro, no se producirán más apuestas. (por defecto: 500) + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + Número de segundos para evitar que los pares prohibidos por software se vuelvan a conectar (por defecto: 3600) + + + + Simple command line interface - if not run as daemon + Interfaz de línea de comandos simple - si no se ejecuta como demonio + + + + Output extra blockchain debugging information + Salida de información adicional de depuración de la cadena de bloques + + + + Output extra Proof of Stake debugging information + Salida de información adicional de depuración de Proof of Stake + + + + Send trace/debug info to debug.log file + Enviar información de rastreo/depuración al archivo debug.log + + + + Wait for RPC server to start + Esperar a que se inicie el servidor RPC + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + Mantener como máximo<n> MiB de bloques no conectables en memoria (por defecto: %u) + + + + Rebuild block chain index from current blk000?.dat files on startup + Reconstruir el índice de la cadena de bloques a partir de los archivos blk000?.dat actuales al iniciarse + + + + Show version and exit + Mostrar versión y salida + + + + Thin options: + Opciones delgadas: + + + + Operate in less secure, less resource hungry 'thin' mode + Operar en modo "ligero", menos seguro y con menos recursos + + + + Keep the entire block index in memory. (default: 0) + Mantener todo el índice del bloque en la memoria. (por defecto: 0) + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + Cuando no es thinfullindex, el número máximo de cabeceras de bloque a mantener en memoria. (por defecto: 4096) + + + + Disable supporting thin nodes. (default: 0) + Desactivar el apoyo a los nodos delgados. (por defecto: 0) + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + Desactivar el reenvío, o solicitar todas las txns sigilosas. (por defecto: 0) + + + + Don't connect to more than <n> thin peers (default: 8) + No conectarse a más de <n>pares finos (por defecto: 8) + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Cifras aceptables (por defecto: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + conn + conn + + + + Error: Wallet locked, unable to create transaction. + Error: Monedero bloqueado, no es posible crear una transacción + + + + Error: Must be in full mode. + Error: Debe estar en modo completo. + + + + Error: Block chain must be fully synced first. + Error: La cadena de bloques debe estar completamente sincronizada primero. + + + + Error: Alias is not connected! + Error: ¡Alias no está conectado! + + + + Update balance... + Actualizar el balance... + + + + ...Start UI... + ...Comienza la UI... + + + + Shutdown... + Apagar... + + + \ No newline at end of file diff --git a/src/qt/locale/alias_et.ts b/src/qt/locale/alias_et.ts new file mode 100644 index 0000000000..3dc9a2394d --- /dev/null +++ b/src/qt/locale/alias_et.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + Info Alias'i kohta + + + + <b>Alias</b> version + <b>Alias</b>'i versioon + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Silt + + + + Address + Aadress + + + + pubkey + + + + + stealth + + + + + (no label) + (silti pole) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Salafraasi dialoog + + + + Enter passphrase + Sisesta salasõna + + + + New passphrase + Uus salasõna + + + + Repeat new passphrase + Korda salafraasi + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Sisesta rahakotile uus salafraas.<br/>Palun kasuta salafraasina <b>vähemalt 10 tähte/numbrit/sümbolit</b>, või <b>vähemalt 8 sõna</b>. + + + + Encrypt wallet + Krüpteeri rahakott + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + See toiming nõuab sinu rahakoti salafraasi. + + + + Unlock wallet + Tee rahakott lukust lahti. + + + + This operation needs your wallet passphrase to decrypt the wallet. + See toiming nõuab sinu rahakoti salafraasi. + + + + Decrypt wallet + Dekrüpteeri rahakott. + + + + Change passphrase + Muuda salafraasi + + + + Enter the old and new passphrase to the wallet. + Sisesta rahakoti vana ning uus salafraas. + + + + Confirm wallet encryption + Kinnita rahakoti krüpteering + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + Kas soovid oma rahakoti krüpteerida? + + + + + Wallet encrypted + Rahakott krüpteeritud + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + TÄHTIS: Kõik varasemad rahakoti varundfailid tuleks üle kirjutada äsja loodud krüpteeritud rahakoti failiga. Turvakaalutlustel tühistatakse krüpteerimata rahakoti failid alates uue, krüpteeritud rahakoti, kasutusele võtust. + + + + + + + Wallet encryption failed + Tõrge rahakoti krüpteerimisel + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Rahakoti krüpteering ebaõnnestus tõrke tõttu. Sinu rahakotti ei krüpteeritud. + + + + + The supplied passphrases do not match. + Salafraasid ei kattu. + + + + Wallet unlock failed + Rahakoti avamine ebaõnnestus + + + + + + The passphrase entered for the wallet decryption was incorrect. + Rahakoti salafraas ei ole õige. + + + + Wallet decryption failed + Rahakoti dekrüpteerimine ei õnnestunud + + + + Wallet passphrase was successfully changed. + Rahakoti salafraasi muutmine õnnestus. + + + + + Warning: The Caps Lock key is on! + Hoiatus: Caps Lock on sisse lülitatud! + + + + ClientModel + + + Network Alert + Võrgu Häire + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Summa: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Kogus + + + + Label + + + + + Address + Aadress + + + + Date + Kuupäev + + + + Confirmations + + + + + Confirmed + Kinnitatud + + + + Priority + + + + + Copy address + Aadressi kopeerimine + + + + Copy label + Märgise kopeerimine + + + + + Copy amount + Kopeeri summa + + + + Copy transaction ID + Kopeeri tehingu ID + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (silti pole) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Muuda aadressi + + + + &Label + &Märgis + + + + The label associated with this address book entry + + + + + &Address + &Aadress + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Uus sissetulev aadress + + + + New sending address + Uus väljaminev aadress + + + + Edit receiving address + Sissetulevate aadresside muutmine + + + + Edit sending address + Väljaminevate aadresside muutmine + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Selline aadress on juba olemas: "%1" + + + + Could not unlock wallet. + Rahakotti ei avatud + + + + New key generation failed. + Tõrge uue võtme loomisel. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informatsioon + + + + Alias Core + + + + + Client name + Kliendi nimi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Kliendi versioon + + + + Using OpenSSL version + Kasutan OpenSSL versiooni + + + + Using BerkeleyDB version + + + + + Build date + Valmistusaeg + + + + Startup time + Käivitamise hetk + + + + Network + Võrgustik + + + + Name + + + + + Number of connections + Ühenduste arv + + + + Block chain + Ploki jada + + + + Current number of blocks + Plokkide hetkearv + + + + Estimated total blocks + Ligikaudne plokkide kogus + + + + Last block time + Viimane ploki aeg + + + + Debug log file + Debugimise logifail + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Ava + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Konsool + + + + Clear console + Puhasta konsool + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Ajaloo sirvimiseks kasuta üles ja alla nooli, ekraani puhastamiseks <b>Ctrl-L</b>. + + + + Type <b>help</b> for an overview of available commands. + Ülevaateks võimalikest käsklustest trüki <b>help</b>. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Avatud kuni %1 + + + + conflicted + + + + + %1/offline + %/1offline'is + + + + %1/unconfirmed + %1/kinnitamata + + + + %1 confirmations + %1 kinnitust + + + + Transaction ID + Tehingu ID + + + + Block Hash + + + + + Status + Staatus + + + + , has not been successfully broadcast yet + , veel esitlemata + + + + , broadcast through %n node(s) + + + + + Date + Kuupäev + + + + Source + Allikas + + + + Generated + Genereeritud + + + + + Credit + Krediit + + + + matures in %n more block(s) + + + + + not accepted + mitte aktsepteeritud + + + + Transaction fee + Tehingu tasu + + + + Net amount + Neto summa + + + + Message + Sõnum + + + + Comment + Kommentaar + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Debug'imise info + + + + Debit + Deebet + + + + Transaction + Tehing + + + + Inputs + Sisendid + + + + Amount + Kogus + + + + true + õige + + + + false + vale + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + tundmatu + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Tehingu üksikasjad + + + + This pane shows a detailed description of the transaction + Paan kuvab tehingu detailid + + + + TransactionTableModel + + + Date + Kuupäev + + + + Type + Tüüp + + + + Address + Aadress + + + + Note + + + + + Amount + Kogus + + + + Open for %n more block(s) + + + + + Open until %1 + Avatud kuni %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Kinnitatud (%1 kinnitust) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Tehingu staatus. Kinnituste arvu kuvamiseks liigu hiire noolega selle peale. + + + + Date and time that the transaction was received. + Tehingu saamise kuupäev ning kellaaeg. + + + + Type of transaction. + Tehingu tüüp. + + + + Destination address of transaction. + Tehingu saaja aadress. + + + + Amount removed from or added to balance. + Jäägile lisatud või eemaldatud summa. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_eu_ES.ts b/src/qt/locale/alias_eu_ES.ts new file mode 100644 index 0000000000..e9b741b0f7 --- /dev/null +++ b/src/qt/locale/alias_eu_ES.ts @@ -0,0 +1,4294 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Etiketa + + + + Address + Helbidea + + + + pubkey + + + + + stealth + + + + + (no label) + (etiketarik ez) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + Sartu pasahitza + + + + New passphrase + Pasahitz berria + + + + Repeat new passphrase + Errepikatu pasahitz berria + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Sartu zorrorako pasahitz berria.<br/> Mesedez erabili <b>gutxienez ausazko 10 karaktere</b>, edo <b>gutxienez zortzi hitz</b> pasahitza osatzeko. + + + + Encrypt wallet + Enkriptatu zorroa + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Eragiketa honek zorroaren pasahitza behar du zorroa desblokeatzeko. + + + + Unlock wallet + Desblokeatu zorroa + + + + This operation needs your wallet passphrase to decrypt the wallet. + Eragiketa honek zure zorroaren pasahitza behar du, zorroa desenkriptatzeko. + + + + Decrypt wallet + Desenkriptatu zorroa + + + + Change passphrase + Aldatu pasahitza + + + + Enter the old and new passphrase to the wallet. + Sartu zorroaren pasahitz zaharra eta berria. + + + + Confirm wallet encryption + Berretsi zorroaren enkriptazioa + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + Zorroa enkriptatuta + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + Zorroaren enkriptazioak huts egin du + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Zorroaren enkriptazioak huts egin du barne-errore baten ondorioz. Zure zorroa ez da enkriptatu. + + + + + The supplied passphrases do not match. + Eman dituzun pasahitzak ez datoz bat. + + + + Wallet unlock failed + Zorroaren desblokeoak huts egin du + + + + + + The passphrase entered for the wallet decryption was incorrect. + Zorroa desenkriptatzeko sartutako pasahitza okerra da. + + + + Wallet decryption failed + Zorroaren desenkriptazioak huts egin du + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Kopurua + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Kopurua + + + + Label + + + + + Address + Helbidea + + + + Date + Data + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + Kopiatu helbidea + + + + Copy label + Kopiatu etiketa + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (etiketarik ez) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Editatu helbidea + + + + &Label + &Etiketa + + + + The label associated with this address book entry + + + + + &Address + &Helbidea + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Jasotzeko helbide berria + + + + New sending address + Bidaltzeko helbide berria + + + + Edit receiving address + Editatu jasotzeko helbidea + + + + Edit sending address + Editatu bidaltzeko helbidea + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Sartu berri den helbidea, "%1", helbide-liburuan dago jadanik. + + + + Could not unlock wallet. + Ezin desblokeatu zorroa. + + + + New key generation failed. + Gako berriaren sorrerak huts egin du. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Zabalik %1 arte + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + %1/konfirmatu gabe + + + + %1 confirmations + %1 konfirmazioak + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + , ez da arrakastaz emititu oraindik + + + + , broadcast through %n node(s) + + + + + Date + Data + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + Kopurua + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + ezezaguna + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Transakzioaren xehetasunak + + + + This pane shows a detailed description of the transaction + Panel honek transakzioaren deskribapen xehea erakusten du + + + + TransactionTableModel + + + Date + Data + + + + Type + Mota + + + + Address + Helbidea + + + + Note + + + + + Amount + Kopurua + + + + Open for %n more block(s) + + + + + Open until %1 + Zabalik %1 arte + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Konfirmatuta (%1 konfirmazio) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Transakzioaren egoera. Pasatu sagua gainetik konfirmazio kopurua ikusteko. + + + + Date and time that the transaction was received. + Transakzioa jasotako data eta ordua. + + + + Type of transaction. + Transakzio mota. + + + + Destination address of transaction. + Transakzioaren xede-helbidea. + + + + Amount removed from or added to balance. + Saldoan kendu edo gehitutako kopurua. + + + + WalletModel + + + + Sending... + + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_fa.ts b/src/qt/locale/alias_fa.ts new file mode 100644 index 0000000000..2e025bb283 --- /dev/null +++ b/src/qt/locale/alias_fa.ts @@ -0,0 +1,4294 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + برچسب + + + + Address + نشانی + + + + pubkey + + + + + stealth + + + + + (no label) + (بدون برچسب) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + پنجرهٔ گذرواژه + + + + Enter passphrase + گذرواژه را وارد کنید + + + + New passphrase + گذرواژهٔ جدید + + + + Repeat new passphrase + تکرار گذرواژهٔ جدید + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + گذرواژهٔ جدید کیف پول خود را وارد کنید.<br/>لطفاً از گذرواژه‌ای با <b>حداقل ۱۰ حرف تصادفی</b>، یا <b>حداقل هشت کلمه</b> انتخاب کنید. + + + + Encrypt wallet + رمزنگاری کیف پول + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + انجام این عملیات نیازمند گذرواژهٔ کیف پول شما برای باز کردن قفل آن است. + + + + Unlock wallet + باز کردن قفل کیف پول + + + + This operation needs your wallet passphrase to decrypt the wallet. + انجام این عملیات نیازمند گذرواژهٔ کیف پول شما برای رمزگشایی کردن آن است. + + + + Decrypt wallet + رمزگشایی کیف پول + + + + Change passphrase + تغییر گذرواژه + + + + Enter the old and new passphrase to the wallet. + گذرواژهٔ قدیمی و جدید کیف پول را وارد کنید. + + + + Confirm wallet encryption + تأیید رمزنگاری کیف پول + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + آیا مطمئن هستید که می‌خواهید کیف پول خود را رمزنگاری کنید؟ + + + + + Wallet encrypted + کیف پول رمزنگاری شد + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + مهم: هر نسخهٔ پشتیبانی که تا کنون از کیف پول خود تهیه کرده‌اید، باید با کیف پول رمزنگاری شدهٔ جدید جایگزین شود. به دلایل امنیتی، پروندهٔ قدیمی کیف پول بدون رمزنگاری، تا زمانی که از کیف پول رمزنگاری‌شدهٔ جدید استفاده نکنید، غیرقابل استفاده خواهد بود. + + + + + + + Wallet encryption failed + رمزنگاری کیف پول با خطا مواجه شد + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + رمزنگاری کیف پول بنا به یک خطای داخلی با شکست مواجه شد. کیف پول شما رمزنگاری نشد. + + + + + The supplied passphrases do not match. + گذرواژه‌های داده شده با هم تطابق ندارند. + + + + Wallet unlock failed + بازگشایی قفل کیف‌پول با شکست مواجه شد + + + + + + The passphrase entered for the wallet decryption was incorrect. + گذرواژهٔ وارد شده برای رمزگشایی کیف پول نادرست بود. + + + + Wallet decryption failed + رمزگشایی ناموفق کیف پول + + + + Wallet passphrase was successfully changed. + گذرواژهٔ کیف پول با موفقیت عوض شد. + + + + + Warning: The Caps Lock key is on! + هشدار: کلید Caps Lock روشن است! + + + + ClientModel + + + Network Alert + پیام شبکه + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + مبلغ: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + مبلغ + + + + Label + + + + + Address + نشانی + + + + Date + تاریخ + + + + Confirmations + + + + + Confirmed + تأیید شده + + + + Priority + + + + + Copy address + کپی نشانی + + + + Copy label + کپی برچسب + + + + + Copy amount + کپی مقدار + + + + Copy transaction ID + کپی شناسهٔ تراکنش + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (بدون برچسب) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + ویرایش نشانی + + + + &Label + &برچسب + + + + The label associated with this address book entry + + + + + &Address + &نشانی + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + نشانی دریافتی جدید + + + + New sending address + نشانی ارسالی جدید + + + + Edit receiving address + ویرایش نشانی دریافتی + + + + Edit sending address + ویرایش نشانی ارسالی + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + نشانی وارد شده «%1» در حال حاضر در دفترچه وجود دارد. + + + + Could not unlock wallet. + نمی‌توان کیف پول را رمزگشایی کرد. + + + + New key generation failed. + ایجاد کلید جدید با شکست مواجه شد. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &اطلاعات + + + + Alias Core + + + + + Client name + نام کلاینت + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + ناموجود + + + + Client version + نسخهٔ کلاینت + + + + Using OpenSSL version + نسخهٔ OpenSSL استفاده شده + + + + Using BerkeleyDB version + + + + + Build date + ساخت تاریخ + + + + Startup time + زمان آغاز به کار + + + + Network + شبکه + + + + Name + + + + + Number of connections + تعداد ارتباطات + + + + Block chain + زنجیرهٔ بلوک‌ها + + + + Current number of blocks + تعداد فعلی بلوک‌ها + + + + Estimated total blocks + تعداد تخمینی بلوک‌ها + + + + Last block time + زمان آخرین بلوک + + + + Debug log file + فایلِ لاگِ اشکال زدایی + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + با&ز کردن + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &کنسول + + + + Clear console + پاکسازی کنسول + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + دکمه‌های بالا و پایین برای پیمایش تاریخچه و <b>Ctrl-L</b> برای پاک کردن صفحه. + + + + Type <b>help</b> for an overview of available commands. + برای نمایش یک مرور کلی از دستورات ممکن، عبارت <b>help</b> را بنویسید. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + باز تا %1 + + + + conflicted + + + + + %1/offline + %1/آفلاین + + + + %1/unconfirmed + %1/تأیید نشده + + + + %1 confirmations + %1 تأییدیه + + + + Transaction ID + شناسهٔ تراکنش + + + + Block Hash + + + + + Status + وضعیت + + + + , has not been successfully broadcast yet + ، هنوز با موفقیت ارسال نشده + + + + , broadcast through %n node(s) + + + + + Date + تاریخ + + + + Source + منبع + + + + Generated + تولید شده + + + + + Credit + بدهی + + + + matures in %n more block(s) + + + + + not accepted + پذیرفته نشد + + + + Transaction fee + هزینهٔ تراکنش + + + + Net amount + مبلغ خالص + + + + Message + پیام + + + + Comment + نظر + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + اطلاعات اشکال‌زدایی + + + + Debit + اعتبار + + + + Transaction + تراکنش + + + + Inputs + ورودی‌ها + + + + Amount + مبلغ + + + + true + درست + + + + false + نادرست + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + ناشناس + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + جزئیات تراکنش + + + + This pane shows a detailed description of the transaction + این پانل شامل توصیف کاملی از جزئیات تراکنش است + + + + TransactionTableModel + + + Date + تاریخ + + + + Type + نوع + + + + Address + نشانی + + + + Note + + + + + Amount + مبلغ + + + + Open for %n more block(s) + + + + + Open until %1 + باز شده تا %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + تأیید شده (%1 تأییدیه) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (ناموجود) + + + + Transaction status. Hover over this field to show number of confirmations. + وضعیت تراکنش. نشانگر را روی این فیلد نگه دارید تا تعداد تأییدیه‌ها نشان داده شود. + + + + Date and time that the transaction was received. + تاریخ و ساعت دریافت تراکنش. + + + + Type of transaction. + نوع تراکنش. + + + + Destination address of transaction. + نشانی مقصد تراکنش. + + + + Amount removed from or added to balance. + مبلغ کسر شده و یا اضافه شده به تراز. + + + + WalletModel + + + + Sending... + + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_fa_IR.ts b/src/qt/locale/alias_fa_IR.ts new file mode 100644 index 0000000000..2612015163 --- /dev/null +++ b/src/qt/locale/alias_fa_IR.ts @@ -0,0 +1,3983 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + برچسب + + + + Address + حساب + + + + pubkey + + + + + stealth + + + + + (no label) + (برچسب ندارد) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + رمز/پَس فرِیز را وارد کنید + + + + New passphrase + رمز/پَس فرِیز جدید را وارد کنید + + + + Repeat new passphrase + رمز/پَس فرِیز را دوباره وارد کنید + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + رمز/پَس فرِیز جدید را در wallet وارد کنید. برای انتخاب رمز/پَس فرِیز از 10 کاراکتر تصادفی یا بیشتر و یا هشت کلمه یا بیشتر استفاده کنید. + + + + Encrypt wallet + wallet را رمزگذاری کنید + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + برای انجام این عملکرد به رمز/پَس فرِیزِwallet نیاز است تا آن را از حالت قفل درآورد. + + + + Unlock wallet + باز کردن قفل wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + برای کشف رمز wallet، به رمز/پَس فرِیزِwallet نیاز است. + + + + Decrypt wallet + کشف رمز wallet + + + + Change passphrase + تغییر رمز/پَس فرِیز + + + + Enter the old and new passphrase to the wallet. + رمز/پَس فرِیزِ قدیم و جدید را در wallet وارد کنید + + + + Confirm wallet encryption + رمزگذاری wallet را تایید کنید + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + تایید رمزگذاری + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + رمزگذاری تایید نشد + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + رمزگذاری به علت خطای داخلی تایید نشد. wallet شما رمزگذاری نشد + + + + + The supplied passphrases do not match. + رمزهای/پَس فرِیزهایِ وارد شده با هم تطابق ندارند + + + + Wallet unlock failed + قفل wallet باز نشد + + + + + + The passphrase entered for the wallet decryption was incorrect. + رمزهای/پَس فرِیزهایِ وارد شده wallet برای کشف رمز اشتباه است. + + + + Wallet decryption failed + کشف رمز wallet انجام نشد + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + هشدار شبکه + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + میزان وجه: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + میزان + + + + Label + + + + + Address + حساب + + + + Date + تاریخ + + + + Confirmations + + + + + Confirmed + تایید شده + + + + Priority + + + + + Copy address + آدرس را کپی کنید + + + + Copy label + برچسب را کپی کنید + + + + + Copy amount + میزان وجه کپی شود + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (برچسب ندارد) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + ویرایش حساب + + + + &Label + و برچسب + + + + The label associated with this address book entry + + + + + &Address + حساب& + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + حساب دریافت کننده جدید + + + + + New sending address + حساب ارسال کننده جدید + + + + Edit receiving address + ویرایش حساب دریافت کننده + + + + Edit sending address + ویرایش حساب ارسال کننده + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + حساب وارد شده «1%» از پیش در دفترچه حساب ها موجود است. + + + + Could not unlock wallet. + عدم توانیی برای قفل گشایی wallet + + + + New key generation failed. + عدم توانیی در ایجاد کلید جدید + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + نام کنسول RPC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + ویرایش کنسول RPC + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + شبکه + + + + Name + + + + + Number of connections + تعداد اتصال + + + + Block chain + زنجیره مجموعه تراکنش ها + + + + Current number of blocks + تعداد زنجیره های حاضر + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + باز کن تا %1 + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + %1 / تایید نشده + + + + %1 confirmations + %1 تایید + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + ، هنوز با موفقیت ارسال نگردیده است + + + + , broadcast through %n node(s) + + + + + Date + تاریخ + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + پیام + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + میزان + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + ناشناس + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + جزئیات تراکنش + + + + This pane shows a detailed description of the transaction + این بخش جزئیات تراکنش را نشان می دهد + + + + TransactionTableModel + + + Date + تاریخ + + + + Type + گونه + + + + Address + آدرس + + + + Note + + + + + Amount + میزان وجه + + + + Open for %n more block(s) + + + + + Open until %1 + باز کن تا %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + تایید شده (%1 تاییدها) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + خالی + + + + Transaction status. Hover over this field to show number of confirmations. + وضعیت تراکنش. با اشاره به این بخش تعداد تاییدها نمایش داده می شود + + + + Date and time that the transaction was received. + زمان و تاریخی که تراکنش دریافت شده است + + + + Type of transaction. + نوع تراکنش + + + + Destination address of transaction. + آدرس مقصد در تراکنش + + + + Amount removed from or added to balance. + میزان وجه کم شده یا اضافه شده به حساب + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_fi.ts b/src/qt/locale/alias_fi.ts new file mode 100644 index 0000000000..cccd69aeaa --- /dev/null +++ b/src/qt/locale/alias_fi.ts @@ -0,0 +1,3996 @@ + + + AboutDialog + + + About Alias + Tietoa Aliascoinista + + + + <b>Alias</b> version + <b>Alias</b> versio + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Nimi + + + + Address + Osoite + + + + pubkey + + + + + stealth + + + + + (no label) + (ei nimeä) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Tunnuslauseen Dialogi + + + + Enter passphrase + Syötä tunnuslause + + + + New passphrase + Uusi tunnuslause + + + + Repeat new passphrase + Toista uusi tunnuslause uudelleen + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Sallii estettäväksi yksinkertaiset rahansiirrot kun käyttöjärjestelmän käyttäjätunnuksen turvallisuutta on rikottu. Tämä ei takaa oikeasti turvallisuutta. + + + + For staking only + Vain osakkuutta varten + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Anna lompakolle uusi tunnuslause.<br/>Käytä tunnuslausetta, jossa on ainakin <b>10 satunnaista merkkiä</b> tai <b>kahdeksan sanaa</b>. + + + + Encrypt wallet + Salaa lompakko + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Tätä toimintoa varten sinun täytyy antaa lompakon tunnuslause sen avaamiseksi. + + + + Unlock wallet + Avaa lompakko lukituksestaan + + + + This operation needs your wallet passphrase to decrypt the wallet. + Tätä toimintoa varten sinun täytyy antaa lompakon tunnuslause salauksen purkuun. + + + + Decrypt wallet + Pura lompakon salaus + + + + Change passphrase + Vaihda tunnuslause + + + + Enter the old and new passphrase to the wallet. + Anna vanha ja uusi tunnuslause. + + + + Confirm wallet encryption + Vahvista lompakon salaus + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Varoitus: Jos salaat lompakkosi ja hukkaat salasanasi, <b>MENETÄT KAIKKI KOLIKKOSI</b>! + + + + Are you sure you wish to encrypt your wallet? + Haluatko varmasti salata lompakkosi? + + + + + Wallet encrypted + Lompakko salattu + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias-ohjelma sulkee itsensä päättääkseen salauksen luonnin. Muista, että lompakon salaaminen ei täysin turvaa kolikoitasi haittaohjelmien aiheuttamien varkauksien uhalta. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + TÄRKEÄÄ: Kaikki vanhat lompakon varmuuskopiot tulisi korvata uusilla suojatuilla varmuuskopioilla. Turvallisuussyistä edelliset varmuuskopiot muuttuvat käyttökelvottomiksi, kun aloitat uuden salatun lompakon käytön. + + + + + + + Wallet encryption failed + Lompakon salaus epäonnistui + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Lompakon salaaminen epäonnistui sisäisen virheen vuoksi. Lompakkoasi ei salattu. + + + + + The supplied passphrases do not match. + Annetut tunnuslauseet eivät täsmää. + + + + Wallet unlock failed + Lompakon avaaminen epäonnistui. + + + + + + The passphrase entered for the wallet decryption was incorrect. + Annettu tunnuslause oli väärä. + + + + Wallet decryption failed + Lompakon salauksen purku epäonnistui. + + + + Wallet passphrase was successfully changed. + Lompakon tunnuslause vaihdettiin onnistuneesti. + + + + + Warning: The Caps Lock key is on! + Varoitus: Caps Lock-näppäin on käytössä! + + + + ClientModel + + + Network Alert + Verkkohälytys + + + + CoinControlDialog + + + Coin Control + Rahan hallinta + + + + Quantity: + Määrä: + + + + Bytes: + Tavua: + + + + Amount: + Määrä: + + + + Priority: + Prioriteetti: + + + + Fee: + Kulu: + + + + Low Output: + Heikko ulosanti: + + + + After Fee: + Kulujen jälkeen: + + + + Change: + Vaihdos: + + + + (un)select all + (tai ei)Valitse kaikki + + + + Tree mode + Puunäkymä + + + + List mode + Listanäkymä + + + + Amount + Määrä + + + + Label + Nimike + + + + Address + Osoite + + + + Date + Päivämäärä + + + + Confirmations + Vahvistukset + + + + Confirmed + Vahvistettu + + + + Priority + Prioriteetti + + + + Copy address + Kopioi osoite + + + + Copy label + Kopioi nimi + + + + + Copy amount + Kopioi määrä + + + + Copy transaction ID + Kopioi siirtotunnus + + + + Copy quantity + Kopioi määrä + + + + Copy fee + Kopioi kulu + + + + Copy after fee + Kopioi kulun jälkeen + + + + Copy bytes + Kopioi tavuja + + + + Copy priority + Kopioi prioriteetti + + + + Copy low output + Kopioi heikko ulosanti + + + + Copy change + Kopioi vaihdos + + + + highest + korkein + + + + high + korkea + + + + medium-high + keskikorkea + + + + medium + keski + + + + low-medium + keskimatala + + + + low + matala + + + + lowest + matalin + + + + + DUST + pölyä + + + + + yes + kyllä + + + + + no + ei + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Tämä nimike muuttuu punaiseksi, jos rahansiirron koko on suurempi kuin 10000 tavua. + +Tämä tarkoittaa, että ainakin %1 rahansiirtopalkkio per kilotavu tarvitaan. + +Voi vaihdella välillä +/- 1 Tavu per syöte. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Suuremman prioriteetin rahansiirrot pääsevät suuremmalla todennäköisyydellä lohkoketjuun. + +Tämä nimike muuttuu punaiseksi, jos prioriteetti on pienempi kuin "keskikokoinen". + +Tämä tarkoittaa, että ainakin %1 rahansiirtopalkkio per kilotavu tarvitaan. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Tämä nimike muuttuu punaiseksi, jos jokin asiakas saa pienemmän määrän kuin %1. + +Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. + +Määrät alle 0.546 kertaa pienimmän rahansiirtokulun verran näytetään pölynä. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Tämä nimike muuttuu punaiseksi, jos vaihdos on pienempi kuin %1. + +Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. + + + + + (no label) + (ei nimeä) + + + + change from %1 (%2) + vaihdos %1 (%2) + + + + (change) + (vaihdos) + + + + EditAddressDialog + + + Edit Address + Muokkaa osoitetta + + + + &Label + &Nimi + + + + The label associated with this address book entry + Tämän syötteen nimike osoitekirjassa + + + + &Address + &Osoite + + + + The address associated with this address book entry. This can only be modified for sending addresses. + Tämän syötteen nimike osoitekirjassa. Nimikettä voidaan muuttaa vain lähetysosoitteille. + + + + &Stealth Address + + + + + New receiving address + Uusi vastaanottava osoite + + + + New sending address + Uusi lähettävä osoite + + + + Edit receiving address + Muokkaa vastaanottajan osoitetta + + + + Edit sending address + Muokkaa lähtevää osoitetta + + + + The entered address "%1" is not a valid Alias address. + Syöttämäsi osoite "%1" ei ole hyväksytty Alias-osoite. + + + + The entered address "%1" is already in the address book. + Osoite "%1" on jo osoitekirjassa. + + + + Could not unlock wallet. + Lompakkoa ei voitu avata. + + + + New key generation failed. + Uuden avaimen luonti epäonnistui. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + versio + + + + Usage: + Kulutus: + + + + command-line options + komentokehotteen asetukset + + + + UI options + Käyttäjärajapinnan asetukset + + + + Set language, for example "de_DE" (default: system locale) + Aseta kieli, esimerkiksi "fi_FI" (oletus: järjestelmän oma) + + + + Start minimized + Käynnistä pienennettynä + + + + Show splash screen on startup (default: 1) + Näytä logo käynnistettäessä (oletus: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + T&ietoa + + + + Alias Core + + + + + Client name + Pääteohjelman nimi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + Ei saatavilla + + + + Client version + Pääteohjelman versio + + + + Using OpenSSL version + Käytössä oleva OpenSSL-versio + + + + Using BerkeleyDB version + + + + + Build date + Kääntöpäiväys + + + + Startup time + Käynnistysaika + + + + Network + Verkko + + + + Name + + + + + Number of connections + Yhteyksien lukumäärä + + + + Block chain + Lohkoketju + + + + Current number of blocks + Nykyinen Lohkojen määrä + + + + Estimated total blocks + Arvioitu lohkojen kokonaismäärä + + + + Last block time + Viimeisimmän lohkon aika + + + + Debug log file + Debug lokitiedosto + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Avaa + + + + Command-line options + Komentokehotteen ominaisuudet + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + %Näytä + + + + &Console + &Konsoli + + + + Clear console + Tyhjennä konsoli + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Ylös- ja alas-nuolet selaavat historiaa ja <b>Ctrl-L</b> tyhjentää ruudun. + + + + Type <b>help</b> for an overview of available commands. + Kirjoita <b>help</b> nähdäksesi yleiskatsauksen käytettävissä olevista komennoista. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Avoinna %1 asti + + + + conflicted + törmännyt + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/vahvistamaton + + + + %1 confirmations + %1 vahvistusta + + + + Transaction ID + Siirtotunnus + + + + Block Hash + + + + + Status + Tila + + + + , has not been successfully broadcast yet + , ei ole vielä onnistuneesti lähetetty + + + + , broadcast through %n node(s) + + + + + Date + Päivämäärä + + + + Source + Lähde + + + + Generated + Generoitu + + + + + Credit + Credit + + + + matures in %n more block(s) + + + + + not accepted + ei hyväksytty + + + + Transaction fee + Maksukulu + + + + Net amount + Netto määrä + + + + Message + Viesti + + + + Comment + Viesti + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Debug tiedot + + + + Debit + Debit + + + + Transaction + Rahansiirto + + + + Inputs + Sisääntulot + + + + Amount + Määrä + + + + true + tosi + + + + false + epätosi + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + tuntematon + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Rahansiirron yksityiskohdat + + + + This pane shows a detailed description of the transaction + Tämä ruutu näyttää yksityiskohtaisen tiedon rahansiirrosta + + + + TransactionTableModel + + + Date + Päivämäärä + + + + Type + Laatu + + + + Address + Osoite + + + + Note + + + + + Amount + Määrä + + + + Open for %n more block(s) + + + + + Open until %1 + Avoinna %1 asti + + + + Offline + Offline-tila + + + + Unconfirmed + Vahvistamaton + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Vahvistetaan (%1 %2:sta suositellusta vahvistuksesta) + + + + Confirmed (%1 confirmations) + Vahvistettu (%1 vahvistusta) + + + + Conflicted + Törmännyt + + + + Immature (%1 confirmations, will be available after %2) + Ei vahvistettu (%1 vahvistusta, on saatavilla %2:n jälkeen) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (ei saatavilla) + + + + Transaction status. Hover over this field to show number of confirmations. + Rahansiirron tila. Siirrä osoitin kentän päälle nähdäksesi vahvistusten lukumäärä. + + + + Date and time that the transaction was received. + Rahansiirron vastaanottamisen päivämäärä ja aika. + + + + Type of transaction. + Rahansiirron laatu. + + + + Destination address of transaction. + Rahansiirron kohteen Bitcoin-osoite + + + + Amount removed from or added to balance. + Saldoon lisätty tai siitä vähennetty määrä. + + + + WalletModel + + + + Sending... + Lähetetään... + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_fr.ts b/src/qt/locale/alias_fr.ts new file mode 100644 index 0000000000..a80f60dab0 --- /dev/null +++ b/src/qt/locale/alias_fr.ts @@ -0,0 +1,4322 @@ + + + AboutDialog + + + About Alias + A propos d'Alias + + + + <b>Alias</b> version + Version d' <b>Alias</b> + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + © 2020 Alias développeurs +© 2016 Spectrecoin développeurs +© 2014 ShadowCash développeurs +© 2014 BlackCoin développeurs +© 2012 NovaCoin développeurs +© 2009 Bitcoin développeurs + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + Ceci est un logiciel expérimental. + +Distribué sous licence logicielle MIT/X11, voyez le fichier COPYING ou bien <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +Ce produit contient du logiciel développé par le OpenSSL Project pour usage dans le OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) et logiciel cryptographique écrit par Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) et logiciel UPnP écrit par Thomas Bernard. + + + + AddressTableModel + + + Label + Étiquette + + + + Address + Adresse + + + + pubkey + clé publique + + + + stealth + Furtif + + + + (no label) + (aucune étiquette) + + + + Stealth Address + Adresse Furtive + + + + n/a + n/a + + + + AskPassphraseDialog + + + Passphrase Dialog + Dialogue de phrase de chiffrement + + + + Enter passphrase + Saisir la phrase de chiffrement + + + + New passphrase + Nouvelle phrase de chiffrement + + + + Repeat new passphrase + Répéter la phrase de chiffrement + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Sert à désactiver les transactions sortantes si votre compte de système d'exploitation est compromis. Ne procure pas de réelle sécurité. + + + + For staking only + Pour "staking" seulement + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Saisir la nouvelle phrase de chiffrement pour le portefeuille. <br/>Veuillez utiliser une phrase de chiffrement de <b>10 caractères aléatoires ou plus</b>, ou de <b>huit mots ou plus</b>. + + + + Encrypt wallet + Chiffrer le portefeuille + + + + Keep wallet unlocked for staking. + Garder le portefeuille verrouillé pour staking + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + Votre portefeuille contient quelques ATXOs verrouillés pour lesquels leur état de dépense ne peut être déterminé qu'avec votre clé privée.. Votre<b>balance ALIAS privée pourrait s'afficher incorrectement</b>. + + + + <b>Alias Wallet Login</b> + <b>Accès portefeuille Alias</b> + + + + This operation needs your wallet passphrase to unlock the wallet. + Cette opération nécessite votre phrase de chiffrement pour déverrouiller le portefeuille. + + + + Unlock wallet + Déverrouiller le portefeuille + + + + This operation needs your wallet passphrase to decrypt the wallet. + Cette opération nécessite votre phrase de chiffrement pour déchiffrer le portefeuille. + + + + Decrypt wallet + Déchiffrer le portefeuille + + + + Change passphrase + Changer la phrase de chiffrement + + + + Enter the old and new passphrase to the wallet. + Saisir l’ancienne phrase de chiffrement pour le portefeuille ainsi que la nouvelle. + + + + Confirm wallet encryption + Confirmer le chiffrement du portefeuille + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Avertissement : Si vous chiffrez votre portefeuille et perdez votre phrase de chiffrement , vous ne pourrez <b>plus accéder à vos jetons Alias</b>! + + + + Are you sure you wish to encrypt your wallet? + Êtes-vous sûr de vouloir chiffrer votre portefeuille ? + + + + + Wallet encrypted + Portefeuille chiffré + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + L'application Alias va désormais se fermer afin de finaliser le processus de chiffrage. Merci de noter que le chiffrage du portefeuille ne garantit pas de se prémunir du vol via utilisation de malware, qui auraient pu infecter votre ordinateur. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANT : Toute sauvegarde précédente de votre fichier de portefeuille devrait être remplacée par le nouveau fichier de portefeuille chiffré. Pour des raisons de sécurité, les sauvegardes précédentes de votre fichier de portefeuille non chiffré deviendront inutilisables dès lors que vous commencerez à utiliser le nouveau portefeuille chiffré. + + + + + + + Wallet encryption failed + Le chiffrement du portefeuille a échoué + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Le chiffrement du portefeuille a échoué en raison d'une erreur interne. Votre portefeuille n'a pas été chiffré. + + + + + The supplied passphrases do not match. + Les phrases de passe saisies ne correspondent pas. + + + + Wallet unlock failed + Le déverrouillage du portefeuille a échoué + + + + + + The passphrase entered for the wallet decryption was incorrect. + La phrase de passe saisie pour déchiffrer le portefeuille est incorrecte. + + + + Wallet decryption failed + Le déchiffrage du portefeuille a échoué + + + + Wallet passphrase was successfully changed. + La phrase de passe du portefeuille a été modifiée avec succès. + + + + + Warning: The Caps Lock key is on! + Attention : la touche Verr. Maj. est activée ! + + + + ClientModel + + + Network Alert + Alerte réseau + + + + CoinControlDialog + + + Coin Control + Fonctions de contrôle des monnaies + + + + Quantity: + Quantité : + + + + Bytes: + Octets : + + + + Amount: + Montant : + + + + Priority: + Priorité : + + + + Fee: + Frais : + + + + Low Output: + Sortie faible: + + + + After Fee: + Après les frais : + + + + Change: + Monnaie : + + + + (un)select all + Tout (dé)sélectionner + + + + Tree mode + Mode arborescence + + + + List mode + Mode liste + + + + Amount + Montant + + + + Label + Étiquette + + + + Address + Adresse + + + + Date + Date + + + + Confirmations + Confirmations + + + + Confirmed + Confirmée + + + + Priority + Priorité + + + + Copy address + Copier l’adresse + + + + Copy label + Copier l’étiquette + + + + + Copy amount + Copier le montant + + + + Copy transaction ID + Copier l'ID de la transaction + + + + Copy quantity + Copier la quantité + + + + Copy fee + Copier les frais + + + + Copy after fee + Copier le montant après les frais + + + + Copy bytes + Copier les octets + + + + Copy priority + Copier la priorité + + + + Copy low output + Copier la sortie faible + + + + Copy change + Copier la monnaie + + + + highest + la plus élevée + + + + high + élevée + + + + medium-high + moyennement-élevée + + + + medium + moyenne + + + + low-medium + moyennement-basse + + + + low + basse + + + + lowest + la plus basse + + + + + DUST + POUSSIERE + + + + + yes + oui + + + + + no + non + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Cette étiquette vire au rouge, si la taille de la transaction est supérieure à 10000 bytes. + +Cela implique que des frais à hauteur d'au moins %1 par kb seront nécessaires. + +Ceux-ci Peuvent varier de +/- 1 Byte par entrée. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Les transactions avec une priorité haute ont plus de chances d'être traitées en un block. + +L'étiquette passe au rouge si votre priorité est plus basse que la "moyenne". + +Cela implique que des frais d'un minimum de %1 par kb sont requis + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Cette étiquette vire au rouge si au moins un destinataire reçoit un montant plus faible que %1. + + Cela signifie que des frais d'au moins %2 sont nécessaires. + + Les montants plus petits que 0.546 fois les frais minimum de relais sont affichés comme POUSSIERE. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Cette étiquette vire au rouge, lorsque la différence est inférieure à %1. + +Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. + + + + + (no label) + (aucune étiquette) + + + + change from %1 (%2) + monnaie de %1 (%2) + + + + (change) + (monnaie) + + + + EditAddressDialog + + + Edit Address + Modifier l'adresse + + + + &Label + &Étiquette + + + + The label associated with this address book entry + L'étiquette associée à cette entrée du carnet d'adresse + + + + &Address + &Adresse + + + + The address associated with this address book entry. This can only be modified for sending addresses. + L'adresse associée à cette entrée du carnet d'adresse. Seules les adresses d'envoi peuvent être modifiées. + + + + &Stealth Address + &Addresse Furtive + + + + New receiving address + Nouvelle adresse de réception + + + + New sending address + Nouvelle adresse d’envoi + + + + Edit receiving address + Modifier l’adresse de réception + + + + Edit sending address + Modifier l’adresse d'envoi + + + + The entered address "%1" is not a valid Alias address. + L'adresse "%1" renseignée n'est pas une adresse Alias valide. + + + + The entered address "%1" is already in the address book. + L’adresse fournie « %1 » est déjà présente dans le carnet d'adresses. + + + + Could not unlock wallet. + Impossible de déverrouiller le portefeuille. + + + + New key generation failed. + Échec de génération de la nouvelle clef. + + + + EncryptWalletPage + + + Wallet Encryption + Chiffrement portefeuille + + + + Please enter a password to encrypt the wallet.dat file. + Veuillez saisir un mot de passe pour chiffrer le fichier wallet.dat. + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + Le mot de passe protège vos clés privées et sera demandé par le portefeuille au démarrage ou bien pour des opérations sensibles. + + + + &Wallet Password: + &Mot de passe portefeuille: + + + + &Verify Password: + &Vérifier mot de passe + + + + Create and encrypt wallet.dat ... + Création et chiffrement wallet.dat.... + + + + Error + Erreur + + + + Failed to create wallet.dat. ErrorCode: %1 + Echec de la création du fichier wallet.dat. ErrorCode: %1 + + + + GUIUtil::HelpMessageBox + + + + Alias + Alias + + + + version + version + + + + Usage: + Utilisation: + + + + command-line options + Options de ligne de commande + + + + UI options + Options graphiques + + + + Set language, for example "de_DE" (default: system locale) + Définir la langue, par exemple « fr_FR » (par défaut: la langue du système) + + + + Start minimized + Démarrer en mode réduit + + + + Show splash screen on startup (default: 1) + Affichage de l'écran de démarrage (par défaut: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + Importer wallet.dat + + + + Please import a wallet.dat file with your private keys. + Veuillez importer un fichier wallet.dat à l'aide de vos clés privées + + + + &Select wallet.dat + &Choisir wallet.dat + + + + QFileDialog::getOpenFileName() + QFileDialog::getOpenFileName() + + + + Wallet Files (*.dat) + Fichiers Portefeuilles (*.dat) + + + + Error + Erreur + + + + Failed to copy wallet.dat: %1 + Echec de la copie de wallet.dat: %1 + + + + IntroPage + + + Set Up Your Wallet + Configurez votre portefeuille + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + L'application a détecté que vous n'aviez pas de fichier wallet.dat, qui contient vos clés privées. Veuillez choisir comment vous voulez créer ou restaurer vos clés privées. + + + + &Create new mnemonic recovery seed words + &Créer nouvelle phrase mnémotechnique + + + + &Recover from your existing mnemonic seed words + &Restaurer depuis votre phrase mnémotechnique existante + + + + &Import wallet.dat file + &Importer fichier wallet.dat + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + Créer clé privée au moyen de la phrase mnémotechnique + + + + Step 2/3: Write down your mnemonic recovery seed words. + Etape 2/3: notez votre phrase mnémotechnique en lieu sûr + + + + Mnemonic Recovery Seed Words: + Phrase mnémotechnique + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + Vous avez besoin de la phrase mnémotechnique pour restaurer ce portefeuille. Notez la quelque part et gardez-là en lieu sûr. Nous vous demanderons de confirmer votre phrase mnémotechnique sur le prochain écran pour s'assurer que vous l'avez saisie correctement. + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + Créer clés privées avec la phrase mnémotechnique + + + + Step 1/3: Please define language to use and optional password to protect your seed. + Etape 1/3 : Choisissez votre langue et un mot de passe, optionnel, pour protéger votre phrase mnémotechnique  + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + Créer une phrase mnémotechnique se fait en trois étapes:<ol><li>Choisir sa langue et un mot de passe optionnel pour votre phrase mnémotechnique.</li><li>Noter la phrase mnémotechnique créée.</li><li>Vérifier la phrase mnémotechnique et le mot de passe.</li></ol> + + + + &Language: + &Langue : + + + + &Seed Password: + &Mot de passe phrase mnémotechnique + + + + &Verify Password: + &Vérifier mot de passe: + + + + Error + Erreur + + + + Failed to create Mnemonic Seed Words. %1 + Echec de la création de la phrase mnémotechnique.. %1 + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + Créer les clés privées au moyen de la phrase mnémotechnique + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + Etape 3/3 : Assurez-vous que la phrase mnémotechnique est correcte de même que le mot de passe (optionnel). + + + + &Seed Password: + &Mot de passe phrase mnémotechnique: + + + + <br>Enter Mnemonic Seed Words: + <br>Saisissez la phrase mnémotechnique: + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + Impossible de démarrer Alias: click-to-pay handler + + + + PeerTableModel + + + Address/Hostname + Adresse/Nom de l'hôte + + + + User Agent + User Agent + + + + Ping Time + Temps de Ping + + + + QObject + + + %1 d + %1 d + + + + %1 h + %1 h + + + + %1 m + %1 m + + + + + %1 s + %1 s + + + + None + Aucun + + + + N/A + N/A + + + + %1 ms + %1 ms + + + + RPCConsole + + + Alias - Debug window + Alias - Fenêtre de débogage + + + + &Information + &Informations + + + + Alias Core + Alias Core + + + + Client name + Nom du client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N.D. + + + + Client version + Version du client + + + + Using OpenSSL version + Version d'OpenSSL utilisée + + + + Using BerkeleyDB version + Utilise BerkeleyDB version + + + + Build date + Date de compilation + + + + Startup time + Heure de démarrage + + + + Network + Réseau + + + + Name + Nom + + + + Number of connections + Nombre de connexions + + + + Block chain + Blockchaîne + + + + Current number of blocks + Nombre actuel de blocs + + + + Estimated total blocks + Nombre total de blocs estimé + + + + Last block time + Horodatage du dernier bloc + + + + Debug log file + Journal de débogage + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + Ouvrez le fichier de log de debogage depuis le répertoire courant. Cela peut prendre du temps pour les gros fichiers. + + + + &Open + &Ouvrir + + + + Command-line options + Options de ligne de commande + + + + Show the Alias help message to get a list with possible Alias command-line options. + Montre le message d'aide Alias pour afficher la liste des options de ligne de commande. + + + + &Show + &Afficher + + + + &Console + &Console + + + + Clear console + Nettoyer la console + + + + &Network Traffic + &Trafic réseau + + + + &Clear + &Effacer + + + + Totals + Totaux + + + + + In: + Entrant: + + + + + Out: + Sortant: + + + + &Peers + &Pairs + + + + + + Select a peer to view detailed information. + Choisissez un pair pour voir les informations détaillées. + + + + Peer ID + ID Pair + + + + Direction + Direction + + + + Version + Version + + + + User Agent + User Agent + + + + Services + Services + + + + Starting Height + Hauteur de départ + + + + Sync Height + Hauteur de synchronisation + + + + Ban Score + Score de bannissement + + + + Connection Time + Heure de connexion + + + + Last Send + Dernier envoi + + + + Last Receive + Dernière réception + + + + Bytes Sent + Octets envoyés + + + + Bytes Received + Octets reçus + + + + Ping Time + Temps de ping + + + + Time Offset + Temps de décalage + + + + Welcome to the Alias Core RPC console. + Bienvenue sur la console Alias Core RPC. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Utiliser les touches de curseur pour naviguer dans l'historique et <b>Ctrl-L</b> pour effacer l'écran. + + + + Type <b>help</b> for an overview of available commands. + Taper <b>help</b> pour afficher une vue générale des commandes disponibles. + + + + via %1 + via %1 + + + + + never + jamais + + + + Inbound + Entrant + + + + Outbound + Sortant + + + + Unknown + Inconnu + + + + + Fetching... + Récupération... + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + Retrouver les clés privées au moyen de la phrase mnémotechnique + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + Veuillez saisir le mot de passe (optionnel) ainsi que la phrase mnémotechnique pour récupérer vos clés privées. + + + + &Seed Password: + &Mot de passe phrase mnémotechnique: + + + + &Verify Password: + &Vérifier mot de passe: + + + + <br>Enter Mnemonic Seed Words: + <br>Entrez la phrase mnémotechnique: + + + + Error + Erreur + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + Echec de la récupération depuis la phrase mnémotechnique. %1 + + + + SetupWalletWizard + + + Alias Wallet Setup + Configuration portefeuille Alias + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + Le fichier 'wallet.dat', qui contient vos clés privées n'a pas pu être localisé pendant le démarrage. Il doit être créé maintenant.<br><br>Les clés privées sont des caractères alphanumériques qui donnent à l'utilisateur accès et contrôle sur les addresses de cryptomonnaies correspondantes. En d'autres termes, la clé privée crée une signature numérique unique pour chaque transaction qui permet à l'utilisateur de dépenser ses fonds, prouvant ainsi que l'utilisateur a bien la propriété de ces fonds. + + + + If you have a backup of a wallet.dat, you can import this file. + Si vous avez une sauvegarde d'un fichier wallet.dat, vous pouvez importer ce fichier. + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + La phrase mnémotechnique vous permet de créer et ensuite récupérer vos clés privées. La phrase mnémotechnique consiste en une liste de 24 mots ainsi qu'un mot de passe optionnel comme 25ème mot, que vous pouvez garder secrets pour protéger votre phrase mnémotechnique. + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + Il est recommandé de faire de multiples copies de votre phrase mnémotechnique, stockées à plusieurs endroits sécurisés.<br><br><b>Attention:</b> La phrase mnémotechnique ne peut pas être (re)générée à partir de vos clés privées existantes.<br>Si vous perdez votre phrase mnémotechnique et n'avez pas de sauvegarde de votre fichier wallet.dat vous perdez vos jetons Alias! + + + + Please enter the mnemonic words and password given on the previous screen. + Veuillez entrer la phrase mnémotechnique ainsi que le mot de passe donné sur l'écran précédent + + + + Please enter your mnemonic words and (optional) password. + Veuillez entrer la phrase mnémotechnique ainsi que le mot de passe (optionnel) + + + + This help is likely not to be of any help. + L'aide ne sera probablement d'aucune aide. + + + + Alias Wallet Setup Help + Aide de la configuration du portefeuille Alias + + + + SpectreBridge + + + default + par défaut + + + + <b>%1</b> from your public balance to %2 (%3) + <b>%1</b> depuis votre balance publique vers %2 (%3) + + + + <b>%1</b> from public to private, using address %2 (%3) + <b>%1</b> depuis public vers privé, en utilisant l'adresse %2 (%3) + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + <b>%1</b> depuis votre balance privée, taille de l'anneau %2, to %3 (%4) + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + <b>%1</b> depuis privé vers public , taille d'anneau %2, utilisant l'adresse %3 (%4) + + + + + + + Error: + Erreur: + + + + Unknown txn type detected %1. + Type de transaction inconnu détecté %1. + + + + Input types must match for all recipients. + Les types d'entrées doivent correspondre pour tous les destinataires. + + + + Ring sizes must match for all recipients. + La taille des anneaux doit être la même pour tous les destinataires. + + + + Ring size must be %1. + La taille de l'anneau doit être %1 + + + + Ring size outside range [%1, %2]. + Taille de l'anneau en dehors des bornes [%1, %2]. + + + + + Confirm send coins + Confirmer l'envoi des jetons + + + + Are you sure you want to send? +Ring size of one is not anonymous. + Etes-vous sûr de vouloir envoyer? +L'une des tailles d'anneau n'est pas anonyme. + + + + + and + et + + + + Are you sure you want to convert %1? + Etes-vous sûr de vouloir convertir %1? + + + + Are you sure you want to send %1? + Etes-vous sûr de vouloir envoyer %1? + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + Envoyer jetons + + + + The change address is not valid, please recheck. + L'adresse d'échange n'est pas valide, vérifiez-la. + + + + The recipient address is not valid, please recheck. + L'adresse du destinataire n'est pas valide, vérifiez-la. + + + + Only ALIAS from your Private balance can be send to a stealth address. + Seuls des ALIAS de votre balance Privée peuvent etre envoyés vers une adresse furtive. + + + + Transfer from Public to Private is only allowed within your account. + Transfert de Public vers Privé n'est autorisé qu'au sein de votre compte. + + + + Transfer from Private to Public is only allowed within your account. + Transfert de Privé vers Public n'est autorisé qu'au sein de votre compte. + + + + The amount to pay must be larger than 0. + Le montant à payer doit être supérieur à 0. + + + + The amount exceeds your balance. + Le montant dépasse votre balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + Le montant dépasse votre balance une fois que le %1 de frais de transaction est inclus. + + + + Duplicate address found, can only send to each address once per send operation. + Adresse trouvée en double, vous ne pouvez envoyer à chaque adresse qu'une fois par transaction. + + + + Error: Transaction creation failed. + Erreur: la création de la transaction a échoué. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Erreur: la transaction a été rejetée. Cela peut arriver si certains jetons dans votre portefeuille ont été déjà dépensés, par exemple dans le cas où vous avez utilisé une copie du fichier wallet.dat, que les jetons ont été dépensés avec cette copie mais non marqués comme dépensés ici. + + + + Error: Note is too long. + Erreur: la note est trop longue + + + + Error: Ring Size Error. + Erreur: erreur de taille d'anneau + + + + Error: Input Type Error. + Erreur: erreur de type d'entrée + + + + Error: Must be in full mode to send anon. + Erreur: Doit être en mode complet pour envoyer anonymement + + + + Error: Invalid Stealth Address. + Erreur: Adresse furtive invalide + + + + Convert Alias from Private to Public + Convertir Alias depuis Privé vers Public + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + Erreur: Adresse furtive invalide. La conversion Privé vers Public nécessite une adresse furtive. + + + + The amount exceeds your ALIAS balance. + Le montant dépasse votre balance ALIAS. + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + Le montant dépasse votre balance ALIAS lorsque les %1 de frais de transaction sont inclus. + + + + Error generating transaction. + Erreur de génération de transaction + + + + Error generating transaction: %1 + Erreur de génération de transaction : %1 + + + + Transaction successfully created. + Transaction créée avec succès. + + + + Please restart wallet + Veuillez redémarrer le portefeuille + + + + The used language has changed. +Please restart the wallet! + La langue utilisée a changé. +Veuillez redémarrer le portefeuille. + + + + SpectreGUI + + + Public received with + Public reçu avec + + + + Public received from + Public reçu depuis + + + + Public sent to + Public envoyé à + + + + Public sent to self + Public auto-envoyés + + + + Private sent to self + Privé auto-envoyés + + + + Public staked + Public stakés + + + + Public donated + Public donnés + + + + Public contributed + Public contribués + + + + Private staked + Privés stakés + + + + Private donated + Privés donnés + + + + Private contributed + Privés contribués + + + + Private received with + Privés reçus avec + + + + Private sent to + Privés envoyés à + + + + Private to Public + Privé vers Public + + + + Public to Private + Public vers Privé + + + + Other + Autres + + + + + + + Alias + Alias + + + + Client + Client + + + + ..Start UI.. + ..Démarrer l'interface.. + + + + .Start UI. + .Démarrer l'interface. + + + + Ready! + Prêt ! + + + + E&xit + &Quitter + + + + Quit application + Quitter l'application + + + + &About Alias + &A propos d'Alias + + + + Show information about Alias + Montrer des informations à propos d'Alias + + + + About &Qt + A propos de q&T + + + + Show information about Qt + Montrer des informations à propos de Qt + + + + &Options... + &Options... + + + + Modify configuration options for Alias + Changer les options de configurations d'Alias + + + + &Show / Hide + &Montrer / Cacher + + + + &Encrypt Wallet... + &Chiffrer portefeuille... + + + + Encrypt or decrypt wallet + Chiffrer ou déchiffrer portfeuille + + + + &Backup Wallet... + &Sauvegarde portfeuille + + + + Backup wallet to another location + Sauvegarder le portefeuille à un autre emplacement + + + + &Change Passphrase... + &Changer phrase de récupération + + + + Change the passphrase used for wallet encryption + Changer la phrase de récupération pour le chiffrement du portefeuille + + + + &Unlock Wallet... + &Déverrouiller portefeuille + + + + Unlock wallet + Déverrouiller portefeuille + + + + &Lock Wallet + &Verrouiller portefeuille + + + + Lock wallet + Verrouiller portefeuille + + + + &Debug window + &Fenêtre de débogage + + + + Open debugging and diagnostic console + Ouvrir console de débogage et de diagnostic + + + + &File + &Fichier + + + + &Settings + &Paramètres + + + + &Help + &Aide + + + + Wallet + Portefeuille + + + + + [testnet] + [testnet] + + + + %n active connection(s) to Alias network + 1 connexion active au réseau Alias%n connexions au réseau Alias sont actives + + + + block + bloc + + + + header + en-tête + + + + blocks + blocs + + + + headers + en-têtes + + + + + Synchronizing with network... + Synchronisation en cours avec le réseau... + + + + Downloading filtered blocks... + Téléchargement des blocs filtrés... + + + + ~%1 filtered block(s) remaining (%2% done). + ~%1 bloc(s) filtrés restants (%2% faits). + + + + Importing blocks... + Import des blocs... + + + + ~%n block(s) remaining + %n bloc restant%n blocs restants + + + + Imported %1 of %2 %3 of transaction history (%4% done). + %1 de %2 %3 de l'historique des transactions importé (%4% effectué). + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + Téléchargement %1 des %2 %3 de l'historique des transactions (%4% effectués). + + + + Imported %n block(s) of transaction history. + %n bloc d'historique de transaction importé.%n blocs d'historique de transaction importés. + + + + Downloaded %n block(s) of transaction history. + %n bloc d'historique de transaction téléchargé.%n blocs d'historique de transaction téléchargés. + + + + %n second(s) ago + il y a %n secondeil y a %n secondes + + + + %n minute(s) ago + il y a %n minuteil y a %n minutes + + + + %n hour(s) ago + il y a %n heureil y a %n heures + + + + %n day(s) ago + il y a %n secondeil y a %n jours + + + + Up to date + A jour + + + + Catching up... + A la recherche du temps perdu... + + + + Last received %1 was generated %2. + Le dernier %1 reçu a été généré %2. + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + Pour traiter cette transaction, des frais de %1 seront prélevés pour soutenir le réseau. Souhaitez-vous confirmer la transaction? + + + + Confirm transaction fee + Confirmer les frais de transaction + + + + %1 %2 + %1 %2 + + + + Address: %1 +Note: %2 + + Adresse: %1 +Note: %2 + + + + + Address: %1 + + Adresse: %1 + + + + + + URI handling + Traitement URL + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + URI ne peut pas être analysé! Cela peut être dû à une adresse Alias invalide ou bien des paramètres URI mal formulés.. + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + Le portefeuille est <b>chiffré</b> et actuellement <b>déverrouillé</b> uniquement pour staking + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Le portefeuille est <b>chiffré</b> et actuellement <b>déverrouillé</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Le portefeuille est <b>chiffré</b> et actuellement <b>verrouillé</b> + + + + Backup Wallet + Sauvegarder portefeuille + + + + Wallet Data (*.dat) + Données de portefeuille (*.dat) + + + + Backup Failed + Sauvegarde en échec + + + + There was an error trying to save the wallet data to the new location. + Une erreur s'est produite en essayant de sauvegarder le portefeuille à un nouvel emplacement + + + + Lock Wallet + Verrouiller le portefeuille + + + + Error: Wallet must first be encrypted to be locked. + Erreur: Le portefeuille doit d'abord être chiffré pourpouvoir être verrouillé + + + + %1 second(s) + %1 seconde(s) + + + + %1 minute(s), %2 second(s) + %1 minute(s), %2 seconde(s) + + + + %1 hour(s), %2 minute(s) + %1 heure(s), %2 minute(s) + + + + %1 day(s), %2 hour(s) + %1 jours(s), %2 heure(s) + + + + (last 72 blocks %1) + (derniers 72 blocs %1) + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + Staking.<br/>Votre poids est %1<br/>Le poids du réseau est %2%3<br/>Le temps moyen avant la prochaine récompense est de %4 + + + + Not staking because wallet is in thin mode + Pas de staking car le portefeuille est en mode léger + + + + Not staking, staking is disabled + Pas de staking, le staking est désactivé + + + + Not staking because wallet is locked + Pas de staking car le portefeuille est verrouillé + + + + Not staking because wallet is offline + Pas de staking car le portefeuille est hors-ligne + + + + Not staking because wallet is syncing + Pas de staking car le portefeuille se synchronise + + + + Initializing staking... + Initialise le staking.... + + + + Not staking because you don't have mature coins + Pas de staking car vous n'avez pas de jetons mûrs + + + + Not staking + Pas de staking + + + + TrafficGraphWidget + + + KB/s + KO/s + + + + TransactionDesc + + + Open for %n block(s) + Ouvrir pour %n blocOuvrir pour %n blocs + + + + Open until %1 + Ouvert jusqu'à %1 + + + + conflicted + en conflit + + + + %1/offline + %1/hors ligne + + + + %1/unconfirmed + %1/non confirmée + + + + %1 confirmations + %1 confirmations + + + + Transaction ID + ID de la transaction + + + + Block Hash + Hachage du bloc + + + + Status + État + + + + , has not been successfully broadcast yet + , n’a pas encore été diffusée avec succès + + + + , broadcast through %n node(s) + , diffusé via %n noeud, diffusé via %n noeuds + + + + Date + Date + + + + Source + Source + + + + Generated + Généré + + + + + Credit + Crédit + + + + matures in %n more block(s) + mûrs dans %n bloc supplémentairemûrs dans %n blocs supplémentaires + + + + not accepted + refusé + + + + Transaction fee + Frais de transaction + + + + Net amount + Montant net + + + + Message + Message + + + + Comment + Commentaire + + + + Comment-To + Commentaire-A + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Les jetons générés doivent mûrir pendant 450 blocs avant de pouvoir être dépensés. Quand vous avez généré ce bloc, il a été diffusé au réseau pour être ajouté à la chaîne de blocss. Si l'ajout est en échec, son état passe à "non accepté" et il ne sera pas dépensable. Cela peut parfois arriver si un autre noeud génère un bloc au même moment que le vôtre. + + + + Debug information + Informations de débogage + + + + Debit + Débit + + + + Transaction + Transaction + + + + Inputs + Entrants + + + + Amount + Montant + + + + true + vrai + + + + false + faux + + + + + Converted + Converti + + + + from public to private + de public vers privé + + + + from private to public + de privé vers public + + + + Address + Adresse + + + + + Note + Note + + + + unknown + inconnu + + + + <dd> + <dd> + + + + TransactionDescDialog + + + Transaction details + Détails de la transaction + + + + This pane shows a detailed description of the transaction + Ce panneau affiche une description détaillée de la transaction + + + + TransactionTableModel + + + Date + Date + + + + Type + Type + + + + Address + Adresse + + + + Note + Note + + + + Amount + Montant + + + + Open for %n more block(s) + Ouvrir pour %n bloc supplémentaireOuvrir pour %n blocs supplémentaires + + + + Open until %1 + Ouvert jusqu'à %1 + + + + Offline + Hors ligne + + + + Unconfirmed + Non confirmé + + + + Confirming (%1 of %2 required confirmations) + Confirmation (%1 de %2 confirmations nécessaires) + + + + Confirming (%1 of %2 recommended confirmations) + En cours de confirmation (%1 sur %2 confirmations recommandées) + + + + Confirmed (%1 confirmations) + Confirmée (%1 confirmations) + + + + Conflicted + En conflit + + + + Immature (%1 confirmations, will be available after %2) + Pas mûr (%1 confirmations, sera disponible après %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + %1 stake orphelin, le bloc n'a été reçu par aucun autre noeud et ne sera probablement pas accepté + + + + Orphan %1 stake, someone else submitted the block before you. + %1 stake orphelin, quelqu'un a soumis le bloc avant vous + + + + (n/a) + (n.d) + + + + Transaction status. Hover over this field to show number of confirmations. + État de la transaction. Laissez le pointeur de la souris sur ce champ pour voir le nombre de confirmations. + + + + Date and time that the transaction was received. + Date et heure de réception de la transaction. + + + + Type of transaction. + Type de transaction. + + + + Destination address of transaction. + L’adresse de destination de la transaction. + + + + Amount removed from or added to balance. + Montant ajouté ou enlevé au solde. + + + + WalletModel + + + + Sending... + Envoi... + + + + alias-bridge + + + Overview + Vue générale + + + + Wallet + Portefeuille + + + + Send + Envoyer + + + + Receive + Recevoir + + + + Transactions + Transactions + + + + Address Book + Carnet d'adresses + + + + Options + Options + + + + Advanced + Avancé + + + + Backup Wallet + Sauvegarder Portefeuille + + + + Encrypt Wallet + Chiffrer Portefeuille + + + + Change Passphrase + Changer phrase chiffr. + + + + (Un)lock Wallet + (Dé)verrouiller Portefeuille + + + + Tools + Outils + + + + Chain Data + Données de blockchaîne + + + + Block Explorer + Explorateur de blocs + + + + Sign Message + Signer message + + + + Verify Message + Vérifier message + + + + Debug + Débogage + + + + About Alias + A propos d'Alias + + + + About QT + A propos de QT + + + + QR code + QR code + + + + Address: + Adresse: + + + + Label: + Etiquette: + + + + Amount: + Montant: + + + + Add new receive address + Ajouter nouvelles adresses de réception + + + + Add Address + Ajouter adresse + + + + Add a new contact + Ajouter nouveau contact + + + + Address Lookup + Recherche d'adresse + + + + Address Type + Type d'adresse + + + + Stealth + Furtif + + + + Group + Groupe + + + + BIP32 + BIP32 + + + + Label + Etiquette + + + + Address + Adresse + + + + Public Key + Clé publique + + + + Transaction Hash + Transaction Hash + + + + Recent Transactions + Transactions récentes + + + + Coin Control + Contrôle du jeton + + + + Make payment + Effectuer un paiement + + + + Balance transfer + Transfert de balance + + + + Select Inputs + Sélectionner entrées + + + + Automatically selected + Sélectionné automatiquement + + + + Quantity: + Quantité: + + + + Fee: + Frais: + + + + After Fee: + Après frais: + + + + Bytes: + Octets: + + + + Priority: + Priorité: + + + + LowOutput: + Sortie Faible: + + + + Change: + Echange: + + + + Custom change address + Personnaliser adresse d'échange + + + + From account + Depuis le compte + + + + PUBLIC + PUBLIC + + + + PRIVATE + PRIVÉ + + + + Balance: + Balance: + + + + Ring Size: + Taille de l'anneau: + + + + To account + Vers le compte + + + + Pay to + Payer à + + + + (no label) + (pas d'étiquette) + + + + Master + Maître + + + + Wallet is encrypted and currently locked + Le portefeuille est chiffré et actuellement verrouillé + + + + Not staking because wallet is locked + Pas de staking car le portefeuille est verrouillé + + + + 0 active connection(s) to Alias network + 0 connexion active(s) au réseau Alias + + + + Enter a label for this address to add it to your address book + Entrer une étiquette pour cette adresse pour l'ajouter à votre carnet + + + + Enter a address to add it to your address book + Entrer une adresse pour l'ajouter à votre carnet + + + + Inputs + Entrées + + + + Values + Valeurs + + + + Outputs + Sorties + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Saisir une adresse Alias pour signer le message à envoyer (ex: SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to sign + Saisir le message que vous voulez signer + + + + Click sign message to generate signature + Cliquez sur signer message pour générer la signature + + + + Copy the signed message signature + Copier la signature du message signé + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Saisir une adresse Alias pour vérifier le message à envoyer (ex: SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to verify + Saisir le message à vérifier + + + + Enter a Alias signature + Entrer une signature Alias + + + + Paste signature from clipboard + Copier la signature depuis le presse-papiers + + + + Your total balance + Votre balance totale + + + + Recent in/out transactions or stakes + Transactions entrantes/sortantes récentes ou stakes + + + + Select inputs to spend + Sélectionner entrées à dépenser + + + + Optional address to receive transaction change + Adresse optionnelle pour recevoir le changement de transaction + + + + Choose from address book + Choisir depuis carnet d'adresses + + + + Paste address from clipboard + Coller adresse depuis le presse-papiers + + + + Remove this recipient + Enlever ce destinataire + + + + Send from public or private + Envoyer depuis public ou privé + + + + Current spendable send payment balance + Balance actuelle utilisable pour payer + + + + Send to public or private + Envoyer vers public ou privé + + + + Current spendable balance to account + Balance actuelle vers compte + + + + The label for this address + L'étiquette pour cette adresse + + + + Amount to transfer + Montant à transférer + + + + Send to multiple recipients at once + Envoyer à des destinataires multiples + + + + Date and time that the transaction was received. + Date et heure de réception de la transaction. + + + + Transaction status. Hover over this field to show number of confirmations. + Statut de transaction. Survoler cette zone pour afficher le nombre de confirmations. + + + + Type of transaction. + Type de transaction + + + + Destination address of transaction. + Adresse de destination de transaction + + + + Short payment note. + Court commentaire de paiement. + + + + Amount removed from or added to balance. + Montant enlevé ou ajouté à la balance + + + + Name for this Wallet + Nom pour ce portefeuille + + + + Enter a password + Saisir un mot de passe + + + + Would you like to create a bip44 path? + Voulez-vous créer un chemin bip44? + + + + Your recovery phrase (Keep this safe!) + Votre phrase de récupération (Gardez-la précieusement!) + + + + Recovery Phrase + Phrase de récupération + + + + Wallet Name for recovered account + Nom du portefeuille pour le compte récupéré + + + + Enter the password for the wallet you are trying to recover + Saisir le mot de passe pour le portefeuille que vous essayez de récupérer + + + + Is this a bip44 path? + Est-ce un chemin bip44? + + + + ID + ID + + + + Created + Créé + + + + Active Account + Compte actif + + + + Default + Par défaut + + + + Path + Chemin + + + + Active + Actif + + + + Amount + Montant + + + + Note + Note + + + + Public coins, visible on blockchain + Jetons publics, visibles sur la chaine de blocs + + + + Private coins, untraceable and unlinkable on blockchain + Jetons privés, intraçables et impossibles à relier sur la chaine de blocs + + + + Available coins for spending + Jetons disponibles pour dépense + + + + Reserved coins are not used for staking + Jetons réservés non utilisés pour staking + + + + Staked coins must mature before they can be accessed + Les jetons stakés doivent mûrir avant d'être accessibles + + + + Stake + Stake + + + + Sub-Wallets + Sous-portefeuilles + + + + Start Alias on system login + Démarrer Alias au login système + + + + Detach databases at shutdown + Détacher bases de données à l'extinction + + + + Pay transaction fee + Payer frais de transaction + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + Frais de transaction par Kilo-Octet. Des frais plus élevés vous assurent que vos transactions seront traitées rapidement en cas de forts volumes de transaction. + + + + Most transactions are 1kB. The minimal fee is 0.0001 + La plupart des transactions font 1 Ko. Le minimum de frais est 0,0001. + + + + Enable Staking + Activer le staking + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + Active ou désactive le process de staking. Si votre portefeuille est chiffré, vous devrez le déverrouiller pour staking. + + + + Staking Donation + Don de staking + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + Chaque sixième bloc de la blockchain est un bloc de contribution au développement (DCB). Les récompenses de staking des DCB sont versées au fonds de développement, quel que soit le pourcentage de don. N'hésitez pas à faire un don supplémentaire de vos récompenses de staking restantes en définissant une chance de don. Merci. + + + + Reserve + Réserve + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + Le montant réservé ne participe pas au staking, pour cette raison il est dépensable à tout moment. + + + + Minimum Stake Interval + Intervalle de staking minimal + + + + Main + Principal + + + + Window + Fenêtre + + + + Display + Affichage + + + + Minimize to the tray instead of the taskbar + Réduire dans les icônes de programmes au lieu de la barre de tâches + + + + Minimize on close + Réduire à la fermeture + + + + User Interface language + Langue de l'interface utilisateur + + + + Unit to show amounts in + Unité d'affichage des montants + + + + Rows per page + Lignes par page + + + + Display addresses in transaction list + Afficher les adresses dans la liste de transactions + + + + Notifications + Notifications + + + + Visible Transaction Types + Types de transactions visibles + + + + Cancel + Annuler + + + + Apply + Appliquer + + + + Ok + Ok + + + + Reserved + Réservé + + + + Unconfirmed + Non confirmé + + + + Immature + Pas mûr + + + + Type + Type + + + + Date + Date + + + + Send Payment + Envoyer paiement + + + + The address to send the payment to + Adresse d'envoi du paiement + + + + Enter a label for this address + Entrer une étiquette pour cette adresse + + + + Add Sub-Wallet + Ajouter Sous-Portefeuille + + + + Immature generated coins with Proof-of-Work + Coins non mûrs générés avec Proof-of-Work + + + + Blockchain Info + Info Blockchaîne + + + + Checking wallet state with network + Vérification de l'état du portefeuille avec le réseau + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + ALIAS Public nécessite 1 confirmation<br>ALIAS Privé nécessite 10 confirmations + + + + Total Balance + Balance totale + + + + Balance + Balance + + + + Available + Disponible + + + + Public + Public + + + + Private + Privé + + + + Tor+OBFS4 connection online + Connexion Tor+OBFS4 en ligne + + + + Wallet Encryption + Chiffr. Portefeuille + + + + A short reference for the recipient (max 24 characters) + Une courte référence pour pour le destinataire (24 caractères max) + + + + ALIAS Denomination Value + Valeur dénomination ALIAS + + + + No. Owned (* = Immature) + Nb possédés (*=Pas mûrs) + + + + No. System Unspent (* = Immature) + Nb Système non dépensés (*=Pas mûrs) + + + + No. available Mixins (* = Immature) + Nb Mixins disponibles (*=Pas mûrs) + + + + No. System (** = Compromised) + Nb Système (*=Compromis) + + + + The last block a coin of this denomination was created + Sur le dernier bloc un jeton avec ce nom a été créé + + + + Owned (*) + Possédés (*) + + + + Unspent (*) + Non dépensés (*) + + + + Mixins (*) + Mixins (*) + + + + System (**) + Système (*) + + + + Least Depth + Least Depth + + + + Value Out + Valeur sortante + + + + Value + Valeur + + + + Addressbook + Carnet d'adresses + + + + Refresh + Rafraîchir + + + + Hash + Hash + + + + Height + Hauteur + + + + Timestamp + Horodatage + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + Saisir une adresse Alias (Ex: SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + An address label for the payment senders address book + Une étiquette d'adresse pour le carnet d'adresses de payeurs + + + + Enter a short note to send with a payment (max 24 characters) + Saisissez une note à envoyer avec le paiement (24 caractères max) + + + + Filter by label or address... + Filtrer par étiquette ou adresse... + + + + Note to send with payment (max 24 characters) + Note à envoyer avec le paiement (24 caractères max) + + + + The private address to transfer the balance to + L'adresse privée à laquelle transférer la balance + + + + Search by label or address + Recherche par étiquette ou adresse + + + + Search + Recherche + + + + Family vacation funds + Fonds pour congés en famille + + + + Grouping will consolidate transactions of chosen + Grouper va consolider les transactions choisies + + + + Reset form + Formulaire de réinitialisation + + + + Restore Sub-Wallet + Restaurer Sous-Portefeuille + + + + Filter outputs + Filtrer sorties + + + + Find Block by hash/height/transaction + Trouver bloc par hash/hauteur/transaction + + + + alias-core + + + To use the %s option + Pour utiliser l'option %s + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + %s, vous devez mettre un mot de passe rpc dans le fichier de configuration: +%s +Il est recommandé d'utiliser les mots de passe aléatoires suivants : +rpcuser=aliasrpc +rpcpassword=%s +(vous n'avez pas besoin de mémoriser ce mot de passe) +L'utilisateur et le mot de passe NE DOIVENT PAS être identiques. +Si le fichier n'existe pas, le créer avec les permissions de fichier owner-readable-only . +Il est aussi conseillé de mettre des alertes de notifications pour être notifié de problèmes; +par exemple : alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + Error + Erreur + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + Une erreur s'est produite en configurant le port RPC %u pour écouter sur IPv6, retombant sur IPv4: %s + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + Une erreur s'est produite en configurant le port RPC %u pour écouter sur IPv4: %s + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + Vous devez initialiser rpcpassword=<password> dans le fichier de configuration : +%s +Si le fichier n'existe pas, le créer avec les permissions de fichiers owner-readable-only. + + + + Alias version + Alias version + + + + Usage: + Utilisation: + + + + Send command to -server or aliaswalletd + Envoyer des commandes à -server ou aliaswalletd + + + + List commands + Lister commandes + + + + Get help for a command + Obtenir de l'aide pour une commande + + + + Alias + Alias + + + + Options: + Options: + + + + This help message + Ce message d'aide + + + + Specify configuration file (default: alias.conf) + Spécifier le fichier de configuration (par défaut : alias.conf) + + + + Specify pid file (default: alias.pid) + Spécifier le fichier pid (par défaut : alias.pid) + + + + Specify data directory + Spécifier le répertoire de données + + + + Specify wallet file (within data directory) + Spécifier le fichier portefeuille (à l'intérieur du répertoire de données) + + + + Set database cache size in megabytes (default: 25) + Définir le cache de base de données en mégaoctets (25 par défaut) + + + + Set database disk log size in megabytes (default: 100) + Définir la taille de la base de données de log en mégaoctets (100 par défaut) + + + + Specify connection timeout in milliseconds (default: 5000) + Spécifier le timeout de connexion en millisecondes (5000 par défaut) + + + + Connect through socks proxy + Connexion au travers de proxy socks + + + + Select the version of socks proxy to use (4-5, default: 5) + Sélectionner la version de proxy socks à utiliser (4-5, 5 par défaut) + + + + Use proxy to reach tor hidden services (default: same as -proxy) + Utiliser un proxy pour joindre des services tor cachés (par défaut: identique à -proxy) + + + + Allow DNS lookups for -addnode, -seednode and -connect + Autorise les recherches DNS pour -addnode , -seednode et -connect + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + Ecouter des connexions sur <port> (par defaut: 37347 ou testnet: 37111) + + + + Maintain at most <n> connections to peers (default: 125) + Maintenir au plus<n> connexions à des pairs (par défaut: 125) + + + + Add a node to connect to and attempt to keep the connection open + Ajouter un noeud à connecter et tenter de garder la connexion ouverte + + + + Connect only to the specified node(s) + Se connecter uniquement aux noeud(s) indiqués + + + + Connect to a node to retrieve peer addresses, and disconnect + Se connecter à un noeud pour récupérer les adresses de pairs, puis se déconnecter + + + + Specify your own public address + Indiquez votre propre adresse publique + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Se connecte seulement à des noeuds sur le réseau <net> (IPv4, IPv6 or Tor) + + + + Discover own IP address (default: 1 when listening and no -externalip) + Afficher sa propre adresse IP (default: 1 when listening and no -externalip) + + + + Find peers using internet relay chat (default: 0) + Trouver des pairs en utilisant le internet relay chat (par défaut : 0) + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Accepter connexions depuis l'extérieur (par défaut : 1 si pas de -proxy ou -connect) + + + + Bind to given address. Use [host]:port notation for IPv6 + Binder une adresse donnée. Utiliser [host]:port notation pour IPv6 + + + + Find peers using DNS lookup (default: 1) + Trouver des pairs en utilisant recherche DNS (par défaut : 1) + + + + Stake your coins to support network and gain reward (default: 1) + Stakez vos jetons pour aider le réseau et obtenir des récompenses (par défaut: 1) + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + Synchroniser l'heure avec d'autres noeuds. Désactiver si l'heure de votre système est précise, c'est à dire utilise un serveur NTP (par défaut: 1) + + + + Sync checkpoints policy (default: strict) + Règles de synchronisation de points de contrôle (par défaut: strict) + + + + Threshold for disconnecting misbehaving peers (default: 100) + Seuil de déconnexion des pairs au comportement incorrect (défaut: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Nombre de secondes pour empecher les pairs qui se comportent mal de se reconnecter (par défaut: 86400) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Buffer de réception maximum per-connection, 1*1000 octets (défaut: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Buffer d'envoi maximum per-connection, <n>*1000 octets (défaut: 1000) + + + + Use UPnP to map the listening port (default: 1 when listening) + Utiliser UPnP pour mapper le port d'écoute (par défaut : 1 quand écoute) + + + + Use UPnP to map the listening port (default: 0) + Utiliser UPnP pour mapper le port d'écoute (par défaut : 0) + + + + Detach block and address databases. Increases shutdown time (default: 0) + Detacher bloc and base d'adresses. Augmente la durée d'extinction (défaut: 0) + + + + Fee per KB to add to transactions you send + Frais par KiloOctet à ajouter aux transactions que vous envoyez + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + En créant les transactions, ignorer les entrées avec la valeur plus faible que cela (défaut: 0.01) + + + + Accept command line and JSON-RPC commands + Acceper ligne de commande et commandes JSON-RPC + + + + Run in the background as a daemon and accept commands + Fonctionne en arrière-plan en tant que démon et accepte des commandes + + + + Use the test network + Utiliser le réseau de Test + + + + Output extra debugging information. Implies all other -debug* options + Extrait information débogage additionnelle. Implique toutes les autres options sont -debug* + + + + Output extra network debugging information + Extrait information debogage réseau additionnelles + + + + Prepend debug output with timestamp + Ajouter infos de debug avec horodatage + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Compresse le fichier debug.log au démarrage du client (Par défaut : 1 quand pas -debug) + + + + Send trace/debug info to console instead of debug.log file + Envoyer trace/débogage info vers la console plutot qu'au fichier .log + + + + Send trace/debug info to debugger + Envoyer trace/débogage info au débuggeur + + + + Username for JSON-RPC connections + Nom utilisateur pour connexions JSON-RPC + + + + Password for JSON-RPC connections + Mot de passe pour connexions JSON-RPC + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + Ecoute de connexions JSON-RPC sur<port> (defaut: 36657 ou testnet: 36757) + + + + Allow JSON-RPC connections from specified IP address + Autorise les connexions JSON-RPC à partir d'adresses IP enregistrées + + + + Send commands to node running on <ip> (default: 127.0.0.1) + Envoi des commandes au noeud tournant sur <ip> (par defaut : 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Execute commande quand le meilleur bloc change (%s est remplacé par le hash de bloc) + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Execute commande quand la transaction de portefeuille change (%s dans cmd est remplacé TxID) + + + + Require a confirmations for change (default: 0) + Nécessite une confirmation pour changer (default: 0) + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + Force les scripts de transaction à utiliser les canonical PUSH operateurs (défaut: 1) + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + Execute commande lorsqu'une alerte adaptée est reçue (%s dans cmd est remplacé par message) + + + + Upgrade wallet to latest format + Mise à jour du portefeuille au dernier format + + + + Set key pool size to <n> (default: 100) + Définit la taille de la clé de pool à <n> (défaut: 100) + + + + Rescan the block chain for missing wallet transactions + Parcours à nouveau la Blockchaîne pour trouver les transactions manquantes dans le portefeuille + + + + Attempt to recover private keys from a corrupt wallet.dat + Tentative de récupération de clés privées à partir d'un fichier wallet.dat corrompu + + + + How many blocks to check at startup (default: 2500, 0 = all) + Combien de blocs à vérifier au démarrage (default: 2500, 0 = tous) + + + + How thorough the block verification is (0-6, default: 1) + Profondeur de vérification de blocs (0-6, défaut: 1) + + + + Imports blocks from external blk000?.dat file + Importer des blocs à partir de fichiers blk000?.dat externes + + + + Block creation options: + Options de création de blocs: + + + + Set minimum block size in bytes (default: 0) + Définir la taille minimal de bloc en octets (default: 0) + + + + Set maximum block size in bytes (default: 250000) + Définir la taille maximale de bloc en octets (default: 250000) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Définir la taille maximale des transactions haute-priorité/faible-frais en octets (default: 27000) + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + Options SSL : (voir le Bitcoin Wiki pour configuration SSL) + + + + Use OpenSSL (https) for JSON-RPC connections + Utiliser OpenSSL (https) pour les connexions JSON-RPC + + + + Server certificate file (default: server.cert) + Certificat du serveur (par défaut : server.cert) + + + + Server private key (default: server.pem) + Clé privée du serveur (par défaut : server.pem) + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + Ciphers acceptables (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + Invalid amount for -paytxfee=<amount>: '%s' + Montant invalide pour -paytxfee=<amount>: '%s' + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Avertissement: -paytxfee est placé très haut! Ce sont les frais de transaction que vous allez payer si vous envoyez la transaction. + + + + Invalid amount for -mininput=<amount>: '%s' + Montant invalide pour -mininput=<amount>: '%s' + + + + Wallet %s resides outside data directory %s. + Le portefeuille %s est en dehors du répertoire de données %s. + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + Impossible de verrouiller le répertoire de données %s. Alias est probablement déjà en train d'être exécuté. + + + + Verifying database integrity... + Vérification de l'intégrité de la base de données.... + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + Erreur d'initialisation de l'environnement de base de données %s! Pour restaurer, SAUVEGARDEZ CE REPERTOIRE, puis supprimez tout à l'exception de wallet.dat. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Avertissement: wallet.dat corrompu, données sauvées! Le wallet.dat d'origine a été enregistré sous le nom wallet.{timestamp}.bak dans %s; si votre balance ou transactions sont incorrects vous devriez restaurer depuis une sauvegarde. + + + + wallet.dat corrupt, salvage failed + wallet.dat corrompu, récupération en échec + + + + Unknown -socks proxy version requested: %i + Version -socks proxy demandée inconnue: %i + + + + Unknown network specified in -onlynet: '%s' + Réseau inconnu spécifié dans -onlynet: '%s' + + + + Invalid -proxy address: '%s' + -proxy adresse invalide: '%s' + + + + Invalid -tor address: '%s' + Adresse tor invalide : '%s' + + + + Cannot resolve -bind address: '%s' + Ne peut pas résoudre l'adresse -bind : '%s' + + + + Failed to listen on any port. + Impossible d'écouter sur aucun port + + + + Failed to listen on any port. Use -listen=0 if you want this. + Echec d'écoute sur tous les ports. Utiliser -listen=0 si c'est ce que vous voulez. + + + + Cannot resolve -externalip address: '%s' + Ne peut pas résoudre l'adresse -externalip : '%s' + + + + Invalid amount for -reservebalance=<amount> + Montant invalide pour -reservebalance=<amount> + + + + Unable to sign checkpoint, wrong checkpointkey? + + Impossible de signer le point de contrôle, mauvais checkpointkey? + + + + + Loading block index... + Chargement de l'index des blocs.... + + + + Error loading blk0001.dat + Erreur de chargement blk0001.dat + + + + Loading wallet... + Chargement du portefeuille.... + + + + Error loading wallet.dat: Wallet corrupted + Erreur de chargement wallet.dat : Portefeuille corrompu + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Avertissement: erreur de lecture de wallet.dat! Toutes les clés ont été lues correctement, mais les données de transactions ou les entrées de bloc d'adresses semblent manquantes ou incorrectes. + + + + Error loading wallet.dat: Wallet requires newer version of Alias + Erreur de chargement wallet.dat: Le portefeuille nécessite une version d'Alias plus récente + + + + Wallet needed to be rewritten: restart Alias to complete + Le portefeuille doit être regénéré: redémarrez Alias pour terminer + + + + Error loading wallet.dat + Erreur de chargement de wallet.dat + + + + Cannot downgrade wallet + Ne peut pas dégrader le portefeuille + + + + Cannot initialize keypool + Ne peut pas initialiser le pool de clés + + + + Cannot write default address + Ne peut pas écrire l'adresse par défaut + + + + Rescanning... + Rebalayage.... + + + + Importing blockchain data file. + Importation du fichier de Blockchaîne. + + + + Importing bootstrap blockchain data file. + Importation du fichier bootstrap de Blockchaîne. + + + + Loading addresses... + Chargement des adresses.... + + + + Error: could not start node + Erreur: le noeud n'a pas pu démarrer + + + + Done loading + Chargement effectué + + + + Unable to bind to %s on this computer. Alias is probably already running. + Impossible de binder à %s sur cet ordinateur. Alias est probablement déjà en cours d'exécution. + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Impossible de binder à %s sur cet ordinateur (bind a retourné l'erreur %d, %s) + + + + Error: Wallet locked, unable to create transaction + Erreur; Portefeuille verrouillé, impossible de créer la transaction + + + + Error: Wallet unlocked for staking only, unable to create transaction. + Erreur: Portefeuille déverrouillé pour staking uniquement, impossible de créer la transaction. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + Erreur: Cette transaction nécessite des frais de transaction d'au moins %s en raison de son montant, sa complexité, ou bien l'utilisation de fonds récemment reçus. + + + + Error: Transaction creation failed + Erreur: Création de transaction en échec + + + + Sending... + Envoi... + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Erreur: La transaction a été rejetée. Cela peut arriver si certains des jetons dans votre portefeuille ont déjà été dépensés, comme si vous aviez utilisé une copie de wallet.dat et que les jetons ont été dépensés dans la opie mais non marqués comme dépensés ici. + + + + Invalid amount + Montant invalide + + + + Insufficient funds + Fonds insuffisants + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + Avertissement: Vérifier que la date et l'heure de votre ordinateur sont correctes ! Si ce n'est pas le cas Alias fonctionnera d'une manière incorrecte. + + + + Warning: This version is obsolete, upgrade required! + Avertissement: Cette version est obsolete, mise à jour obligatoire ! + + + + WARNING: syncronized checkpoint violation detected, but skipped! + Avertissement: Violation de point de contrôle synchronisé détecté, mais ignoré ! + + + + Warning: Disk space is low! + Avertissement: Espace disque faible ! + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + AVERTISSEMENT: Point de contrôle invalide trouvé ! Les transactions affichées peuvent ne pas être correctes ! Vous pourriez avoir besoin de mettre à jour votre logiciel, ou bien informer les développeurs. + + + + Read ATXOs... (%d) + Lecture ATXOs... (%d) + + + + Read spent ATXOs... (%d) + Lecture ATXOs dépensés... (%d) + + + + Note must be 24 characters or less. + La note doit faire 24 caractères ou moins. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Erreur: La transaction a été rejetée. Cela peut arriver si certains des jetons dans votre portefeuille ont déjà été dépensés, comme si vous aviez utilisé une copie de wallet.dat et que les jetons ont été dépensés dans la opie mais non marqués comme dépensés ici. + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + Erreur: Argument trouvé -socks non supporté. Configurer version SOCKS n'est plus possible à présent, seuls les proxys SOCKS5 sont supportés. + + + + Initialization sanity check failed. Alias is shutting down. + Le Sanity check up de démarrage a échoué, Alias s'arrête. + + + + Loading block index... (%d) + Chargement index de bloc... (%d) + + + + Calculating chain trust... (%d) + Calcul confiance de chaîne... (%d) + + + + Validating last %d block... + Validation du dernier %d bloc... + + + + -bip44key is not allowed if wallet.dat already exists + -bip44key n'est pas autorisé si le fichier wallet.dat existe déjà + + + + Cannot resolve binding address: '%s' + Ne peut pas résoudre l'adresse binding : '%s' + + + + Error: could not start tor node + Erreur: n'a pas pu démarrer le noeud tor + + + + Timed out waiting for onion hostname. + Temps écoulé pour le nom d'hôte Oignon + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + Erreur de chargement blk0001.dat: Chaine invalide détectée, veuillez resynchroniser ou ou bien utilisez des fichiers bootstrap. + + + + Loading wallet items... (%d) + Chargement des articles du portefeuille... (%d) + + + + Reindexing from blk000?.dat files. + Réindexation depuis les fichiers blk000?.dat. + + + + Reindexing block... (%d) + Réindexation bloc... (%d) + + + + Core started! + Coeur démarré ! + + + + Use tor hidden services version 2 instead of version 3 + Utilise les services cachés de tor version 2 au lieu de version 3 + + + + Find peers using .onion seeds (default: 1 unless -connect) + Trouver des pairs en utilisant les seeds .onion (défaut: 1 sauf si -connect) + + + + Minimum time in seconds between successful stakes (default: 30) + Temps minimum en secondes entre des stakes réussis (par défaut: 30) + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + Pourcentage de récompenses de staking à donner aux développeurs (entre 0 et 100 inclu, par défault 5) + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + Millisecondes entre tentatives de staking. Baisser la valeur de ce paramètre ne permet pas d'avoir plus de stakes. (défaut: 500) + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + Nombre de secondes d'empechement de reconnexion des pairs bannis par le logiciel (défaut: 3600) + + + + Simple command line interface - if not run as daemon + Interface de ligne de commande simple - si non lancé comme démon + + + + Output extra blockchain debugging information + Sortie d'information supplémentaires de debug de Blockchaîne + + + + Output extra Proof of Stake debugging information + Sortie d'information supplémentaires de Proof of Stake + + + + Send trace/debug info to debug.log file + Envoyer trace/débogage info au fichier debug.log + + + + Wait for RPC server to start + Attendez que le serveur RPC démarre + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + Garder en mémoire au plus <n> MiB de blocs non connectables (défaut: %u) + + + + Rebuild block chain index from current blk000?.dat files on startup + Reconstruire au démarrage l'index de Blockchaîne depuis le fichier blk000?.dat en cours + + + + Show version and exit + Afficher version et sortir + + + + Thin options: + Options légères : + + + + Operate in less secure, less resource hungry 'thin' mode + Opère en mode "léger" moins sécurisé, moins gourmand en ressource + + + + Keep the entire block index in memory. (default: 0) + Garder l'index de bloc entier en mémoire. (défaut: 0) + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + Lorsque non thinfullindex, le nombre maximum d'en-têtes de bloc à garder en mémoire. (défaut: 4096) + + + + Disable supporting thin nodes. (default: 0) + Désactive le support des noeuds légers. (défaut: 0) + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + Désactive forwarding, ou demande toutes les txns furtives. (défaut: 0) + + + + Don't connect to more than <n> thin peers (default: 8) + Ne pas se connecter à plus de <n> pairs légers (défaut: 8) + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Ciphers acceptables (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + conn + conn + + + + Error: Wallet locked, unable to create transaction. + Erreur: Portefeuille verrouillé, impossible de créer la transaction + + + + Error: Must be in full mode. + Erreur: doit être en mode complet. + + + + Error: Block chain must be fully synced first. + Erreur: la Blockchaîne doit d'abord être synchronisée complètement. + + + + Error: Alias is not connected! + Erreur: Alias n'est pas connecté + + + + Update balance... + Mise à jour de la balance... + + + + ...Start UI... + ...démarrage de l'interface graphique.... + + + + Shutdown... + Extinction.... + + + \ No newline at end of file diff --git a/src/qt/locale/alias_fr_CA.ts b/src/qt/locale/alias_fr_CA.ts new file mode 100644 index 0000000000..ec59978ccf --- /dev/null +++ b/src/qt/locale/alias_fr_CA.ts @@ -0,0 +1,4304 @@ + + + AboutDialog + + + About Alias + Au sujet de Alias + + + + <b>Alias</b> version + Version de <b>Alias</b> + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Étiquette + + + + Address + Adresse + + + + pubkey + + + + + stealth + + + + + (no label) + (aucune étiquette) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Dialogue de phrase de passe + + + + Enter passphrase + Saisir la phrase de passe + + + + New passphrase + Nouvelle phrase de passe + + + + Repeat new passphrase + Répéter la phrase de passe + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Sert à désactiver les transactions sortantes si votre compte de système d'exploitation est compromis. Ne procure pas de réelle sécurité. + + + + For staking only + Pour "staking" seulement + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Saisir la nouvelle phrase de passe pour le portefeuille. <br/>Veuillez utiliser une phrase de passe de <b>10 caractères aléatoires ou plus</b>, ou de <b>huit mots ou plus</b>. + + + + Encrypt wallet + Crypter le portefeuille + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Cette opération nécessite votre phrase de passe pour déverrouiller le portefeuille. + + + + Unlock wallet + Déverrouiller le portefeuille + + + + This operation needs your wallet passphrase to decrypt the wallet. + Cette opération nécessite votre phrase de passe pour déchiffrer le portefeuille. + + + + Decrypt wallet + Déchiffrer le portefeuille + + + + Change passphrase + Changer la phrase de passe + + + + Enter the old and new passphrase to the wallet. + Saisir l’ancienne et la nouvelle phrase de passe du portefeuille + + + + Confirm wallet encryption + Confirmer le cryptage du portefeuille + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + ATTENTION : Si vous cryptez votre portefeuille et perdez votre passphrase, vous ne pourrez plus accéder à vos Aliascoins + + + + Are you sure you wish to encrypt your wallet? + Êtes-vous sûr de vouloir crypter votre portefeuille ? + + + + + Wallet encrypted + Portefeuille crypté + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + L'application Alias va désormais se terminer afin de finaliser le processus de cryptage. Merci de noter que le cryptage du portefeuille ne garantit pas de se prémunir du vol via l'utilisation de malware, qui auraient pu infecter votre ordinateur. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANT : Toute sauvegarde précédente de votre fichier de portefeuille devrait être remplacée par le nouveau fichier de portefeuille crypté. Pour des raisons de sécurité, les sauvegardes précédentes de votre fichier de portefeuille non crypté deviendront inutilisables dès lors que vous commencerez à utiliser le nouveau portefeuille crypté. + + + + + + + Wallet encryption failed + Le cryptage du portefeuille a échoué + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Le cryptage du portefeuille a échoué en raison d'une erreur interne. Votre portefeuille n'a pas été crypté. + + + + + The supplied passphrases do not match. + Les phrases de passe saisies ne correspondent pas. + + + + Wallet unlock failed + Le déverrouillage du portefeuille a échoué + + + + + + The passphrase entered for the wallet decryption was incorrect. + La phrase de passe saisie pour décrypter le portefeuille était incorrecte. + + + + Wallet decryption failed + Le décryptage du portefeuille a échoué + + + + Wallet passphrase was successfully changed. + La phrase de passe du portefeuille a été modifiée avec succès. + + + + + Warning: The Caps Lock key is on! + Attention : la touche Verr. Maj. est activée ! + + + + ClientModel + + + Network Alert + Alerte réseau + + + + CoinControlDialog + + + Coin Control + Fonctions de contrôle des monnaies + + + + Quantity: + Quantité : + + + + Bytes: + Octets : + + + + Amount: + Montant : + + + + Priority: + Priorité : + + + + Fee: + Frais : + + + + Low Output: + Sortie faible : + + + + After Fee: + Après les frais : + + + + Change: + Monnaie : + + + + (un)select all + Tout (dé)sélectionner + + + + Tree mode + Mode arborescence + + + + List mode + Mode liste + + + + Amount + Montant + + + + Label + Intitulé + + + + Address + Adresse + + + + Date + Date + + + + Confirmations + Confirmations + + + + Confirmed + Confirmée + + + + Priority + Priorité + + + + Copy address + Copier l’adresse + + + + Copy label + Copier l’étiquette + + + + + Copy amount + Copier le montant + + + + Copy transaction ID + Copier l'ID de la transaction + + + + Copy quantity + Copier la quantité + + + + Copy fee + Copier les frais + + + + Copy after fee + Copier le montant après les frais + + + + Copy bytes + Copier les octets + + + + Copy priority + Copier la priorité + + + + Copy low output + Copier la sortie faible + + + + Copy change + Copier la monnaie + + + + highest + la plus élevée + + + + high + élevée + + + + medium-high + moyennement-élevée + + + + medium + moyenne + + + + low-medium + moyennement-basse + + + + low + basse + + + + lowest + la plus basse + + + + + DUST + DUST + + + + + yes + oui + + + + + no + non + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Cet intitulé passe au rouge, si la taille de la transaction est supérieure à 10000 bytes. + +Cela implique que des frais à hauteur d'au moins %1 par kb seront nécessaires. + +Ceux-ci Peuvent varier de +/- 1 Byte par entrée. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Les transactions avec une priorité haute ont plus de chances d'être traitées en un block. + + Rouge si votre priorité est plus petite que "moyenne". + +Cela veut dire que des frais d'un minimum de %1 par kb sont requis + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Ce label passe au rouge, lorsque la différence est inférieure à %1. + + Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. + + + + + (no label) + (aucune étiquette) + + + + change from %1 (%2) + monnaie de %1 (%2) + + + + (change) + (monnaie) + + + + EditAddressDialog + + + Edit Address + Modifier l'adresse + + + + &Label + &Étiquette + + + + The label associated with this address book entry + L'intitulé associé à cette entrée du carnet d'adresse + + + + &Address + &Adresse + + + + The address associated with this address book entry. This can only be modified for sending addresses. + L'intitulé associé à cette entrée du carnet d'adresse. Seules les adresses d'envoi peuvent être modifiées. + + + + &Stealth Address + + + + + New receiving address + Nouvelle adresse de réception + + + + New sending address + Nouvelle adresse d’envoi + + + + Edit receiving address + Modifier l’adresse de réception + + + + Edit sending address + Modifier l’adresse d'envoi + + + + The entered address "%1" is not a valid Alias address. + L'adresse "%1" renseignée n'est pas une adresse Alias valide. + + + + The entered address "%1" is already in the address book. + L’adresse fournie « %1 » est déjà présente dans le carnet d'adresses. + + + + Could not unlock wallet. + Impossible de déverrouiller le portefeuille. + + + + New key generation failed. + Échec de génération de la nouvelle clef. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + version + + + + Usage: + Utilisation: + + + + command-line options + Options de ligne de commande + + + + UI options + Options graphiques + + + + Set language, for example "de_DE" (default: system locale) + Définir la langue, par exemple « fr_FR » (par défaut : la langue du système) + + + + Start minimized + Démarrer en mode réduit + + + + Show splash screen on startup (default: 1) + Affichage de l'écran de démarrage (défaut: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informations + + + + Alias Core + + + + + Client name + Nom du client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N.D. + + + + Client version + Version du client + + + + Using OpenSSL version + Version d'OpenSSL utilisée + + + + Using BerkeleyDB version + + + + + Build date + Date de compilation + + + + Startup time + Heure de démarrage + + + + Network + Réseau + + + + Name + + + + + Number of connections + Nombre de connexions + + + + Block chain + Chaîne de blocks + + + + Current number of blocks + Nombre actuel de blocks + + + + Estimated total blocks + Nombre total estimé de blocks + + + + Last block time + Horodatage du dernier block + + + + Debug log file + Journal de débogage + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Ouvrir + + + + Command-line options + Options de ligne de commande + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + &Afficher + + + + &Console + &Console + + + + Clear console + Nettoyer la console + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Utiliser les touches de curseur pour naviguer dans l'historique et <b>Ctrl-L</b> pour effacer l'écran. + + + + Type <b>help</b> for an overview of available commands. + Taper <b>help</b> pour afficher une vue générale des commandes disponibles. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Ouvert jusqu'à %1 + + + + conflicted + en conflit + + + + %1/offline + %1/hors ligne + + + + %1/unconfirmed + %1/non confirmée + + + + %1 confirmations + %1 confirmations + + + + Transaction ID + ID de la transaction + + + + Block Hash + + + + + Status + État + + + + , has not been successfully broadcast yet + , n’a pas encore été diffusée avec succès + + + + , broadcast through %n node(s) + + + + + Date + Date + + + + Source + Source + + + + Generated + Généré + + + + + Credit + Crédit + + + + matures in %n more block(s) + + + + + not accepted + refusé + + + + Transaction fee + Frais de transaction + + + + Net amount + Montant net + + + + Message + Message + + + + Comment + Commentaire + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Informations de débogage + + + + Debit + Débit + + + + Transaction + Transaction + + + + Inputs + Entrants + + + + Amount + Montant + + + + true + vrai + + + + false + faux + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + inconnu + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Détails de la transaction + + + + This pane shows a detailed description of the transaction + Ce panneau affiche une description détaillée de la transaction + + + + TransactionTableModel + + + Date + Date + + + + Type + Type + + + + Address + Adresse + + + + Note + + + + + Amount + Montant + + + + Open for %n more block(s) + + + + + Open until %1 + Ouvert jusqu'à %1 + + + + Offline + Hors ligne + + + + Unconfirmed + Non confirmé + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Confirmation (%1 sur %2 confirmations recommandées) + + + + Confirmed (%1 confirmations) + Confirmée (%1 confirmations) + + + + Conflicted + En conflit + + + + Immature (%1 confirmations, will be available after %2) + Immature (%1 confirmations, sera disponible après %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n.d) + + + + Transaction status. Hover over this field to show number of confirmations. + État de la transaction. Laissez le pointeur de la souris sur ce champ pour voir le nombre de confirmations. + + + + Date and time that the transaction was received. + Date et heure de réception de la transaction. + + + + Type of transaction. + Type de transaction. + + + + Destination address of transaction. + L’adresse de destination de la transaction. + + + + Amount removed from or added to balance. + Montant ajouté ou enlevé au solde. + + + + WalletModel + + + + Sending... + Envoi... + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_gl.ts b/src/qt/locale/alias_gl.ts new file mode 100644 index 0000000000..30550ff5b3 --- /dev/null +++ b/src/qt/locale/alias_gl.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + Acerca de Alias + + + + <b>Alias</b> version + Versión <b>Alias</b> . + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Etiqueta + + + + Address + Dirección + + + + pubkey + + + + + stealth + + + + + (no label) + (sen etiqueta) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Diálogo de Contrasinal + + + + Enter passphrase + Introduce contrasinal + + + + New passphrase + Novo contrasinal + + + + Repeat new passphrase + Repite novo contrasinal + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + Para "staking" só + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Introduce o novo contrasinal ao moedeiro.<br/>Por favor empregue un contrasinal de <b>10 ou máis caracteres aleatorios</b>, ou <b>oito ou máis palabras</b>. + + + + Encrypt wallet + Encriptar moedeiro + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Esta operación precisa o contrasinal do teu moedeiro para desbloquear o moedeiro. + + + + Unlock wallet + Desbloquear moedeiro + + + + This operation needs your wallet passphrase to decrypt the wallet. + Esta operación precisa o contrasinal do teu moedeiro para desencriptar o moedeiro. + + + + Decrypt wallet + Desencriptar moedeiro + + + + Change passphrase + Cambiar contrasinal + + + + Enter the old and new passphrase to the wallet. + Introduce o vello e novo contrasinais no moedeiro. + + + + Confirm wallet encryption + Confirmar encriptación de moedeiro + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Coidado: Se enctriptas a tua carteira e perdes o contrasinal, <b>PERDERÁS TODAS AS TÚAS MOEDAS</b>! + + + + Are you sure you wish to encrypt your wallet? + Estás seguro de que desexas encriptar o teu moedeiro? + + + + + Wallet encrypted + Moedeiro encriptado + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias pecharase agora para rematar o proceso de encriptación. Recorda que encriptar a túa carteira non te protexe na totalidade do roubo das tuas moedas por infeccións de malware no teu ordenador. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANTE: Calquera copia de seguridade previa que fixeses do teu arquivo de moedeiro debería ser substituída polo recén xerado arquivo encriptado de moedeiro. Por razóns de seguridade, as copias de seguridade previas de un arquivo de moedeiro desencriptado tornaránse inútiles no momento no que comeces a emprega-lo novo, encriptado, moedeiro. + + + + + + + Wallet encryption failed + Encriptación de moedeiro fallida + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + A encriptación do moedeiro fallou por mor dun erro interno. O teu moedeiro non foi encriptado. + + + + + The supplied passphrases do not match. + Os contrasinais suministrados non coinciden. + + + + Wallet unlock failed + Desbloqueo de moedeiro fallido + + + + + + The passphrase entered for the wallet decryption was incorrect. + O contrasinal introducido para a desencriptación do moedeiro foi incorrecto. + + + + Wallet decryption failed + Desencriptación de moedeiro fallida + + + + Wallet passphrase was successfully changed. + Cambiouse con éxito o contrasinal do moedeiro. + + + + + Warning: The Caps Lock key is on! + Precaución: A tecla de Bloqueo de Maiúsculas está activada! + + + + ClientModel + + + Network Alert + Alerta de Rede + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + Cantidade: + + + + Bytes: + Bytes: + + + + Amount: + Importe: + + + + Priority: + Prioridade: + + + + Fee: + Pago: + + + + Low Output: + + + + + After Fee: + + + + + Change: + Cambiar: + + + + (un)select all + (des)selecciona todo + + + + Tree mode + Modo árbore + + + + List mode + Modo lista + + + + Amount + Cantidade + + + + Label + + + + + Address + Dirección + + + + Date + Data + + + + Confirmations + Confirmacións + + + + Confirmed + Confirmado + + + + Priority + Prioridade + + + + Copy address + Copiar dirección + + + + Copy label + Copiar etiqueta + + + + + Copy amount + Copiar cantidade + + + + Copy transaction ID + Copiar ID de transacción + + + + Copy quantity + Copiar cantidade + + + + Copy fee + Copiar pago + + + + Copy after fee + Copiar despóis do pago + + + + Copy bytes + Copiar bytes + + + + Copy priority + Copiar prioridade + + + + Copy low output + + + + + Copy change + Copiar cambio + + + + highest + O máis alto + + + + high + alto + + + + medium-high + medio-alto + + + + medium + + + + + low-medium + medio-baixo + + + + low + baixo + + + + lowest + o máis baixo + + + + + DUST + + + + + + yes + Si + + + + + no + non + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (sen etiqueta) + + + + change from %1 (%2) + + + + + (change) + (cambio) + + + + EditAddressDialog + + + Edit Address + Modificar Dirección + + + + &Label + &Etiqueta + + + + The label associated with this address book entry + + + + + &Address + &Dirección + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Nova dirección para recibir + + + + New sending address + Nova dirección para enviar + + + + Edit receiving address + Modificar dirección para recibir + + + + Edit sending address + Modificar dirección para enviar + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + A dirección introducida "%1" xa está no libro de direccións. + + + + Could not unlock wallet. + Non se puido desbloquear o moedeiro. + + + + New key generation failed. + A xeración de nova clave fallou. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + Opcións UI + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + Comezar minimizado + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Información + + + + Alias Core + + + + + Client name + Nome do cliente + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Versión do cliente + + + + Using OpenSSL version + Usar versión OpenSSL + + + + Using BerkeleyDB version + + + + + Build date + Data de construción + + + + Startup time + Tempo de arranque + + + + Network + Rede + + + + Name + + + + + Number of connections + Número de conexións + + + + Block chain + Cadea de bloques + + + + Current number of blocks + Número actual de bloques + + + + Estimated total blocks + Bloques totais estimados + + + + Last block time + Hora do último bloque + + + + Debug log file + Arquivo de log de depuración + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Abrir + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Consola + + + + Clear console + Limpar consola + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Emprega as flechas arriba e abaixo para navegar polo historial, e <b>Ctrl-L</b> para limpar a pantalla. + + + + Type <b>help</b> for an overview of available commands. + Escribe <b>axuda</b> para unha vista xeral dos comandos dispoñibles. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Aberto ata %1 + + + + conflicted + + + + + %1/offline + %1/fóra de liña + + + + %1/unconfirmed + %1/sen confirmar + + + + %1 confirmations + %1 confirmacións + + + + Transaction ID + ID de Transacción + + + + Block Hash + + + + + Status + Estado + + + + , has not been successfully broadcast yet + , non foi propagado con éxito todavía + + + + , broadcast through %n node(s) + + + + + Date + Data + + + + Source + Orixe + + + + Generated + Xerado + + + + + Credit + Crédito + + + + matures in %n more block(s) + + + + + not accepted + non aceptado + + + + Transaction fee + Tarifa de transacción + + + + Net amount + Cantidade neta + + + + Message + Mensaxe + + + + Comment + Comentario + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Información de depuración + + + + Debit + Débito + + + + Transaction + Transacción + + + + Inputs + Entradas + + + + Amount + Cantidade + + + + true + verdadeiro + + + + false + falso + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + descoñecido + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Detalles de transacción + + + + This pane shows a detailed description of the transaction + Este panel amosa unha descripción detallada da transacción + + + + TransactionTableModel + + + Date + Data + + + + Type + Tipo + + + + Address + Dirección + + + + Note + + + + + Amount + Cantidade + + + + Open for %n more block(s) + + + + + Open until %1 + Aberto ata %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Confirmado (%1 confirmacións) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Estado da transacción. Pasa por riba deste campo para amosar o número de confirmacións. + + + + Date and time that the transaction was received. + Data e hora na que foi recibida a transacción. + + + + Type of transaction. + Tipo de transacción. + + + + Destination address of transaction. + Dirección de destino da transacción. + + + + Amount removed from or added to balance. + Cantidade borrada ou engadida no balance. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_he.ts b/src/qt/locale/alias_he.ts new file mode 100644 index 0000000000..8858f9a705 --- /dev/null +++ b/src/qt/locale/alias_he.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + תוית + + + + Address + כתובת + + + + pubkey + + + + + stealth + + + + + (no label) + (ללא תוית) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + שיח סיסמא + + + + Enter passphrase + הכנס סיסמה + + + + New passphrase + סיסמה חדשה + + + + Repeat new passphrase + חזור על הסיסמה החדשה + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + הכנס את הסיסמה החדשה לארנק. <br/>אנא השתמש בסיסמה המכילה <b>10 תוים אקראיים או יותר</b>, או <b>שמונה מילים או יותר</b>. + + + + Encrypt wallet + הצפן ארנק + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + הפעולה הזו דורשת את סיסמת הארנק שלך בשביל לפתוח את הארנק. + + + + Unlock wallet + פתיחת ארנק + + + + This operation needs your wallet passphrase to decrypt the wallet. + הפעולה הזו דורשת את סיסמת הארנק שלך בשביל לפענח את הארנק. + + + + Decrypt wallet + פענוח ארנק + + + + Change passphrase + שינוי סיסמה + + + + Enter the old and new passphrase to the wallet. + הכנס את הסיסמות הישנה והחדשה לארנק. + + + + Confirm wallet encryption + אשר הצפנת ארנק + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + האם אתה בטוח שברצונך להצפין את הארנק? + + + + + Wallet encrypted + הארנק הוצפן + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + חשוב! כל גיבוי קודם שעשית לארנק שלך יש להחליף עם קובץ הארנק המוצפן שזה עתה נוצר. מסיבות אבטחה, גיבויים קודמים של קובץ הארנק הלא-מוצפן יהפכו לחסרי שימוש ברגע שתתחיל להשתמש בארנק החדש המוצפן. + + + + + + + Wallet encryption failed + הצפנת הארנק נכשלה + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + הצפנת הארנק נכשלה עקב שגיאה פנימית. הארנק שלך לא הוצפן. + + + + + The supplied passphrases do not match. + הסיסמות שניתנו אינן תואמות. + + + + Wallet unlock failed + פתיחת הארנק נכשלה + + + + + + The passphrase entered for the wallet decryption was incorrect. + הסיסמה שהוכנסה לפענוח הארנק שגויה. + + + + Wallet decryption failed + פענוח הארנק נכשל + + + + Wallet passphrase was successfully changed. + סיסמת הארנק שונתה בהצלחה. + + + + + Warning: The Caps Lock key is on! + זהירות: מקש Caps Lock מופעל! + + + + ClientModel + + + Network Alert + אזעקת רשת + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + כמות: + + + + Bytes: + בייטים: + + + + Amount: + כמות: + + + + Priority: + קדימות: + + + + Fee: + תשלום: + + + + Low Output: + + + + + After Fee: + לאחר עמלה: + + + + Change: + שינוי: + + + + (un)select all + (מחק)(בחר) הכל + + + + Tree mode + מצב עץ + + + + List mode + מצר רשימה + + + + Amount + כמות + + + + Label + + + + + Address + כתובת + + + + Date + תאריך + + + + Confirmations + אישורים + + + + Confirmed + מאושר + + + + Priority + קדימות + + + + Copy address + העתק כתובת + + + + Copy label + העתק תוית + + + + + Copy amount + העתק כמות + + + + Copy transaction ID + העתק מזהה פעולה + + + + Copy quantity + העתק כמות + + + + Copy fee + העתק מחיר + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + העתק קדימות + + + + Copy low output + + + + + Copy change + + + + + highest + הכי גבוה + + + + high + גבוה + + + + medium-high + בנוני גבוה + + + + medium + בינוני + + + + low-medium + בינוני - נמוך + + + + low + נמוך + + + + lowest + הכי נמוך + + + + + DUST + + + + + + yes + כן + + + + + no + לא + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (ללא תוית) + + + + change from %1 (%2) + עודף מ־%1 (%2) + + + + (change) + (עודף) + + + + EditAddressDialog + + + Edit Address + ערוך כתובת + + + + &Label + ת&וית + + + + The label associated with this address book entry + + + + + &Address + &כתובת + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + כתובת חדשה לקבלה + + + + New sending address + כתובת חדשה לשליחה + + + + Edit receiving address + ערוך כתובת לקבלה + + + + Edit sending address + ערוך כתובת לשליחה + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + הכתובת שהכנסת "%1" כבר נמצאת בפנקס הכתובות. + + + + Could not unlock wallet. + פתיחת הארנק נכשלה. + + + + New key generation failed. + יצירת מפתח חדש נכשלה. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + מידע + + + + Alias Core + + + + + Client name + שם ממשק + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + גרסת ממשק + + + + Using OpenSSL version + משתמש ב-OpenSSL גרסה + + + + Using BerkeleyDB version + + + + + Build date + תאריך בניה + + + + Startup time + זמן אתחול + + + + Network + רשת + + + + Name + + + + + Number of connections + מספר חיבורים + + + + Block chain + שרשרת הבלוקים + + + + Current number of blocks + מספר הבלוקים הנוכחי + + + + Estimated total blocks + מספר כולל משוער של בלוקים + + + + Last block time + זמן הבלוק האחרון + + + + Debug log file + קובץ יומן ניפוי + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + פתח + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + לוח בקרה + + + + Clear console + נקה לוח בקרה + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + השתמש בחיצים למעלה ולמטה כדי לנווט בהיסטוריה, ו- <b>Ctrl-L</b> כדי לנקות את המסך. + + + + Type <b>help</b> for an overview of available commands. + הקלד <b>help</b> בשביל סקירה של הפקודות הזמינות. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + פתוח עד %1 + + + + conflicted + + + + + %1/offline + %1/מנותק + + + + %1/unconfirmed + %1/ממתין לאישור + + + + %1 confirmations + %1 אישורים + + + + Transaction ID + זיהוי פעולה + + + + Block Hash + + + + + Status + מצב + + + + , has not been successfully broadcast yet + , טרם שודר בהצלחה + + + + , broadcast through %n node(s) + + + + + Date + תאריך + + + + Source + מקור + + + + Generated + נוצר + + + + + Credit + זיכוי + + + + matures in %n more block(s) + + + + + not accepted + לא התקבל + + + + Transaction fee + עמלת פעולה + + + + Net amount + כמות נקיה + + + + Message + הודעה + + + + Comment + הערה + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + מידע ניפוי + + + + Debit + חיוב + + + + Transaction + פעולה + + + + Inputs + קלטים + + + + Amount + כמות + + + + true + אמת + + + + false + שקר + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + לא ידוע + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + פרטי הפעולה + + + + This pane shows a detailed description of the transaction + חלונית זו מציגה תיאור מפורט של הפעולה + + + + TransactionTableModel + + + Date + תאריך + + + + Type + סוג + + + + Address + כתובת + + + + Note + + + + + Amount + כמות + + + + Open for %n more block(s) + + + + + Open until %1 + פתוח עד %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + מאושר (%1 אישורים) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + מצב הפעולה. השהה את הסמן מעל שדה זה כדי לראות את מספר האישורים. + + + + Date and time that the transaction was received. + התאריך והשעה בה הפעולה הזאת התקבלה. + + + + Type of transaction. + סוג הפעולה. + + + + Destination address of transaction. + כתובת היעד של הפעולה. + + + + Amount removed from or added to balance. + הכמות שהתווספה או הוסרה מהיתרה. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_hi_IN.ts b/src/qt/locale/alias_hi_IN.ts new file mode 100644 index 0000000000..0ec1e31079 --- /dev/null +++ b/src/qt/locale/alias_hi_IN.ts @@ -0,0 +1,4295 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + लेबल + + + + Address + पता + + + + pubkey + + + + + stealth + + + + + (no label) + (कोई लेबल नही !) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + पहचान शब्द/अक्षर डालिए ! + + + + New passphrase + नया पहचान शब्द/अक्षर डालिए ! + + + + Repeat new passphrase + दोबारा नया पहचान शब्द/अक्षर डालिए ! + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + नया पहचान शब्द/अक्षर वॉलेट मे डालिए ! <br/> कृपा करके पहचान शब्द में <br> 10 से ज़्यादा अक्षॉरों का इस्तेमाल करे </b>,या <b>आठ या उससे से ज़्यादा शब्दो का इस्तेमाल करे</b> ! + + + + Encrypt wallet + एनक्रिप्ट वॉलेट ! + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + वॉलेट खोलने के आपका वॉलेट पहचान शब्द्‌/अक्षर चाईए ! + + + + Unlock wallet + वॉलेट खोलिए + + + + This operation needs your wallet passphrase to decrypt the wallet. + वॉलेट डीक्रिप्ट( विकोड) करने के लिए आपका वॉलेट पहचान शब्द्‌/अक्षर चाईए ! + + + + Decrypt wallet + डीक्रिप्ट वॉलेट + + + + Change passphrase + पहचान शब्द/अक्षर बदलिये ! + + + + Enter the old and new passphrase to the wallet. + कृपा करके पुराना एवं नया पहचान शब्द/अक्षर वॉलेट में डालिए ! + + + + Confirm wallet encryption + वॉलेट एनक्रिपशन को प्रमाणित कीजिए ! + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + वॉलेट एनक्रिप्ट हो गया ! + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + वॉलेट एनक्रिप्ट नही हुआ! + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + वॉलेट एनक्रिपशन नाकाम हो गया इंटर्नल एरर की वजह से! आपका वॉलेट एनक्रीपत नही हुआ है! + + + + + The supplied passphrases do not match. + आपके द्वारा डाले गये पहचान शब्द/अक्षर मिलते नही है ! + + + + Wallet unlock failed + वॉलेट का लॉक नही खुला ! + + + + + + The passphrase entered for the wallet decryption was incorrect. + वॉलेट डीक्रिप्ट करने के लिए जो पहचान शब्द/अक्षर डाले गये है वो सही नही है! + + + + Wallet decryption failed + वॉलेट का डीक्रिप्ट-ष्ण असफल ! + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + राशि : + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + राशि + + + + Label + + + + + Address + पता + + + + Date + taareek + + + + Confirmations + + + + + Confirmed + पक्का + + + + Priority + + + + + Copy address + पता कॉपी करे + + + + Copy label + लेबल कॉपी करे + + + + + Copy amount + कॉपी राशि + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (कोई लेबल नही !) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + पता एडिट करना + + + + &Label + &लेबल + + + + The label associated with this address book entry + + + + + &Address + &पता + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + नया स्वीकार्य पता + + + + New sending address + नया भेजने वाला पता + + + + Edit receiving address + एडिट स्वीकार्य पता + + + + Edit sending address + एडिट भेजने वाला पता + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + डाला गया पता "%1" एड्रेस बुक में पहले से ही मोजूद है| + + + + Could not unlock wallet. + वॉलेट को unlock नहीं किया जा सकता| + + + + New key generation failed. + नयी कुंजी का निर्माण असफल रहा| + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + लागू नही + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + खुला है जबतक %1 + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + %1/अपुष्ट + + + + %1 confirmations + %1 पुष्टियाँ + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + , अभी तक सफलतापूर्वक प्रसारित नहीं किया गया है + + + + , broadcast through %n node(s) + + + + + Date + taareek + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + राशि + + + + true + सही + + + + false + ग़लत + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + अज्ञात + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + लेन-देन का विवरण + + + + This pane shows a detailed description of the transaction + ये खिड़की आपको लेन-देन का विस्तृत विवरण देगी ! + + + + TransactionTableModel + + + Date + taareek + + + + Type + टाइप + + + + Address + पता + + + + Note + + + + + Amount + राशि + + + + Open for %n more block(s) + + + + + Open until %1 + खुला है जबतक %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + पक्के ( %1 पक्का करना) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (लागू नहीं) + + + + Transaction status. Hover over this field to show number of confirmations. + ट्रांसेक्शन स्तिथि| पुष्टियों की संख्या जानने के लिए इस जगह पर माउस लायें| + + + + Date and time that the transaction was received. + तारीख तथा समय जब ये ट्रांसेक्शन प्राप्त हुई थी| + + + + Type of transaction. + ट्रांसेक्शन का प्रकार| + + + + Destination address of transaction. + ट्रांसेक्शन की मंजिल का पता| + + + + Amount removed from or added to balance. + अमाउंट बैलेंस से निकला या जमा किया गया | + + + + WalletModel + + + + Sending... + + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_hr.ts b/src/qt/locale/alias_hr.ts new file mode 100644 index 0000000000..823d6c57ba --- /dev/null +++ b/src/qt/locale/alias_hr.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Oznaka + + + + Address + Adresa + + + + pubkey + + + + + stealth + + + + + (no label) + (bez oznake) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + Unesite lozinku + + + + New passphrase + Nova lozinka + + + + Repeat new passphrase + Ponovite novu lozinku + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Unesite novi lozinku za novčanik. <br/> Molimo Vas da koristite zaporku od <b>10 ili više slučajnih znakova,</b> ili <b>osam ili više riječi.</b> + + + + Encrypt wallet + Šifriranje novčanika + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Ova operacija treba lozinku vašeg novčanika kako bi se novčanik otključao. + + + + Unlock wallet + Otključaj novčanik + + + + This operation needs your wallet passphrase to decrypt the wallet. + Ova operacija treba lozinku vašeg novčanika kako bi se novčanik dešifrirao. + + + + Decrypt wallet + Dešifriranje novčanika. + + + + Change passphrase + Promjena lozinke + + + + Enter the old and new passphrase to the wallet. + Unesite staru i novu lozinku za novčanik. + + + + Confirm wallet encryption + Potvrdi šifriranje novčanika + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + Jeste li sigurni da želite šifrirati svoj novčanik? + + + + + Wallet encrypted + Novčanik šifriran + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + Šifriranje novčanika nije uspjelo + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Šifriranje novčanika nije uspjelo zbog interne pogreške. Vaš novčanik nije šifriran. + + + + + The supplied passphrases do not match. + Priložene lozinke se ne podudaraju. + + + + Wallet unlock failed + Otključavanje novčanika nije uspjelo + + + + + + The passphrase entered for the wallet decryption was incorrect. + Lozinka za dešifriranje novčanika nije točna. + + + + Wallet decryption failed + Dešifriranje novčanika nije uspjelo + + + + Wallet passphrase was successfully changed. + Lozinka novčanika je uspješno promijenjena. + + + + + Warning: The Caps Lock key is on! + Upozorenje: Tipka Caps Lock je uključena! + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Iznos: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Iznos + + + + Label + + + + + Address + Adresa + + + + Date + Datum + + + + Confirmations + + + + + Confirmed + Potvrđeno + + + + Priority + + + + + Copy address + Kopirati adresu + + + + Copy label + Kopirati oznaku + + + + + Copy amount + Kopiraj iznos + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (bez oznake) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Izmjeni adresu + + + + &Label + &Oznaka + + + + The label associated with this address book entry + + + + + &Address + &Adresa + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Nova adresa za primanje + + + + New sending address + Nova adresa za slanje + + + + Edit receiving address + Uredi adresu za primanje + + + + Edit sending address + Uredi adresu za slanje + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Upisana adresa "%1" je već u adresaru. + + + + Could not unlock wallet. + Ne mogu otključati novčanik. + + + + New key generation failed. + Stvaranje novog ključa nije uspjelo. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informacija + + + + Alias Core + + + + + Client name + Ime klijenta + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Verzija klijenta + + + + Using OpenSSL version + Koristim OpenSSL verziju + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + Mreža + + + + Name + + + + + Number of connections + Broj konekcija + + + + Block chain + Lanac blokova + + + + Current number of blocks + Trenutni broj blokova + + + + Estimated total blocks + Procjenjeni ukupni broj blokova + + + + Last block time + Posljednje vrijeme bloka + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Otvori + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Konzola + + + + Clear console + Očisti konzolu + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Otvoren do %1 + + + + conflicted + + + + + %1/offline + %1 nije dostupan + + + + %1/unconfirmed + %1/nepotvrđeno + + + + %1 confirmations + %1 potvrda + + + + Transaction ID + ID transakcije + + + + Block Hash + + + + + Status + Status + + + + , has not been successfully broadcast yet + , još nije bio uspješno emitiran + + + + , broadcast through %n node(s) + + + + + Date + Datum + + + + Source + Izvor + + + + Generated + Generiran + + + + + Credit + Uplaćeno + + + + matures in %n more block(s) + + + + + not accepted + Nije prihvaćeno + + + + Transaction fee + Naknada za transakciju + + + + Net amount + Neto iznos + + + + Message + Poruka + + + + Comment + Komentar + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + Zaduženje + + + + Transaction + Transakcija + + + + Inputs + Unosi + + + + Amount + Iznos + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + nepoznato + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Detalji transakcije + + + + This pane shows a detailed description of the transaction + Ova panela prikazuje detaljni opis transakcije + + + + TransactionTableModel + + + Date + Datum + + + + Type + Tip + + + + Address + Adresa + + + + Note + + + + + Amount + Iznos + + + + Open for %n more block(s) + + + + + Open until %1 + Otvoren do %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Potvrđen (%1 potvrda) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/d) + + + + Transaction status. Hover over this field to show number of confirmations. + Status transakcije + + + + Date and time that the transaction was received. + Datum i vrijeme kad je transakcija primljena + + + + Type of transaction. + Vrsta transakcije. + + + + Destination address of transaction. + Odredište transakcije + + + + Amount removed from or added to balance. + Iznos odbijen od ili dodan k saldu. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_hu.ts b/src/qt/locale/alias_hu.ts new file mode 100644 index 0000000000..d274efe409 --- /dev/null +++ b/src/qt/locale/alias_hu.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + A Alias-ról + + + + <b>Alias</b> version + <b>Alias</b> verzió + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Címke + + + + Address + Cím + + + + pubkey + + + + + stealth + + + + + (no label) + (nincs címke) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Kulcsszó Párbeszédablak + + + + Enter passphrase + Add meg a jelszót + + + + New passphrase + Új jelszó + + + + Repeat new passphrase + Új jelszó ismét + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Triviálisan a sendmoney parancs letiltására szolgál, amennyiben az OS felhasználója kompromittálódik. Nem ad valós biztonságot. + + + + For staking only + Csak kamatoztatásra + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Írd be az új jelszót a tárcához.<br/>Használj <b>legalább 10 véletlenszerű karaktert</b>, vagy <b>legalább nyolc szót</b>. + + + + Encrypt wallet + Tárca kódolása + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Ez a művelet a tárcád jelszavának megadását igényli annak megnyitásához. + + + + Unlock wallet + Tárca feloldása + + + + This operation needs your wallet passphrase to decrypt the wallet. + Ez a művelet a tárcád jelszavának megadását igényli annak dekódolásához. + + + + Decrypt wallet + Tárca dekódolása + + + + Change passphrase + Jelszó megváltoztatása + + + + Enter the old and new passphrase to the wallet. + Írd be a tárca régi és új jelszavát. + + + + Confirm wallet encryption + Biztosan kódolni akarod a tárcát? + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Figyelmeztetés: Ha kódolod a tárcád és elveszíted annak jelszavát, el fogod <b>VESZÍTENI AZ ÖSSZES ÉRMÉDET</b>! + + + + Are you sure you wish to encrypt your wallet? + Biztosan kódolni akarod a tárcát? + + + + + Wallet encrypted + Tárca kódolva + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + FONTOS: A pénztárca-fájl korábbi mentéseit ezzel az új, titkosított pénztárca-fájllal kell helyettesíteni. Biztonsági okokból a pénztárca-fájl korábbi titkosítás nélküli mentései haszontalanná válnak amint elkezdi használni az új, titkosított pénztárcát. + + + + + + + Wallet encryption failed + Tárca kódolása sikertelen. + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Tárca kódolása belső hiba miatt sikertelen. A tárcád nem lett kódolva. + + + + + The supplied passphrases do not match. + A megadott jelszavak nem egyeznek. + + + + Wallet unlock failed + Tárca megnyitása sikertelen + + + + + + The passphrase entered for the wallet decryption was incorrect. + Hibás jelszó. + + + + Wallet decryption failed + Dekódolás sikertelen. + + + + Wallet passphrase was successfully changed. + Jelszó megváltoztatva. + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + Hálózati figyelmeztetés + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Összeg: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Összeg + + + + Label + + + + + Address + Cím + + + + Date + Dátum + + + + Confirmations + + + + + Confirmed + Megerősítve + + + + Priority + + + + + Copy address + Cím másolása + + + + Copy label + Címke másolása + + + + + Copy amount + Összeg másolása + + + + Copy transaction ID + Tranzakcióazonosító másolása + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (nincs címke) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Cím szerkesztése + + + + &Label + Cím&ke + + + + The label associated with this address book entry + + + + + &Address + &Cím + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Új fogadó cím + + + + New sending address + Új küldő cím + + + + Edit receiving address + Fogadó cím szerkesztése + + + + Edit sending address + Küldő cím szerkesztése + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + A megadott "%1" cím már szerepel a címjegyzékben. + + + + Could not unlock wallet. + Tárca feloldása sikertelen + + + + New key generation failed. + Új kulcs generálása sikertelen + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Információ + + + + Alias Core + + + + + Client name + Kliens néve + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + Nem elérhető + + + + Client version + Kliens verzió + + + + Using OpenSSL version + Használt OpenSSL verzió + + + + Using BerkeleyDB version + + + + + Build date + Fordítás dátuma + + + + Startup time + Bekapcsolás ideje + + + + Network + Hálózat + + + + Name + + + + + Number of connections + Kapcsolatok száma + + + + Block chain + Blokklánc + + + + Current number of blocks + Aktuális blokkok száma + + + + Estimated total blocks + Becsült összes blokk + + + + Last block time + Utolsó blokk ideje + + + + Debug log file + Debug naplófájl + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Megnyitás + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Konzol + + + + Clear console + Konzol törlése + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + Be: + + + + + Out: + Ki: + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Navigálhat a fel és le nyilakkal, és <b>Ctrl-L</b> -vel törölheti a képernyőt. + + + + Type <b>help</b> for an overview of available commands. + Írd be azt, hogy <b>help</b> az elérhető parancsok áttekintéséhez. + + + + via %1 + + + + + + never + soha + + + + Inbound + Bejövő + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Megnyitva %1-ig + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + %1/megerősítetlen + + + + %1 confirmations + %1 megerősítés + + + + Transaction ID + Tranzakcióazonosító + + + + Block Hash + + + + + Status + Állapot + + + + , has not been successfully broadcast yet + , még nem sikerült elküldeni. + + + + , broadcast through %n node(s) + + + + + Date + Dátum + + + + Source + + + + + Generated + Legenerálva + + + + + Credit + Jóváírás + + + + matures in %n more block(s) + + + + + not accepted + elutasítva + + + + Transaction fee + Tranzakciós díj + + + + Net amount + Nettó összeg + + + + Message + Üzenet + + + + Comment + Megjegyzés + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Debug információ + + + + Debit + Terhelés + + + + Transaction + Tranzakció + + + + Inputs + Bemenetek + + + + Amount + Összeg + + + + true + igaz + + + + false + hamis + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + ismeretlen + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Tranzakció részletei + + + + This pane shows a detailed description of the transaction + Ez a mező a tranzakció részleteit mutatja + + + + TransactionTableModel + + + Date + Dátum + + + + Type + Típus + + + + Address + Cím + + + + Note + + + + + Amount + Összeg + + + + Open for %n more block(s) + + + + + Open until %1 + %1-ig megnyitva + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Megerősítve (%1 megerősítés) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (nincs) + + + + Transaction status. Hover over this field to show number of confirmations. + Tranzakció állapota. Húzd ide a kurzort, hogy lásd a megerősítések számát. + + + + Date and time that the transaction was received. + Tranzakció fogadásának dátuma és időpontja. + + + + Type of transaction. + Tranzakció típusa. + + + + Destination address of transaction. + A tranzakció címzettjének címe. + + + + Amount removed from or added to balance. + Az egyenleghez jóváírt vagy ráterhelt összeg. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_id_ID.ts b/src/qt/locale/alias_id_ID.ts new file mode 100644 index 0000000000..2092d3a7f6 --- /dev/null +++ b/src/qt/locale/alias_id_ID.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + Tentang Alias + + + + <b>Alias</b> version + <b>Alias</b> versi + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Label + + + + Address + Alamat + + + + pubkey + + + + + stealth + + + + + (no label) + (tidak ada label) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Dialog Kata kunci + + + + Enter passphrase + Masukkan kata kunci + + + + New passphrase + Kata kunci baru + + + + Repeat new passphrase + Ulangi kata kunci baru + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + Hanya untuk staking + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Masukkan kata kunci baru ke dompet.<br/>Mohon gunakan kata kunci dengan <b>10 karakter atau lebih dengan acak</b>, atau <b>delapan kata atau lebih</b>. + + + + Encrypt wallet + Meng-enkripsikan dompet + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Operasi ini memerlukan kata kunci dompet Anda untuk membuka dompet ini. + + + + Unlock wallet + Buka dompet + + + + This operation needs your wallet passphrase to decrypt the wallet. + Operasi ini memerlukan kata kunci dompet Anda untuk mendekripsi dompet ini. + + + + Decrypt wallet + Men-dekripsikan dompet + + + + Change passphrase + Ubah kata kunci + + + + Enter the old and new passphrase to the wallet. + Masukkan kata kunci lama dan baru ke dompet ini. + + + + Confirm wallet encryption + Menkonfirmasi enkripsi dompet + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + Apakah Anda yakin untuk mengenkripsi dompet Anda? + + + + + Wallet encrypted + Dompet terenkripsi + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias akan ditutup untuk menyelesaikan proses enkripsi. Ingat bahwa dompet Anda tidak bisa di lindungi dengan enkripsi sepenuhny dari pencurian melalui infeksi malware di komputer Anda. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + Enkripsi dompet gagal + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Enkripsi dompet gagal karena kesalahan internal. Dompet Anda tidak dienkripsi. + + + + + The supplied passphrases do not match. + Kata kunci yang dimasukkan tidak cocok. + + + + Wallet unlock failed + Gagal buka dompet + + + + + + The passphrase entered for the wallet decryption was incorrect. + Kata kunci yang dimasukkan untuk dekripsi dompet tidak cocok. + + + + Wallet decryption failed + Dekripsi dompet gagal + + + + Wallet passphrase was successfully changed. + Passphrase dompet telah berhasil diubah. + + + + + Warning: The Caps Lock key is on! + Peringatan: tombol Caps Lock aktif! + + + + ClientModel + + + Network Alert + Notifikasi Jaringan + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + Jumlah: + + + + Bytes: + Bytes: + + + + Amount: + Jumlah: + + + + Priority: + Prioritas: + + + + Fee: + Biaya: + + + + Low Output: + + + + + After Fee: + Setelah biaya: + + + + Change: + Perubahan: + + + + (un)select all + + + + + Tree mode + + + + + List mode + mode Daftar + + + + Amount + Jumlah + + + + Label + Label + + + + Address + Alamat + + + + Date + Tanggal + + + + Confirmations + + + + + Confirmed + Terkonfirmasi + + + + Priority + Prioritas + + + + Copy address + Salin alamat + + + + Copy label + Salin label + + + + + Copy amount + Salin jumlah + + + + Copy transaction ID + + + + + Copy quantity + Salikan jumlah + + + + Copy fee + Salinkan Biaya + + + + Copy after fee + Salinkan setelah biaya + + + + Copy bytes + Salinkan bytes + + + + Copy priority + Salinkan prioritas + + + + Copy low output + Salinkan output rendah + + + + Copy change + Salinkan perubahan + + + + highest + tertinggi + + + + high + tinggi + + + + medium-high + menengah-tinggi + + + + medium + menengah + + + + low-medium + rendah-menengah + + + + low + rendah + + + + lowest + terendah + + + + + DUST + DUST + + + + + yes + ya + + + + + no + tidak + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (tidak ada label) + + + + change from %1 (%2) + perubahan dari %1 (%2) + + + + (change) + (perubahan) + + + + EditAddressDialog + + + Edit Address + Ubah Alamat + + + + &Label + &Label + + + + The label associated with this address book entry + + + + + &Address + &Alamat + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Alamat menerima baru + + + + New sending address + Alamat mengirim baru + + + + Edit receiving address + Ubah alamat menerima + + + + Edit sending address + Ubah alamat mengirim + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Alamat yang dimasukkan "%1" sudah ada di dalam buku alamat. + + + + Could not unlock wallet. + Tidak dapat membuka dompet. + + + + New key generation failed. + Pembuatan kunci baru gagal. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + versi + + + + Usage: + Penggunaan: + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informasi + + + + Alias Core + + + + + Client name + Nama Klien + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + T/S + + + + Client version + Versi Klien + + + + Using OpenSSL version + Menggunakan versi OpenSSL + + + + Using BerkeleyDB version + + + + + Build date + Tanggal pembuatan + + + + Startup time + Waktu nyala + + + + Network + Jaringan + + + + Name + + + + + Number of connections + Jumlah hubungan + + + + Block chain + Rantai blok + + + + Current number of blocks + Jumlah blok terkini + + + + Estimated total blocks + Perkiraan blok total + + + + Last block time + Waktu blok terakhir + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Buka + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + &Tunjukkan + + + + &Console + &Konsol + + + + Clear console + Bersihkan konsol + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Gunakan panah keatas dan kebawah untuk menampilkan sejarah, dan <b>Ctrl-L</b> untuk bersihkan layar. + + + + Type <b>help</b> for an overview of available commands. + Ketik <b>help</b> untuk menampilkan perintah tersedia. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Buka hingga %1 + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + %1/tidak terkonfirmasi + + + + %1 confirmations + %1 konfirmasi + + + + Transaction ID + + + + + Block Hash + + + + + Status + Status + + + + , has not been successfully broadcast yet + , belum berhasil disiarkan + + + + , broadcast through %n node(s) + + + + + Date + Tanggal + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + Pesan: + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + Transaksi + + + + Inputs + + + + + Amount + Jumlah + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + tidak diketahui + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Rincian transaksi + + + + This pane shows a detailed description of the transaction + Jendela ini menampilkan deskripsi rinci dari transaksi tersebut + + + + TransactionTableModel + + + Date + Tanggal + + + + Type + Jenis + + + + Address + Alamat + + + + Note + + + + + Amount + Jumlah + + + + Open for %n more block(s) + + + + + Open until %1 + Buka hingga %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Terkonfirmasi (%1 konfirmasi) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (t/s) + + + + Transaction status. Hover over this field to show number of confirmations. + Status transaksi. Arahkan ke bagian ini untuk menampilkan jumlah konfrimasi. + + + + Date and time that the transaction was received. + Tanggal dan waktu transaksi tersebut diterima. + + + + Type of transaction. + Jenis transaksi. + + + + Destination address of transaction. + Alamat tujuan dari transaksi. + + + + Amount removed from or added to balance. + Jumlah terbuang dari atau ditambahkan ke saldo. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_it.ts b/src/qt/locale/alias_it.ts new file mode 100644 index 0000000000..ab8e5d372d --- /dev/null +++ b/src/qt/locale/alias_it.ts @@ -0,0 +1,4327 @@ + + + AboutDialog + + + About Alias + Cosa è Alias + + + + <b>Alias</b> version + <b>Alias</b>versione + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + © 2020 Sviluppatori di Alias +© 2016 Sviluppatori di Spectrecoin +© 2014 sviluppatori di ShadowCash +© 2014 BlackCoin sviluppatori +© 2012 NovaCoin sviluppatori +© 2009 Sviluppatori Bitcoin + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + Questo è un software sperimentale. + +Distribuito sotto la licenza software MIT/X11, vedi il file di accompagnamento COPYING o <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +Questo prodotto include software sviluppato dal Progetto OpenSSL per l'uso nell'OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) e software crittografico scritto da Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) e software UPnP scritto da Thomas Bernard. + + + + AddressTableModel + + + Label + Etichetta + + + + Address + Indirizzo + + + + pubkey + pubkey + + + + stealth + invisibile + + + + (no label) + (nessuna etichetta) + + + + Stealth Address + Indirizzo invisibile + + + + n/a + N.D. + + + + AskPassphraseDialog + + + Passphrase Dialog + Finestra passphrase + + + + Enter passphrase + Inserisci la passphrase + + + + New passphrase + Nuova passphrase + + + + Repeat new passphrase + Ripeti la passphrase + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Serve a disabilitare il banale sendmoney quando l'account OS è compromesso. Non fornisce alcuna sicurezza reale. + + + + For staking only + Solo per staking + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Inserisci la passphrase per il portamonete.<br/>Per piacere usare unapassphrase di <b>10 o più caratteri casuali</b>, o <b>otto o più parole</b>. + + + + Encrypt wallet + Cifra il portamonete + + + + Keep wallet unlocked for staking. + Mantieni il portamonete sbloccato per lo staking. + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + Il tuo portafoglio contiene ATXO bloccati il cui stato di spesa può essere determinato solo con la tua chiave privata. Il tuo<b> saldo privato ALIAS potrebbe essere mostrato in modo errato</b>. + + + + <b>Alias Wallet Login</b> + <b>Accesso al portamonete Alias</b> + + + + This operation needs your wallet passphrase to unlock the wallet. + Quest'operazione necessita della passphrase per sbloccare il portamonete. + + + + Unlock wallet + Sblocca il portamonete + + + + This operation needs your wallet passphrase to decrypt the wallet. + Quest'operazione necessita della passphrase per decifrare il portamonete, + + + + Decrypt wallet + Decifra il portamonete + + + + Change passphrase + Cambia la passphrase + + + + Enter the old and new passphrase to the wallet. + Inserisci la vecchia e la nuova passphrase per il portamonete. + + + + Confirm wallet encryption + Conferma la cifratura del portamonete + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Attenzione: Se cripti il tuo portamonete e perdi la tua passphrase, <b>PERDI TUTTI I TUOI CONTANTI</b>! + + + + Are you sure you wish to encrypt your wallet? + Si è sicuri di voler cifrare il portamonete? + + + + + Wallet encrypted + Portamonete cifrato + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias si chiuderà ora per finire il processo di crittografia. Ricorda che criptare il tuo portafoglio non può proteggere completamente le tue monete dal furto di malware che infettano il tuo computer. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANTE: qualsiasi backup del portafoglio effettuato precedentemente dovrebbe essere sostituito con il file del portafoglio criptato appena generato. Per ragioni di sicurezza, i backup precedenti del file del portafoglio non criptato diventeranno inservibili non appena si inizi ad usare il nuovo portafoglio criptato. + + + + + + + Wallet encryption failed + Cifratura del portamonete fallita + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Cifratura del portamonete fallita a causa di un errore interno. Il portamonete non è stato cifrato. + + + + + The supplied passphrases do not match. + Le passphrase inserite non corrispondono. + + + + Wallet unlock failed + Sblocco del portamonete fallito + + + + + + The passphrase entered for the wallet decryption was incorrect. + La passphrase inserita per la decifrazione del portamonete è errata. + + + + Wallet decryption failed + Decifrazione del portamonete fallita + + + + Wallet passphrase was successfully changed. + Passphrase del portamonete modificata con successo. + + + + + Warning: The Caps Lock key is on! + Attenzione: tasto Blocco maiuscole attivo. + + + + ClientModel + + + Network Alert + Avviso di rete + + + + CoinControlDialog + + + Coin Control + Coin Control + + + + Quantity: + Quantità: + + + + Bytes: + Byte: + + + + Amount: + Importo: + + + + Priority: + Priorità: + + + + Fee: + Commissione: + + + + Low Output: + Low Output: + + + + After Fee: + Dopo Commissione: + + + + Change: + Resto: + + + + (un)select all + (de)seleziona tutto + + + + Tree mode + Modalità Albero + + + + List mode + Modalità Lista + + + + Amount + Importo + + + + Label + Etichetta + + + + Address + Indirizzo + + + + Date + Data + + + + Confirmations + Conferme: + + + + Confirmed + Confermato + + + + Priority + Priorità + + + + Copy address + Copia l'indirizzo + + + + Copy label + Copia l'etichetta + + + + + Copy amount + Copia l'importo + + + + Copy transaction ID + Copia l'ID transazione + + + + Copy quantity + Copia quantità + + + + Copy fee + Copia commissione + + + + Copy after fee + Copia dopo commissione + + + + Copy bytes + Copia byte + + + + Copy priority + Copia priorità + + + + Copy low output + Copia low output + + + + Copy change + Copia resto + + + + highest + massima + + + + high + alta + + + + medium-high + medio-alta + + + + medium + media + + + + low-medium + medio-bassa + + + + low + bassa + + + + lowest + infima + + + + + DUST + POLVERE + + + + + yes + si + + + + + no + no + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Questa etichetta diventa rossa se la dimensione della transazione è più grande di 10000 byte. + +Ciò significa che è richiesta una tariffa di almeno %1 per kb. + +Può variare +/- 1 Byte per ingresso. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Le transazioni con priorità più alta entrano più facilmente in un blocco. + +Questa etichetta diventa rossa se la priorità è inferiore a "media". + +Questo significa che è richiesta una tassa di almeno %1 per kb. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Questa etichetta diventa rossa, se qualche destinatario riceve un importo inferiore a %1. + +Ciò significa che è richiesta una tassa di almeno %2. + +Gli importi inferiori a 0,546 volte la tariffa minima di trasmissione sono mostrati come DUST. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Questa etichetta diventa rossa se il cambiamento è inferiore a %1. + +Ciò significa che è necessaria una quota di almeno %2. + + + + + (no label) + (nessuna etichetta) + + + + change from %1 (%2) + resto da %1 (%2) + + + + (change) + (resto) + + + + EditAddressDialog + + + Edit Address + Modifica l'indirizzo + + + + &Label + &Etichetta + + + + The label associated with this address book entry + L'etichetta associata a questa voce della rubrica + + + + &Address + &Indirizzo + + + + The address associated with this address book entry. This can only be modified for sending addresses. + L'indirizzo associato a questa voce della rubrica. Questo può essere modificato solo per gli indirizzi di invio. + + + + &Stealth Address + &Stealth Indirizzo + + + + New receiving address + Nuovo indirizzo di ricezione + + + + New sending address + Nuovo indirizzo d'invio + + + + Edit receiving address + Modifica indirizzo di ricezione + + + + Edit sending address + Modifica indirizzo d'invio + + + + The entered address "%1" is not a valid Alias address. + L'indirizzo inserito "%1" non è un indirizzo Alias valido. + + + + The entered address "%1" is already in the address book. + L'indirizzo inserito "%1" è già in rubrica. + + + + Could not unlock wallet. + Impossibile sbloccare il portamonete. + + + + New key generation failed. + Generazione della nuova chiave non riuscita. + + + + EncryptWalletPage + + + Wallet Encryption + Cifratura del portamonete + + + + Please enter a password to encrypt the wallet.dat file. + Inserisci una password per crittografare il file wallet.dat. + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + La password protegge le vostre chiavi private e sarà richiesta dal portafoglio all'avvio e per le operazioni critiche. + + + + &Wallet Password: + &Password portamonete: + + + + &Verify Password: + &Verifica password: + + + + Create and encrypt wallet.dat ... + Creare e criptare wallet.dat ... + + + + Error + Errore + + + + Failed to create wallet.dat. ErrorCode: %1 + Fallita la creazione di wallet.dat. ErrorCode: %1 + + + + GUIUtil::HelpMessageBox + + + + Alias + Alias + + + + version + versione + + + + Usage: + Utilizzo: + + + + command-line options + opzioni della riga di comando + + + + UI options + Opzioni UI + + + + Set language, for example "de_DE" (default: system locale) + Imposta la lingua, per esempio "de_DE" (predefinito: locale di sistema) + + + + Start minimized + Avvio ridotto al minimo + + + + Show splash screen on startup (default: 1) + Mostra lo splash screen all'avvio (predefinito: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + Importare wallet.dat + + + + Please import a wallet.dat file with your private keys. + Importa un file wallet.dat con le tue chiavi private. + + + + &Select wallet.dat + &Selezionare il portafoglio.dat + + + + QFileDialog::getOpenFileName() + QFileDialog::getOpenFileName() + + + + Wallet Files (*.dat) + File del portafoglio (*.dat) + + + + Error + Errore + + + + Failed to copy wallet.dat: %1 + Impossibile copiare wallet.dat: %1 + + + + IntroPage + + + Set Up Your Wallet + Imposta il tuo portafoglio + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + L'applicazione ha rilevato che non hai un file wallet.dat, che contiene le tue chiavi private. Scegli come vuoi creare o ripristinare le tue chiavi private. + + + + &Create new mnemonic recovery seed words + &Creare nuove parole seme di recupero mnemonico + + + + &Recover from your existing mnemonic seed words + &Recupera dalle tue parole seme mnemoniche esistenti + + + + &Import wallet.dat file + &Importa il file wallet.dat + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + Crea chiavi private con le parole mnemoniche + + + + Step 2/3: Write down your mnemonic recovery seed words. + Passo 2/3: Scrivi le tue parole seme di recupero mnemonico. + + + + Mnemonic Recovery Seed Words: + Recupero mnemonico Seed Words: + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + Hai bisogno delle Parole del Seme di Recupero Mnemonico per ripristinare questo portafoglio. Scrivile e conservale in un posto sicuro.<br>Ti verrà chiesto di confermare le Recovery Seed Words nella prossima schermata per assicurarti di averle scritte correttamente. + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + Crea chiavi private con le parole mnemoniche + + + + Step 1/3: Please define language to use and optional password to protect your seed. + Passo 1/3: Definisci la lingua da utilizzare e la password opzionale per proteggere il tuo seme. + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + La creazione di parole seme mnemoniche è una procedura in tre fasi:<ol><li> Definire la lingua e la password opzionale per il tuo seme.</li><li> Scrivere le parole chiave create.</li><li> Verificare le parole del seme e la password del seme.</li></ol> + + + + &Language: + &Language: + + + + &Seed Password: + &Seme password: + + + + &Verify Password: + &Verifica password: + + + + Error + Errore + + + + Failed to create Mnemonic Seed Words. %1 + Fallita la creazione delle parole del seme mnemonico. %1 + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + Crea chiavi private con le parole mnemoniche + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + Passo 3/3: Verifica di aver annotato le parole corrette e la password (opzionale). + + + + &Seed Password: + &Seme password: + + + + <br>Enter Mnemonic Seed Words: + <br>Inserisci parole mnemoniche: + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + Impossibile avviare Alias: gestore click-to-pay + + + + PeerTableModel + + + Address/Hostname + Indirizzo/Nome dell'host + + + + User Agent + Interprete + + + + Ping Time + Durata ping + + + + QObject + + + %1 d + %1 d + + + + %1 h + %1 h + + + + %1 m + %1 m + + + + + %1 s + %1 s + + + + None + Nessuno + + + + N/A + N/D + + + + %1 ms + %1 ms + + + + RPCConsole + + + Alias - Debug window + Alias - Finestra di debug + + + + &Information + &Informazione + + + + Alias Core + Alias Core + + + + Client name + Nome del client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/D + + + + Client version + Versione client + + + + Using OpenSSL version + Versione OpenSSL in uso + + + + Using BerkeleyDB version + Utilizzo della versione BerkeleyDB + + + + Build date + Data di creazione + + + + Startup time + Tempo di avvio + + + + Network + Rete + + + + Name + Nome + + + + Number of connections + Numero connessioni + + + + Block chain + Block chain + + + + Current number of blocks + Numero attuale di blocchi + + + + Estimated total blocks + Numero totale stimato di blocchi + + + + Last block time + Ora dell blocco piu recente + + + + Debug log file + File log del Debug + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + Aprire il file di log di debug di Alias dalla directory dei dati correnti. Questo può richiedere alcuni secondi per file di log di grandi dimensioni. + + + + &Open + &Apri + + + + Command-line options + Opzioni della riga di comando + + + + Show the Alias help message to get a list with possible Alias command-line options. + Mostra il messaggio di aiuto di Alias per ottenere una lista con le possibili opzioni della riga di comando di Alias. + + + + &Show + &Mostra + + + + &Console + &Console + + + + Clear console + Svuota console + + + + &Network Traffic + &Traffico di rete + + + + &Clear + &Clear + + + + Totals + Totali + + + + + In: + In: + + + + + Out: + Fuori: + + + + &Peers + &Peers + + + + + + Select a peer to view detailed information. + Seleziona un peer per visualizzare informazioni dettagliate. + + + + Peer ID + ID pari + + + + Direction + Direzione + + + + Version + Versione + + + + User Agent + Interprete + + + + Services + Servizi + + + + Starting Height + Altezza di partenza + + + + Sync Height + Altezza di sincronizzazione + + + + Ban Score + Punteggio di divieto + + + + Connection Time + Tempo di connessione + + + + Last Send + Ultimo invio + + + + Last Receive + Ultima ricezione + + + + Bytes Sent + Bytes inviati + + + + Bytes Received + Bytes ricevuti + + + + Ping Time + Durata ping + + + + Time Offset + Offset di tempo + + + + Welcome to the Alias Core RPC console. + Benvenuti nella console RPC di Alias Core. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Usa le frecce direzionali per navigare la cronologia, and <b>Ctrl-L</b> per cancellarla. + + + + Type <b>help</b> for an overview of available commands. + Scrivi <b>help</b> per un riassunto dei comandi disponibili + + + + via %1 + via %1 + + + + + never + mai + + + + Inbound + Inbound + + + + Outbound + In uscita + + + + Unknown + Sconosciuto + + + + + Fetching... + Afferrare... + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + Recuperare le chiavi private dalle parole del seme mnemonico + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + Inserisci le tue parole mnemoniche e la password (opzionale) per recuperare le chiavi private. + + + + &Seed Password: + &Seme password: + + + + &Verify Password: + &Verifica password: + + + + <br>Enter Mnemonic Seed Words: + <br>Inserisci parole mnemoniche: + + + + Error + Errore + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + Fallito il recupero delle chiavi private dalle parole chiave mnemoniche. %1 + + + + SetupWalletWizard + + + Alias Wallet Setup + Impostazione del portafoglio alias + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + Il file 'wallet.dat', che contiene le tue chiavi private, non è stato trovato durante l'avvio. Deve essere creato ora.<br><br> La chiave privata consiste in caratteri alfanumerici che danno all'utente l'accesso e il controllo dei propri fondi all'indirizzo della criptovaluta corrispondente. In altre parole, la chiave privata crea firme digitali uniche per ogni transazione che permettono a un utente di spendere i propri fondi, provando che l'utente ha effettivamente la proprietà di quei fondi. + + + + If you have a backup of a wallet.dat, you can import this file. + Se hai un backup di un wallet.dat, puoi importare questo file. + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + Le parole del seme mnemonico vi permettono di creare e poi recuperare le vostre chiavi private. Il seme consiste di 24 parole e la password opzionale funziona come una 25a parola che potete tenere segreta per proteggere il vostro seme. + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + Si raccomanda di fare più copie delle parole seme, memorizzate in luoghi diversi.<br><br><b> Attenzione: Le </b>Seed Words non possono essere (ri)create in seguito dalle tue ex chiavi private. <br>Se perdi le tue Seed Words e non hai un backup del file wallet.dat, perdi le tue monete! + + + + Please enter the mnemonic words and password given on the previous screen. + Inserisci le tue parole mnemoniche e la password della schermata precedente. + + + + Please enter your mnemonic words and (optional) password. + Inserisci le tue parole mnemoniche e (opzionalmente) la password. + + + + This help is likely not to be of any help. + È probabile che questo aiuto non sia di alcun aiuto. + + + + Alias Wallet Setup Help + Aiuto per la configurazione del portafoglio Alias + + + + SpectreBridge + + + default + predefinito + + + + <b>%1</b> from your public balance to %2 (%3) + <b>%1 </b>dal vostro saldo pubblico a %2 (%3) + + + + <b>%1</b> from public to private, using address %2 (%3) + <b>%1 </b>da pubblico a privato, usando l'indirizzo %2 (%3) + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + <b>%1</b> dal suo saldo privato, taglia dell'anello %2, a %3 (%4) + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + <b>%1</b> da privato a pubblico, dimensione dell'anello %2, usando l'indirizzo %3 (%4) + + + + + + + Error: + Errore: + + + + Unknown txn type detected %1. + Tipo di txn sconosciuto rilevato %1. + + + + Input types must match for all recipients. + I tipi di input devono corrispondere per tutti i destinatari. + + + + Ring sizes must match for all recipients. + Le dimensioni dell'anello devono corrispondere per tutti i destinatari. + + + + Ring size must be %1. + La dimensione dell'anello deve essere %1. + + + + Ring size outside range [%1, %2]. + Dimensione dell'anello fuori dall'intervallo [%1, %2]. + + + + + + Confirm send coins + Conferma l'invio di monete + + + + Are you sure you want to send? +Ring size of one is not anonymous. + Sei sicuro di voler inviare? +La misura dell'anello di uno non è anonima. + + + + + and + e + + + + Are you sure you want to convert %1? + Sei sicuro di voler convertire %1? + + + + Are you sure you want to send %1? + Sei sicuro di voler inviare %1? + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + Invia monete + + + + The change address is not valid, please recheck. + Il cambio di indirizzo non è valido, si prega di ricontrollare. + + + + The recipient address is not valid, please recheck. + L'indirizzo del destinatario non è valido, per favore ricontrolla. + + + + Only ALIAS from your Private balance can be send to a stealth address. + Solo gli ALIAS del tuo bilancio privato possono essere inviati a un indirizzo stealth. + + + + Transfer from Public to Private is only allowed within your account. + Il trasferimento da Pubblico a Privato è consentito solo all'interno del tuo account. + + + + Transfer from Private to Public is only allowed within your account. + Il trasferimento da privato a pubblico è consentito solo all'interno del tuo account. + + + + The amount to pay must be larger than 0. + L'importo da pagare deve essere maggiore di 0. + + + + The amount exceeds your balance. + L'importo supera il tuo saldo. + + + + The total exceeds your balance when the %1 transaction fee is included. + Il totale supera il tuo saldo quando è inclusa la tassa di transazione del %1. + + + + Duplicate address found, can only send to each address once per send operation. + Trovato un indirizzo duplicato, può inviare ad ogni indirizzo solo una volta per operazione di invio. + + + + Error: Transaction creation failed. + Errore: Creazione della transazione fallita. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Errore: La transazione è stata rigettata. Ciò può succedere se alcuni coins nel tuo portamonete sono già stati spesi, p. e. se copi la wallet.dat e alcuni coins sono stati spesi li ma non in questo portamonete attuale. + + + + Error: Note is too long. + Errore: La nota è troppo lunga. + + + + Error: Ring Size Error. + Errore: Errore nella dimensione dell'anello. + + + + Error: Input Type Error. + Errore: Errore di tipo di ingresso. + + + + Error: Must be in full mode to send anon. + Errore: Deve essere in modalità completa per inviare anon. + + + + Error: Invalid Stealth Address. + Errore: Indirizzo Stealth non valido. + + + + Convert Alias from Private to Public + Convertire alias da privato a pubblico + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + Errore: Indirizzo Stealth non valido. La conversione da privato a pubblico richiede un indirizzo stealth. + + + + The amount exceeds your ALIAS balance. + L'importo supera il tuo saldo ALIAS. + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + Il totale supera il tuo saldo privato ALIAS quando la tassa di transazione %1 è inclusa. + + + + Error generating transaction. + Errore nella generazione della transazione. + + + + Error generating transaction: %1 + Errore nella generazione della transazione: %1 + + + + Transaction successfully created. + Transazione creata con successo. + + + + Please restart wallet + Si prega di riavviare il portafoglio + + + + The used language has changed. +Please restart the wallet! + La lingua utilizzata è cambiata. +Si prega di riavviare il portamonete! + + + + SpectreGUI + + + Public received with + Pubblico ricevuto con + + + + Public received from + Pubblico ricevuto da + + + + Public sent to + Pubblico inviato a + + + + Public sent to self + Pubblico inviato a se stesso + + + + Private sent to self + Privato inviato a se stesso + + + + Public staked + Pubblico impalato + + + + Public donated + Pubblico donato + + + + Public contributed + Il pubblico ha contribuito + + + + Private staked + Privato picchettato + + + + Private donated + Privato donato + + + + Private contributed + Il privato ha contribuito + + + + Private received with + Privato ricevuto con + + + + Private sent to + Privato inviato a + + + + Private to Public + Da privato a pubblico + + + + Public to Private + Da pubblico a privato + + + + Other + Altro + + + + + + + Alias + Alias + + + + Client + Client + + + + ..Start UI.. + ..Iniziare UI.. + + + + .Start UI. + .inizia l'interfaccia utente. + + + + Ready! + Pronti! + + + + E&xit + E&xit + + + + Quit application + Abbandona l'applicazione + + + + &About Alias + &Su Alias + + + + Show information about Alias + Mostra informazioni su Alias + + + + About &Qt + Informazioni su &Qt + + + + Show information about Qt + Mostra informazioni su Qt + + + + &Options... + &Opzioni... + + + + Modify configuration options for Alias + Modificare le opzioni di configurazione per Alias + + + + &Show / Hide + Mostra / Nascondi + + + + &Encrypt Wallet... + &Encrypt Portafoglio... + + + + Encrypt or decrypt wallet + Criptare o decriptare il portafoglio + + + + &Backup Wallet... + &Backup Portafoglio... + + + + Backup wallet to another location + Backup del portafoglio in un'altra posizione + + + + &Change Passphrase... + &Cambia Passphrase... + + + + Change the passphrase used for wallet encryption + Cambia la passphrase usata per la crittografia del portafoglio + + + + &Unlock Wallet... + &Sblocca portafoglio... + + + + Unlock wallet + Sblocca il portamonete + + + + &Lock Wallet + Portafoglio &Lock + + + + Lock wallet + Portafoglio con serratura + + + + &Debug window + Finestra di debug + + + + Open debugging and diagnostic console + Aprire la console di debug e diagnostica + + + + &File + &File + + + + &Settings + &Impostazioni + + + + &Help + &Aiuto + + + + Wallet + Portamonete + + + + + [testnet] + [testnet] + + + + %n active connection(s) to Alias network + %n connessioni attive alla rete Alias%n connessioni attive alla rete Alias + + + + block + blocco + + + + header + intestazione + + + + blocks + blocca + + + + headers + intestazioni + + + + + Synchronizing with network... + Sincronizzazione con la rete... + + + + Downloading filtered blocks... + Scaricare i blocchi filtrati... + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + + Importing blocks... + Importare i blocchi... + + + + ~%n block(s) remaining + %n blocchi rimanenti%n blocchi rimanenti + + + + Imported %1 of %2 %3 of transaction history (%4% done). + Importato %1 di %2 %3 della storia delle transazioni (%4% fatto). + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + Scaricato %1 di %2 %3 della storia delle transazioni (%4% fatto). + + + + Imported %n block(s) of transaction history. + Importati %n blocchi di storia delle transazioni.Importati %n blocchi di storia delle transazioni. + + + + Downloaded %n block(s) of transaction history. + Scaricato %n blocchi di storia delle transazioni.Scaricato %n blocchi di storia delle transazioni. + + + + %n second(s) ago + %n secondi fa%n secondi fa + + + + %n minute(s) ago + %n minuti fa%n minuti fa + + + + %n hour(s) ago + %n ore fa%n ore fa + + + + %n day(s) ago + %n giorni fa%n giorni fa + + + + Up to date + Fino ad oggi + + + + Catching up... + Recupero... + + + + Last received %1 was generated %2. + L'ultima ricevuta %1 è stata generata %2. + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + Per elaborare questa transazione, sarà addebitata una tassa di %1 per sostenere la rete. Vuoi inviare la transazione? + + + + Confirm transaction fee + Conferma la tassa di transazione + + + + %1 %2 + %1 %2 + + + + Address: %1 +Note: %2 + + Indirizzo: %1 +Nota: %2 + + + + + Address: %1 + + Indirizzo: %1 + + + + + + URI handling + Gestione degli URI + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + L'URI non può essere analizzato! Questo può essere causato da un indirizzo Alias non valido o da parametri URI malformati. + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + Il portamonete è<b> criptato</b> e attualmente <b>sbloccato </b>solo per le puntate + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Il portamonete è <b>criptato</b> e attualmente<b> sbloccato</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Il portafoglio è<b> criptato </b>e attualmente <b>bloccato</b> + + + + Backup Wallet + Crea un backup del portamonete + + + + Wallet Data (*.dat) + Dati del portafoglio (*.dat) + + + + Backup Failed + Backup non riuscito + + + + There was an error trying to save the wallet data to the new location. + C'è stato un errore nel tentativo di salvare i dati del portafoglio nella nuova posizione. + + + + Lock Wallet + Portafoglio con serratura + + + + Error: Wallet must first be encrypted to be locked. + Errore: Il portafoglio deve essere prima criptato per essere bloccato. + + + + %1 second(s) + %1 secondo(i) + + + + %1 minute(s), %2 second(s) + %1 minuto(i), %2 secondo(i) + + + + %1 hour(s), %2 minute(s) + %1 ora(e), %2 minuti(e) + + + + %1 day(s), %2 hour(s) + %1 giorno(i), %2 ora(e) + + + + (last 72 blocks %1) + (ultimi 72 blocchi %1) + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + Il tuo peso è %1Peso della rete è %2%3A Tempo medio tra le ricompense è %4 + + + + Not staking because wallet is in thin mode + Non picchettare perché il portafoglio è in modalità sottile + + + + Not staking, staking is disabled + Non picchettare, la picchettazione è disabilitata + + + + Not staking because wallet is locked + Staking inattivo perché il portamonete è bloccato + + + + Not staking because wallet is offline + Non si punta perché il portafoglio è offline + + + + Not staking because wallet is syncing + Non picchettare perché il portafoglio si sta sincronizzando + + + + Initializing staking... + Inizializzazione del picchettamento... + + + + Not staking because you don't have mature coins + Non picchettare perché non hai monete mature + + + + Not staking + Non picchettare + + + + TrafficGraphWidget + + + KB/s + KB/s + + + + TransactionDesc + + + Open for %n block(s) + Aperto per %n blocchiAperto per %n blocchi + + + + Open until %1 + Aperto fino a %1 + + + + conflicted + in conflitto + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/non confermato + + + + %1 confirmations + %1 conferme + + + + Transaction ID + ID della transazione + + + + Block Hash + Blocco Hash + + + + Status + Stato + + + + , has not been successfully broadcast yet + , non è stato ancora trasmesso con successo + + + + , broadcast through %n node(s) + , trasmesso attraverso %n nodi, trasmesso attraverso %n nodi + + + + Date + Data + + + + Source + Sorgente + + + + Generated + Generato + + + + + Credit + Credito + + + + matures in %n more block(s) + matura in %n più blocchimatura in %n più blocchi + + + + not accepted + non accettate + + + + Transaction fee + Commissione transazione + + + + Net amount + Importo netto + + + + Message + Messaggio + + + + Comment + Commento + + + + Comment-To + Commento a + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Le monete generate devono maturare 450 blocchi prima di poter essere spese. Quando hai generato questo blocco, è stato trasmesso alla rete per essere aggiunto alla catena dei blocchi. Se non riesce ad entrare nella catena, il suo stato cambierà in "non accettato" e non sarà spendibile. Questo può accadere occasionalmente se un altro nodo genera un blocco entro pochi secondi dal tuo. + + + + Debug information + Informazione di debug + + + + Debit + Debito + + + + Transaction + Transazione + + + + Inputs + Input + + + + Amount + Importo + + + + true + vero + + + + false + falso + + + + + Converted + Convertito + + + + from public to private + da pubblico a privato + + + + from private to public + da privato a pubblico + + + + Address + Indirizzo + + + + + Note + Notizia + + + + unknown + sconosciuto + + + + <dd> + <dd> + + + + TransactionDescDialog + + + Transaction details + Dettagli sulla transazione + + + + This pane shows a detailed description of the transaction + Questo pannello mostra una descrizione dettagliata della transazione + + + + TransactionTableModel + + + Date + Data + + + + Type + Tipo + + + + Address + Indirizzo + + + + Note + Notizia + + + + Amount + Importo + + + + Open for %n more block(s) + Aperto per %n più blocchiAperto per %n più blocchi + + + + Open until %1 + Aperto fino a %1 + + + + Offline + Offline + + + + Unconfirmed + Non confermato: + + + + Confirming (%1 of %2 required confirmations) + Conferma (%1 di %2 conferme richieste) + + + + Confirming (%1 of %2 recommended confirmations) + In conferma (%1 di %2 conferme raccomandate) + + + + Confirmed (%1 confirmations) + Confermato (%1 conferme) + + + + Conflicted + In conflitto + + + + Immature (%1 confirmations, will be available after %2) + Immaturo (%1 conferme, sarà disponibile fra %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + Puntata orfana %1, il blocco non è stato ricevuto da nessun altro nodo e probabilmente non sarà accettato! + + + + Orphan %1 stake, someone else submitted the block before you. + Puntata orfana %1, qualcun altro ha inviato il blocco prima di te. + + + + (n/a) + (N / a) + + + + Transaction status. Hover over this field to show number of confirmations. + Stato della transazione. Passare con il mouse su questo campo per vedere il numero di conferme. + + + + Date and time that the transaction was received. + Data e ora in cui la transazione è stata ricevuta. + + + + Type of transaction. + Tipo di transazione. + + + + Destination address of transaction. + Indirizzo di destinazione della transazione. + + + + Amount removed from or added to balance. + Importo rimosso o aggiunto al saldo. + + + + WalletModel + + + + Sending... + Inviando... + + + + alias-bridge + + + Overview + Panoramica + + + + Wallet + Portamonete + + + + Send + Invia + + + + Receive + Ricevi + + + + Transactions + Transazioni + + + + Address Book + Rubrica + + + + Options + Opzioni + + + + Advanced + Avanzato + + + + Backup Wallet + Crea un backup del portamonete + + + + Encrypt Wallet + Crittografare il portafoglio + + + + Change Passphrase + Cambiare la passphrase + + + + (Un)lock Wallet + (Dis)bloccare il portafoglio + + + + Tools + Strumenti + + + + Chain Data + Dati della catena + + + + Block Explorer + Esploratore di blocchi + + + + Sign Message + Segno del messaggio + + + + Verify Message + Verifica messaggio + + + + Debug + Debug + + + + About Alias + Cosa è Alias + + + + About QT + Informazioni su QT + + + + QR code + Codice QR + + + + Address: + Indirizzo: + + + + Label: + Etichetta: + + + + Amount: + Importo: + + + + Add new receive address + Aggiungere un nuovo indirizzo di ricezione + + + + Add Address + Aggiungi indirizzo + + + + Add a new contact + Aggiungere un nuovo contatto + + + + Address Lookup + Ricerca dell'indirizzo + + + + Address Type + Tipo di indirizzo + + + + Stealth + Stealth + + + + Group + Gruppo + + + + BIP32 + BIP32 + + + + Label + Etichetta + + + + Address + Indirizzo + + + + Public Key + Chiave pubblica + + + + Transaction Hash + Hash della transazione + + + + Recent Transactions + Transazioni recenti + + + + Coin Control + Coin Control + + + + Make payment + Effettuare il pagamento + + + + Balance transfer + Trasferimento del saldo + + + + Select Inputs + Seleziona gli ingressi + + + + Automatically selected + Selezionato automaticamente + + + + Quantity: + Quantità: + + + + Fee: + Commissione: + + + + After Fee: + Dopo Commissione: + + + + Bytes: + Byte: + + + + Priority: + Priorità: + + + + LowOutput: + Basso rendimento: + + + + Change: + Resto: + + + + Custom change address + Cambiamento di indirizzo personalizzato + + + + From account + Dal conto + + + + PUBLIC + PUBBLICO + + + + PRIVATE + PRIVATO + + + + Balance: + Saldo: + + + + Ring Size: + Misura dell'anello: + + + + To account + Per rendere conto + + + + Pay to + Paga a + + + + (no label) + (nessuna etichetta) + + + + Master + Master + + + + Wallet is encrypted and currently locked + Il portafoglio è criptato e attualmente bloccato + + + + Not staking because wallet is locked + Staking inattivo perché il portamonete è bloccato + + + + 0 active connection(s) to Alias network + 0 connessionei attiva(e) alla rete Alias + + + + Enter a label for this address to add it to your address book + Inserisci un'etichetta per questo indirizzo per aggiungerlo alla tua rubrica + + + + Enter a address to add it to your address book + Inserisci un indirizzo per aggiungerlo alla tua rubrica + + + + Inputs + Input + + + + Values + Valori + + + + Outputs + Uscite + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Inserisci un indirizzo Alias con cui firmare il messaggio (ad esempio SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to sign + Inserisci il messaggio che vuoi firmare + + + + Click sign message to generate signature + Clicca su firma messaggio per generare la firma + + + + Copy the signed message signature + Copiare la firma del messaggio firmato + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Inserisci un indirizzo Alias con cui verificare il messaggio (ad esempio SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to verify + Inserisci il messaggio che vuoi verificare + + + + Enter a Alias signature + Inserisci una firma Alias + + + + Paste signature from clipboard + Incolla la firma dagli appunti + + + + Your total balance + Il tuo saldo totale + + + + Recent in/out transactions or stakes + Recenti transazioni in/out o partecipazioni + + + + Select inputs to spend + Seleziona gli ingressi da spendere + + + + Optional address to receive transaction change + Indirizzo opzionale per ricevere il cambio di transazione + + + + Choose from address book + Scegliere dalla rubrica + + + + Paste address from clipboard + Incolla l'indirizzo dagli appunti + + + + Remove this recipient + Rimuovi questo destinatario + + + + Send from public or private + Invia da pubblico o privato + + + + Current spendable send payment balance + Saldo di pagamento spendibile attuale + + + + Send to public or private + Invia al pubblico o al privato + + + + Current spendable balance to account + Saldo corrente spendibile sul conto + + + + The label for this address + L'etichetta di questo indirizzo + + + + Amount to transfer + Importo da trasferire + + + + Send to multiple recipients at once + Invia a più destinatari contemporaneamente + + + + Date and time that the transaction was received. + Data e ora in cui la transazione è stata ricevuta. + + + + Transaction status. Hover over this field to show number of confirmations. + Stato della transazione. Passare con il mouse su questo campo per vedere il numero di conferme. + + + + Type of transaction. + Tipo di transazione. + + + + Destination address of transaction. + Indirizzo di destinazione della transazione. + + + + Short payment note. + Breve nota di pagamento. + + + + Amount removed from or added to balance. + Importo rimosso o aggiunto al saldo. + + + + Name for this Wallet + Nome per questo portafoglio + + + + Enter a password + Inserisci una password + + + + Would you like to create a bip44 path? + Volete creare un percorso bip44? + + + + Your recovery phrase (Keep this safe!) + La tua frase di recupero (Tienila al sicuro!) + + + + Recovery Phrase + Frase di recupero + + + + Wallet Name for recovered account + Nome del portafoglio per l'account recuperato + + + + Enter the password for the wallet you are trying to recover + Inserisci una password per il portamonete che stai provando a recuperare. + + + + Is this a bip44 path? + È un percorso bip44? + + + + ID + ID + + + + Created + Creato + + + + Active Account + Conto attivo + + + + Default + Default + + + + Path + Percorso + + + + Active + Attivo + + + + Amount + Importo + + + + Note + Notizia + + + + Public coins, visible on blockchain + Monete pubbliche, visibili sulla blockchain + + + + Private coins, untraceable and unlinkable on blockchain + Monete private, non rintracciabili e non collegabili su blockchain + + + + Available coins for spending + Monete disponibili per la spesa + + + + Reserved coins are not used for staking + Le monete riservate non sono usate per la puntata + + + + Staked coins must mature before they can be accessed + Le monete puntate devono maturare prima di potervi accedere + + + + Stake + Paletto + + + + Sub-Wallets + Sottoportafogli + + + + Start Alias on system login + Avviare Alias al login del sistema + + + + Detach databases at shutdown + Staccare i database allo spegnimento + + + + Pay transaction fee + Paga la tassa di transazione + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + Tassa di transazione per kB. Una tassa più alta assicura che le tue transazioni siano processate velocemente in tempi di alto volume di transazioni. + + + + Most transactions are 1kB. The minimal fee is 0.0001 + La maggior parte delle transazioni sono 1kB. La tassa minima è 0,0001 + + + + Enable Staking + Abilitare il picchettamento + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + Abilita o disabilita il processo di picchettamento. Se il tuo portafoglio è criptato, dovrai sbloccarlo per la palificazione. + + + + Staking Donation + Donazione di pali + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + Ogni sesto blocco sulla blockchain è un blocco di contributo allo sviluppo (DCB). Le ricompense di puntata dei DCB sono contribuite al fondo di sviluppo indipendentemente dall'impostazione della percentuale di donazione. Sentiti libero di donare ulteriormente dalle tue rimanenti ricompense di puntata definendo una possibilità di donazione. Grazie. + + + + Reserve + Riserva + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + L'importo riservato non partecipa alla puntata ed è quindi spendibile in qualsiasi momento. + + + + Minimum Stake Interval + Intervallo minimo tra i pali + + + + Main + Principale + + + + Window + Finestra + + + + Display + Visualizza + + + + Minimize to the tray instead of the taskbar + Ridurre a icona nel vassoio invece che nella barra delle applicazioni + + + + Minimize on close + Ridurre al minimo alla chiusura + + + + User Interface language + Lingua dell'interfaccia utente + + + + Unit to show amounts in + Unità per mostrare gli importi in + + + + Rows per page + Righe per pagina + + + + Display addresses in transaction list + Visualizzare gli indirizzi nell'elenco delle transazioni + + + + Notifications + Notifiche + + + + Visible Transaction Types + Tipi di transazione visibili + + + + Cancel + Cancella + + + + Apply + Applica + + + + Ok + Ok + + + + Reserved + Riservato + + + + Unconfirmed + Non confermato + + + + Immature + Immaturo + + + + Type + Tipo + + + + Date + Data + + + + Send Payment + Invia pagamento + + + + The address to send the payment to + L'indirizzo a cui inviare il pagamento + + + + Enter a label for this address + Inserisci un'etichetta per questo indirizzo + + + + Add Sub-Wallet + Aggiungi Sub-Portafoglio + + + + Immature generated coins with Proof-of-Work + Monete generate immature con Proof-of-Work + + + + Blockchain Info + Blockchain Info + + + + Checking wallet state with network + Controllo dello stato del portafoglio con la rete + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + ALIAS pubblico richiede 1 conferma <br>ALIAS privato richiede 10 conferme + + + + Total Balance + Totale Saldo + + + + Balance + Saldo + + + + Available + Disponibile + + + + Public + Pubblico + + + + Private + Privato + + + + Tor+OBFS4 connection online + Connessione Tor+OBFS4 online + + + + Wallet Encryption + Cifratura del portamonete + + + + A short reference for the recipient (max 24 characters) + Un breve riferimento per il destinatario (max 24 caratteri) + + + + ALIAS Denomination Value + Valore della denominazione ALIAS + + + + No. Owned (* = Immature) + No. posseduto (* = Immaturo) + + + + No. System Unspent (* = Immature) + No. Sistema non speso (* = Immaturo) + + + + No. available Mixins (* = Immature) + No. Mixins disponibili (* = Immaturo) + + + + No. System (** = Compromised) + No. Sistema (** = Compromesso) + + + + The last block a coin of this denomination was created + L'ultimo blocco di una moneta di questo taglio è stato creato + + + + Owned (*) + Proprietà (*) + + + + Unspent (*) + Non speso (*) + + + + Mixins (*) + Mixins (*) + + + + System (**) + Sistema (**) + + + + Least Depth + Minima profondità + + + + Value Out + Valore fuori + + + + Value + Valore + + + + Addressbook + Rubrica + + + + Refresh + Aggiorna + + + + Hash + Hash + + + + Height + Altezza + + + + Timestamp + Timestamp + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + Inserisci un indirizzo Alias (ad esempio SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + An address label for the payment senders address book + Un'etichetta per la rubrica del mittente del pagamento + + + + Enter a short note to send with a payment (max 24 characters) + Inserisca una breve nota da inviare con un pagamento (massimo 24 caratteri) + + + + Filter by label or address... + Filtra per etichetta o indirizzo... + + + + Note to send with payment (max 24 characters) + Nota da inviare con il pagamento (max 24 caratteri) + + + + The private address to transfer the balance to + L'indirizzo privato a cui trasferire il saldo + + + + Search by label or address + Cerca per etichetta o indirizzo + + + + Search + Cerca + + + + Family vacation funds + Fondi per le vacanze in famiglia + + + + + Grouping will consolidate transactions of chosen + Il raggruppamento consoliderà le transazioni di scelte + + + + Reset form + Azzerare il modulo + + + + Restore Sub-Wallet + Ripristinare il sottoportafoglio + + + + Filter outputs + Uscite filtro + + + + Find Block by hash/height/transaction + Trova il blocco per hash/height/transaction + + + + alias-core + + + To use the %s option + Per usare l'opzione %s + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + %s, devi impostare una rpcpassword nel file di configurazione: +%s +Si raccomanda di usare la seguente password casuale: +rpcuser=aliasrpc +rpcpassword=%s +(non è necessario ricordare questa password) +Il nome utente e la password NON DEVONO essere gli stessi. +Se il file non esiste, createlo con permessi di sola lettura del proprietario. +Si raccomanda anche di impostare alertnotify in modo da essere avvisati dei problemi; +per esempio: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + Error + Errore + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + Si è verificato un errore durante l'impostazione della porta RPC %u per l'ascolto su IPv6, tornando a IPv4: %s + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + Si è verificato un errore durante l'impostazione della porta RPC %u per l'ascolto su IPv4: %s + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + Dovete impostare rpcpassword= <password>nel file di configurazione: +%s +Se il file non esiste, crealo con permessi di sola lettura del proprietario. + + + + Alias version + Versione alias + + + + Usage: + Utilizzo: + + + + Send command to -server or aliaswalletd + Invia il comando a -server o aliaswalletd + + + + List commands + Comandi dell'elenco + + + + Get help for a command + Ottenere aiuto per un comando + + + + Alias + Alias + + + + Options: + Opzioni: + + + + This help message + Questo messaggio di aiuto + + + + Specify configuration file (default: alias.conf) + Specificare il file di configurazione (predefinito: alias.conf) + + + + Specify pid file (default: alias.pid) + Specificare il file pid (predefinito: alias.pid) + + + + Specify data directory + Specificare la directory dei dati + + + + Specify wallet file (within data directory) + Specificare il file del portafoglio (nella directory dei dati) + + + + Set database cache size in megabytes (default: 25) + Imposta la dimensione della cache del database in megabyte (predefinito: 25) + + + + Set database disk log size in megabytes (default: 100) + Imposta la dimensione del log del disco del database in megabyte (predefinito: 100) + + + + Specify connection timeout in milliseconds (default: 5000) + Specificare il timeout della connessione in millisecondi (predefinito: 5000) + + + + Connect through socks proxy + Connettersi attraverso socks proxy + + + + Select the version of socks proxy to use (4-5, default: 5) + Selezionare la versione di socks proxy da usare (4-5, predefinito: 5) + + + + Use proxy to reach tor hidden services (default: same as -proxy) + Usa il proxy per raggiungere i servizi nascosti di tor (predefinito: lo stesso di -proxy) + + + + Allow DNS lookups for -addnode, -seednode and -connect + Permettere le ricerche DNS per -addnode, -seednode e -connect + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + Ascolta le connessioni su<port> (predefinito: 37347 o testnet: 37111) + + + + Maintain at most <n> connections to peers (default: 125) + Mantenere al massimo<n> le connessioni con i peer (predefinito: 125) + + + + Add a node to connect to and attempt to keep the connection open + Aggiungere un nodo a cui connettersi e tentare di mantenere aperta la connessione + + + + Connect only to the specified node(s) + Connettersi solo al nodo(i) specificati + + + + Connect to a node to retrieve peer addresses, and disconnect + Connettersi a un nodo per recuperare gli indirizzi dei peer e disconnettersi + + + + Specify your own public address + Specificare il proprio indirizzo pubblico + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Si connette solo ai nodi della rete<net> (IPv4, IPv6 o Tor) + + + + Discover own IP address (default: 1 when listening and no -externalip) + Scoprire il proprio indirizzo IP (predefinito: 1 in ascolto e nessun -externalip) + + + + Find peers using internet relay chat (default: 0) + Trova i pari che usano internet relay chat (predefinito: 0) + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Accetta connessioni dall'esterno (predefinito: 1 se non ci sono -proxy o -connect) + + + + Bind to given address. Use [host]:port notation for IPv6 + Si lega all'indirizzo dato. Usa la notazione [host]:port per IPv6 + + + + Find peers using DNS lookup (default: 1) + Trova i peer usando la ricerca DNS (predefinito: 1) + + + + Stake your coins to support network and gain reward (default: 1) + Punta le tue monete per sostenere la rete e guadagnare una ricompensa (predefinito: 1) + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + Sincronizza l'ora con gli altri nodi. Disabilitare se l'ora sul tuo sistema è precisa, per esempio sincronizzando con NTP (predefinito: 1) + + + + + Sync checkpoints policy (default: strict) + Politica dei punti di controllo della sincronizzazione (predefinito: rigoroso) + + + + Threshold for disconnecting misbehaving peers (default: 100) + Soglia per disconnettere i peer che si comportano male (predefinito: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Numero di secondi per impedire ai peer che si comportano male di ricollegarsi (predefinito: 86400) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Buffer di ricezione massimo per connessione,<n> *1000 byte (predefinito: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Buffer di invio massimo per connessione, <n>*1000 byte (predefinito: 1000) + + + + Use UPnP to map the listening port (default: 1 when listening) + Utilizzare UPnP per mappare la porta di ascolto (predefinito: 1 in ascolto) + + + + Use UPnP to map the listening port (default: 0) + Utilizzare UPnP per mappare la porta di ascolto (predefinito: 0) + + + + Detach block and address databases. Increases shutdown time (default: 0) + Stacca i database dei blocchi e degli indirizzi. Aumenta il tempo di spegnimento (predefinito: 0) + + + + Fee per KB to add to transactions you send + Tassa per KB da aggiungere alle transazioni inviate + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + Quando si creano le transazioni, ignorare gli input con un valore inferiore a questo (predefinito: 0,01) + + + + Accept command line and JSON-RPC commands + Accetta comandi da linea di comando e JSON-RPC + + + + Run in the background as a daemon and accept commands + Eseguire in background come demone e accettare comandi + + + + Use the test network + Utilizzare la rete di prova + + + + Output extra debugging information. Implies all other -debug* options + Emette informazioni extra di debug. Implica tutte le altre opzioni -debug*. + + + + Output extra network debugging information + Emettere informazioni extra sul debug della rete + + + + Prepend debug output with timestamp + Prependere l'output di debug con il timestamp + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Restringe il file debug.log all'avvio del client (predefinito: 1 quando non c'è -debug) + + + + Send trace/debug info to console instead of debug.log file + Invia le informazioni di tracciamento/debug alla console invece che al file debug.log + + + + Send trace/debug info to debugger + Inviare informazioni di traccia/debug al debugger + + + + Username for JSON-RPC connections + Nome utente per connessioni JSON-RPC + + + + Password for JSON-RPC connections + Password per connessioni JSON-RPC + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + Ascolta le connessioni JSON-RPC su<port> (predefinito: 36657 o testnet: 36757) + + + + Allow JSON-RPC connections from specified IP address + Permettere connessioni JSON-RPC da un indirizzo IP specificato + + + + Send commands to node running on <ip> (default: 127.0.0.1) + Invia i comandi al nodo in esecuzione su<ip> (predefinito: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Eseguire il comando quando il blocco migliore cambia (%s in cmd è sostituito dall'hash del blocco) + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Eseguire il comando quando una transazione del portafoglio cambia (%s in cmd è sostituito da TxID) + + + + Require a confirmations for change (default: 0) + Richiedere una conferma per il cambiamento (predefinito: 0) + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + Impone agli script di transazione di usare operatori PUSH canonici (predefinito: 1) + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + Eseguire il comando quando si riceve un avviso pertinente (%s in cmd è sostituito dal messaggio) + + + + Upgrade wallet to latest format + Aggiornare il portafoglio all'ultimo formato + + + + Set key pool size to <n> (default: 100) + Impostare la dimensione del pool di chiavi a<n> (predefinito: 100) + + + + Rescan the block chain for missing wallet transactions + Ricontrolla la catena dei blocchi per le transazioni mancanti del portafoglio + + + + Attempt to recover private keys from a corrupt wallet.dat + Tentare di recuperare le chiavi private da un wallet.dat corrotto + + + + How many blocks to check at startup (default: 2500, 0 = all) + Quanti blocchi controllare all'avvio (predefinito: 2500, 0 = tutti) + + + + How thorough the block verification is (0-6, default: 1) + Quanto è approfondita la verifica dei blocchi (0-6, predefinito: 1) + + + + Imports blocks from external blk000?.dat file + Importa blocchi da un file esterno blk000?.dat + + + + Block creation options: + Opzioni di creazione dei blocchi: + + + + Set minimum block size in bytes (default: 0) + Imposta la dimensione minima del blocco in byte (predefinito: 0) + + + + Set maximum block size in bytes (default: 250000) + Imposta la dimensione massima del blocco in byte (predefinito: 250000) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Imposta la dimensione massima delle transazioni ad alta priorità/bassa tariffa in byte (predefinito: 27000) + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + Opzioni SSL: (vedere la Wiki di Bitcoin per le istruzioni di configurazione SSL) + + + + Use OpenSSL (https) for JSON-RPC connections + Utilizzare OpenSSL (https) per le connessioni JSON-RPC + + + + Server certificate file (default: server.cert) + File del certificato del server (predefinito: server.cert) + + + + Server private key (default: server.pem) + Chiave privata del server (predefinito: server.pem) + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + Cifre accettabili (predefinito: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + Invalid amount for -paytxfee=<amount>: '%s' + Importo non valido per -paytxfee=: '%s' + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Attenzione: -paytxfee è impostato molto alto! Questa è la tassa di transazione che pagherai se invii una transazione. + + + + Invalid amount for -mininput=<amount>: '%s' + Quantità non valida per -mininput=<amount>: '%s' + + + + Wallet %s resides outside data directory %s. + Il portafoglio %s risiede fuori dalla directory dei dati %s. + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + Impossibile ottenere un blocco sulla directory dei dati %s. Probabilmente l'alias è già in esecuzione. + + + + Verifying database integrity... + Verifica dell'integrità del database... + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + Errore nell'inizializzazione dell'ambiente del database %s! Per recuperare, fai un BACKUP DI QUELLA DIRECTORY, poi rimuovi tutto da essa tranne wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Attenzione: wallet.dat corrotto, dati recuperati! Il wallet.dat originale è stato salvato come wallet.{timestamp}.bak in %s; se il tuo saldo o le transazioni non sono corrette dovresti ripristinare da un backup. + + + + wallet.dat corrupt, salvage failed + wallet.dat corrotto, salvataggio fallito + + + + Unknown -socks proxy version requested: %i + Versione sconosciuta del proxy -socks richiesta: %i + + + + Unknown network specified in -onlynet: '%s' + Rete sconosciuta specificata in -onlynet: '%s' + + + + Invalid -proxy address: '%s' + Indirizzo -proxy non valido: '%s' + + + + Invalid -tor address: '%s' + Indirizzo -tor non valido: '%s' + + + + Cannot resolve -bind address: '%s' + Impossibile risolvere l'indirizzo -bind: '%s' + + + + Failed to listen on any port. + Fallito l'ascolto su qualsiasi porta. + + + + Failed to listen on any port. Use -listen=0 if you want this. + Fallito l'ascolto su qualsiasi porta. Usate -listen=0 se volete questo. + + + + Cannot resolve -externalip address: '%s' + Impossibile risolvere l'indirizzo -externalip: '%s' + + + + Invalid amount for -reservebalance=<amount> + Importo non valido per -reservebalance=<amount> + + + + Unable to sign checkpoint, wrong checkpointkey? + + Impossibile firmare il checkpoint, checkpointkey sbagliata? + + + + + Loading block index... + Caricamento indice di blocco... + + + + Error loading blk0001.dat + Errore nel caricamento di blk0001.dat + + + + Loading wallet... + Caricamento del portafoglio... + + + + Error loading wallet.dat: Wallet corrupted + Errore nel caricamento di wallet.dat: Portafoglio corrotto + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Attenzione: errore nella lettura di wallet.dat! Tutte le chiavi sono state lette correttamente, ma i dati delle transazioni o le voci della rubrica potrebbero essere mancanti o errati. + + + + Error loading wallet.dat: Wallet requires newer version of Alias + Errore nel caricamento di wallet.dat: Il portafoglio richiede una versione più recente di Alias + + + + Wallet needed to be rewritten: restart Alias to complete + Il portafoglio doveva essere riscritto: riavviare Alias per completare + + + + Error loading wallet.dat + Errore nel caricamento di wallet.dat + + + + Cannot downgrade wallet + Impossibile declassare il portafoglio + + + + Cannot initialize keypool + Impossibile inizializzare il pool di chiavi + + + + Cannot write default address + Impossibile scrivere l'indirizzo predefinito + + + + Rescanning... + Scansione... + + + + Importing blockchain data file. + Importazione del file di dati blockchain. + + + + Importing bootstrap blockchain data file. + Importazione del file di dati blockchain di bootstrap. + + + + Loading addresses... + Caricamento degli indirizzi... + + + + Error: could not start node + Errore: impossibile avviare il nodo + + + + Done loading + Caricamento completato + + + + Unable to bind to %s on this computer. Alias is probably already running. + Impossibile collegarsi a %s su questo computer. Probabilmente Alias è già in esecuzione. + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Impossibile collegarsi a %s su questo computer (il collegamento ha restituito l'errore %d, %s) + + + + Error: Wallet locked, unable to create transaction + Errore: Portafoglio bloccato, impossibile creare la transazione + + + + Error: Wallet unlocked for staking only, unable to create transaction. + Errore: Portafoglio sbloccato solo per le puntate, impossibile creare una transazione. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + Errore: Questa transazione richiede una tassa di transazione di almeno %s a causa del suo importo, della sua complessità o dell'uso di fondi ricevuti di recente + + + + Error: Transaction creation failed + Errore: Creazione transazione fallita + + + + Sending... + Inviando... + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Errore: La transazione è stata rifiutata. Questo potrebbe accadere se alcune delle monete nel tuo portafoglio sono già state spese, ad esempio se hai usato una copia di wallet.dat e le monete sono state spese nella copia ma non segnate come spese qui. + + + + Invalid amount + Importo non valido + + + + Insufficient funds + Fondi insufficienti + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + Attenzione: Controlla che la data e l'ora del tuo computer siano corrette! Se il tuo orologio è sbagliato Alias non funzionerà correttamente. + + + + Warning: This version is obsolete, upgrade required! + Attenzione: Questa versione è obsoleta, è necessario un aggiornamento! + + + + WARNING: syncronized checkpoint violation detected, but skipped! + ATTENZIONE: violazione del checkpoint sincronizzato rilevata, ma saltata! + + + + Warning: Disk space is low! + Attenzione: Lo spazio su disco è basso! + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + ATTENZIONE: trovato un checkpoint non valido! Le transazioni visualizzate potrebbero non essere corrette! Potrebbe essere necessario aggiornare o avvisare gli sviluppatori. + + + + Read ATXOs... (%d) + Leggere gli ATXO... (%d) + + + + Read spent ATXOs... (%d) + Leggere gli ATXO spesi... (%d) + + + + Note must be 24 characters or less. + La nota deve essere di 24 caratteri o meno. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Errore: La transazione è stata rigettata. Ciò può succedere se alcuni coins nel tuo portamonete sono già stati spesi, p. e. se copi la wallet.dat e alcuni coins sono stati spesi li ma non in questo portamonete attuale. + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + Errore: Trovato argomento -socks non supportato. L'impostazione della versione SOCKS non è più possibile, solo i proxy SOCKS5 sono supportati. + + + + Initialization sanity check failed. Alias is shutting down. + Controllo di sanità dell'inizializzazione fallito. Alias si sta spegnendo. + + + + Loading block index... (%d) + Caricamento indice di blocco... (%d) + + + + Calculating chain trust... (%d) + Calcolo della fiducia della catena... (%d) + + + + Validating last %d block... + Convalida dell'ultimo blocco %d... + + + + -bip44key is not allowed if wallet.dat already exists + -bip44key non è consentito se wallet.dat esiste già + + + + Cannot resolve binding address: '%s' + Impossibile risolvere l'indirizzo di binding: '%s' + + + + Error: could not start tor node + Errore: impossibile avviare il nodo tor + + + + Timed out waiting for onion hostname. + Timed out in attesa di onion hostname. + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + Errore nel caricamento di blk0001.dat: rilevata una catena non valida, per favore risincronizza o usa i file di bootstrap. + + + + Loading wallet items... (%d) + Caricamento degli elementi del portafoglio... (%d) + + + + Reindexing from blk000?.dat files. + Reindicizzazione dai file blk000?.dat. + + + + Reindexing block... (%d) + Reindicizzazione del blocco... (%d) + + + + Core started! + Nucleo iniziato! + + + + Use tor hidden services version 2 instead of version 3 + Utilizzare i servizi nascosti di tor versione 2 invece della versione 3 + + + + Find peers using .onion seeds (default: 1 unless -connect) + Trova i peer usando i semi .onion (predefinito: 1 a meno che -connect) + + + + Minimum time in seconds between successful stakes (default: 30) + Tempo minimo in secondi tra le puntate di successo (predefinito: 30) + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + Percentuale delle ricompense delle puntate da donare agli sviluppatori (tra 0 e 100 incluso, default 5) + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + Millisecondi tra i tentativi di puntata. Abbassando questo parametro non ci saranno più puntate. (predefinito: 500) + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + Numero di secondi per impedire ai peer bannati di riconnettersi (predefinito: 3600) + + + + Simple command line interface - if not run as daemon + Semplice interfaccia a riga di comando - se non viene eseguito come demone + + + + Output extra blockchain debugging information + Emettere informazioni extra di debug della blockchain + + + + Output extra Proof of Stake debugging information + Emettere informazioni extra di debug della prova del palo + + + + Send trace/debug info to debug.log file + Invia le informazioni di tracciamento/debug al file debug.log + + + + Wait for RPC server to start + Attendere l'avvio del server RPC + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + Mantiene al massimo<n> MiB di blocchi non collegabili in memoria (predefinito: %u) + + + + Rebuild block chain index from current blk000?.dat files on startup + Ricostruire l'indice della catena a blocchi dai file blk000?.dat correnti all'avvio + + + + Show version and exit + Mostrare la versione e uscire + + + + Thin options: + Opzioni sottili: + + + + Operate in less secure, less resource hungry 'thin' mode + Operare in modalità "sottile" meno sicura e meno affamata di risorse + + + + Keep the entire block index in memory. (default: 0) + Mantiene l'intero indice del blocco in memoria. (predefinito: 0) + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + Quando non è thinfullindex, il numero massimo di intestazioni di blocco da tenere in memoria. (predefinito: 4096) + + + + Disable supporting thin nodes. (default: 0) + Disabilita il supporto ai nodi sottili. (predefinito: 0) + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + Disabilita l'inoltro o la richiesta di tutti gli stealth txn. (predefinito: 0) + + + + Don't connect to more than <n> thin peers (default: 8) + Non connettersi a più di<n> thin peer (predefinito: 8) + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Cifre accettabili (predefinito: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + conn + conn + + + + Error: Wallet locked, unable to create transaction. + Errore: Portafoglio bloccato, impossibile creare la transazione. + + + + Error: Must be in full mode. + Errore: Deve essere in modalità completa. + + + + Error: Block chain must be fully synced first. + Errore: La catena a blocchi deve essere completamente sincronizzata prima. + + + + Error: Alias is not connected! + Errore: L'alias non è collegato! + + + + Update balance... + Aggiornare l'equilibrio... + + + + ...Start UI... + ...Inizio UI... + + + + Shutdown... + Spegnimento... + + + \ No newline at end of file diff --git a/src/qt/locale/alias_ja.ts b/src/qt/locale/alias_ja.ts new file mode 100644 index 0000000000..746d4f3ffe --- /dev/null +++ b/src/qt/locale/alias_ja.ts @@ -0,0 +1,4304 @@ + + + AboutDialog + + + About Alias + シャドーコインについて + + + + <b>Alias</b> version + <b>シャドーコイン</b>バージョン + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + ラベル + + + + Address + アドレス + + + + pubkey + パブリックキー + + + + stealth + ステルス + + + + (no label) + (ラベル無し) + + + + Stealth Address + ステルスアドレス + + + + n/a + 該当無し + + + + AskPassphraseDialog + + + Passphrase Dialog + パスフレーズ ダイアログ + + + + Enter passphrase + パスフレーズを入力 + + + + New passphrase + 新しいパスフレーズ + + + + Repeat new passphrase + 新しいパスフレーズをもう一度 + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + ユーザアカウントはハッキングされたばい、瑣末のsendmoney無効にする。機密保護には効果はない。 + + + + For staking only + 賭けるのみ + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + ウォレットの新しいパスフレーズを入力してください。<br/><b>8個以上の単語か10個以上のランダムな文字</b>を使ってください。 + + + + Encrypt wallet + ウォレットを暗号化する + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + この操作はウォレットをアンロックするためにパスフレーズが必要です。 + + + + Unlock wallet + ウォレットをアンロックする + + + + This operation needs your wallet passphrase to decrypt the wallet. + この操作はウォレットの暗号化解除のためにパスフレーズが必要です。 + + + + Decrypt wallet + ウォレットの暗号化を解除する + + + + Change passphrase + パスフレーズの変更 + + + + Enter the old and new passphrase to the wallet. + 新旧両方のパスフレーズを入力してください。 + + + + Confirm wallet encryption + ウォレットの暗号化を確認する + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + ご注意:暗号化したウォレットのパスワードを忘れたばい、b>すべてのコインを失う</b>! + + + + Are you sure you wish to encrypt your wallet? + ウォレットを暗号化、よろしいですか? + + + + + Wallet encrypted + ウォレットは暗号化されました + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + ただいま、暗号化手順を完成するため、ブラックコインQTは閉じます。尚、ウォレットを暗号化をされたにしても、PCのウイルスから盗難防止の報償できないことを、ご理解をお願い足します。 + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + 重要: 過去のウォレット ファイルのバックアップは、暗号化された新しいウォレット ファイルに取り替える必要があります。セキュリティ上の理由により、暗号化された新しいウォレットを使い始めると、暗号化されていないウォレット ファイルのバックアップはすぐに使えなくなります。 + + + + + + + Wallet encryption failed + ウォレットの暗号化に失敗しました + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + 内部エラーによりウォレットの暗号化が失敗しました。ウォレットは暗号化されませんでした。 + + + + + The supplied passphrases do not match. + パスフレーズが同じではありません。 + + + + Wallet unlock failed + ウォレットのアンロックに失敗しました + + + + + + The passphrase entered for the wallet decryption was incorrect. + ウォレットの暗号化解除のパスフレーズが正しくありません。 + + + + Wallet decryption failed + ウォレットの暗号化解除に失敗しました + + + + Wallet passphrase was successfully changed. + ウォレットのパスフレーズの変更が成功しました。 + + + + + Warning: The Caps Lock key is on! + 警告: Caps Lock キーがオンになっています! + + + + ClientModel + + + Network Alert + ネットワーク警告 + + + + CoinControlDialog + + + Coin Control + コインのコントロール + + + + Quantity: + 数量: + + + + Bytes: + バイト + + + + Amount: + 総額: + + + + Priority: + 優先: + + + + Fee: + 料金: + + + + Low Output: + アウトプット低い: + + + + After Fee: + 料金の後 + + + + Change: + お釣り: + + + + (un)select all + すべてを選択か選択を解除 + + + + Tree mode + 木モード + + + + List mode + リストモード + + + + Amount + 総額 + + + + Label + レベル + + + + Address + アドレス + + + + Date + 日付 + + + + Confirmations + 検証済みの数 + + + + Confirmed + 検証済 + + + + Priority + 優先 + + + + Copy address + アドレスをコピー + + + + Copy label + ラベルをコピー + + + + + Copy amount + 総額のコピー + + + + Copy transaction ID + 処理のIDをコピー + + + + Copy quantity + 数量をコピー + + + + Copy fee + 料金をコピー + + + + Copy after fee + 料金の後をコピー + + + + Copy bytes + バイトをコピー + + + + Copy priority + 優先をコピー + + + + Copy low output + アウトプット低いをコピー + + + + Copy change + お釣りをコピー + + + + highest + 最高 + + + + high + 高い + + + + medium-high + 中高 + + + + medium + + + + + low-medium + 中低 + + + + low + 低い + + + + lowest + 最低 + + + + + DUST + ほこり + + + + + yes + はい + + + + + no + いいえ + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + このラベルが赤くなったら、処理の大きさは10000バイトより大きいです。 + +少なくとも%1 KBあたりの料金は必要となります。 + +入力データによって、料金の+/-1 バイトが可能です。 + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + 高い優先ありの処理の方はブロックに書き込み可能性が高い。 + +このラベルは優先の設定は中より低いです。 + +少なくとも%1 KBあたりの料金は必要となります。 + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + このラベルが赤くなたら、お釣りは%1より少ない。 + +少なくとも%2の料金は必要となります。 + + + + + (no label) + (ラベル無し) + + + + change from %1 (%2) + %1 (%2)からお釣り + + + + (change) + (お釣り) + + + + EditAddressDialog + + + Edit Address + アドレスの編集 + + + + &Label + ラベル(&L) + + + + The label associated with this address book entry + このアドレス帳の入力のラベル + + + + &Address + アドレス帳 (&A) + + + + The address associated with this address book entry. This can only be modified for sending addresses. + このアドレス帳の入力のアドレス。通信アドレスした変更ができない。 + + + + &Stealth Address + ステルスアドレス + + + + New receiving address + 新しい受信アドレス + + + + New sending address + 新しい送信アドレス + + + + Edit receiving address + 受信アドレスを編集 + + + + Edit sending address + 送信アドレスを編集 + + + + The entered address "%1" is not a valid Alias address. + 入力されたアドレス "%1" 、有効なブラックコインアドレスではない。 + + + + The entered address "%1" is already in the address book. + 入力されたアドレス "%1" は既にアドレス帳にあります。 + + + + Could not unlock wallet. + ウォレットをアンロックできませんでした。 + + + + New key generation failed. + 新しいキーの生成に失敗しました。 + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + シャドー + + + + version + バージョン + + + + Usage: + 使用法 + + + + command-line options + コマンドラインのオプション + + + + UI options + UIのオプション + + + + Set language, for example "de_DE" (default: system locale) + 言語の設定、例: "de_DE" (デフォルト:システムのロケール) + + + + Start minimized + 最小化でスタート + + + + Show splash screen on startup (default: 1) + スタートでスプラッシュスクリーンを表示(デフォルト:1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + アドレス・ホストネーム + + + + User Agent + ユーザーエージエント + + + + Ping Time + Pingの時間 + + + + QObject + + + %1 d + %1 日 + + + + %1 h + %1 時 + + + + %1 m + %1 分 + + + + + %1 s + %1 秒 + + + + None + 無し + + + + N/A + 該当無し + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + シャドー ディバッグウインドー + + + + &Information + 情報 (&I) + + + + Alias Core + シャドーコアー + + + + Client name + クライアント名 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + クライアントのバージョン + + + + Using OpenSSL version + 使用中の OpenSSL のバージョン + + + + Using BerkeleyDB version + BerkeleyDB バージョンを使う + + + + Build date + ビルドの日付 + + + + Startup time + 起動した日時 + + + + Network + ネットワーク + + + + Name + 名前 + + + + Number of connections + 接続数 + + + + Block chain + ブロック チェーン + + + + Current number of blocks + 現在のブロック数 + + + + Estimated total blocks + 推定総ブロック数 + + + + Last block time + 最終ブロックの日時 + + + + Debug log file + デバッグ用ログファイル + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + 開く (&O) + + + + Command-line options + コマンドラインのオプション + + + + Show the Alias help message to get a list with possible Alias command-line options. + 可能なシャドーコマンドラインオプションのリストを取得するにはシャドーヘルプメッセージを表示します。 + + + + &Show + (&S)表示 + + + + &Console + コンソール (&C) + + + + Clear console + コンソールをクリア + + + + &Network Traffic + &ネットワークトラフィック + + + + &Clear + &クリア + + + + Totals + 会計 + + + + + In: + 内: + + + + + Out: + 外: + + + + &Peers + &ピアーズ + + + + + + Select a peer to view detailed information. + 詳細情報を表示するためにピアーを選択します。 + + + + Peer ID + ピアーID + + + + Direction + + + + + Version + バージョン + + + + User Agent + ユーザーエージエント + + + + Services + サービス + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + 上下の矢印で履歴をたどれます。 <b>Ctrl-L</b> でスクリーンを消去できます。 + + + + Type <b>help</b> for an overview of available commands. + 使用可能なコマンドを見るには <b>help</b> と入力します。 + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + KB/s + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + ユニット %1 を開く + + + + conflicted + 相違 + + + + %1/offline + %1/オフライン + + + + %1/unconfirmed + %1/未検証 + + + + %1 confirmations + %1 確認 + + + + Transaction ID + 処理のID + + + + Block Hash + + + + + Status + ステータス + + + + , has not been successfully broadcast yet + まだブロードキャストが成功していません + + + + , broadcast through %n node(s) + + + + + Date + 日付 + + + + Source + ソース + + + + Generated + 生成された + + + + + Credit + クレジット + + + + matures in %n more block(s) + + + + + not accepted + 承認されなかった + + + + Transaction fee + 処理の手数料 + + + + Net amount + 正味金額 + + + + Message + メッセージ + + + + Comment + コメント + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + デバッグ情報 + + + + Debit + 引き落とし額 + + + + Transaction + 処理 + + + + Inputs + 入力 + + + + Amount + 総額 + + + + true + 正しい + + + + false + 正しくない + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + 未確認 + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + 処理の詳細 + + + + This pane shows a detailed description of the transaction + ここでは処理の詳細を表示しています + + + + TransactionTableModel + + + Date + 日付 + + + + Type + タイプ + + + + Address + Helbidea + + + + Note + + + + + Amount + 総額 + + + + Open for %n more block(s) + + + + + Open until %1 + ユニット %1 を開く + + + + Offline + オフライン + + + + Unconfirmed + 未検証 + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + 検証最中 (%1 / %2 の進めている検証済み) + + + + Confirmed (%1 confirmations) + 検証されました (%1 検証済み) + + + + Conflicted + 相違 + + + + Immature (%1 confirmations, will be available after %2) + 未熟 (%1 検証,%2の後可用ができる) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + 処理の状況。この欄の上にカーソルを置くと検証の数を表示します。 + + + + Date and time that the transaction was received. + 処理を受信した日時。 + + + + Type of transaction. + 処理の種類。 + + + + Destination address of transaction. + 処理の宛先アドレス。 + + + + Amount removed from or added to balance. + 残高に追加または削除された総額。 + + + + WalletModel + + + + Sending... + 通信中... + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_ka.ts b/src/qt/locale/alias_ka.ts new file mode 100644 index 0000000000..7df120a490 --- /dev/null +++ b/src/qt/locale/alias_ka.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + ნიშნული + + + + Address + მისამართი + + + + pubkey + + + + + stealth + + + + + (no label) + (არ არის ნიშნული) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + ფრაზა-პაროლის დიალოგი + + + + Enter passphrase + შეიყვანეთ ფრაზა-პაროლი + + + + New passphrase + ახალი ფრაზა-პაროლი + + + + Repeat new passphrase + გაიმეორეთ ახალი ფრაზა-პაროლი + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + შეიყვანეთ საფულის ახალი ფრაზა-პაროლი.<br/>ფრაზა-პაროლი შეადგინეთ <b>არანაკლებ 10 შემთხვევითი სიმბოლოსაგან</b>, ან <b>რვა და მეტი სიტყვისაგან</b>. + + + + Encrypt wallet + საფულის დაშიფრვა + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + ეს ოპერაცია მოითხოვს თქვენი საფულის ფრაზა-პაროლს საფულის განსაბლოკად. + + + + Unlock wallet + საფულის განბლოკვა + + + + This operation needs your wallet passphrase to decrypt the wallet. + ეს ოპერაცია მოითხოვს თქვენი საფულის ფრაზა-პაროლს საფულის გასაშიფრად. + + + + Decrypt wallet + საფულის გაშიფრვა + + + + Change passphrase + ფრაზა-პაროლის შეცვლა + + + + Enter the old and new passphrase to the wallet. + შეიყვანეთ საფულის ძველი და ახალი ფრაზა-პაროლი. + + + + Confirm wallet encryption + დაადასტურეთ საფულის დაშიფრვა + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + დარწმუნებული ხართ, რომ გინდათ საფულის დაშიფრვა? + + + + + Wallet encrypted + საფულე დაშიფრულია + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + მნიშვნელოვანია: თქვენი საფულის ყველა ადრინდელი არქივი შეიცვლება ახლადგენერირებული დაშიფრული საფულის ფაილით. უსაფრთხოების მოსაზრებებით დაუშიფრავი საფულის ძველი არქივები ძალას დაკარგავს, როგორც კი დაიწყებთ ახალი, დაშიფრული საფულის გამოყენებას. + + + + + + + Wallet encryption failed + ვერ მოხერხდა საფულის დაშიფრვა + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + საფულის დაშიფრვა ვერ მოხერხდა სისტემაში შეცდომის გამო. თქვენი საფულე არ არის დაშფრული. + + + + + The supplied passphrases do not match. + ფრაზა-პაროლები არ ემთხვევა ერთმანეთს. + + + + Wallet unlock failed + საფულის განბლოკვა ვერ მოხერხდა + + + + + + The passphrase entered for the wallet decryption was incorrect. + საფულის განშიფრვის ფრაზა-პაროლი არაწორია + + + + Wallet decryption failed + საფულის განშიფრვა ვერ მოხერხდა + + + + Wallet passphrase was successfully changed. + საფულის ფრაზა-პაროლი შეცვლილია. + + + + + Warning: The Caps Lock key is on! + ყურადღება: ჩართულია Caps Lock რეჟიმი! + + + + ClientModel + + + Network Alert + ქსელური განგაში + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + რაოდენობა: + + + + Bytes: + ბაიტები: + + + + Amount: + თანხა: + + + + Priority: + პრიორიტეტი: + + + + Fee: + საკომისიო: + + + + Low Output: + ქვედა ზღვარი: + + + + After Fee: + დამატებითი საკომისიო: + + + + Change: + ხურდა: + + + + (un)select all + ყველას მონიშვნა/(მოხსნა) + + + + Tree mode + განტოტვილი + + + + List mode + სია + + + + Amount + რაოდენობა + + + + Label + + + + + Address + მისამართი + + + + Date + თარიღი + + + + Confirmations + დადასტურება + + + + Confirmed + დადასტურებულია + + + + Priority + პრიორიტეტი + + + + Copy address + მისამართის კოპირება + + + + Copy label + ნიშნულის კოპირება + + + + + Copy amount + თანხის კოპირება + + + + Copy transaction ID + ტრანსაქციის ID-ს კოპირება + + + + Copy quantity + რაოდენობის კოპირება + + + + Copy fee + საკომისიოს კოპირება + + + + Copy after fee + დამატებითი საკომისიოს კოპირება + + + + Copy bytes + ბაიტების კოპირება + + + + Copy priority + პრიორიტეტის კოპირება + + + + Copy low output + ქვედა ზღვრის კოპირება + + + + Copy change + ხურდის კოპირება + + + + highest + უმაღლესი + + + + high + მაღალი + + + + medium-high + საშუალოზე მაღალი + + + + medium + საშუალო + + + + low-medium + საშუალოზე დაბალი + + + + low + დაბალი + + + + lowest + უდაბლესი + + + + + DUST + + + + + + yes + კი + + + + + no + არა + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (არ არის ნიშნული) + + + + change from %1 (%2) + ხურდა %1-დან (%2) + + + + (change) + (ხურდა) + + + + EditAddressDialog + + + Edit Address + მისამართის შეცვლა + + + + &Label + ნიშნუ&ლი + + + + The label associated with this address book entry + + + + + &Address + მის&ამართი + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + ახალი მიღების მისამართი + + + + New sending address + ახალი გაგზავნის მისამართი + + + + Edit receiving address + მიღების მისამართის შეცვლა + + + + Edit sending address + გაგზავნის მისამართის შეცვლა + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + მისამართი "%1" უკვე არის მისამართების წიგნში. + + + + Could not unlock wallet. + საფულის განბლოკვა ვერ მოხერხდა. + + + + New key generation failed. + ახალი გასაღების გენერირება ვერ მოხერხდა + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &ინფორმაცია + + + + Alias Core + + + + + Client name + კლიენტი + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + მიუწვდ. + + + + Client version + კლიენტის ვერსია + + + + Using OpenSSL version + OpenSSL-ის ვერსია + + + + Using BerkeleyDB version + + + + + Build date + შექმნის დრო + + + + Startup time + სტარტის დრო + + + + Network + ქსელი + + + + Name + + + + + Number of connections + შეერთებების რაოდენობა + + + + Block chain + ბლოკთა ჯაჭვი + + + + Current number of blocks + ბლოკების მიმდინარე რაოდენობა + + + + Estimated total blocks + ბლოკების სავარაუდო რაოდენობა + + + + Last block time + ბოლო ბლოკის დრო + + + + Debug log file + დახვეწის ლოგ-ფაილი + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &შექმნა + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &კონსოლი + + + + Clear console + კონსოლის გასუფთავება + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + კლავიშები "ზევით" და "ქვევით" - ისტორიაში მოძრაობა, <b>Ctrl-L</b> - ეკრანის გასუფთავება. + + + + Type <b>help</b> for an overview of available commands. + აკრიფეთ <b>help</b> ფაშვებული ბრძანებების სანახავად. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + ღია იქნება სანამ %1 + + + + conflicted + + + + + %1/offline + %1/გათიშულია + + + + %1/unconfirmed + %1/დაუდასტურებელია + + + + %1 confirmations + %1 დადასტურებულია + + + + Transaction ID + ტრანსაქციის ID + + + + Block Hash + + + + + Status + სტატუსი + + + + , has not been successfully broadcast yet + , დაგზავნა არ არის წარმატებით დასრულებული + + + + , broadcast through %n node(s) + + + + + Date + თარიღი + + + + Source + წყარო + + + + Generated + გენერირებულია + + + + + Credit + კრედიტი + + + + matures in %n more block(s) + + + + + not accepted + უარყოფილია + + + + Transaction fee + ტრანსაქციის საფასური - საკომისიო + + + + Net amount + სუფთა თანხა + + + + Message + მესიჯი + + + + Comment + შენიშვნა + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + დახვეწის ინფორმაცია + + + + Debit + დებიტი + + + + Transaction + ტრანსაქცია + + + + Inputs + ხარჯები + + + + Amount + თანხა + + + + true + ჭეშმარიტი + + + + false + მცდარი + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + უცნობია + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + ტრანსაქციის დეტალები + + + + This pane shows a detailed description of the transaction + ტრანსაქციის დაწვრილებითი აღწერილობა + + + + TransactionTableModel + + + Date + თარიღი + + + + Type + ტიპი + + + + Address + მისამართი + + + + Note + + + + + Amount + რაოდენობა + + + + Open for %n more block(s) + + + + + Open until %1 + ღია იქნება სანამ %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + დადასტურებულია (%1დასტური) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + არ არის მომწიფებული (%1 დასტური, საჭიროა სულ %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (მიუწვდ.) + + + + Transaction status. Hover over this field to show number of confirmations. + ტრანსაქციის სტატუსი. ველზე კურსორის შეყვანისას გამოჩნდება დასტურების რაოდენობა. + + + + Date and time that the transaction was received. + ტრანსაქციის მიღების თარიღი და დრო. + + + + Type of transaction. + ტრანსაქციის ტიპი. + + + + Destination address of transaction. + ტრანსაქიის დანიშნულების მისამართი. + + + + Amount removed from or added to balance. + ბალანსიდან მოხსნილი ან დამატებული თანხა. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_kk.ts b/src/qt/locale/alias_kk.ts new file mode 100644 index 0000000000..d16ca0cf61 --- /dev/null +++ b/src/qt/locale/alias_kk.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + таңба + + + + Address + Адрес + + + + pubkey + + + + + stealth + + + + + (no label) + (таңбасыз) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + Құпия сөзді енгізу + + + + New passphrase + Жаңа құпия сөзі + + + + Repeat new passphrase + Жаңа құпия сөзді қайта енгізу + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Әмиянға жаңа қүпия сөзді енгізіңіз.<br/><b>10 немесе одан әрі кездейсоқ белгілерді</b>, әлде <b>сегіз немесе одан әрі сөздерді</b>құпия сөзіңізде пайдалану өтінеміз. + + + + Encrypt wallet + Әмиянді шифрлау + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Бұл операциясы бойынша сіздің әмиянізді қоршаудан шығару үшін әмиянның құпия сөзі керек + + + + Unlock wallet + Әмиянізді қоршаудан шығару + + + + This operation needs your wallet passphrase to decrypt the wallet. + Бұл операциясы бойынша сіздің әмиянізді шифрлап тастау үшін әмиянның құпия сөзі керек + + + + Decrypt wallet + Әмиянізді шифрлап тастау + + + + Change passphrase + Құпия сөзді өзгерту + + + + Enter the old and new passphrase to the wallet. + + + + + Confirm wallet encryption + + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + + The supplied passphrases do not match. + + + + + Wallet unlock failed + + + + + + + The passphrase entered for the wallet decryption was incorrect. + + + + + Wallet decryption failed + + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + + + + + Label + + + + + Address + Адрес + + + + Date + + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (таңбасыз) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + + + + + Type + + + + + Address + Адрес + + + + Note + + + + + Amount + + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_ko_KR.ts b/src/qt/locale/alias_ko_KR.ts new file mode 100644 index 0000000000..de82b93816 --- /dev/null +++ b/src/qt/locale/alias_ko_KR.ts @@ -0,0 +1,4294 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + + + + + Address + 주소 + + + + pubkey + + + + + stealth + + + + + (no label) + (표 없음) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + 암호문 대화상자 + + + + Enter passphrase + 암호 입력하기 + + + + New passphrase + 새로운 암호 + + + + Repeat new passphrase + 새 암호 반복 + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + 새로운 암호를 지갑에 입력. 8자보다 많은 단어를 입력하거나 10 자보다 많은 여러 종류를 암호에 사용하세요. + + + + Encrypt wallet + 지갑 암호화 + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + 이 작업은 지갑을 열기위해 사용자의 지갑의 암호가 필요합니다. + + + + Unlock wallet + 지갑 열기 + + + + This operation needs your wallet passphrase to decrypt the wallet. + 이 작업은 지갑을 해독하기 위해 사용자의 지갑 암호가 필요합니다. + + + + Decrypt wallet + 지갑 해독 + + + + Change passphrase + 암호 변경 + + + + Enter the old and new passphrase to the wallet. + 지갑의 예전 암호와 새로운 암호를 입력 + + + + Confirm wallet encryption + 지갑의 암호화를 확정 + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + 지갑 암호화를 허용하시겠습니까? + + + + + Wallet encrypted + 지갑 암호화 완료 + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + 지갑 암호화 실패 + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + 지갑 암호화는 내부 에러로 인해 실패했습니다. 당신의 지갑은 암호화 되지 않았습니다. + + + + + The supplied passphrases do not match. + 지정한 암호가 일치하지 않습니다. + + + + Wallet unlock failed + 지갑 열기를 실패하였습니다. + + + + + + The passphrase entered for the wallet decryption was incorrect. + 지갑 해독을 위한 암호가 틀렸습니다. + + + + Wallet decryption failed + 지갑 해독에 실패하였습니다. + + + + Wallet passphrase was successfully changed. + 지갑 비밀번호가 성공적으로 변경되었습니다 + + + + + Warning: The Caps Lock key is on! + 경고: 캡스록 키가 켜져있습니다! + + + + ClientModel + + + Network Alert + 네트워크 경고 + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + 수량: + + + + Bytes: + Bytes: + + + + Amount: + 거래량 + + + + Priority: + 우선도: + + + + Fee: + 수수료: + + + + Low Output: + + + + + After Fee: + 수수료 이후: + + + + Change: + + + + + (un)select all + + + + + Tree mode + 트리 모드 + + + + List mode + 리스트 모드 + + + + Amount + 거래량 + + + + Label + + + + + Address + 주소 + + + + Date + 날짜 + + + + Confirmations + 확인 + + + + Confirmed + 확인됨 + + + + Priority + 우선도 + + + + Copy address + 주소 복사하기 + + + + Copy label + 라벨 복사하기 + + + + + Copy amount + 거래액 복사 + + + + Copy transaction ID + 송금 ID 복사 + + + + Copy quantity + 수량 복사 + + + + Copy fee + 수수료 복사 + + + + Copy after fee + 수수료 이후 복사 + + + + Copy bytes + bytes를 복사 + + + + Copy priority + 우선도 복사 + + + + Copy low output + + + + + Copy change + + + + + highest + 최상 + + + + high + + + + + medium-high + 중상 + + + + medium + + + + + low-medium + 중하 + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + 아니요 + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (표 없슴) + + + + change from %1 (%2) + ~로부터 변경 %1 (%2) + + + + (change) + + + + + EditAddressDialog + + + Edit Address + 주소 편집 + + + + &Label + &표 + + + + The label associated with this address book entry + + + + + &Address + &주소 + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + 새로 받는 주소 + + + + New sending address + 새로 보내는 주소 + + + + Edit receiving address + 받는 주소 편집 + + + + Edit sending address + 보내는 주소 편집 + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + 입력된 주소는"%1" 이미 주소록에 있습니다. + + + + Could not unlock wallet. + 지갑을 열 수 없습니다. + + + + New key generation failed. + 새로운 키 생성이 실패하였습니다 + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + 정보& + + + + Alias Core + + + + + Client name + 클라이언트 이름 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + 없음 + + + + Client version + 클라이언트 버전 + + + + Using OpenSSL version + 오픈SSL 버전을 사용합니다 + + + + Using BerkeleyDB version + + + + + Build date + 빌드 날짜 + + + + Startup time + 시작 시간 + + + + Network + 네트워크 + + + + Name + + + + + Number of connections + 연결 수 + + + + Block chain + 블럭 체인 + + + + Current number of blocks + 현재 블럭 수 + + + + Estimated total blocks + 예상 전체 블럭 + + + + Last block time + 최종 블럭 시각 + + + + Debug log file + 로그 파일 디버그 + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + 열기(&O) + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + 콘솔(&C) + + + + Clear console + 콘솔 초기화 + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + 기록을 찾아보려면 위 아래 화살표 키를, 화면을 지우려면 <b>Ctrl-L</b>키를 사용하십시오. + + + + Type <b>help</b> for an overview of available commands. + 사용할 수 있는 명령을 둘러보려면 <b>help</b>를 입력하십시오. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + %1 까지 열림 + + + + conflicted + 충돌 + + + + %1/offline + %1/오프라인 + + + + %1/unconfirmed + %1/미확인 + + + + %1 confirmations + %1 확인됨 + + + + Transaction ID + 송금 ID + + + + Block Hash + + + + + Status + 상태 + + + + , has not been successfully broadcast yet + . 아직 성공적으로 통보하지 않음 + + + + , broadcast through %n node(s) + + + + + Date + 날짜 + + + + Source + 소스 + + + + Generated + 생성하다 + + + + + Credit + 예금 + + + + matures in %n more block(s) + + + + + not accepted + 허용되지 않는다 + + + + Transaction fee + 송금 수수료 + + + + Net amount + 총액 + + + + Message + 메시지 + + + + Comment + 설명 + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + 디버깅 정보 + + + + Debit + 차변 + + + + Transaction + 송금 + + + + Inputs + 입력 + + + + Amount + 거래량 + + + + true + + + + + false + 거짓 + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + 알수없음 + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + 거래 세부 내역 + + + + This pane shows a detailed description of the transaction + 이 창은 거래의 세부내역을 보여줍니다 + + + + TransactionTableModel + + + Date + 날짜 + + + + Type + 형식 + + + + Address + 주소 + + + + Note + + + + + Amount + 수량 + + + + Open for %n more block(s) + + + + + Open until %1 + %1 까지 열림 + + + + Offline + 오프라인 + + + + Unconfirmed + 미확인 + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + 확인됨(%1 확인됨) + + + + Conflicted + 충돌 + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (없음) + + + + Transaction status. Hover over this field to show number of confirmations. + 거래상황. 마우스를 올리면 승인횟수가 표시됩니다. + + + + Date and time that the transaction was received. + 거래가 이루어진 날짜와 시각. + + + + Type of transaction. + 거래의 종류. + + + + Destination address of transaction. + 거래가 도달할 주소 + + + + Amount removed from or added to balance. + 변경된 잔고. + + + + WalletModel + + + + Sending... + + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_ky.ts b/src/qt/locale/alias_ky.ts new file mode 100644 index 0000000000..76f648f675 --- /dev/null +++ b/src/qt/locale/alias_ky.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + + + + + Address + Дарек + + + + pubkey + + + + + stealth + + + + + (no label) + (аты жок) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + + + + + New passphrase + + + + + Repeat new passphrase + + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + + Encrypt wallet + + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + + Unlock wallet + + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + + Decrypt wallet + + + + + Change passphrase + + + + + Enter the old and new passphrase to the wallet. + + + + + Confirm wallet encryption + + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + + The supplied passphrases do not match. + + + + + Wallet unlock failed + + + + + + + The passphrase entered for the wallet decryption was incorrect. + + + + + Wallet decryption failed + + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + + + + + Label + + + + + Address + Дарек + + + + Date + Дата + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (аты жок) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + &Дарек + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Ачуу + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Консоль + + + + Clear console + Консолду тазалоо + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + %1/тармакта эмес + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + Дата + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + Билдирүү + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + Дата + + + + Type + + + + + Address + Дарек + + + + Note + + + + + Amount + + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_la.ts b/src/qt/locale/alias_la.ts new file mode 100644 index 0000000000..f3a8a83b8a --- /dev/null +++ b/src/qt/locale/alias_la.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Titulus + + + + Address + Inscriptio + + + + pubkey + + + + + stealth + + + + + (no label) + (nullus titulus) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Dialogus Tesserae + + + + Enter passphrase + Insere tesseram + + + + New passphrase + Nova tessera + + + + Repeat new passphrase + Itera novam tesseram + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Insero novam tesseram cassidili.<br/>Sodes tessera <b>10 pluriumve fortuitarum litterarum</b> utere aut <b>octo pluriumve verborum</b>. + + + + Encrypt wallet + Cifra cassidile + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Huic operationi necesse est tessera cassidili tuo ut cassidile reseret. + + + + Unlock wallet + Resera cassidile + + + + This operation needs your wallet passphrase to decrypt the wallet. + Huic operationi necesse est tessera cassidili tuo ut cassidile decifret. + + + + Decrypt wallet + Decifra cassidile + + + + Change passphrase + Muta tesseram + + + + Enter the old and new passphrase to the wallet. + Insero veterem novamque tesseram cassidili. + + + + Confirm wallet encryption + Confirma cifrationem cassidilis + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + Certusne es te velle tuum cassidile cifrare? + + + + + Wallet encrypted + Cassidile cifratum + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + GRAVE: Oportet ulla prioria conservata quae fecisti de plica tui cassidilis reponi a nove generata cifrata plica cassidilis. Propter securitatem, prioria conservata de plica non cifrata cassidilis inutilia fiet simul atque incipis uti novo cifrato cassidili. + + + + + + + Wallet encryption failed + Cassidile cifrare abortum est + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Cassidile cifrare abortum est propter internum errorem. Tuum cassidile cifratum non est. + + + + + The supplied passphrases do not match. + Tesserae datae non eaedem sunt. + + + + Wallet unlock failed + Cassidile reserare abortum est. + + + + + + The passphrase entered for the wallet decryption was incorrect. + Tessera inserta pro cassidilis decifrando prava erat. + + + + Wallet decryption failed + Cassidile decifrare abortum est. + + + + Wallet passphrase was successfully changed. + Tessera cassidilis successa est in mutando. + + + + + Warning: The Caps Lock key is on! + Monitio: Litterae ut capitales seratae sunt! + + + + ClientModel + + + Network Alert + Monitio Retis + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Quantitas: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Quantitas + + + + Label + + + + + Address + Inscriptio + + + + Date + Dies + + + + Confirmations + + + + + Confirmed + Confirmatum + + + + Priority + + + + + Copy address + Copia inscriptionem + + + + Copy label + Copia titulum + + + + + Copy amount + Copia quantitatem + + + + Copy transaction ID + Copia transactionis ID + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (nullus titulus) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Muta Inscriptionem + + + + &Label + &Titulus + + + + The label associated with this address book entry + + + + + &Address + &Inscriptio + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Nova inscriptio accipiendi + + + + New sending address + Nova inscriptio mittendi + + + + Edit receiving address + Muta inscriptionem accipiendi + + + + Edit sending address + Muta inscriptionem mittendi + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Inserta inscriptio "%1" iam in libro inscriptionum est. + + + + Could not unlock wallet. + Non potuisse cassidile reserare + + + + New key generation failed. + Generare novam clavem abortum est. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informatio + + + + Alias Core + + + + + Client name + Nomen clientis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Versio clientis + + + + Using OpenSSL version + Utens OpenSSL versione + + + + Using BerkeleyDB version + + + + + Build date + Dies aedificandi + + + + Startup time + Tempus initiandi + + + + Network + Rete + + + + Name + + + + + Number of connections + Numerus conexionum + + + + Block chain + Catena frustorum + + + + Current number of blocks + Numerus frustorum iam nunc + + + + Estimated total blocks + Aestimatus totalis numerus frustorum + + + + Last block time + Hora postremi frusti + + + + Debug log file + Debug catalogi plica + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Aperi + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Terminale + + + + Clear console + Vacuefac terminale + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Utere sagittis sursum deorsumque ut per historiam naviges, et <b>Ctrl+L</b> ut scrinium vacuefacias. + + + + Type <b>help</b> for an overview of available commands. + Scribe <b>help</b> pro summario possibilium mandatorum. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Apertum donec %1 + + + + conflicted + + + + + %1/offline + %1/non conecto + + + + %1/unconfirmed + %1/non confirmata + + + + %1 confirmations + %1 confirmationes + + + + Transaction ID + ID transactionis + + + + Block Hash + + + + + Status + Status + + + + , has not been successfully broadcast yet + , nondum prospere disseminatum est + + + + , broadcast through %n node(s) + + + + + Date + Dies + + + + Source + Fons + + + + Generated + Generatum + + + + + Credit + Creditum + + + + matures in %n more block(s) + + + + + not accepted + non acceptum + + + + Transaction fee + Transactionis merces + + + + Net amount + Cuncta quantitas + + + + Message + Nuntius + + + + Comment + Annotatio + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Informatio de debug + + + + Debit + Debitum + + + + Transaction + Transactio + + + + Inputs + Lectenda + + + + Amount + Quantitas + + + + true + verum + + + + false + falsum + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + ignotum + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Particularia transactionis + + + + This pane shows a detailed description of the transaction + Haec tabula monstrat descriptionem verbosam transactionis + + + + TransactionTableModel + + + Date + Dies + + + + Type + Typus + + + + Address + Inscriptio + + + + Note + + + + + Amount + Quantitas + + + + Open for %n more block(s) + + + + + Open until %1 + Apertum donec %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Confirmatum (%1 confirmationes) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Status transactionis. Supervola cum mure ut monstretur numerus confirmationum. + + + + Date and time that the transaction was received. + Dies et tempus quando transactio accepta est. + + + + Type of transaction. + Typus transactionis. + + + + Destination address of transaction. + Inscriptio destinationis transactionis. + + + + Amount removed from or added to balance. + Quantitas remota ex pendendo aut addita ei. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_lt.ts b/src/qt/locale/alias_lt.ts new file mode 100644 index 0000000000..8024d812b0 --- /dev/null +++ b/src/qt/locale/alias_lt.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Žymė + + + + Address + Adresas + + + + pubkey + + + + + stealth + + + + + (no label) + (nėra žymės) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Slaptafrazės dialogas + + + + Enter passphrase + Įvesti slaptafrazę + + + + New passphrase + Nauja slaptafrazė + + + + Repeat new passphrase + Pakartokite naują slaptafrazę + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Įveskite naują piniginės slaptafrazę.<br/>Prašome naudoti slaptafrazę iš <b> 10 ar daugiau atsitiktinių simbolių</b> arba <b>aštuonių ar daugiau žodžių</b>. + + + + Encrypt wallet + Užšifruoti piniginę + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Ši operacija reikalauja jūsų piniginės slaptafrazės jai atrakinti. + + + + Unlock wallet + Atrakinti piniginę + + + + This operation needs your wallet passphrase to decrypt the wallet. + Ši operacija reikalauja jūsų piniginės slaptafrazės jai iššifruoti. + + + + Decrypt wallet + Iššifruoti piniginę + + + + Change passphrase + Pakeisti slaptafrazę + + + + Enter the old and new passphrase to the wallet. + Įveskite seną ir naują piniginės slaptafrazes. + + + + Confirm wallet encryption + Patvirtinkite piniginės užšifravimą + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + Ar tikrai norite šifruoti savo piniginę? + + + + + Wallet encrypted + Piniginė užšifruota + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + Nepavyko užšifruoti piniginę + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Dėl vidinės klaidos nepavyko užšifruoti piniginę.Piniginė neužšifruota. + + + + + The supplied passphrases do not match. + Įvestos slaptafrazės nesutampa. + + + + Wallet unlock failed + Nepavyko atrakinti piniginę + + + + + + The passphrase entered for the wallet decryption was incorrect. + Neteisingai įvestas slaptažodis piniginės iššifravimui. + + + + Wallet decryption failed + Nepavyko iššifruoti piniginės + + + + Wallet passphrase was successfully changed. + Piniginės slaptažodis sėkmingai pakeistas. + + + + + Warning: The Caps Lock key is on! + Įspėjimas: įjungtas Caps Lock klavišas! + + + + ClientModel + + + Network Alert + Tinklo įspėjimas + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Suma: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Suma + + + + Label + + + + + Address + Adresas + + + + Date + Data + + + + Confirmations + + + + + Confirmed + Patvirtintas + + + + Priority + + + + + Copy address + Kopijuoti adresą + + + + Copy label + Kopijuoti žymę + + + + + Copy amount + Kopijuoti sumą + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (nėra žymės) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Keisti adresą + + + + &Label + Ž&ymė + + + + The label associated with this address book entry + + + + + &Address + &Adresas + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Naujas gavimo adresas + + + + New sending address + Naujas siuntimo adresas + + + + Edit receiving address + Keisti gavimo adresą + + + + Edit sending address + Keisti siuntimo adresą + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Įvestas adresas „%1“ jau yra adresų knygelėje. + + + + Could not unlock wallet. + Nepavyko atrakinti piniginės. + + + + New key generation failed. + Naujo rakto generavimas nepavyko. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informacija + + + + Alias Core + + + + + Client name + Kliento pavadinimas + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + nėra + + + + Client version + Kliento versija + + + + Using OpenSSL version + Naudojama OpenSSL versija + + + + Using BerkeleyDB version + + + + + Build date + Kompiliavimo data + + + + Startup time + Paleidimo laikas + + + + Network + Tinklas + + + + Name + + + + + Number of connections + Prisijungimų kiekis + + + + Block chain + Blokų grandinė + + + + Current number of blocks + Dabartinis blokų skaičius + + + + Estimated total blocks + + + + + Last block time + Paskutinio bloko laikas + + + + Debug log file + Derinimo žurnalo failas + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Atverti + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Konsolė + + + + Clear console + Išvalyti konsolę + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Atidaryta iki %1 + + + + conflicted + + + + + %1/offline + %1/neprisijungęs + + + + %1/unconfirmed + %1/nepatvirtintas + + + + %1 confirmations + %1 patvirtinimų + + + + Transaction ID + Sandorio ID + + + + Block Hash + + + + + Status + Būsena + + + + , has not been successfully broadcast yet + , transliavimas dar nebuvo sėkmingas + + + + , broadcast through %n node(s) + + + + + Date + Data + + + + Source + Šaltinis + + + + Generated + Sugeneruotas + + + + + Credit + Kreditas + + + + matures in %n more block(s) + + + + + not accepted + nepriimta + + + + Transaction fee + Sandorio mokestis + + + + Net amount + Neto suma + + + + Message + Žinutė + + + + Comment + Komentaras + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Derinimo informacija + + + + Debit + Debitas + + + + Transaction + Sandoris + + + + Inputs + + + + + Amount + Suma + + + + true + tiesa + + + + false + netiesa + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + nežinomas + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Sandorio detelės + + + + This pane shows a detailed description of the transaction + Šis langas sandorio detalų aprašymą + + + + TransactionTableModel + + + Date + Data + + + + Type + Tipas + + + + Address + Adresas + + + + Note + + + + + Amount + Suma + + + + Open for %n more block(s) + + + + + Open until %1 + Atidaryta iki %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Patvirtinta (%1 patvirtinimai) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + nepasiekiama + + + + Transaction status. Hover over this field to show number of confirmations. + Sandorio būklė. Užvedus pelės žymeklį ant šios srities matysite patvirtinimų skaičių. + + + + Date and time that the transaction was received. + Sandorio gavimo data ir laikas + + + + Type of transaction. + Sandorio tipas. + + + + Destination address of transaction. + Sandorio paskirties adresas + + + + Amount removed from or added to balance. + Suma pridėta ar išskaičiuota iš balanso + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_lv_LV.ts b/src/qt/locale/alias_lv_LV.ts new file mode 100644 index 0000000000..8c04b54f39 --- /dev/null +++ b/src/qt/locale/alias_lv_LV.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Nosaukums + + + + Address + Adrese + + + + pubkey + + + + + stealth + + + + + (no label) + (bez nosaukuma) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Paroles dialogs + + + + Enter passphrase + Ierakstiet paroli + + + + New passphrase + Jauna parole + + + + Repeat new passphrase + Jaunā parole vēlreiz + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Ierakstiet maciņa jauno paroli.<br/>Lūdzu izmantojiet <b>10 vai vairāk nejauši izvēlētas zīmes</b>, vai <b>astoņus un vairāk vārdus</b>. + + + + Encrypt wallet + Šifrēt maciņu + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Lai veikto šo darbību, maciņš jāatslēdz ar paroli. + + + + Unlock wallet + Atslēgt maciņu + + + + This operation needs your wallet passphrase to decrypt the wallet. + Šai darbībai maciņš jāatšifrē ar maciņa paroli. + + + + Decrypt wallet + Atšifrēt maciņu + + + + Change passphrase + Mainīt paroli + + + + Enter the old and new passphrase to the wallet. + Ierakstiet maciņa veco un jauno paroli. + + + + Confirm wallet encryption + Apstiprināt maciņa šifrēšanu + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + Maciņš nošifrēts + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + Maciņa šifrēšana neizdevās + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Maciņa šifrēšana neizdevās programmas kļūdas dēļ. Jūsu maciņš netika šifrēts. + + + + + The supplied passphrases do not match. + Ievadītās paroles nav vienādas. + + + + Wallet unlock failed + Maciņu atšifrēt neizdevās + + + + + + The passphrase entered for the wallet decryption was incorrect. + Maciņa atšifrēšanai ievadītā parole nav pareiza. + + + + Wallet decryption failed + Maciņu neizdevās atšifrēt + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + Tīkla brīdinājums + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Daudzums: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Daudzums + + + + Label + + + + + Address + Adrese + + + + Date + Datums + + + + Confirmations + + + + + Confirmed + Apstiprināts + + + + Priority + + + + + Copy address + Kopēt adresi + + + + Copy label + Kopēt nosaukumu + + + + + Copy amount + Kopēt daudzumu + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (bez nosaukuma) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Mainīt adrese + + + + &Label + &Nosaukums + + + + The label associated with this address book entry + + + + + &Address + &Adrese + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Jauna saņemšanas adrese + + + + New sending address + Jauna nosūtīšanas adrese + + + + Edit receiving address + Mainīt saņemšanas adresi + + + + Edit sending address + Mainīt nosūtīšanas adresi + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Nupat ierakstītā adrese "%1" jau atrodas adrešu grāmatā. + + + + Could not unlock wallet. + Nav iespējams atslēgt maciņu. + + + + New key generation failed. + Neizdevās ģenerēt jaunu atslēgu. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informācija + + + + Alias Core + + + + + Client name + Klienta vārds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Klienta versija + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + Kompilācijas datums + + + + Startup time + Sākuma laiks + + + + Network + Tīkls + + + + Name + + + + + Number of connections + Savienojumu skaits + + + + Block chain + Bloku virkne + + + + Current number of blocks + Pašreizējais bloku skaits + + + + Estimated total blocks + Bloku skaita novērtējums + + + + Last block time + Pēdējā bloka laiks + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Atvērt + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Konsole + + + + Clear console + Notīrīt konsoli + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Izmantojiet bultiņas uz augšu un leju, lai pārvietotos pa vēsturi, un <b>Ctrl-L</b> ekrāna notīrīšanai. + + + + Type <b>help</b> for an overview of available commands. + Ierakstiet <b>help</b> lai iegūtu pieejamo komandu sarakstu. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Atvērts līdz %1 + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + %1/neapstiprinātas + + + + %1 confirmations + %1 apstiprinājumu + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + , vēl nav veiksmīgi izziņots + + + + , broadcast through %n node(s) + + + + + Date + Datums + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + Daudzums + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + nav zināms + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Transakcijas detaļas + + + + This pane shows a detailed description of the transaction + Šis panelis parāda transakcijas detaļas + + + + TransactionTableModel + + + Date + Datums + + + + Type + Tips + + + + Address + Adrese + + + + Note + + + + + Amount + Daudzums + + + + Open for %n more block(s) + + + + + Open until %1 + Atvērts līdz %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Apstiprināts (%1 apstiprinājumu) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (nav pieejams) + + + + Transaction status. Hover over this field to show number of confirmations. + Transakcijas statuss. Turiet peli virs šī lauka, lai redzētu apstiprinājumu skaitu. + + + + Date and time that the transaction was received. + Transakcijas saņemšanas datums un laiks. + + + + Type of transaction. + Transakcijas tips. + + + + Destination address of transaction. + Transakcijas mērķa adrese. + + + + Amount removed from or added to balance. + Bilancei pievienotais vai atņemtais daudzums. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_ms_MY.ts b/src/qt/locale/alias_ms_MY.ts new file mode 100644 index 0000000000..e69cf4509b --- /dev/null +++ b/src/qt/locale/alias_ms_MY.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + + + + + Address + Alamat + + + + pubkey + + + + + stealth + + + + + (no label) + + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + Kata laluan + + + + New passphrase + Kata laluan baru + + + + Repeat new passphrase + Ulang kata laluan baru + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + + Encrypt wallet + + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + + Unlock wallet + + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + + Decrypt wallet + + + + + Change passphrase + + + + + Enter the old and new passphrase to the wallet. + + + + + Confirm wallet encryption + + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + + The supplied passphrases do not match. + + + + + Wallet unlock failed + + + + + + + The passphrase entered for the wallet decryption was incorrect. + + + + + Wallet decryption failed + + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + + + + + Label + + + + + Address + Alamat + + + + Date + + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Alamat + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + Alamat + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + + + + + Type + + + + + Address + Alamat + + + + Note + + + + + Amount + + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_nb.ts b/src/qt/locale/alias_nb.ts new file mode 100644 index 0000000000..8764bb3f9a --- /dev/null +++ b/src/qt/locale/alias_nb.ts @@ -0,0 +1,4296 @@ + + + AboutDialog + + + About Alias + Om Alias + + + + <b>Alias</b> version + <b>Alias</b> versjon + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Merkelapp + + + + Address + Adresse + + + + pubkey + + + + + stealth + + + + + (no label) + (ingen merkelapp) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Dialog for Adgangsfrase + + + + Enter passphrase + Angi adgangsfrase + + + + New passphrase + Ny adgangsfrase + + + + Repeat new passphrase + Gjenta ny adgangsfrase + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Skriv inn den nye adgangsfrasen for lommeboken.<br/>Vennligst bruk en adgangsfrase med <b>10 eller flere tilfeldige tegn</b>, eller <b>åtte eller flere ord</b>. + + + + Encrypt wallet + Krypter lommebok + + + + Keep wallet unlocked for staking. + Hold lommebok ulåst for staking + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + Alias Lommebok innlogging + + + + This operation needs your wallet passphrase to unlock the wallet. + Denne operasjonen krever adgangsfrasen til lommeboken for å låse den opp. + + + + Unlock wallet + Lås opp lommebok + + + + This operation needs your wallet passphrase to decrypt the wallet. + Denne operasjonen krever adgangsfrasen til lommeboken for å dekryptere den. + + + + Decrypt wallet + Dekrypter lommebok + + + + Change passphrase + Endre adgangsfrase + + + + Enter the old and new passphrase to the wallet. + Skriv inn gammel og ny adgangsfrase for lommeboken. + + + + Confirm wallet encryption + Bekreft kryptering av lommebok + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Advarsle: Hvis du krypterer lommeboken din og mister adgangsfrase, vil du !MISTE ALLE PENGENE! + + + + Are you sure you wish to encrypt your wallet? + Er du sikker på at du vil kryptere lommeboken? + + + + + Wallet encrypted + Lommebok kryptert + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias vil stenge ned nå for å gjøre ferdig krypteringsprosessen. Husk at kryptering av lommeboken ikke kan beskytte fullt mot at pengene dine blir stjålet av virus som har infisert din datamaskin. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + VIKTIG: Tidligere sikkerhetskopier av din lommebok-fil, bør erstattes med den nylig genererte, krypterte filen, da de blir ugyldiggjort av sikkerhetshensyn så snart du begynner å bruke den nye krypterte lommeboken. + + + + + + + Wallet encryption failed + Kryptering av lommebok feilet + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Kryptering av lommebok feilet på grunn av en intern feil. Din lommebok ble ikke kryptert. + + + + + The supplied passphrases do not match. + De angitte adgangsfrasene er ulike. + + + + Wallet unlock failed + Opplåsing av lommebok feilet + + + + + + The passphrase entered for the wallet decryption was incorrect. + Adgangsfrasen angitt for dekryptering av lommeboken var feil. + + + + Wallet decryption failed + Dekryptering av lommebok feilet + + + + Wallet passphrase was successfully changed. + Adgangsfrase for lommebok endret. + + + + + Warning: The Caps Lock key is on! + Advarsel: Caps Lock er på ! + + + + ClientModel + + + Network Alert + Nettverksvarsel + + + + CoinControlDialog + + + Coin Control + Penge kontroll + + + + Quantity: + Mengde: + + + + Bytes: + Bytes: + + + + Amount: + Beløp: + + + + Priority: + Prioritet: + + + + Fee: + Avgift: + + + + Low Output: + Lav Utdata: + + + + After Fee: + Etter Avgift: + + + + Change: + Endring: + + + + (un)select all + Fjern alt valgt + + + + Tree mode + Tre modus + + + + List mode + Liste modus + + + + Amount + Beløp + + + + Label + Merkelapp + + + + Address + Adresse + + + + Date + Dato + + + + Confirmations + Bekreftelser + + + + Confirmed + Bekreftet + + + + Priority + Prioritet + + + + Copy address + Kopier adresse + + + + Copy label + Kopier merkelapp + + + + + Copy amount + Kopiér beløp + + + + Copy transaction ID + Kopier transaksjons-ID + + + + Copy quantity + Kopier mengde + + + + Copy fee + Kopier gebyr + + + + Copy after fee + Kopier etter gebyr + + + + Copy bytes + Kopier bytes + + + + Copy priority + Kopier prioritet + + + + Copy low output + + + + + Copy change + Kopier veksel + + + + highest + høyest + + + + high + høy + + + + medium-high + medium-høy + + + + medium + medium + + + + low-medium + lav-medium + + + + low + lav + + + + lowest + lavest + + + + + DUST + + + + + + yes + ja + + + + + no + nei + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Denne merkelappen blir rød, viss endringen er mindre enn %1 + +Dette betyr at det trengs en avgift på minimum %2. + + + + + (no label) + (ingen merkelapp) + + + + change from %1 (%2) + endring fra %1 (%2) + + + + (change) + (endring) + + + + EditAddressDialog + + + Edit Address + Rediger adresse + + + + &Label + &Merkelapp + + + + The label associated with this address book entry + Navnet assosiert med denne adressen + + + + &Address + &Adresse + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Ny mottaksadresse + + + + New sending address + Ny utsendingsadresse + + + + Edit receiving address + Rediger mottaksadresse + + + + Edit sending address + Rediger utsendingsadresse + + + + The entered address "%1" is not a valid Alias address. + Den angitte adressen "%1" er ikke en gyldig Alias adresse. + + + + The entered address "%1" is already in the address book. + Den oppgitte adressen "%1" er allerede i adresseboken. + + + + Could not unlock wallet. + Kunne ikke låse opp lommeboken. + + + + New key generation failed. + Generering av ny nøkkel feilet. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + versjon + + + + Usage: + Bruk: + + + + command-line options + ledetekst valg + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + Velg språk, for eksempel "de_DE" (default: system locale) + + + + Start minimized + Start Minimert + + + + Show splash screen on startup (default: 1) + Vis velkomstbilde ved oppstart (default: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + Adresse/Vertsnavn + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informasjon + + + + Alias Core + Alias Core + + + + Client name + Klientnavn + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + - + + + + Client version + Klientversjon + + + + Using OpenSSL version + Bruker OpenSSL versjon + + + + Using BerkeleyDB version + Bruker BerkeleyDB versjon + + + + Build date + Byggedato + + + + Startup time + Oppstartstidspunkt + + + + Network + Nettverk + + + + Name + Navn + + + + Number of connections + Antall tilkoblinger + + + + Block chain + Blokkjeden + + + + Current number of blocks + Nåværende antall blokker + + + + Estimated total blocks + Estimert totalt antall blokker + + + + Last block time + Tidspunkt for siste blokk + + + + Debug log file + Loggfil for feilsøk + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Åpne + + + + Command-line options + Kommandolinje alternativer + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + &Vis + + + + &Console + &Konsoll + + + + Clear console + Tøm konsoll + + + + &Network Traffic + &Nettverkstrafikk + + + + &Clear + + + + + Totals + + + + + + In: + Inn + + + + + Out: + Ut + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + Retning + + + + Version + Versjon + + + + User Agent + + + + + Services + Tjeneste + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + Tilkoblings tid + + + + Last Send + Siste sendt + + + + Last Receive + Siste motatt + + + + Bytes Sent + Bytes sendt + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Bruk opp og ned pil for å navigere historikken, og <b>Ctrl-L</b> for å tømme skjermen. + + + + Type <b>help</b> for an overview of available commands. + Skriv <b>help</b> for en oversikt over kommandoer. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Åpen til %1 + + + + conflicted + + + + + %1/offline + %1/frakoblet + + + + %1/unconfirmed + %1/ubekreftet + + + + %1 confirmations + %1 bekreftelser + + + + Transaction ID + Transaksjons-ID + + + + Block Hash + + + + + Status + Status + + + + , has not been successfully broadcast yet + , har ikke blitt kringkastet uten problemer enda. + + + + , broadcast through %n node(s) + + + + + Date + Dato + + + + Source + Kilde + + + + Generated + Generert + + + + + Credit + Kredit + + + + matures in %n more block(s) + + + + + not accepted + ikke akseptert + + + + Transaction fee + Transaksjonsgebyr + + + + Net amount + Nettobeløp + + + + Message + Melding + + + + Comment + Kommentar + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Informasjon for feilsøk + + + + Debit + Debet + + + + Transaction + Transaksjon + + + + Inputs + Inndata + + + + Amount + Beløp + + + + true + sann + + + + false + usann + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + ukjent + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Transaksjonsdetaljer + + + + This pane shows a detailed description of the transaction + Her vises en detaljert beskrivelse av transaksjonen + + + + TransactionTableModel + + + Date + Dato + + + + Type + Type + + + + Address + Adresse + + + + Note + + + + + Amount + Beløp + + + + Open for %n more block(s) + + + + + Open until %1 + Åpen til %1 + + + + Offline + + + + + Unconfirmed + Ubekreftet + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Bekrefter (%1 av %2 anbefalte bekreftelser) + + + + Confirmed (%1 confirmations) + Bekreftet (%1 bekreftelser) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + - + + + + Transaction status. Hover over this field to show number of confirmations. + Transaksjonsstatus. Hold muspekeren over dette feltet for å se antall bekreftelser. + + + + Date and time that the transaction was received. + Dato og tid for da transaksjonen ble mottat. + + + + Type of transaction. + Type transaksjon. + + + + Destination address of transaction. + Mottaksadresse for transaksjonen + + + + Amount removed from or added to balance. + Beløp fjernet eller lagt til saldo. + + + + WalletModel + + + + Sending... + Sender... + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_nl.ts b/src/qt/locale/alias_nl.ts new file mode 100644 index 0000000000..4a302c8222 --- /dev/null +++ b/src/qt/locale/alias_nl.ts @@ -0,0 +1,3996 @@ + + + AboutDialog + + + About Alias + Over Alias + + + + <b>Alias</b> version + <b>Alias</b> versie + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Label + + + + Address + Adres + + + + pubkey + pubsleutel + + + + stealth + onzichtbaar + + + + (no label) + (geen label) + + + + Stealth Address + Onzichtbaar Adres + + + + n/a + (nvt) + + + + AskPassphraseDialog + + + Passphrase Dialog + Wachtwoordscherm + + + + Enter passphrase + Voer wachtwoord in + + + + New passphrase + Nieuw wachtwoord + + + + Repeat new passphrase + Herhaal wachtwoord + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Bedoeld om het command 'sendmoney' uit te schakelen indien het OS niet meer veilig is. Geeft geen echte beveiliging. + + + + For staking only + Alleen voor staking + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Vul een nieuw wachtwoord in voor uw portemonnee. <br/> Gebruik een wachtwoord van <b>10 of meer verschillende karakters</b>, of <b> acht of meer woorden</b> . + + + + Encrypt wallet + Versleutel portemonnee + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Deze operatie vereist uw portemonneewachtwoord om de portemonnee te openen. + + + + Unlock wallet + Open portemonnee + + + + This operation needs your wallet passphrase to decrypt the wallet. + Deze operatie vereist uw portemonneewachtwoord om de portemonnee te ontsleutelen + + + + Decrypt wallet + Ontsleutel portemonnee + + + + Change passphrase + Wijzig wachtwoord + + + + Enter the old and new passphrase to the wallet. + Vul uw oude en nieuwe portemonneewachtwoord in. + + + + Confirm wallet encryption + Bevestig versleuteling van de portemonnee + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Waarschuwing: Als je je portemonnee versleuteld en je verliest je wachtwoord zul je <b>AL JE MUNTEN VERLIEZEN</b>! + + + + Are you sure you wish to encrypt your wallet? + Weet u zeker dat u uw portemonnee wilt versleutelen? + + + + + Wallet encrypted + Portemonnee versleuteld + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias zal nu sluiten om het versleutel proces te voltooien. Onthou dat het versleutelen van je portemonnee je niet volledig beschermt tegen diefstal van munten door malware op je computer. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + BELANGRIJK: Elke eerder gemaakte backup van uw portemonneebestand dient u te vervangen door het nieuw gegenereerde, versleutelde portemonneebestand. Om veiligheidsredenen zullen eerdere backups van het niet-versleutelde portemonneebestand onbruikbaar worden zodra u uw nieuwe, versleutelde, portemonnee begint te gebruiken. + + + + + + + Wallet encryption failed + Portemonneeversleuteling mislukt + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Portemonneeversleuteling mislukt door een interne fout. Uw portemonnee is niet versleuteld. + + + + + The supplied passphrases do not match. + De opgegeven wachtwoorden komen niet overeen + + + + Wallet unlock failed + Portemonnee openen mislukt + + + + + + The passphrase entered for the wallet decryption was incorrect. + Het opgegeven wachtwoord voor de portemonnee-ontsleuteling is niet correct. + + + + Wallet decryption failed + Portemonnee-ontsleuteling mislukt + + + + Wallet passphrase was successfully changed. + Portemonneewachtwoord is met succes gewijzigd. + + + + + Warning: The Caps Lock key is on! + Waarschuwing: De Caps-Lock-toets staat aan! + + + + ClientModel + + + Network Alert + Netwerkwaarschuwing + + + + CoinControlDialog + + + Coin Control + Coin controle opties + + + + Quantity: + Kwantiteit + + + + Bytes: + Bytes: + + + + Amount: + Bedrag: + + + + Priority: + Prioriteit: + + + + Fee: + Vergoeding: + + + + Low Output: + Lage uitvoer: + + + + After Fee: + Na vergoeding: + + + + Change: + Wijzigen: + + + + (un)select all + (de)selecteer alles + + + + Tree mode + Boom modus + + + + List mode + Lijst modus + + + + Amount + Bedrag + + + + Label + Label + + + + Address + Adres + + + + Date + Datum + + + + Confirmations + Bevestigingen + + + + Confirmed + Bevestigd + + + + Priority + Prioriteit + + + + Copy address + Kopieer adres + + + + Copy label + Kopieer label + + + + + Copy amount + Kopieer bedrag + + + + Copy transaction ID + Kopieer transactie-ID + + + + Copy quantity + Kopieer aantal + + + + Copy fee + Kopieer vergoeding + + + + Copy after fee + Kopieer na vergoeding + + + + Copy bytes + Kopieer bytes + + + + Copy priority + Kopieer prioriteit + + + + Copy low output + Kopieer lage uitvoer + + + + Copy change + Kopieer wijzig + + + + highest + hoogste + + + + high + hoog + + + + medium-high + gemiddeld hoog + + + + medium + gemiddeld + + + + low-medium + laag gemiddeld + + + + low + laag + + + + lowest + laagste + + + + + DUST + STOF + + + + + yes + ja + + + + + no + nee + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Dit label wordt rood, als de transactie grootte groter is dan 10000 bytes.<br> + +Dit betekend een fee van minimaal %1 per kb is noodzakelijk.<br> + +Kan varieren van +/- 1 Byte per invulling + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Transacties met hogere prioriteit komen sneller in een blok + +Dit label wordt rood, als de prioriteit kleiner is dan "normaal". + +Dit betekend een fee van minimaal %1 per kb is noodzakelijk. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Dit label wordt rood, als elke ontvanger ontvangt een bedrag dat kleiner is dan 1%. + +Dit betekent dat een vergoeding van ten minste 2% is vereist. + +Bedragen onder 0.546 keer het minimum vergoeding worden weergegeven als DUST. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Dit label wordt rood, als de verandering kleiner is dan %1. + +Dit betekend dat een fee van %2 is vereist. + + + + + (no label) + (geen label) + + + + change from %1 (%2) + wijzig van %1 (%2) + + + + (change) + (wijzig) + + + + EditAddressDialog + + + Edit Address + Bewerk Adres + + + + &Label + &Label + + + + The label associated with this address book entry + Het label geassocieerd met deze notitie in het adresboek + + + + &Address + &Adres + + + + The address associated with this address book entry. This can only be modified for sending addresses. + Het adres geassocieerd met deze notitie in het adresboek. Dit kan enkel aangepast worden bij verzend-adressen. + + + + &Stealth Address + Onzichtbaar Adres + + + + New receiving address + Nieuw ontvangstadres + + + + New sending address + Nieuw adres om naar te verzenden + + + + Edit receiving address + Bewerk ontvangstadres + + + + Edit sending address + Bewerk adres om naar te verzenden + + + + The entered address "%1" is not a valid Alias address. + Het ingevoerde adres "%1" is geen geldig Alias adres. + + + + The entered address "%1" is already in the address book. + Het opgegeven adres "%1" bestaat al in uw adresboek. + + + + Could not unlock wallet. + Kon de portemonnee niet openen. + + + + New key generation failed. + Genereren nieuwe sleutel mislukt. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + Alias + + + + version + versie + + + + Usage: + Gebruik: + + + + command-line options + Commandoregel-opties + + + + UI options + Gebruikerinterface-opties + + + + Set language, for example "de_DE" (default: system locale) + Stel taal in, bijvoorbeeld "de_DE" (standaard: systeeminstellingen) + + + + Start minimized + Geminimaliseerd starten + + + + Show splash screen on startup (default: 1) + Laat laadscherm zien bij het opstarten. (standaard: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + Kan alias niet starten: click-om-te-betalen handler + + + + PeerTableModel + + + Address/Hostname + Adres/Hostnaam + + + + User Agent + Gebruiker Agent + + + + Ping Time + Ping tijd + + + + QObject + + + %1 d + %1 d + + + + %1 h + %1 h + + + + %1 m + %1 m + + + + + %1 s + %1 s + + + + None + Geen + + + + N/A + N.v.t. + + + + %1 ms + %1 ms + + + + RPCConsole + + + Alias - Debug window + Alias - Debug scherm + + + + &Information + &Informatie + + + + Alias Core + Alias Core + + + + Client name + Clientnaam + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N.v.t. + + + + Client version + Clientversie + + + + Using OpenSSL version + Gebruikt OpenSSL versie + + + + Using BerkeleyDB version + Gebruikt BerkeleyDB versie + + + + Build date + Bouwdatum + + + + Startup time + Opstarttijd + + + + Network + Netwerk + + + + Name + Naam + + + + Number of connections + Aantal connecties + + + + Block chain + Blokketen + + + + Current number of blocks + Huidig aantal blokken + + + + Estimated total blocks + Geschat totaal aantal blokken + + + + Last block time + Tijd laatste blok + + + + Debug log file + Debug-logbestand + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + Open de Alias debog log bestand van de huidige data directory. Dit kan enkele minuten duren voor grote log bestanden. + + + + &Open + &Open + + + + Command-line options + Commandoregel-opties + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + &Show + + + + &Console + &Console + + + + Clear console + Maak console leeg + + + + &Network Traffic + &Netwerkverkeer + + + + &Clear + &Opschonen + + + + Totals + Totalen + + + + + In: + In: + + + + + Out: + Uit: + + + + &Peers + &Peers + + + + + + Select a peer to view detailed information. + Selecteer een peer om gedetailleerde info te zien. + + + + Peer ID + Peer ID + + + + Direction + Directie + + + + Version + Versie + + + + User Agent + Gebruiker Agent + + + + Services + Diensten + + + + Starting Height + Start Hoogte + + + + Sync Height + Sync Hoogte + + + + Ban Score + Ban Score + + + + Connection Time + Connectie Tijd + + + + Last Send + Laatst Verzonden + + + + Last Receive + Laatst Ontvangen + + + + Bytes Sent + Bytes verstuurd + + + + Bytes Received + Bytes ontvangen + + + + Ping Time + Ping tijd + + + + Time Offset + Tijd compenseren + + + + Welcome to the Alias Core RPC console. + Welkom bij het Alias Kern RPC paneel. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Gebruik de pijltjestoetsen om door de geschiedenis te navigeren, en <b>Ctrl-L</b> om het scherm leeg te maken. + + + + Type <b>help</b> for an overview of available commands. + Typ <b>help</b> voor een overzicht van de beschikbare commando's. + + + + via %1 + via %1 + + + + + never + nooit + + + + Inbound + Inkomend + + + + Outbound + Uitgaand + + + + Unknown + Onbekend + + + + + Fetching... + Ophalen... + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + KB/s + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Openen totdat %1 + + + + conflicted + conflicted + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/onbevestigd + + + + %1 confirmations + %1 bevestigingen + + + + Transaction ID + Transactie-ID: + + + + Block Hash + + + + + Status + Status + + + + , has not been successfully broadcast yet + , is nog niet met succes uitgezonden + + + + , broadcast through %n node(s) + + + + + Date + Datum + + + + Source + Bron + + + + Generated + Gegenereerd + + + + + Credit + Credit + + + + matures in %n more block(s) + + + + + not accepted + niet geaccepteerd + + + + Transaction fee + Transactiekosten + + + + Net amount + Netto bedrag + + + + Message + Bericht + + + + Comment + Opmerking + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Gegenereerd munten moeten 450 blokken maturen voordat ze kunnen worden besteed. Wanneer je een blok genereerd, het naar het netwerk is verzonden en toegevoegd aan de blokketen, zal de status veranderen naar "niet geaccepteerd"and kan het niet uitgegeven worden. Dit kan soms gebeuren als een ander knooppunt genereert een blok binnen een paar seconden na jou. + + + + Debug information + Debug-informatie + + + + Debit + Debet + + + + Transaction + Transactie + + + + Inputs + Inputs + + + + Amount + Bedrag + + + + true + waar + + + + false + onwaar + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + onbekend + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Transactiedetails + + + + This pane shows a detailed description of the transaction + Dit venster laat een uitgebreide beschrijving van de transactie zien + + + + TransactionTableModel + + + Date + Datum + + + + Type + Type + + + + Address + Adres + + + + Note + + + + + Amount + Bedrag + + + + Open for %n more block(s) + + + + + Open until %1 + Open tot %1 + + + + Offline + Offline + + + + Unconfirmed + Onbevestigd: + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Bevestigen.. (%1 van de %2 bevestigingen) + + + + Confirmed (%1 confirmations) + Bevestigd (%1 bevestigingen) + + + + Conflicted + Conflicted + + + + Immature (%1 confirmations, will be available after %2) + Immature (%1 bevestiging, word beschikbaar na %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (nvt) + + + + Transaction status. Hover over this field to show number of confirmations. + Transactiestatus. Houd de muiscursor boven dit veld om het aantal bevestigingen te laten zien. + + + + Date and time that the transaction was received. + Datum en tijd waarop deze transactie is ontvangen. + + + + Type of transaction. + Type transactie. + + + + Destination address of transaction. + Ontvangend adres van transactie. + + + + Amount removed from or added to balance. + Bedrag verwijderd van of toegevoegd aan saldo + + + + WalletModel + + + + Sending... + Versturen... + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_pl.ts b/src/qt/locale/alias_pl.ts new file mode 100644 index 0000000000..1d8e637bde --- /dev/null +++ b/src/qt/locale/alias_pl.ts @@ -0,0 +1,4294 @@ + + + AboutDialog + + + About Alias + O Alias + + + + <b>Alias</b> version + <b>Alias</b> wersja + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Etykieta + + + + Address + Adres + + + + pubkey + + + + + stealth + + + + + (no label) + (bez etykiety) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Okienko Hasła + + + + Enter passphrase + Wpisz hasło + + + + New passphrase + Nowe hasło + + + + Repeat new passphrase + Powtórz nowe hasło + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Wprowadź nowe hasło dla portfela.<br/>Proszę użyć hasła składającego się z <b>10 lub więcej losowych znaków</b> lub <b>ośmiu lub więcej słów</b>. + + + + Encrypt wallet + Zaszyfruj portfel + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Ta operacja wymaga hasła do portfela ażeby odblokować portfel. + + + + Unlock wallet + Odblokuj portfel + + + + This operation needs your wallet passphrase to decrypt the wallet. + Ta operacja wymaga hasła do portfela ażeby odszyfrować portfel. + + + + Decrypt wallet + Odszyfruj portfel + + + + Change passphrase + Zmień hasło + + + + Enter the old and new passphrase to the wallet. + Podaj stare i nowe hasło do portfela. + + + + Confirm wallet encryption + Potwierdź szyfrowanie portfela + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Uwaga: Jeśli zaszyfrujesz swój portfel i zgubisz hasło, wtedy<b>UTRACISZ SWOJE MONETY!</b>! + + + + Are you sure you wish to encrypt your wallet? + Jesteś pewien, że chcesz zaszyfrować swój portfel? + + + + + Wallet encrypted + Portfel zaszyfrowany + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + WAŻNE: Wszystkie wykonane wcześniej kopie pliku portfela powinny być zamienione na nowe, szyfrowane pliki. Z powodów bezpieczeństwa, poprzednie kopie nieszyfrowanych plików portfela staną się bezużyteczne jak tylko zaczniesz korzystać z nowego, szyfrowanego portfela. + + + + + + + Wallet encryption failed + Szyfrowanie portfela nie powiodło się + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Szyfrowanie portfela nie powiodło się z powodu wewnętrznego błędu. Twój portfel nie został zaszyfrowany. + + + + + The supplied passphrases do not match. + Podane hasła nie są takie same. + + + + Wallet unlock failed + Odblokowanie portfela nie powiodło się + + + + + + The passphrase entered for the wallet decryption was incorrect. + Wprowadzone hasło do odszyfrowania portfela jest niepoprawne. + + + + Wallet decryption failed + Odszyfrowanie portfela nie powiodło się + + + + Wallet passphrase was successfully changed. + Hasło portfela zostało pomyślnie zmienione. + + + + + Warning: The Caps Lock key is on! + Uwaga: Klawisz Caps Lock jest włączony + + + + ClientModel + + + Network Alert + Sieć Alert + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + Ilość: + + + + Bytes: + Bajtów: + + + + Amount: + Kwota: + + + + Priority: + Priorytet: + + + + Fee: + Opłata: + + + + Low Output: + + + + + After Fee: + Po opłacie: + + + + Change: + Reszta: + + + + (un)select all + Zaznacz/Odznacz wszystko + + + + Tree mode + Widok drzewa + + + + List mode + Widok listy + + + + Amount + Kwota + + + + Label + + + + + Address + Adres + + + + Date + Data + + + + Confirmations + Potwierdzenia + + + + Confirmed + Potwierdzony + + + + Priority + Priorytet + + + + Copy address + Kopiuj adres + + + + Copy label + Kopiuj etykietę + + + + + Copy amount + Kopiuj kwotę + + + + Copy transaction ID + Skopiuj ID transakcji + + + + Copy quantity + Skopiuj ilość + + + + Copy fee + Skopiuj opłatę + + + + Copy after fee + Skopiuj ilość po opłacie + + + + Copy bytes + Skopiuj ilość bajtów + + + + Copy priority + Skopiuj priorytet + + + + Copy low output + + + + + Copy change + Skopiuj resztę + + + + highest + najwyższa + + + + high + wysoka + + + + medium-high + średnio wysoki + + + + medium + średnia + + + + low-medium + średnio niski + + + + low + niski + + + + lowest + najniższy + + + + + DUST + + + + + + yes + tak + + + + + no + nie + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (bez etykiety) + + + + change from %1 (%2) + reszta z %1 (%2) + + + + (change) + (reszta) + + + + EditAddressDialog + + + Edit Address + Edytuj adres + + + + &Label + &Etykieta + + + + The label associated with this address book entry + + + + + &Address + &Adres + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Nowy adres odbiorczy + + + + New sending address + Nowy adres wysyłania + + + + Edit receiving address + Edytuj adres odbioru + + + + Edit sending address + Edytuj adres wysyłania + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Wprowadzony adres "%1" już istnieje w książce adresowej. + + + + Could not unlock wallet. + Nie można było odblokować portfela. + + + + New key generation failed. + Tworzenie nowego klucza nie powiodło się. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informacje + + + + Alias Core + + + + + Client name + Nazwa klienta + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + NIEDOSTĘPNE + + + + Client version + Wersja klienta + + + + Using OpenSSL version + Używana wersja OpenSSL + + + + Using BerkeleyDB version + + + + + Build date + Data kompilacji + + + + Startup time + Czas uruchomienia + + + + Network + Sieć + + + + Name + + + + + Number of connections + Liczba połączeń + + + + Block chain + Ciąg bloków + + + + Current number of blocks + Aktualna liczba bloków + + + + Estimated total blocks + Szacowana ilość bloków + + + + Last block time + Czas ostatniego bloku + + + + Debug log file + Plik logowania debugowania + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Otwórz + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Konsola + + + + Clear console + Wyczyść konsolę + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Użyj strzałek do przewijania historii i <b>Ctrl-L</b> aby wyczyścić ekran + + + + Type <b>help</b> for an overview of available commands. + Wpisz <b>help</b> aby uzyskać listę dostępnych komend + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Otwórz do %1 + + + + conflicted + + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/niezatwierdzone + + + + %1 confirmations + %1 potwierdzeń + + + + Transaction ID + ID transakcji + + + + Block Hash + + + + + Status + Status + + + + , has not been successfully broadcast yet + , nie został jeszcze pomyślnie wyemitowany + + + + , broadcast through %n node(s) + + + + + Date + Data + + + + Source + Źródło + + + + Generated + Wygenerowano + + + + + Credit + Przypisy + + + + matures in %n more block(s) + + + + + not accepted + niezaakceptowane + + + + Transaction fee + Prowizja transakcji + + + + Net amount + Kwota netto + + + + Message + Wiadomość + + + + Comment + Komentarz + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Informacje debugowania + + + + Debit + Debet + + + + Transaction + Transakcja + + + + Inputs + Wejścia + + + + Amount + Kwota + + + + true + prawda + + + + false + fałsz + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + nieznany + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Szczegóły transakcji + + + + This pane shows a detailed description of the transaction + Ten panel pokazuje szczegółowy opis transakcji + + + + TransactionTableModel + + + Date + Data + + + + Type + Typ + + + + Address + Adres + + + + Note + + + + + Amount + Kwota + + + + Open for %n more block(s) + + + + + Open until %1 + Otwórz do %1 + + + + Offline + + + + + Unconfirmed + Niepotwierdzone: + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Potwierdzanie (%1 z %2 rekomendowanych potwierdzeń) + + + + Confirmed (%1 confirmations) + Zatwierdzony (%1 potwierdzeń) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (brak) + + + + Transaction status. Hover over this field to show number of confirmations. + Status transakcji. Najedź na pole, aby zobaczyć liczbę potwierdzeń. + + + + Date and time that the transaction was received. + Data i czas odebrania transakcji. + + + + Type of transaction. + Rodzaj transakcji. + + + + Destination address of transaction. + Adres docelowy transakcji. + + + + Amount removed from or added to balance. + Kwota usunięta z lub dodana do konta. + + + + WalletModel + + + + Sending... + + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_pt_BR.ts b/src/qt/locale/alias_pt_BR.ts new file mode 100644 index 0000000000..aa1b5a5b1b --- /dev/null +++ b/src/qt/locale/alias_pt_BR.ts @@ -0,0 +1,4296 @@ + + + AboutDialog + + + About Alias + Sobre o Alias + + + + <b>Alias</b> version + <b>Alias</b> versao + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + © 2020 Desenvolvedores do Alias© 2016 Spectrecoin developers© 2014 ShadowCash developers© 2014 BlackCoin developers© 2012 NovaCoin developers© 2009 Bitcoin developers + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + Este é um software experimental.Distribuído sob a licença do software MIT/X11, veja o arquivo COPYING ou <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>.Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) e software criptográfico escrito por Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) e software UPnP escrito por Thomas Bernard. + + + + AddressTableModel + + + Label + Rótulo + + + + Address + Endereço + + + + pubkey + pubkey + + + + stealth + furto + + + + (no label) + (Sem rótulo) + + + + Stealth Address + Endereço furtivo + + + + n/a + n/a + + + + AskPassphraseDialog + + + Passphrase Dialog + Janela da Frase de Segurança + + + + Enter passphrase + Digite a frase de segurança + + + + New passphrase + Nova frase de segurança + + + + Repeat new passphrase + Repita a nova frase de segurança + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Serve para desativar o envio de dinheiro trivial quando conta do SO for comprometida. Não oferece segurança real. + + + + For staking only + Apenas para participação + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Digite a nova frase de seguraça da sua carteira. <br/> Por favor, use uma frase de <b>10 ou mais caracteres aleatórios,</b> ou <b>oito ou mais palavras.</b> + + + + Encrypt wallet + Criptografar carteira + + + + Keep wallet unlocked for staking. + Manter a carteira destrancada para a estaca. + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + A sua carteira contém ATXOs trancados para os quais o seu estado de gastos só pode ser determinado com a sua chave privada.O seu <b> equilíbrio ALIAS privado pode ser mostrado errado</b>. + + + + <b>Alias Wallet Login</b> + <b>Acesso à carteira Alias</b> + + + + This operation needs your wallet passphrase to unlock the wallet. + Esta operação precisa de sua frase de segurança para desbloquear a carteira. + + + + Unlock wallet + Desbloquear carteira + + + + This operation needs your wallet passphrase to decrypt the wallet. + Esta operação precisa de sua frase de segurança para descriptografar a carteira. + + + + Decrypt wallet + Descriptografar carteira + + + + Change passphrase + Alterar frase de segurança + + + + Enter the old and new passphrase to the wallet. + Digite a frase de segurança antiga e nova para a carteira. + + + + Confirm wallet encryption + Confirmar criptografia da carteira + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Aviso: Se você criptografar sua carteira e perder sua senha, você vai <b>PERDER TODAS AS SUAS MOEDAS</ b>! + + + + Are you sure you wish to encrypt your wallet? + Tem certeza de que deseja criptografar sua carteira? + + + + + Wallet encrypted + Carteira criptografada + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias vai fechar agora para concluir o processo de criptografia. Lembre-se que a criptografia de sua carteira não pode proteger totalmente suas moedas de serem roubados por malwares infectem seu computador. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANTE: Qualquer backup prévio que você tenha feito do seu arquivo wallet deve ser substituído pelo novo e encriptado arquivo wallet gerado. Por razões de segurança, qualquer backup do arquivo wallet não criptografado se tornará inútil assim que você começar a usar uma nova carteira criptografada. + + + + + + + Wallet encryption failed + A criptografia da carteira falhou + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + A criptografia da carteira falhou devido a um erro interno. Sua carteira não estava criptografada. + + + + + The supplied passphrases do not match. + A frase de segurança fornecida não confere. + + + + Wallet unlock failed + A abertura da carteira falhou + + + + + + The passphrase entered for the wallet decryption was incorrect. + A frase de segurança digitada para a descriptografia da carteira estava incorreta. + + + + Wallet decryption failed + A descriptografia da carteira falhou + + + + Wallet passphrase was successfully changed. + A frase de segurança da carteira foi alterada com êxito. + + + + + Warning: The Caps Lock key is on! + Cuidado: A tecla Caps Lock está ligada! + + + + ClientModel + + + Network Alert + Alerta da Rede + + + + CoinControlDialog + + + Coin Control + Controlo de Moedas + + + + Quantity: + Quantidade: + + + + Bytes: + Bytes: + + + + Amount: + Quantia: + + + + Priority: + Prioridade: + + + + Fee: + Taxa: + + + + Low Output: + Rendimento baixo: + + + + After Fee: + Depois da taxa: + + + + Change: + trocar + + + + (un)select all + (de)selecionar tudo + + + + Tree mode + Modo árvore + + + + List mode + Modo lista + + + + Amount + Quantidade + + + + Label + Rótulo + + + + Address + Endereço + + + + Date + Data + + + + Confirmations + Confirmações + + + + Confirmed + Confirmado + + + + Priority + Prioridade + + + + Copy address + Copiar endereço + + + + Copy label + Copiar etiqueta + + + + + Copy amount + Copiar quantia + + + + Copy transaction ID + Copiar ID da transação + + + + Copy quantity + Copiar quantidade + + + + Copy fee + Copiar taxa + + + + Copy after fee + Copia pós-taxa + + + + Copy bytes + Copiar bytes + + + + Copy priority + Copia prioridade + + + + Copy low output + Copia saída de pouco valor + + + + Copy change + Copia alteração + + + + highest + mais alta possível + + + + high + alta + + + + medium-high + média-alta + + + + medium + média + + + + low-medium + média-baixa + + + + low + baixa + + + + lowest + a mais baixa possível + + + + + DUST + + + + + + yes + sim + + + + + no + não + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Este rótulo fica vermelho, se o tamanho da transacção for superior a 10000 bytes.Isto significa que é necessária uma taxa de pelo menos %1 por kb.Pode variar +/- 1 Byte por entrada. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + As transacções com maior prioridade são mais susceptíveis de entrar num bloco.Este rótulo fica vermelho, se a prioridade for menor do que "média".Isto significa que é necessária uma taxa de pelo menos %1 por kb. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Este rótulo fica vermelho, se algum recipiente receber uma quantidade inferior a %1.Isto significa que é exigida uma taxa de pelo menos %2.Os montantes inferiores a 0,546 vezes a taxa mínima de retransmissão são mostrados como PÓ. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Este rótulo fica vermelho, se a alteração for inferior a %1.Isto significa que é necessária uma taxa de pelo menos %2. + + + + + (no label) + (Sem rótulo) + + + + change from %1 (%2) + troco de %1 (%2) + + + + (change) + (troco) + + + + EditAddressDialog + + + Edit Address + Editar Endereço + + + + &Label + &Etiqueta + + + + The label associated with this address book entry + O rótulo associado a esta entrada da lista de endereços + + + + &Address + &Endereço + + + + The address associated with this address book entry. This can only be modified for sending addresses. + O endereço associado a esta entrada da lista de endereços. Este só pode ser modificado para o envio de endereços. + + + + &Stealth Address + &Stealth Endereço + + + + New receiving address + Novo endereço de recebimento + + + + New sending address + Novo endereço de envio + + + + Edit receiving address + Editar endereço de recebimento + + + + Edit sending address + Editar endereço de envio + + + + The entered address "%1" is not a valid Alias address. + O endereço introduzido "%1" não é um endereço Alias válido. + + + + The entered address "%1" is already in the address book. + O endereço digitado "%1" já se encontra no catálogo de endereços. + + + + Could not unlock wallet. + Não foi possível destravar a carteira. + + + + New key generation failed. + A geração de nova chave falhou. + + + + EncryptWalletPage + + + Wallet Encryption + Encriptação de carteira + + + + Please enter a password to encrypt the wallet.dat file. + Por favor, introduza uma palavra-passe para encriptar o ficheiro wallet.dat. + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + A senha protege as suas chaves privadas e será pedida pela carteira no arranque e para operações críticas. + + + + &Wallet Password: + &Wallet Password: + + + + &Verify Password: + &Verificar Palavra-passe: + + + + Create and encrypt wallet.dat ... + Criar e encriptar carteira.dat ... + + + + Error + Erro + + + + Failed to create wallet.dat. ErrorCode: %1 + Falha na criação da carteira.dat. Código de erro: %1 + + + + GUIUtil::HelpMessageBox + + + + Alias + Aliás + + + + version + versão + + + + Usage: + Utilização: + + + + command-line options + opções de linha de comando + + + + UI options + Opções UI + + + + Set language, for example "de_DE" (default: system locale) + Definir idioma, por exemplo "de_DE" (predefinição: locale do sistema) + + + + Start minimized + Comece minimizado + + + + Show splash screen on startup (default: 1) + Mostrar ecrã de respingo no arranque (predefinição: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + Importar carteira.dat + + + + Please import a wallet.dat file with your private keys. + Por favor, importe um ficheiro wallet.dat com as suas chaves privadas. + + + + &Select wallet.dat + &Seleccionar carteira.dat + + + + QFileDialog::getOpenFileName() + QFileDialog::getOpenFileName() + + + + Wallet Files (*.dat) + Ficheiros de carteira (*.dat) + + + + Error + Erro + + + + Failed to copy wallet.dat: %1 + Falha em copiar carteira.dat: %1 + + + + IntroPage + + + Set Up Your Wallet + Prepare a sua carteira + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + A aplicação detectou que não tem um ficheiro wallet.dat, que contém as suas chaves privadas. Por favor, escolha como pretende criar ou restaurar as suas chaves privadas. + + + + &Create new mnemonic recovery seed words + &Criar novas palavras de sementes de recuperação mnemónica + + + + &Recover from your existing mnemonic seed words + &Recubra a partir das suas palavras mnemónicas de sementes existentes + + + + &Import wallet.dat file + &Importar carteira.dat + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + Criar chaves privadas com Mnemonic Recovery Seed Words + + + + Step 2/3: Write down your mnemonic recovery seed words. + Passo 2/3: Escreva as suas palavras de sementes de recuperação mnemónica. + + + + Mnemonic Recovery Seed Words: + Mnemonic Recovery Seed Words: + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + Precisa das Palavras de Recuperação Mnemónica para restaurar esta carteira. Escreva-as e guarde-as num local seguro.<br> Ser-lhe-á pedido que confirme as Palavras de Sementes de Recuperação no ecrã seguinte, para se certificar de que as escreveu correctamente. + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + Criar chaves privadas com Mnemonic Recovery Seed Words + + + + Step 1/3: Please define language to use and optional password to protect your seed. + Passo 1/3: Por favor, defina a língua a utilizar e a palavra-passe opcional para proteger a sua semente. + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + A criação de palavras de sementes mnemónicas é um procedimento em três etapas:<ol><li> Definir a língua e a palavra-passe opcional para a sua semente. </li><li>Anotar as palavras-semente criadas. </li><li>Verificar palavras-semente e palavra-passe da semente.</li></ol> + + + + &Language: + &Linguagem: + + + + &Seed Password: + &Seed Senha: + + + + &Verify Password: + &Verificar Palavra-passe: + + + + Error + Erro + + + + Failed to create Mnemonic Seed Words. %1 + Falha na criação das Palavras Sementes Mnemónicas. %1 + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + Criar chaves privadas com Mnemonic Recovery Seed Words + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + Passo 3/3: Verificar se tem as palavras correctas e a palavra-passe (opcional) anotada. + + + + &Seed Password: + &Seed Senha: + + + + <br>Enter Mnemonic Seed Words: + <br>Introduzir Palavras Mnemónicas de Sementes: + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + Não pode iniciar Alias: manipulador "click-to-pay". + + + + PeerTableModel + + + Address/Hostname + Morada/nome do anfitrião + + + + User Agent + Agente do utilizador + + + + Ping Time + Tempo de Ping + + + + QObject + + + %1 d + %1 d + + + + %1 h + %1 h + + + + %1 m + %1 m + + + + + %1 s + %1 s + + + + None + Nenhum + + + + N/A + N/A + + + + %1 ms + %1 ms + + + + RPCConsole + + + Alias - Debug window + Alias - Janela de depuração + + + + &Information + &Informação + + + + Alias Core + Núcleo de Alias + + + + Client name + Nome do cliente + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Versão do cliente + + + + Using OpenSSL version + Usando OpenSSL versão + + + + Using BerkeleyDB version + Utilização da versão BerkeleyDB + + + + Build date + Data do 'build' + + + + Startup time + Horário de inicialização + + + + Network + Rede + + + + Name + Nome + + + + Number of connections + Número de conexões + + + + Block chain + Corrente de blocos + + + + Current number of blocks + Quantidade atual de blocos + + + + Estimated total blocks + Total estimado de blocos + + + + Last block time + Horário do último bloco + + + + Debug log file + Arquivo de log de Depuração + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + Abrir o ficheiro de registo Alias debug a partir do directório de dados actual. Isto pode demorar alguns segundos para grandes ficheiros de registo. + + + + &Open + &Abrir + + + + Command-line options + Opções de linha de comando + + + + Show the Alias help message to get a list with possible Alias command-line options. + Mostrar a mensagem de ajuda do Alias para obter uma lista com possíveis opções de linha de comando Alias. + + + + &Show + &Mostra + + + + &Console + &Console + + + + Clear console + Limpar console + + + + &Network Traffic + &Tráfego na rede + + + + &Clear + &Clear + + + + Totals + Totais + + + + + In: + In: + + + + + Out: + Fora: + + + + &Peers + &Peers + + + + + + Select a peer to view detailed information. + Seleccione um par para ver informação detalhada. + + + + Peer ID + ID de pares + + + + Direction + Direcção + + + + Version + Versão + + + + User Agent + Agente do usuário + + + + Services + Serviços + + + + Starting Height + Altura de início + + + + Sync Height + Altura da Sincronização + + + + Ban Score + Pontuação de proibição + + + + Connection Time + Tempo de ligação + + + + Last Send + Último envio + + + + Last Receive + Última Recepção + + + + Bytes Sent + Bytes Enviados + + + + Bytes Received + Bytes Recebidos + + + + Ping Time + Tempo de Ping + + + + Time Offset + Compensação do tempo + + + + Welcome to the Alias Core RPC console. + Bem-vindo à consola Alias Core RPC. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Use as setas para cima e para baixo para navegar pelo histórico, e <b>Ctrl-L</b> para limpar a tela. + + + + Type <b>help</b> for an overview of available commands. + Digite <b>help</b> para uma visão geral dos comandos disponíveis. + + + + via %1 + via %1 + + + + + never + nunca + + + + Inbound + Recebido + + + + Outbound + Saída + + + + Unknown + Desconhecido + + + + + Fetching... + Apanhando... + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + Recuperar chaves privadas de Mnemonic Seed Words + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + Por favor introduza (opcional) a palavra-passe e as suas palavras-semente mnemónicas para recuperar chaves privadas. + + + + &Seed Password: + &Seed Senha: + + + + &Verify Password: + &Verificar Palavra-passe: + + + + <br>Enter Mnemonic Seed Words: + <br>Introduzir Palavras Mnemónicas de Sementes: + + + + Error + Erro + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + Falha na recuperação de chaves privadas de Mnemonic Seed Words. %1 + + + + SetupWalletWizard + + + Alias Wallet Setup + Configuração de Carteira Alias + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + O ficheiro 'wallet.dat', que contém as suas chaves privadas, não pôde ser encontrado durante o arranque. Deve ser criado agora. <br><br>A chave privada consiste em caracteres alfanuméricos que dão a um utilizador acesso e controlo sobre os seus fundos ao seu correspondente endereço de moeda criptográfico. Por outras palavras, a chave privada cria assinaturas digitais únicas para cada transacção que permitem ao utilizador gastar os seus fundos, provando que o utilizador tem, de facto, a propriedade desses fundos.Traduzido com a versão gratuita do tradutor - www.DeepL.com/Translator + + + + If you have a backup of a wallet.dat, you can import this file. + Se tiver uma cópia de segurança de uma carteira.dat, pode importar este ficheiro. + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + As Palavras Sementes Mnemónicas permitem-lhe criar e mais tarde recuperar as suas chaves privadas. A semente consiste em 24 palavras e a palavra-chave opcional funciona como uma 25ª palavra que pode manter em segredo para proteger a sua semente. + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + Recomenda-se fazer múltiplas cópias das palavras das sementes, armazenadas em locais diferentes. <br><br><b>Attenção:</b> As palavras-semente não podem ser (re)criadas mais tarde a partir das suas chaves privadas exsting. <br>Se perder as suas palavras-semente e não tiver uma cópia de segurança do ficheiro wallet.dat, perde as suas moedas! + + + + Please enter the mnemonic words and password given on the previous screen. + Por favor, introduza as palavras mnemónicas e a palavra-passe fornecidas no ecrã anterior. + + + + Please enter your mnemonic words and (optional) password. + Por favor, introduza as suas palavras mnemónicas e palavra-chave (opcional). + + + + This help is likely not to be of any help. + É provável que esta ajuda não seja de nenhuma ajuda. + + + + Alias Wallet Setup Help + Ajuda para configurar a carteira Alias + + + + SpectreBridge + + + default + padrão + + + + <b>%1</b> from your public balance to %2 (%3) + <b>%1 </b>do seu saldo público a %2 (%3) + + + + <b>%1</b> from public to private, using address %2 (%3) + <b>%1 </b>do público ao privado, utilizando o endereço %2 (%3) + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + <b>%1</b> do seu saldo privado, tamanho do anel %2, a %3 (%4) + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + <b>%1</b> de privado para público, tamanho do anel %2, utilizando endereço %3 (%4) + + + + + + + Error: + Erro: + + + + Unknown txn type detected %1. + Tipo txn desconhecido detectado %1. + + + + Input types must match for all recipients. + Os tipos de entrada devem corresponder a todos os destinatários. + + + + Ring sizes must match for all recipients. + Os tamanhos dos anéis devem corresponder a todos os recipientes. + + + + Ring size must be %1. + O tamanho do anel deve ser %1. + + + + Ring size outside range [%1, %2]. + Tamanho do anel fora da gama [%1, %2]. + + + + + Confirm send coins + Confirmar envio de moedas + + + + Are you sure you want to send? +Ring size of one is not anonymous. + Tem a certeza de que quer enviar?O tamanho do anel de um não é anónimo. + + + + + and + e + + + + Are you sure you want to convert %1? + Tem a certeza de que quer converter %1? + + + + Are you sure you want to send %1? + Tem a certeza de que quer enviar %1? + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + Envio de Moedas + + + + The change address is not valid, please recheck. + O endereço de alteração não é válido, por favor voltar a verificar. + + + + The recipient address is not valid, please recheck. + O endereço do destinatário não é válido, por favor voltar a verificar. + + + + Only ALIAS from your Private balance can be send to a stealth address. + Apenas ALIAS do seu saldo Privado pode ser enviado para um endereço furtivo. + + + + Transfer from Public to Private is only allowed within your account. + A transferência de público para privado só é permitida dentro da sua conta. + + + + Transfer from Private to Public is only allowed within your account. + A transferência de Privado para Público só é permitida dentro da sua conta. + + + + The amount to pay must be larger than 0. + O montante a pagar deve ser superior a 0. + + + + The amount exceeds your balance. + O montante excede o seu saldo. + + + + The total exceeds your balance when the %1 transaction fee is included. + O total excede o seu saldo quando a taxa de transacção %1 está incluída. + + + + Duplicate address found, can only send to each address once per send operation. + Endereço duplicado encontrado, só pode ser enviado para cada endereço uma vez por operação de envio. + + + + Error: Transaction creation failed. + Erro: A criação da transacção falhou. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Erro: A transacção foi rejeitada. Isto poderia acontecer se algumas das moedas na carteira já tivessem sido gastas, como por exemplo, se utilizasse uma cópia da carteira.dat e as moedas fossem gastas na cópia mas não marcadas como tendo sido gastas aqui. + + + + Error: Note is too long. + Erro: Nota: É demasiado longo. + + + + Error: Ring Size Error. + Erro: Erro de Tamanho do Anel. + + + + Error: Input Type Error. + Erro: Erro de Tipo de Entrada. + + + + Error: Must be in full mode to send anon. + Erro: Deve estar no modo completo para enviar anon. + + + + Error: Invalid Stealth Address. + Erro: Endereço Inválido do Stealth. + + + + Convert Alias from Private to Public + Converter Alias de Privado para Público + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + Erro: Endereço Inválido do Stealth. A conversão de privado para público requer um endereço furtivo. + + + + The amount exceeds your ALIAS balance. + O montante excede o seu saldo ALIAS. + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + O total excede o seu saldo privado ALIAS quando a taxa de transacção %1 está incluída + + + + Error generating transaction. + Transacção geradora de erros. + + + + Error generating transaction: %1 + Transacção geradora de erros: %1 + + + + Transaction successfully created. + Transacção criada com sucesso. + + + + Please restart wallet + Por favor, reinicie a carteira + + + + The used language has changed. +Please restart the wallet! + A linguagem usada mudou.Por favor, reinicie a carteira! + + + + SpectreGUI + + + Public received with + Público recebido com + + + + Public received from + Público recebido de + + + + Public sent to + Público enviado para + + + + Public sent to self + Público enviado a si próprio + + + + Private sent to self + Privado enviado a si próprio + + + + Public staked + Público apostado + + + + Public donated + Público doado + + + + Public contributed + Contribuição pública + + + + Private staked + Estaca privada + + + + Private donated + Particulares doados + + + + Private contributed + Contribuição privada + + + + Private received with + Privado recebido com + + + + Private sent to + Particular enviado para + + + + Private to Public + Privado ao Público + + + + Public to Private + Público para Privado + + + + Other + Outros + + + + + + + Alias + Aliás + + + + Client + Cliente + + + + ..Start UI.. + ...Começar a UI... + + + + .Start UI. + Iniciar IU. + + + + Ready! + Prontos! + + + + E&xit + E&xit + + + + Quit application + Deixar a aplicação + + + + &About Alias + &Sobre o Alias + + + + Show information about Alias + Mostrar informação sobre o Alias + + + + About &Qt + Sobre &Qt + + + + Show information about Qt + Mostrar informação sobre Qt + + + + &Options... + &Opções... + + + + Modify configuration options for Alias + Modificar opções de configuração para Alias + + + + &Show / Hide + &Show / Esconder + + + + &Encrypt Wallet... + &Encrypt Carteira... + + + + Encrypt or decrypt wallet + Encriptar ou desencriptar a carteira + + + + &Backup Wallet... + Carteira &Backup... + + + + Backup wallet to another location + Carteira de reserva para outro local + + + + &Change Passphrase... + &Change Passphrase... + + + + Change the passphrase used for wallet encryption + Alterar a frase-senha utilizada para a encriptação de carteiras + + + + &Unlock Wallet... + Carteira &Unlock... + + + + Unlock wallet + Desbloquear carteira + + + + &Lock Wallet + Carteira &Lock + + + + Lock wallet + Fechadura de carteira + + + + &Debug window + & Janela de depuração + + + + Open debugging and diagnostic console + Depuração aberta e consola de diagnóstico + + + + &File + & Ficheiro + + + + &Settings + &Configurações + + + + &Help + &Ajuda + + + + Wallet + Carteira + + + + + [testnet] + [testnet] + + + + %n active connection(s) to Alias network + %n ligações activas à rede Alias%n ligações activas à rede Alias + + + + block + bloco + + + + header + cabeçalho + + + + blocks + blocos + + + + headers + cabeçalhos + + + + + Synchronizing with network... + Sincronização com a rede... + + + + Downloading filtered blocks... + Descarregar blocos filtrados... + + + + ~%1 filtered block(s) remaining (%2% done). + ~%1 bloco filtrado(s) restante (%2% feito). + + + + Importing blocks... + Importação de blocos... + + + + ~%n block(s) remaining + %n blocos restantes%n blocos restantes + + + + Imported %1 of %2 %3 of transaction history (%4% done). + Importado %1 de %2 %3 do histórico de transacções (%4% feito). + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + Descarregado %1 de %2 %3 do histórico de transacções (%4% feito). + + + + Imported %n block(s) of transaction history. + Importado %n blocos de histórico de transacções.Importado %n blocos de histórico de transacções. + + + + Downloaded %n block(s) of transaction history. + Transferido %n blocos de histórico de transacções.Transferido %n blocos de histórico de transacções. + + + + %n second(s) ago + %n segundos atrás%n segundos atrás + + + + %n minute(s) ago + %n minutos atrás%n minutos atrás + + + + %n hour(s) ago + há %n horashá %n horas + + + + %n day(s) ago + %n dias atrás%n dias atrás + + + + Up to date + Actualização + + + + Catching up... + Apanhar... + + + + Last received %1 was generated %2. + Última recepção %1 foi gerada %2. + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + Para processar esta transacção, será cobrada uma taxa de %1 para apoiar a rede. Deseja submeter a transacção? + + + + Confirm transaction fee + Confirmar taxa de transacção + + + + %1 %2 + %1 %2 + + + + Address: %1 +Note: %2 + + Endereço: %1 +Nota: %2 + + + + + + Address: %1 + + Endereço: %1 + + + + + + URI handling + Tratamento de URI + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + O URI não pode ser analisado! Isto pode ser causado por um endereço Alias inválido ou parâmetros URI mal formados. + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + A carteira está<b> encriptada </b>e actualmente <b>desbloqueada</b>apenas para piquetagem + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + A carteira está <b>encriptada</b> e actualmente <b>desbloqueada</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + A carteira está <b>encriptada</b> e actualmente<b> fechada</b> + + + + Backup Wallet + Carteira de apoio + + + + Wallet Data (*.dat) + Dados da carteira (*.dat) + + + + Backup Failed + Backup Falha + + + + There was an error trying to save the wallet data to the new location. + Houve um erro ao tentar salvar os dados da carteira para o novo local. + + + + Lock Wallet + Carteira de fechaduras + + + + Error: Wallet must first be encrypted to be locked. + Erro: A carteira deve primeiro ser encriptada para ser bloqueada. + + + + %1 second(s) + %1 segundo(s) + + + + %1 minute(s), %2 second(s) + %1 minuto(s), %2 segundo(s) + + + + %1 hour(s), %2 minute(s) + %1 hora(s), %2 minuto(s) + + + + %1 day(s), %2 hour(s) + %1 dia(s), %2 hora(s) + + + + (last 72 blocks %1) + (últimos 72 blocos %1) + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + Estaqueamento. <br/>O seu peso é %1 <br/>Peso da rede é %2%3 <br/>Tempo médio entre recompensas é %4 + + + + Not staking because wallet is in thin mode + Não estacar porque a carteira está em modo fino + + + + Not staking, staking is disabled + Não é estacar, a estacar está desactivada + + + + Not staking because wallet is locked + Não estacar porque a carteira está trancada + + + + Not staking because wallet is offline + Não estacar porque a carteira está offline + + + + Not staking because wallet is syncing + Não estacar porque a carteira está em sincronia + + + + Initializing staking... + Inicializando a piquetagem... + + + + Not staking because you don't have mature coins + Não apostar porque não se tem moedas maduras + + + + Not staking + Não estacar + + + + TrafficGraphWidget + + + KB/s + KB/s + + + + TransactionDesc + + + Open for %n block(s) + Aberto para %n blocosAberto para %n blocos + + + + Open until %1 + Aberto até %1 + + + + conflicted + em conflito + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/não confirmadas + + + + %1 confirmations + %1 confirmações + + + + Transaction ID + ID da transação + + + + Block Hash + Haxixe de bloco + + + + Status + Status + + + + , has not been successfully broadcast yet + , ainda não foi propagada na rede com sucesso. + + + + , broadcast through %n node(s) + , transmitido através de nós %n, transmitido através de nós %n + + + + Date + Data + + + + Source + Fonte + + + + Generated + Gerados + + + + + Credit + Crédito + + + + matures in %n more block(s) + amadurece em %n mais blocosamadurece em %n mais blocos + + + + not accepted + não aceito + + + + Transaction fee + Taxa de transação + + + + Net amount + Valor líquido + + + + Message + Mensagem + + + + Comment + Comentário + + + + Comment-To + How-To + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + As moedas geradas devem amadurecer 450 blocos antes de poderem ser gastas. Quando se gerou este bloco, este foi transmitido para a rede para ser adicionado à cadeia de blocos. Se não conseguir entrar na cadeia, o seu estado mudará para "não aceite" e não será passível de ser gasto. Isto pode acontecer ocasionalmente se outro nó gerar um bloco em poucos segundos a partir do seu. + + + + Debug information + Informação de depuração + + + + Debit + Débito + + + + Transaction + Transação + + + + Inputs + Entradas + + + + Amount + Quantidade + + + + true + verdadeiro + + + + false + falso + + + + + Converted + Conversão + + + + from public to private + do público ao privado + + + + from private to public + do privado ao público + + + + Address + Endereço + + + + + Note + Nota + + + + unknown + desconhecido + + + + <dd> + <dd> + + + + TransactionDescDialog + + + Transaction details + Detalhes da transação + + + + This pane shows a detailed description of the transaction + Este painel mostra uma descrição detalhada da transação + + + + TransactionTableModel + + + Date + Data + + + + Type + Tipo + + + + Address + Endereço + + + + Note + Nota + + + + Amount + Quantidade + + + + Open for %n more block(s) + Aberto para %n mais blocosAberto para %n mais blocos + + + + Open until %1 + Aberto até %1 + + + + Offline + Offline + + + + Unconfirmed + Não confirmado + + + + Confirming (%1 of %2 required confirmations) + Confirmação (%1 de %2 confirmações necessárias) + + + + Confirming (%1 of %2 recommended confirmations) + Confirmando (%1 de %2 confirmações recomendadas) + + + + Confirmed (%1 confirmations) + Confirmado (%1 confirmações) + + + + Conflicted + Conflitou + + + + Immature (%1 confirmations, will be available after %2) + Recém-criado (%1 confirmações, disponível somente após %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + Órfão %1 participação, bloco não foi recebido por nenhum outro nó e provavelmente não será aceite! + + + + Orphan %1 stake, someone else submitted the block before you. + Órfão %1 participação, outra pessoa apresentou o bloco perante si. + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Status da transação. Passe o mouse sobre este campo para mostrar o número de confirmações. + + + + Date and time that the transaction was received. + Data e hora em que a transação foi recebida. + + + + Type of transaction. + Tipo de transação. + + + + Destination address of transaction. + Endereço de destino da transação. + + + + Amount removed from or added to balance. + Quantidade debitada ou creditada ao saldo. + + + + WalletModel + + + + Sending... + Envio... + + + + alias-bridge + + + Overview + Panorâmica + + + + Wallet + Carteira + + + + Send + Enviar + + + + Receive + Receber + + + + Transactions + Transações + + + + Address Book + Lista de endereços + + + + Options + Opções + + + + Advanced + Avançado + + + + Backup Wallet + Carteira de Backup + + + + Encrypt Wallet + Encriptar a carteira + + + + Change Passphrase + Trocar a senha + + + + (Un)lock Wallet + Carteira (Des)lock + + + + Tools + Ferramentas + + + + Chain Data + Dados em cadeia + + + + Block Explorer + Explorador de blocos + + + + Sign Message + Mensagem de assinatura + + + + Verify Message + Verificar a mensagem + + + + Debug + Depuração + + + + About Alias + Sobre o Alias + + + + About QT + Sobre a QT + + + + QR code + Código QR + + + + Address: + Endereço: + + + + Label: + Rótulo: + + + + Amount: + Montante: + + + + Add new receive address + Adicionar novo endereço de recebimento + + + + Add Address + Adicionar endereço + + + + Add a new contact + Adicionar um novo contato + + + + Address Lookup + Pesquisa de endereços + + + + Address Type + Tipo de endereço + + + + Stealth + Furtivo + + + + Group + Grupo + + + + BIP32 + BIP32 + + + + Label + Rótulo + + + + Address + Endereço + + + + Public Key + Chave Pública + + + + Transaction Hash + Transação Hash + + + + Recent Transactions + Transações recentes + + + + Coin Control + Controle de Moedas + + + + Make payment + Faça o pagamento + + + + Balance transfer + Transferência de saldos + + + + Select Inputs + Selecione as entradas + + + + Automatically selected + Seleção automática + + + + Quantity: + Quantidade: + + + + Fee: + Tarifa: + + + + After Fee: + Após o pagamento da taxa: + + + + Bytes: + Bytes: + + + + Priority: + Prioridade: + + + + LowOutput: + Baixa produção: + + + + Change: + Mudança: + + + + Custom change address + Endereço para mudança personalizada + + + + From account + De conta + + + + PUBLIC + PÚBLICO + + + + PRIVATE + PRIVADO + + + + Balance: + Balanço: + + + + Ring Size: + Tamanho do anel: + + + + To account + Para contabilizar + + + + Pay to + Pague para + + + + (no label) + (sem rótulo) + + + + Master + Mestre + + + + Wallet is encrypted and currently locked + A carteira está criptografada e atualmente bloqueada + + + + Not staking because wallet is locked + Não estacar porque a carteira está trancada + + + + 0 active connection(s) to Alias network + 0 conexão(ões) ativa à rede Alias + + + + Enter a label for this address to add it to your address book + Digite uma etiqueta para este endereço para adicioná-lo à sua agenda de endereços + + + + Enter a address to add it to your address book + Digite um endereço para adicioná-lo à sua agenda de endereços + + + + Inputs + Entradas + + + + Values + Valores + + + + Outputs + Produções + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Digite um endereço Alias para assinar a mensagem com (por exemplo SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to sign + Digite a mensagem que você deseja assinar + + + + Click sign message to generate signature + Clique na mensagem de assinatura para gerar a assinatura + + + + Copy the signed message signature + Copiar a assinatura da mensagem assinada + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Digite um endereço Alias para verificar a mensagem com (ex. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + Enter the message you want to verify + Digite a mensagem que você deseja verificar + + + + Enter a Alias signature + Enter an Alias signature + + + + Paste signature from clipboard + Assinatura em pasta a partir da prancheta + + + + Your total balance + Seu balanço total + + + + Recent in/out transactions or stakes + Transações ou apostas recentes de entrada/saída + + + + Select inputs to spend + Selecione as entradas para gastar + + + + Optional address to receive transaction change + Endereço opcional para receber a mudança de transação + + + + Choose from address book + Escolha a partir da lista de endereços + + + + Paste address from clipboard + Endereço para colar da prancheta + + + + Remove this recipient + Retire este destinatário + + + + Send from public or private + Enviar de público ou privado + + + + Current spendable send payment balance + Saldo atual de pagamento de envio de despesas + + + + Send to public or private + Enviar para público ou privado + + + + Current spendable balance to account + Saldo corrente a ser gasto + + + + The label for this address + O rótulo para este endereço + + + + Amount to transfer + Montante a transferir + + + + Send to multiple recipients at once + Enviar a múltiplos destinatários de uma só vez + + + + Date and time that the transaction was received. + Data e hora em que a transação foi recebida. + + + + Transaction status. Hover over this field to show number of confirmations. + Status da transação. Passe o mouse sobre este campo para mostrar o número de confirmações. + + + + Type of transaction. + Tipo de transação. + + + + Destination address of transaction. + Endereço de destino da transação. + + + + Short payment note. + Nota de pagamento breve. + + + + Amount removed from or added to balance. + Quantidade retirada ou adicionada para equilibrar. + + + + Name for this Wallet + Nome para esta carteira + + + + Enter a password + Digite uma senha + + + + Would you like to create a bip44 path? + Você gostaria de criar um caminho bípede44? + + + + Your recovery phrase (Keep this safe!) + Sua frase de recuperação (Guarde isto em segurança!) + + + + Recovery Phrase + Frase de Recuperação + + + + Wallet Name for recovered account + Nome da carteira para conta recuperada + + + + Enter the password for the wallet you are trying to recover + Digite a senha para a carteira que você está tentando recuperar + + + + Is this a bip44 path? + Este é um caminho bípede44? + + + + ID + ID + + + + Created + Criado em + + + + Active Account + Conta ativa + + + + Default + Padrão + + + + Path + Caminho + + + + Active + Ativa + + + + Amount + Montante + + + + Note + Nota + + + + Public coins, visible on blockchain + Moedas públicas, visíveis em blockchain + + + + Private coins, untraceable and unlinkable on blockchain + Moedas privadas, indetectáveis e não rastreáveis em blockchain + + + + Available coins for spending + Moedas disponíveis para gastos + + + + Reserved coins are not used for staking + As moedas reservadas não são utilizadas para a estaca + + + + Staked coins must mature before they can be accessed + As moedas apostadas devem amadurecer antes de poderem ser acessadas + + + + Stake + Estaca + + + + Sub-Wallets + Sub-Paletes + + + + Start Alias on system login + Iniciar o Alias no login do sistema + + + + Detach databases at shutdown + Desmontar bancos de dados no momento do desligamento + + + + Pay transaction fee + Pagar taxa de transação + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + Taxa de transação por kB. Uma taxa mais alta garante que suas transações sejam processadas rapidamente em tempos de alto volume de transações. + + + + Most transactions are 1kB. The minimal fee is 0.0001 + A maioria das transações são de 1kB. A taxa mínima é de 0,0001 + + + + Enable Staking + Habilitar a piquetagem + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + Habilita ou desabilita o processo de piquetagem. Se sua carteira estiver criptografada, você precisará desbloqueá-la para a piquetagem. + + + + Staking Donation + Doação por estaca + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + Cada sexto bloco da cadeia de bloqueio é um bloco de contribuição para o desenvolvimento (DCB). As recompensas por estacas dos DCBs são contribuídas para o fundo de desenvolvimento, não importando o percentual de doação estabelecido. Por favor, sinta-se à vontade para doar adicionalmente de suas demais recompensas de participação, definindo uma chance de doação. Obrigado. + + + + Reserve + Reserva + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + A quantia reservada não participa do staking e, portanto, é passível de ser gasta em qualquer momento. + + + + Minimum Stake Interval + Intervalo Mínimo de Estaca + + + + Main + Principal + + + + Window + Janela + + + + Display + Mostrar + + + + Minimize to the tray instead of the taskbar + Minimizar para a bandeja ao invés da barra de tarefas + + + + Minimize on close + Minimizar no fechamento + + + + User Interface language + Idioma da interface do usuário + + + + Unit to show amounts in + Unidade para mostrar quantidades em + + + + Rows per page + Linhas por página + + + + Display addresses in transaction list + Exibir endereços na lista de transações + + + + Notifications + Notificações + + + + Visible Transaction Types + Tipos de Transações Visíveis + + + + Cancel + Cancelar + + + + Apply + Aplicar + + + + Ok + Ok + + + + Reserved + Reservado + + + + Unconfirmed + Não confirmado + + + + Immature + Imaturo + + + + Type + Tipo + + + + Date + Data + + + + Send Payment + Enviar pagamento + + + + The address to send the payment to + O endereço para enviar o pagamento para + + + + Enter a label for this address + Digite uma etiqueta para este endereço + + + + Add Sub-Wallet + Adicionar Sub-palete + + + + Immature generated coins with Proof-of-Work + Moedas geradas imaturas com prova de trabalho + + + + Blockchain Info + Informações sobre a cadeia de bloqueio + + + + Checking wallet state with network + Verificação do estado da carteira com rede + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + A ALIAS pública requer 1 confirmação <br>A ALIAS privada requer 10 confirmações + + + + Total Balance + Balanço total + + + + Balance + Balanço + + + + Available + Disponível em + + + + Public + Público + + + + Private + Privado + + + + Tor+OBFS4 connection online + Conexão Tor+OBFS4 online + + + + Wallet Encryption + Criptografia de carteiras + + + + A short reference for the recipient (max 24 characters) + Uma breve referência para o destinatário (máximo 24 caracteres) + + + + ALIAS Denomination Value + ALIAS Valor da Denominação + + + + No. Owned (* = Immature) + Nº Próprio (* = Imaturo) + + + + No. System Unspent (* = Immature) + No. Sistema Não gasto (* = Imaturo) + + + + No. available Mixins (* = Immature) + Nº de Mixins disponíveis (* = Imaturo) + + + + No. System (** = Compromised) + No. Sistema (** = Compromissado) + + + + The last block a coin of this denomination was created + O último bloco foi criado com uma moeda desta denominação + + + + Owned (*) + Possuídos (*) + + + + Unspent (*) + Não gasta (*) + + + + Mixins (*) + Misturas (*) + + + + System (**) + Sistema (**) + + + + Least Depth + Mínima profundidade + + + + Value Out + Valor fora + + + + Value + Valor + + + + Addressbook + Caderneta de endereços + + + + Refresh + Atualização + + + + Hash + Haxixe + + + + Height + Altura + + + + Timestamp + Carimbo da hora + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + Digite um endereço alias (por exemplo, SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + An address label for the payment senders address book + Uma etiqueta de endereço para o livro de endereços dos remetentes de pagamento + + + + Enter a short note to send with a payment (max 24 characters) + Digite uma breve nota para enviar com um pagamento (máximo 24 caracteres) + + + + Filter by label or address... + Filtrar por etiqueta ou endereço... + + + + Note to send with payment (max 24 characters) + Nota a enviar com pagamento (máximo 24 caracteres) + + + + The private address to transfer the balance to + O endereço privado para transferir o saldo para + + + + Search by label or address + Busca por rótulo ou endereço + + + + Search + Busca + + + + Family vacation funds + Fundos para férias da família + + + + Grouping will consolidate transactions of chosen + O agrupamento consolidará as transações de escolha + + + + Reset form + Formulário de reinicialização + + + + Restore Sub-Wallet + Restaurar a Sub-Pallet + + + + Filter outputs + Saídas do filtro + + + + Find Block by hash/height/transaction + Encontrar bloco por haxixe/altura/transação + + + + alias-core + + + To use the %s option + Para usar a opção %s + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + %s, você deve definir uma senha rpcpassword no arquivo de configuração: +%s +É recomendável usar a seguinte senha aleatória: +rpcuser=aliasrpc +rpcpassword=%s +(você não precisa se lembrar desta senha) +O nome de usuário e a senha NÃO DEVEM ser os mesmos. +Se o arquivo não existir, crie-o com permissões de arquivo somente para leitura pelo proprietário. +Também é recomendável definir o alerta para que você seja notificado de problemas; +por exemplo: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + Error + Erro + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + Ocorreu um erro ao configurar a porta RPC %u para escuta em IPv6, caindo de volta para IPv4: %s + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + Ocorreu um erro ao configurar a porta RPC %u para escuta no IPv4: %s + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + Você deve definir rpcpassword= <password>no arquivo de configuração:%sSe o arquivo não existir, crie-o com permissões de arquivo somente para leitura pelo proprietário. + + + + Alias version + Versão alias + + + + Usage: + Utilização: + + + + Send command to -server or aliaswalletd + Enviar comando para -server ou aliaswalletd + + + + List commands + Lista de comandos + + + + Get help for a command + Obter ajuda para um comando + + + + Alias + Aliás + + + + Options: + Opções: + + + + This help message + Esta mensagem de ajuda + + + + Specify configuration file (default: alias.conf) + Especificar arquivo de configuração (padrão: alias.conf) + + + + Specify pid file (default: alias.pid) + Especificar arquivo pid (padrão: alias.pid) + + + + Specify data directory + Especificar o diretório de dados + + + + Specify wallet file (within data directory) + Especificar arquivo de carteira (dentro do diretório de dados) + + + + Set database cache size in megabytes (default: 25) + Definir o tamanho do cache do banco de dados em megabytes (padrão: 25) + + + + Set database disk log size in megabytes (default: 100) + Definir o tamanho do log do disco de banco de dados em megabytes (padrão: 100) + + + + Specify connection timeout in milliseconds (default: 5000) + Especificar o tempo limite de conexão em milissegundos (padrão: 5000) + + + + Connect through socks proxy + Conectar através de meias proxy + + + + Select the version of socks proxy to use (4-5, default: 5) + Selecione a versão de proxy de meias para usar (4-5, padrão: 5) + + + + Use proxy to reach tor hidden services (default: same as -proxy) + Use proxy para alcançar serviços ocultos (padrão: o mesmo que -proxy) + + + + Allow DNS lookups for -addnode, -seednode and -connect + Permitir buscas no DNS para -addnode, -seednode e -connect + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + Ouça as conexões em<port> (padrão: 37347 ou testnet: 37111) + + + + Maintain at most <n> connections to peers (default: 125) + Manter no máximo <n>conexões com os colegas (padrão: 125) + + + + Add a node to connect to and attempt to keep the connection open + Adicionar um nó para conectar e tentar manter a conexão aberta + + + + Connect only to the specified node(s) + Conectar somente ao nó especificado(s) + + + + Connect to a node to retrieve peer addresses, and disconnect + Conectar-se a um nó para recuperar endereços de pares, e desconectar + + + + Specify your own public address + Especifique seu próprio endereço público + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Conectar-se somente aos nós da rede <net>(IPv4, IPv6 ou Tor) + + + + Discover own IP address (default: 1 when listening and no -externalip) + Descobrir o próprio endereço IP (padrão: 1 quando se escuta e sem -externalip) + + + + Find peers using internet relay chat (default: 0) + Encontrar pares usando o bate-papo de relé da Internet (padrão: 0) + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Aceitar conexões de fora (padrão: 1 se não houver -proxy ou -connect) + + + + Bind to given address. Use [host]:port notation for IPv6 + Ligue-se a um endereço dado. Use [host]: notação de porta para IPv6 + + + + Find peers using DNS lookup (default: 1) + Encontrar pares usando a busca DNS (padrão: 1) + + + + Stake your coins to support network and gain reward (default: 1) + Aposte suas moedas para apoiar a rede e ganhar recompensa (padrão: 1) + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + Sincronizar o tempo com outros nós. Desabilite se o tempo em seu sistema for preciso, por exemplo, sincronização com o NTP (padrão: 1) + + + + Sync checkpoints policy (default: strict) + Política de pontos de controle de sincronização (padrão: rígido) + + + + Threshold for disconnecting misbehaving peers (default: 100) + Limiar para desconectar colegas mal-comportados (padrão: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Número de segundos para evitar que os pares se reconectem (padrão: 86400) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Máximo por conexão receber buffer,<n> *1000 bytes (padrão: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Máximo de buffer de envio por conexão, <n>*1000 bytes (padrão: 1000) + + + + Use UPnP to map the listening port (default: 1 when listening) + Use UPnP para mapear a porta de escuta (padrão: 1 ao escutar) + + + + Use UPnP to map the listening port (default: 0) + Use UPnP para mapear a porta de escuta (padrão: 0) + + + + Detach block and address databases. Increases shutdown time (default: 0) + Desbloquear bancos de dados de blocos e endereços. Aumenta o tempo de desligamento (padrão: 0) + + + + Fee per KB to add to transactions you send + Taxa por KB para adicionar às transações que você envia + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + Ao criar transações, ignorar entradas com valor inferior a este (padrão: 0,01) + + + + Accept command line and JSON-RPC commands + Aceitar comandos de linha de comando e JSON-RPC + + + + Run in the background as a daemon and accept commands + Corra em segundo plano como um daemon e aceite comandos + + + + Use the test network + Use a rede de teste + + + + Output extra debugging information. Implies all other -debug* options + Produzir informações extras de depuração. Implica em todas as outras opções de depuração*. + + + + Output extra network debugging information + Produzir informações extras de depuração de rede + + + + Prepend debug output with timestamp + Prever a saída de depuração com carimbo de data/hora + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Shrink debug.log arquivo na inicialização do cliente (padrão: 1 quando não há -debug) + + + + Send trace/debug info to console instead of debug.log file + Enviar informações de rastreamento/debug para o console em vez do arquivo debug.log + + + + Send trace/debug info to debugger + Enviar informações de rastreamento/debug para o depurador + + + + Username for JSON-RPC connections + Nome de usuário para conexões JSON-RPC + + + + Password for JSON-RPC connections + Senha para conexões JSON-RPC + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + Ouça as conexões JSON-RPC em <port>(padrão: 36657 ou testnet: 36757) + + + + Allow JSON-RPC connections from specified IP address + Permitir conexões JSON-RPC a partir do endereço IP especificado + + + + Send commands to node running on <ip> (default: 127.0.0.1) + Enviar comandos para o nó em execução<ip> (padrão: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Executar comando quando o melhor bloco muda (%s em cmd é substituído por hash de bloco) + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Executar comando quando uma transação de carteira muda (%s em cmd é substituído por TxID) + + + + Require a confirmations for change (default: 0) + Exigir uma confirmação para mudança (padrão: 0) + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + Aplicar scripts de transação para usar operadores PUSH canônicos (padrão: 1) + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + Executar comando quando um alerta relevante é recebido (%s em cmd é substituído por mensagem) + + + + Upgrade wallet to latest format + Atualize sua carteira para o formato mais recente + + + + Set key pool size to <n> (default: 100) + Defina o tamanho do pool chave para<n> (padrão: 100) + + + + Rescan the block chain for missing wallet transactions + Resscanalizar a cadeia de blocos para transações de carteira faltantes + + + + Attempt to recover private keys from a corrupt wallet.dat + Tentativa de recuperar chaves privadas de uma carteira corrompida.dat + + + + How many blocks to check at startup (default: 2500, 0 = all) + Quantos blocos a verificar na partida (padrão: 2500, 0 = todos) + + + + How thorough the block verification is (0-6, default: 1) + O quão completa é a verificação do bloco (0-6, padrão: 1) + + + + Imports blocks from external blk000?.dat file + Importação de blocos do arquivo blk000?.dat externo + + + + Block creation options: + Opções de criação de blocos: + + + + Set minimum block size in bytes (default: 0) + Definir o tamanho mínimo do bloco em bytes (padrão: 0) + + + + Set maximum block size in bytes (default: 250000) + Definir o tamanho máximo do bloco em bytes (padrão: 250000) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Definir o tamanho máximo das transações de alta prioridade/baixa taxa em bytes (padrão: 27000) + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + Opções SSL: (veja o Bitcoin Wiki para instruções de configuração SSL) + + + + Use OpenSSL (https) for JSON-RPC connections + Use OpenSSL (https) para conexões JSON-RPC + + + + Server certificate file (default: server.cert) + Arquivo de certificado do servidor (padrão: server.cert) + + + + Server private key (default: server.pem) + Chave privada do servidor (padrão: server.pem) + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + Cifras aceitáveis (padrão: TLSv1+HIGH:!SSLv2:!aNULL:!eNULLL:!AH:!3DES:@STRENGTH) + + + + Invalid amount for -paytxfee=<amount>: '%s' + Montante inválido para -paytxfee=<amount>: '%s'. + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Aviso: -paytxfee é fixado muito alto! Esta é a taxa de transação que você pagará se você enviar uma transação. + + + + Invalid amount for -mininput=<amount>: '%s' + Valor inválido para -mininput=<amount>: '%s'. + + + + Wallet %s resides outside data directory %s. + Carteira %s reside fora do diretório de dados %s. + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + Não é possível obter um bloqueio no diretório de dados %s. O pseudônimo provavelmente já está em execução. + + + + Verifying database integrity... + Verificando a integridade do banco de dados... + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + Erro inicializando ambiente de banco de dados %s! Para recuperar, VOLTE ESTE DIRETÓRIO, depois remova tudo dele, exceto o wallet.dat. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Atenção: carteira.dat corrompida, dados recuperados! Carteira.dat original salva como carteira.{timestamp}.bak em %s; se seu saldo ou transações estiverem incorretas, você deve restaurar a partir de um backup. + + + + wallet.dat corrupt, salvage failed + carteira.dat corrompida, salvamento falhou + + + + Unknown -socks proxy version requested: %i + Desconhecido -socks versão proxy solicitada: %i + + + + Unknown network specified in -onlynet: '%s' + Rede desconhecida especificada em -onlynet: '%s'. + + + + Invalid -proxy address: '%s' + Endereço inválido -proxy: '%s' + + + + Invalid -tor address: '%s' + Endereço do devedor inválido: '%s' + + + + Cannot resolve -bind address: '%s' + Não é possível resolver o endereço -bind address: '%s' + + + + Failed to listen on any port. + Falha em ouvir em qualquer porto. + + + + Failed to listen on any port. Use -listen=0 if you want this. + Falha em ouvir em qualquer porto. Use - escute=0 se quiser isto. + + + + Cannot resolve -externalip address: '%s' + Não é possível resolver -externalip endereço: '%s' + + + + Invalid amount for -reservebalance=<amount> + Valor inválido para -reservabalance=<amount> + + + + Unable to sign checkpoint, wrong checkpointkey? + + Incapaz de assinar ponto de controle, chave de controle errada? + + + + + Loading block index... + Índice de blocos de carregamento... + + + + Error loading blk0001.dat + Erro ao carregar blk0001.dat + + + + Loading wallet... + Carregando a carteira... + + + + Error loading wallet.dat: Wallet corrupted + Erro ao carregar carteira.dat: Carteira corrompida + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Aviso: erro na leitura da carteira.dat! Todas as chaves são lidas corretamente, mas os dados da transação ou entradas do catálogo de endereços podem estar ausentes ou incorretos. + + + + Error loading wallet.dat: Wallet requires newer version of Alias + Erro ao carregar carteira.dat: Carteira requer uma versão mais recente do Alias + + + + Wallet needed to be rewritten: restart Alias to complete + Carteira precisava ser reescrita: reinicie o Alias para completar + + + + Error loading wallet.dat + Erro ao carregar carteira.dat + + + + Cannot downgrade wallet + Não pode rebaixar a carteira + + + + Cannot initialize keypool + Não é possível inicializar o keypool + + + + Cannot write default address + Não é possível escrever o endereço padrão + + + + Rescanning... + Redimensionamento... + + + + Importing blockchain data file. + Importação de arquivo de dados em cadeia de blocos. + + + + Importing bootstrap blockchain data file. + Importação de arquivo de dados da cadeia de bloqueio de botas. + + + + Loading addresses... + Endereços de carregamento... + + + + Error: could not start node + Erro: não foi possível iniciar o nó + + + + Done loading + Carregamento feito + + + + Unable to bind to %s on this computer. Alias is probably already running. + Incapaz de se ligar a %s neste computador. O pseudônimo provavelmente já está em execução. + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Incapaz de vincular a %s neste computador (erro de vincular retornado %d, %s) + + + + Error: Wallet locked, unable to create transaction + Erro: Carteira bloqueada, incapaz de criar transação + + + + Error: Wallet unlocked for staking only, unable to create transaction. + Erro: Carteira desbloqueada apenas para estaqueamento, incapaz de criar transação. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + Erro: Esta transação requer uma taxa de transação de pelo menos % por causa de seu valor, complexidade ou uso de fundos recentemente recebidos. + + + + Error: Transaction creation failed + Erro: Falha na criação da transação + + + + Sending... + Enviando... + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Erro: A transação foi rejeitada. Isto poderia acontecer se algumas das moedas em sua carteira já estivessem gastas, como se você usasse uma cópia da carteira.dat e as moedas fossem gastas na cópia mas não marcadas como gastas aqui. + + + + Invalid amount + Montante inválido + + + + Insufficient funds + Fundos insuficientes + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + Advertência: Por favor, verifique se a data e a hora do seu computador estão corretas! Se o seu relógio estiver errado, o Alias não funcionará corretamente. + + + + Warning: This version is obsolete, upgrade required! + Advertência: Esta versão é obsoleta, atualização necessária! + + + + WARNING: syncronized checkpoint violation detected, but skipped! + AVISO: violação do ponto de verificação sincronizado detectada, mas pulada! + + + + Warning: Disk space is low! + Advertência: O espaço em disco é baixo! + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + ADVERTÊNCIA: Ponto de controle inválido encontrado! As transações exibidas podem não estar corretas! Você pode precisar atualizar, ou notificar os desenvolvedores. + + + + Read ATXOs... (%d) + Leia ATXOs... (%d) + + + + Read spent ATXOs... (%d) + Leia ATXOs gastos... (%d) + + + + Note must be 24 characters or less. + A nota deve ser de 24 caracteres ou menos. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Erro: A transação foi rejeitada. Isto poderia acontecer se algumas das moedas em sua carteira já estivessem gastas, como se você usasse uma cópia da carteira.dat e as moedas fossem gastas na cópia mas não marcadas como gastas aqui. + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + Erro: Argumento não fundamentado -socks found. Não é mais possível definir a versão SOCKS, apenas os proxies SOCKS5 são suportados. + + + + Initialization sanity check failed. Alias is shutting down. + A verificação da sanidade da inicialização falhou. O pseudônimo está sendo desativado. + + + + Loading block index... (%d) + Índice de blocos de carregamento... (%d) + + + + Calculating chain trust... (%d) + Calculando a confiança da cadeia... (%d) + + + + Validating last %d block... + Validando o último bloco %d... + + + + -bip44key is not allowed if wallet.dat already exists + -bip44key não é permitido se o wallet.dat já existe + + + + Cannot resolve binding address: '%s' + Não é possível resolver o endereço obrigatório: '%s' + + + + Error: could not start tor node + Erro: não foi possível iniciar o nó de torção + + + + Timed out waiting for onion hostname. + Temporizado à espera do nome da cebola. + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + Error loading blk0001.dat: Cadeia inválida detectada, por favor, sincronize novamente ou use arquivos bootstrap. + + + + Loading wallet items... (%d) + Carregando itens de carteira... (%d) + + + + Reindexing from blk000?.dat files. + Reindexação a partir de arquivos blk000?.dat. + + + + Reindexing block... (%d) + Bloco de reindexação... (%d) + + + + Core started! + O núcleo começou! + + + + Use tor hidden services version 2 instead of version 3 + Usar serviços ocultos versão 2 em vez da versão 3 + + + + Find peers using .onion seeds (default: 1 unless -connect) + Encontrar pares usando sementes de .onion (padrão: 1 a menos que -conecte) + + + + Minimum time in seconds between successful stakes (default: 30) + Tempo mínimo em segundos entre as estacas de sucesso (padrão: 30) + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + Porcentagem de recompensa por estaca para doar aos desenvolvedores (entre 0 e 100 inclusive, padrão 5) + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + Milissegundos entre as tentativas de estaca. A redução deste parâmetro não resultará em mais estacas. (padrão: 500) + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + Número de segundos para manter os pares suavemente proibidos de se reconectarem (padrão: 3600) + + + + Simple command line interface - if not run as daemon + Interface simples de linha de comando - se não for executado como daemon + + + + Output extra blockchain debugging information + Produzir informações extras de depuração da cadeia de bloqueios + + + + Output extra Proof of Stake debugging information + Saída de informações extras de depuração de estacas + + + + Send trace/debug info to debug.log file + Enviar informações de rastreamento/debug para o arquivo debug.log + + + + Wait for RPC server to start + Aguarde que o servidor RPC comece + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + Manter no máximo <n> MiB de blocos inconectáveis na memória (padrão: %u) + + + + Rebuild block chain index from current blk000?.dat files on startup + Reconstruir índice de cadeia de blocos a partir dos arquivos blk000?.dat atuais na inicialização + + + + Show version and exit + Mostrar versão e saída + + + + Thin options: + Opções finas: + + + + Operate in less secure, less resource hungry 'thin' mode + Operar em modo 'fino' menos seguro, menos faminto de recursos + + + + Keep the entire block index in memory. (default: 0) + Manter todo o índice de blocos na memória. (padrão: 0) + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + Quando não é thinfullindex, o número máximo de cabeçalhos de bloco a manter em memória. (padrão: 4096) + + + + Disable supporting thin nodes. (default: 0) + Desativar os nós finos de suporte. (padrão: 0) + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + Desativar o encaminhamento, ou solicitar todos os txns furtivos. (padrão: 0) + + + + Don't connect to more than <n> thin peers (default: 8) + Não conecte a mais de <n> pares finos (padrão: 8) + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Cifras aceitáveis (padrão: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULLL:!3DES:@STRENGTH) + + + + conn + conn + + + + Error: Wallet locked, unable to create transaction. + Erro: Carteira bloqueada, incapaz de criar transação. + + + + Error: Must be in full mode. + Erro: Deve estar no modo completo. + + + + Error: Block chain must be fully synced first. + Erro: A cadeia de blocos deve ser totalmente sincronizada primeiro. + + + + Error: Alias is not connected! + Erro: Alias não está conectado! + + + + Update balance... + Atualizar balanço... + + + + ...Start UI... + .Iniciar UI... + + + + Shutdown... + Encerramento... + + + \ No newline at end of file diff --git a/src/qt/locale/alias_pt_PT.ts b/src/qt/locale/alias_pt_PT.ts new file mode 100644 index 0000000000..24205a3c83 --- /dev/null +++ b/src/qt/locale/alias_pt_PT.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Rótulo + + + + Address + Endereço + + + + pubkey + + + + + stealth + + + + + (no label) + (sem rótulo) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Diálogo de Frase-Passe + + + + Enter passphrase + Escreva a frase de segurança + + + + New passphrase + Nova frase de segurança + + + + Repeat new passphrase + Repita a nova frase de segurança + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Escreva a nova frase de seguraça da sua carteira. <br/> Por favor, use uma frase de <b>10 ou mais caracteres aleatórios,</b> ou <b>oito ou mais palavras</b>. + + + + Encrypt wallet + Encriptar carteira + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + A sua frase de segurança é necessária para desbloquear a carteira. + + + + Unlock wallet + Desbloquear carteira + + + + This operation needs your wallet passphrase to decrypt the wallet. + A sua frase de segurança é necessária para desencriptar a carteira. + + + + Decrypt wallet + Desencriptar carteira + + + + Change passphrase + Alterar frase de segurança + + + + Enter the old and new passphrase to the wallet. + Escreva a frase de segurança antiga seguida da nova para a carteira. + + + + Confirm wallet encryption + Confirmar encriptação da carteira + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + Tem a certeza que deseja encriptar a carteira? + + + + + Wallet encrypted + Carteira encriptada + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANTE: Qualquer cópia de segurança anterior da carteira deverá ser substituída com o novo, actualmente encriptado, ficheiro de carteira. Por razões de segurança, cópias de segurança não encriptadas efectuadas anteriormente do ficheiro da carteira tornar-se-ão inúteis assim que começar a usar a nova carteira encriptada. + + + + + + + Wallet encryption failed + A encriptação da carteira falhou + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + A encriptação da carteira falhou devido a um erro interno. A carteira não foi encriptada. + + + + + The supplied passphrases do not match. + As frases de segurança fornecidas não coincidem. + + + + Wallet unlock failed + O desbloqueio da carteira falhou + + + + + + The passphrase entered for the wallet decryption was incorrect. + A frase de segurança introduzida para a desencriptação da carteira estava incorreta. + + + + Wallet decryption failed + A desencriptação da carteira falhou + + + + Wallet passphrase was successfully changed. + A frase de segurança da carteira foi alterada com êxito. + + + + + Warning: The Caps Lock key is on! + Atenção: A tecla Caps Lock está activa! + + + + ClientModel + + + Network Alert + Alerta da Rede + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + Quantidade: + + + + Bytes: + Bytes: + + + + Amount: + Quantia: + + + + Priority: + Prioridade: + + + + Fee: + Taxa: + + + + Low Output: + Saída Baixa: + + + + After Fee: + Depois de taxas: + + + + Change: + Troco: + + + + (un)select all + (des)seleccionar todos + + + + Tree mode + Modo de árvore + + + + List mode + Modo lista + + + + Amount + Quantia + + + + Label + + + + + Address + Endereço + + + + Date + Data + + + + Confirmations + Confirmados + + + + Confirmed + Confirmada + + + + Priority + Prioridade + + + + Copy address + Copiar endereço + + + + Copy label + Copiar rótulo + + + + + Copy amount + Copiar quantia + + + + Copy transaction ID + Copiar ID da Transação + + + + Copy quantity + Copiar quantidade + + + + Copy fee + Taxa de cópia + + + + Copy after fee + Taxa depois de cópia + + + + Copy bytes + Copiar bytes + + + + Copy priority + Prioridade de Cópia + + + + Copy low output + Copiar output baixo + + + + Copy change + Copiar alteração + + + + highest + o maior + + + + high + alto + + + + medium-high + médio-alto + + + + medium + médio + + + + low-medium + baixo-médio + + + + low + baixo + + + + lowest + O mais baixo + + + + + DUST + + + + + + yes + sim + + + + + no + não + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (Sem rótulo) + + + + change from %1 (%2) + Alteração de %1 (%2) + + + + (change) + (Alteração) + + + + EditAddressDialog + + + Edit Address + Editar Endereço + + + + &Label + &Rótulo + + + + The label associated with this address book entry + + + + + &Address + E&ndereço + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Novo endereço de entrada + + + + New sending address + Novo endereço de saída + + + + Edit receiving address + Editar endereço de entrada + + + + Edit sending address + Editar endereço de saída + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + O endereço introduzido "%1" já se encontra no livro de endereços. + + + + Could not unlock wallet. + Impossível desbloquear carteira. + + + + New key generation failed. + Falha ao gerar nova chave. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informação + + + + Alias Core + + + + + Client name + Nome do Cliente + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/D + + + + Client version + Versão do Cliente + + + + Using OpenSSL version + Usando versão OpenSSL + + + + Using BerkeleyDB version + + + + + Build date + Data de construção + + + + Startup time + Tempo de início + + + + Network + Rede + + + + Name + + + + + Number of connections + Número de ligações + + + + Block chain + Cadeia de blocos + + + + Current number of blocks + Número actual de blocos + + + + Estimated total blocks + Total estimado de blocos + + + + Last block time + Tempo do último bloco + + + + Debug log file + Ficheiro de registo de depuração + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Abrir + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + &Consola + + + + Clear console + Limpar consola + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Use as setas para cima e para baixo para navegar no histórico e <b>Ctrl-L</b> para limpar o ecrã. + + + + Type <b>help</b> for an overview of available commands. + Digite <b>help</b> para visualizar os comandos disponíveis. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Aberto até %1 + + + + conflicted + + + + + %1/offline + %1/desligado + + + + %1/unconfirmed + %1/não confirmada + + + + %1 confirmations + %1 confirmações + + + + Transaction ID + ID da Transação + + + + Block Hash + + + + + Status + Estado + + + + , has not been successfully broadcast yet + , ainda não foi transmitida com sucesso + + + + , broadcast through %n node(s) + + + + + Date + Data + + + + Source + Origem + + + + Generated + Gerado + + + + + Credit + Crédito + + + + matures in %n more block(s) + + + + + not accepted + não aceite + + + + Transaction fee + Taxa de transação + + + + Net amount + Valor líquido + + + + Message + Mensagem + + + + Comment + Comentário + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Informação de depuração + + + + Debit + Débito + + + + Transaction + Transação + + + + Inputs + Entradas + + + + Amount + Quantia + + + + true + verdadeiro + + + + false + falso + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + desconhecido + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Detalhes da transação + + + + This pane shows a detailed description of the transaction + Esta janela mostra uma descrição detalhada da transação + + + + TransactionTableModel + + + Date + Data + + + + Type + Tipo + + + + Address + Endereço + + + + Note + + + + + Amount + Quantia + + + + Open for %n more block(s) + + + + + Open until %1 + Aberto até %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Confirmada (%1 confirmações) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/d) + + + + Transaction status. Hover over this field to show number of confirmations. + Estado da transação. Pairar por cima deste campo para mostrar o número de confirmações. + + + + Date and time that the transaction was received. + Data e hora a que esta transação foi recebida. + + + + Type of transaction. + Tipo de transação. + + + + Destination address of transaction. + Endereço de destino da transação. + + + + Amount removed from or added to balance. + Quantia retirada ou adicionada ao saldo. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_ro_RO.ts b/src/qt/locale/alias_ro_RO.ts new file mode 100644 index 0000000000..a3103c33bd --- /dev/null +++ b/src/qt/locale/alias_ro_RO.ts @@ -0,0 +1,4304 @@ + + + AboutDialog + + + About Alias + Despre Alias + + + + <b>Alias</b> version + Versiune <b>Alias</b> + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Etichetă + + + + Address + Adresă + + + + pubkey + + + + + stealth + + + + + (no label) + (fără etichetă) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Dialogul pentru fraza de acces + + + + Enter passphrase + Introdu fraza de acces + + + + New passphrase + Frază de acces nouă + + + + Repeat new passphrase + Repetă noua frază de acces + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Servește pentru a dezactiva sendmoneyl atunci când sistemul de operare este compromis. Nu oferă nicio garanție reală. + + + + For staking only + Doar pentru staking + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Introdu noua parolă a portofelului electronic.<br/>Te rog folosește <b>minim 10 caractere aleatoare</b>, sau <b>minim 8 cuvinte</b>. + + + + Encrypt wallet + Criptează portofelul + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Această acțiune necesită fraza ta de acces pentru deblocarea portofelului. + + + + Unlock wallet + Deblochează portofelul + + + + This operation needs your wallet passphrase to decrypt the wallet. + Această acțiune necesită fraza ta de acces pentru decriptarea portofelului. + + + + Decrypt wallet + Decriptează portofelul. + + + + Change passphrase + Schimbă fraza de acces + + + + Enter the old and new passphrase to the wallet. + Introdu vechea și noua parolă pentru portofel. + + + + Confirm wallet encryption + Confirmă criptarea portofelului + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Atentie: Daca encriptezi portofelul si iti uiti parola, <b>VEI PIERDE TOATA MONEDELE</b>! + + + + Are you sure you wish to encrypt your wallet? + Sunteţi sigur că doriţi să criptaţi portofelul electronic? + + + + + Wallet encrypted + Portofel criptat + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias se va inchide pentru a termina procesul de encriptie. Amintiți-vă, criptarea portofelul dumneavoastră nu poate proteja pe deplin monedele dvs. de a fi furate de infectarea cu malware a computerului. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANT: Orice copie de siguranta facuta in prealabil portofelului dumneavoastra ar trebui inlocuita cu cea generata cel mai recent fisier criptat al portofelului. Pentru siguranta, copiile de siguranta vechi ale portofelului ne-criptat vor deveni inutile de indata ce veti incepe folosirea noului fisier criptat al portofelului. + + + + + + + Wallet encryption failed + Criptarea portofelului a eșuat + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Criptarea portofelului a eșuat din cauza unei erori interne. Portofelul tău nu a fost criptat. + + + + + The supplied passphrases do not match. + Frazele de acces introduse nu se potrivesc. + + + + Wallet unlock failed + Deblocarea portofelului a eșuat + + + + + + The passphrase entered for the wallet decryption was incorrect. + Fraza de acces introdusă pentru decriptarea portofelului a fost incorectă. + + + + Wallet decryption failed + Decriptarea portofelului a eșuat + + + + Wallet passphrase was successfully changed. + Parola portofelului electronic a fost schimbată. + + + + + Warning: The Caps Lock key is on! + Atentie! Caps Lock este pornit + + + + ClientModel + + + Network Alert + Alertă rețea + + + + CoinControlDialog + + + Coin Control + Controlează moneda + + + + Quantity: + Cantitate: + + + + Bytes: + Octeţi: + + + + Amount: + Sumă: + + + + Priority: + Prioritate: + + + + Fee: + Taxa: + + + + Low Output: + Ieşire minimă: + + + + After Fee: + După taxe: + + + + Change: + Schimb: + + + + (un)select all + (de)selectaţi tot + + + + Tree mode + Modul arborescent + + + + List mode + Modul lista + + + + Amount + Sumă + + + + Label + Etichetă + + + + Address + Adresă + + + + Date + Data + + + + Confirmations + Confirmări + + + + Confirmed + Confirmat + + + + Priority + Prioritate + + + + Copy address + Copiază adresa + + + + Copy label + Copiază eticheta + + + + + Copy amount + Copiază suma + + + + Copy transaction ID + Copiază ID tranzacție + + + + Copy quantity + Copiaţi quantitea + + + + Copy fee + Copiaţi taxele + + + + Copy after fee + Copiaţi după taxe + + + + Copy bytes + Copiaţi octeţi + + + + Copy priority + Copiaţi prioritatea + + + + Copy low output + Copiaţi ieşire minimă: + + + + Copy change + Copiaţi schimb + + + + highest + cel mai mare + + + + high + mare + + + + medium-high + marime medie + + + + medium + mediu + + + + low-medium + mediu-scazut + + + + low + scazut + + + + lowest + cel mai scazut + + + + + DUST + DUST + + + + + yes + da + + + + + no + nu + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Aceasta eticheta se inroseste daca marimea tranzactiei este mai mare de 10000 bytes. + +Acest lucru inseamna ca este nevoie de o taxa de cel putin %1 pe kb + +Poate varia +/- 1 Byte pe imput. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Tranzacțiile cu prioritate mai mare ajunge mult mai probabil într-un bloc + +Aceasta eticheta se inroseste daca prioritatea este mai mica decat "medium" + +Acest lucru inseamna ca este necesar un comision cel putin de %1 pe kB + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Această eticheta se înroseste dacă schimbul este mai mic de %1. + +Acest lucru înseamnă că o taxă de cel puțin %2 este necesară + + + + + (no label) + (fără etichetă) + + + + change from %1 (%2) + schimbă la %1(%2) + + + + (change) + (schimb) + + + + EditAddressDialog + + + Edit Address + Editează adresa + + + + &Label + &Etichetă + + + + The label associated with this address book entry + Eticheta asociată cu această intrare în agendă + + + + &Address + &Adresă + + + + The address associated with this address book entry. This can only be modified for sending addresses. + Adresa asociată cu această intrare în agendă. Acest lucru poate fi modificat numai pentru adresele de trimitere. + + + + &Stealth Address + + + + + New receiving address + Noua adresă de primire + + + + New sending address + Noua adresă de trimitere + + + + Edit receiving address + Editează adresa de primire + + + + Edit sending address + Editează adresa de trimitere + + + + The entered address "%1" is not a valid Alias address. + Adresa introdusă "%1" nu este o adresă Alias validă + + + + The entered address "%1" is already in the address book. + Adresa introdusă "%1" se află deja în lista de adrese. + + + + Could not unlock wallet. + Portofelul nu a putut fi deblocat. + + + + New key generation failed. + Generarea noii chei a eșuat. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + versiune + + + + Usage: + Utilizare: + + + + command-line options + Optiuni linie de comanda + + + + UI options + Setări UI + + + + Set language, for example "de_DE" (default: system locale) + Setează limba, de exemplu: "de_DE" (inițial: setare locală) + + + + Start minimized + Pornește miniaturizat + + + + Show splash screen on startup (default: 1) + Afișează ecran splash la pornire (implicit: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informație + + + + Alias Core + + + + + Client name + Nume client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Versiune client + + + + Using OpenSSL version + Foloseste versiunea OpenSSL + + + + Using BerkeleyDB version + + + + + Build date + Construit la data + + + + Startup time + Durata pornirii + + + + Network + Rețea + + + + Name + + + + + Number of connections + Numărul de conexiuni + + + + Block chain + Lanț de blocuri + + + + Current number of blocks + Numărul curent de blocuri + + + + Estimated total blocks + Blocurile totale estimate + + + + Last block time + Data ultimului bloc + + + + Debug log file + Loguri debug + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Deschide + + + + Command-line options + Optiuni linii de comandă + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + &Arată + + + + &Console + &Consolă + + + + Clear console + Curăță consola + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Foloseste sagetile sus si jos pentru a naviga in istoric si <b>Ctrl-L</b> pentru a curata. + + + + Type <b>help</b> for an overview of available commands. + Scrie <b>help</b> pentru a vedea comenzile disponibile + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Deschis până la %1 + + + + conflicted + conflictual + + + + %1/offline + %1/deconectat + + + + %1/unconfirmed + %1/neconfirmat + + + + %1 confirmations + %1 confirmări + + + + Transaction ID + ID-ul tranzactiei + + + + Block Hash + + + + + Status + Stare + + + + , has not been successfully broadcast yet + , nu s-a propagat încă + + + + , broadcast through %n node(s) + + + + + Date + Data + + + + Source + Sursa + + + + Generated + Generat + + + + + Credit + Credit + + + + matures in %n more block(s) + + + + + not accepted + nu este acceptat + + + + Transaction fee + Comisionul tranzacţiei + + + + Net amount + Suma netă + + + + Message + Mesaj + + + + Comment + Comentarii + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Informatii pentru debug + + + + Debit + Debit + + + + Transaction + Tranzacţie + + + + Inputs + Intrari + + + + Amount + Sumă + + + + true + Adevarat! + + + + false + Fals! + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + necunoscut + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Detaliile tranzacției + + + + This pane shows a detailed description of the transaction + Acest panou afișează o descriere detaliată a tranzacției + + + + TransactionTableModel + + + Date + Data + + + + Type + Tipul + + + + Address + Adresa + + + + Note + + + + + Amount + Cantitate + + + + Open for %n more block(s) + + + + + Open until %1 + Deschis până la %1 + + + + Offline + Deconectat + + + + Unconfirmed + Neconfirmat + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Confirmare (%1 dintre %2 confirmări recomandate) + + + + Confirmed (%1 confirmations) + Confirmat (%1 confirmări) + + + + Conflicted + Conflictual + + + + Immature (%1 confirmations, will be available after %2) + Nematurate(%1 confirmari, vor fi valabile dupa %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Starea tranzacției. Treci cu mausul peste acest câmp pentru afișarea numărului de confirmări. + + + + Date and time that the transaction was received. + Data și ora la care a fost recepționată tranzacția. + + + + Type of transaction. + Tipul tranzacției. + + + + Destination address of transaction. + Adresa de destinație a tranzacției. + + + + Amount removed from or added to balance. + Suma extrasă sau adăugată la sold. + + + + WalletModel + + + + Sending... + Se trimite... + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_ru.ts b/src/qt/locale/alias_ru.ts new file mode 100644 index 0000000000..a3f443d18a --- /dev/null +++ b/src/qt/locale/alias_ru.ts @@ -0,0 +1,4322 @@ + + + AboutDialog + + + About Alias + О Alias + + + + <b>Alias</b> version + <b>Alias</b> версия + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + © 2020 разработчики Alias +© 2016 разработчики Spectrecoin +© 2014 разработчики ShadowCash +© 2014 разработчики BlackCoin +© 2012 разработчики NovaCoin +© 2009 разработчики Bitcoin + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + Это пробное программное обеспечение. + +Распространяется по лицензии на программное обеспечение MIT/X11, подробнее в сопроводительном файле COPYING или <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +Это приложение включает программное обеспечение разработанное OpenSSL Project для использования в OpenSSL Toolkit(<a href="https://www.openssl.org/">https://www.openssl.org/</a>) и криптографическое программное обеспечение написанное Эриком Янгом Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) и обеспечение UPnP от Томаса Бернарда Thomas Bernard. + + + + AddressTableModel + + + Label + Метка + + + + Address + Адрес + + + + pubkey + публичный ключ + + + + stealth + скрытый + + + + (no label) + (нет метки) + + + + Stealth Address + Скрытый адрес + + + + n/a + n/a + + + + AskPassphraseDialog + + + Passphrase Dialog + Диалог ввода пароля + + + + Enter passphrase + Введите пароль + + + + New passphrase + Новый пароль + + + + Repeat new passphrase + Повторите новый пароль + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Служит для предотвращения обычной отправки монет, если ваша система скомпрометирована. Не не обеспечивает реальной безопасности. + + + + For staking only + Только для добычи монет + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Введите новый пароль для кошелька. <br/>Пожалуйста, используйте код из <b>10 или более случайных символов</b>, или <b>восьми и более слов</b>. + + + + Encrypt wallet + Зашифровать кошелёк + + + + Keep wallet unlocked for staking. + Оставить кошелёк разблокированным для добычи монет. + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + Ваш кошелек содержит заблокированные ATXO, для которых состояние расходов может быть определено только вашим личным ключом.<b> Ваш личный баланс ALIAS может быть показан неверно</b>. + + + + <b>Alias Wallet Login</b> + <b>Логин кошелька Alias</b> + + + + This operation needs your wallet passphrase to unlock the wallet. + Для выполнения операции требуется пароль вашего бумажника. + + + + Unlock wallet + Разблокировать кошелёк + + + + This operation needs your wallet passphrase to decrypt the wallet. + Для выполнения операции требуется пароль вашего бумажника. + + + + Decrypt wallet + Расшифровать бумажник + + + + Change passphrase + Сменить пароль + + + + Enter the old and new passphrase to the wallet. + Введите старый и новый пароль для кошелька. + + + + Confirm wallet encryption + Подтвердите шифрование кошелька + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Внимание: если вы зашифруете кошелёк и потеряете пароль, вы <b>ПОТЕРЯЕТЕ ВСЕ ВАШИ МОНЕТЫ</b>! + + + + Are you sure you wish to encrypt your wallet? + Вы уверены, что хотите зашифровать ваш кошелёк? + + + + + Wallet encrypted + Кошелёк зашифрован + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Сейчас программа закроется для завершения процесса шифрования. Помните, что шифрование вашего кошелька не может полностью защитить ваши монеты от кражи с помощью инфицирования вашего компьютера вредоносным ПО. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + ВАЖНО: все предыдущие резервные копии вашего кошелька должны быть заменены новым зашифрованным файлом. В целях безопасности предыдущие резервные копии нешифрованного кошелька станут бесполезны, как только вы начнёте использовать новый шифрованный кошелёк. + + + + + + + Wallet encryption failed + Не удалось зашифровать кошелёк + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Шифрование кошелька не удалось из-за внутренней ошибки. Ваш кошелёк не был зашифрован. + + + + + The supplied passphrases do not match. + Введённые пароли не совпадают. + + + + Wallet unlock failed + Разблокировка кошелька не удалась + + + + + + The passphrase entered for the wallet decryption was incorrect. + Указанный пароль не подходит. + + + + Wallet decryption failed + Расшифрование бумажника не удалось + + + + Wallet passphrase was successfully changed. + Пароль бумажника успешно изменён. + + + + + Warning: The Caps Lock key is on! + Внимание: Caps Lock включен! + + + + ClientModel + + + Network Alert + Сетевая Тревога + + + + CoinControlDialog + + + Coin Control + Выбор входов + + + + Quantity: + Количество: + + + + Bytes: + Размер: + + + + Amount: + Сумма: + + + + Priority: + Приоритет: + + + + Fee: + Комиссия: + + + + Low Output: + Мелкие входы: + + + + After Fee: + С комиссией: + + + + Change: + Сдача: + + + + (un)select all + Выбрать все + + + + Tree mode + Дерево + + + + List mode + Список + + + + Amount + Сумма + + + + Label + Метка + + + + Address + Адрес + + + + Date + Дата + + + + Confirmations + Подтверждения + + + + Confirmed + Подтверждено + + + + Priority + Приоритет + + + + Copy address + Копировать адрес + + + + Copy label + Копировать метку + + + + + Copy amount + Копировать сумму + + + + Copy transaction ID + Скопировать ID транзакции + + + + Copy quantity + Копировать количество + + + + Copy fee + Копировать комиссию + + + + Copy after fee + Копировать с комиссией + + + + Copy bytes + Копировать объем + + + + Copy priority + Копировать приоритет + + + + Copy low output + Скопируйте низкий выходной сигнал + + + + Copy change + Копировать сдачу + + + + highest + наивысший + + + + high + высокий + + + + medium-high + выше среднего + + + + medium + средний + + + + low-medium + ниже среднего + + + + low + низкий + + + + lowest + наименьший + + + + + DUST + ПЫЛЬ + + + + + yes + да + + + + + no + нет + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Эта метка становится красной, если размер перевода больше 10000 байт. + +Это означает, что необходима комиссия не меньше 1% за Кбайт. + +Может меняться +/- 1 байт на вход. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Перевод с наибольшим приоритетом имеет больше шансов попасть в блок. + +Эта метка становится красной, если приоритет меньше "среднего". + +Это означает, что необходима комиссия не меньше 1% за Кбайт. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Эта метка становится красной, если получатель получает сумму меньше %1. + +Это означает, что требуется комиссия не меньше %2. + +Количество меньше 0.546 минимальной платы перевода отображаются как ПЫЛЬ. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Эта метка становится красной, если обмен меньше %1. + +Это означает, что требуется комиссия не меньше %2. + + + + + (no label) + (нет метки) + + + + change from %1 (%2) + сдача с %1 (%2) + + + + (change) + (сдача) + + + + EditAddressDialog + + + Edit Address + Изменить адрес + + + + &Label + &Метка + + + + The label associated with this address book entry + Метка, связанная с данной записью + + + + &Address + &Адрес + + + + The address associated with this address book entry. This can only be modified for sending addresses. + Адрес, связанный с данной записью. + + + + &Stealth Address + &Скрытый адрес + + + + New receiving address + Новый адрес для получения + + + + New sending address + Новый адрес для отправки + + + + Edit receiving address + Изменение адреса для получения + + + + Edit sending address + Изменение адреса для отправки + + + + The entered address "%1" is not a valid Alias address. + Введённый адрес "%1" не является правильным Alias-адресом. + + + + The entered address "%1" is already in the address book. + Введённый адрес «%1» уже находится в адресной книге. + + + + Could not unlock wallet. + Не удается разблокировать бумажник. + + + + New key generation failed. + Генерация нового ключа не удалась. + + + + EncryptWalletPage + + + Wallet Encryption + Шифрование кошелька + + + + Please enter a password to encrypt the wallet.dat file. + Пожалуйста введите пароль, чтобы зашифровать wallet.dat файл. + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + Пароль защищает ваши секретные ключи и будет спрашиваться кошельком при запуске или при важных действиях. + + + + &Wallet Password: + &Пароль кошелька: + + + + &Verify Password: + &Подтверждение пароля: + + + + Create and encrypt wallet.dat ... + Создать и зашифровать wallet.dat ... + + + + Error + Ошибка + + + + Failed to create wallet.dat. ErrorCode: %1 + Неудача при создании wallet.dat. Код ошибки: %1 + + + + GUIUtil::HelpMessageBox + + + + Alias + Alias + + + + version + версия + + + + Usage: + Использование: + + + + command-line options + параметры командной строки + + + + UI options + Опции интерфейса + + + + Set language, for example "de_DE" (default: system locale) + Выберите язык, например "de_DE" (по умолчанию: как в системе) + + + + Start minimized + Запускать свёрнутым + + + + Show splash screen on startup (default: 1) + Показывать сплэш при запуске (по умолчанию: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + Загрузить wallet.dat + + + + Please import a wallet.dat file with your private keys. + Пожалуйста загрузите файл wallet.dat вместе с вашими секретными ключами. + + + + &Select wallet.dat + &Выбрать wallet.dat + + + + QFileDialog::getOpenFileName() + QFileDialog::getOpenFileName() + + + + Wallet Files (*.dat) + Файлы кошелька (*.dat) + + + + Error + Ошибка + + + + Failed to copy wallet.dat: %1 + Неудача при копировании wallet.dat: %1 + + + + IntroPage + + + Set Up Your Wallet + Настройте ваш кошелёк + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + Приложение обнаружило, что у вас нет файла wallet.dat, который хранит ваши секретные ключи. Пожалуйста создайте или восстановите ваши секретные ключи. + + + + &Create new mnemonic recovery seed words + &Создать новое мнемоническую фразу-семя для восстановления + + + + &Recover from your existing mnemonic seed words + &Восстановить существующую фразу-семя + + + + &Import wallet.dat file + &Загрузить файл wallet.dat + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + Создать секретные ключи с мнемонической фразой-семенем. + + + + Step 2/3: Write down your mnemonic recovery seed words. + Шаг 2/3: Запишите вашу фразу-семя. + + + + Mnemonic Recovery Seed Words: + Мнемоническая фраза-семя: + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + Вам необходима мнемоническая фраза-семя для восстановления этого кошелька. Запишите вашу фразу и храните её в безопасном месте. <br> Вам будет необходимо повторно ввести семя в следующем окне, чтобы убедиться, что вы всё записали правильно. + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + Создать секретные ключи с мнемонической фразой-семенем + + + + Step 1/3: Please define language to use and optional password to protect your seed. + Шаг 1/3: Пожалуйста выберите язык использования и пароль, чтобы защитить ваше семя. + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + Создание мнемонической фразы-семени это трёх этапная процедура:<ol><li>Выберите язык и пароль для вашей фразы.</li><li>Запишите вашу фразу.</li><li>Подтвердите фразу и пароль для семени.</li></ol> + + + + &Language: + &Язык: + + + + &Seed Password: + &Пароль семени: + + + + &Verify Password: + &Подтверждение пароля: + + + + Error + Ошибка + + + + Failed to create Mnemonic Seed Words. %1 + Неудача при создании мнемонической фразы. %1 + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + Создать секретные ключи с мнемонической фразой-семенем + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + Шаг 3/3: Подтвердите, что вы записали слова и (опционально) пароль верно. + + + + &Seed Password: + &Пароль семени: + + + + <br>Enter Mnemonic Seed Words: + <br> Введите мнемоническую фразу-семя: + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + Не могу запустить псевдоним: обработчик клик-оплаты + + + + PeerTableModel + + + Address/Hostname + адрес/фамилия + + + + User Agent + агент пользователя + + + + Ping Time + Время звонка + + + + QObject + + + %1 d + 1% д + + + + %1 h + %1 ч + + + + %1 m + %1 м + + + + + %1 s + %1 с + + + + None + Нет + + + + N/A + Н/З + + + + %1 ms + %1 мс + + + + RPCConsole + + + Alias - Debug window + Alias - Окно отладки + + + + &Information + &Информация + + + + Alias Core + Ядро Alias + + + + Client name + Имя клиента + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + Н/Д + + + + Client version + Версия клиента + + + + Using OpenSSL version + Используется версия OpenSSL + + + + Using BerkeleyDB version + Использование BerkeleyDB версии + + + + Build date + Дата сборки + + + + Startup time + Время запуска + + + + Network + Сеть + + + + Name + Имя + + + + Number of connections + Число подключений + + + + Block chain + Цепь блоков + + + + Current number of blocks + Текущее число блоков + + + + Estimated total blocks + Расчётное число блоков + + + + Last block time + Время последнего блока + + + + Debug log file + Отладочный лог-файл + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + Откройте файл журнала отладки Alias из текущего каталога данных. Это может занять несколько секунд для больших файлов. + + + + &Open + &Открыть + + + + Command-line options + Параметры командной строки + + + + Show the Alias help message to get a list with possible Alias command-line options. + Показать справочное сообщение Alias, чтобы получить список возможных параметров командной строки Alias. + + + + &Show + &Показать + + + + &Console + Консоль + + + + Clear console + Очистить консоль + + + + &Network Traffic + &Сетевой трафик + + + + &Clear + &Очистить + + + + Totals + Суммы + + + + + In: + В: + + + + + Out: + Из: + + + + &Peers + &Пирс + + + + + + Select a peer to view detailed information. + Выберите ровесника для просмотра подробной информации. + + + + Peer ID + Коллегиальный идентификатор + + + + Direction + Направление + + + + Version + Версия + + + + User Agent + агент пользователя + + + + Services + Услуги + + + + Starting Height + Высота старта + + + + Sync Height + Уровень синхронизации + + + + Ban Score + Банковская оценка + + + + Connection Time + Время соединения + + + + Last Send + Последняя отправка + + + + Last Receive + Последнее получение + + + + Bytes Sent + Байт отправлено + + + + Bytes Received + Байт принято + + + + Ping Time + Время задержки + + + + Time Offset + Смещение во времени + + + + Welcome to the Alias Core RPC console. + Добро пожаловать на консоль Alias Core RPC. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Используйте стрелки вверх и вниз для просмотра истории и <b>Ctrl-L</b> для очистки экрана. + + + + Type <b>help</b> for an overview of available commands. + Напишите <b>help</b> для просмотра доступных команд. + + + + via %1 + через %1 + + + + + never + никогда + + + + Inbound + Входящий + + + + Outbound + Исходящий + + + + Unknown + Неизвестный + + + + + Fetching... + Получение... + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + Восстановление закрытых ключей из мнемонической фразы-семени + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + Пожалуйста, введите (необязательно) пароль и мнемонические слова для восстановления личных ключей. + + + + &Seed Password: + &Пароль семени: + + + + &Verify Password: + &Подтверждение пароля: + + + + <br>Enter Mnemonic Seed Words: + <br> Введите мнемоническую фразу-семя: + + + + Error + Ошибка + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + Ошибка восстановления закрытых ключей из мнемонической фразы. %1 + + + + SetupWalletWizard + + + Alias Wallet Setup + Настройка кошелька Alias + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + Файл 'wallet.dat', в котором хранятся ваши личные ключи, не может быть найден во время запуска. Он должен быть создан сейчас.<br><br> Закрытый ключ состоит из буквенно-цифровых символов, которые дают пользователю доступ и контроль над своими средствами на соответствующий крипто-валютный адрес. Иными словами, частный ключ создает уникальные цифровые подписи для каждой операции, которые позволяют пользователю тратить свои средства, доказывая, что пользователь действительно владеет этими средствами. + + + + If you have a backup of a wallet.dat, you can import this file. + Если вы сделали резервное копирование файла wallet..dat, вы можете загрузить этот файл. + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + Мнемоническая фраза позволяет вам создать и позднее восстановить ваши закрытые ключи. Фраза состоит из 24 слов и необязательного пароля выступающего в виде 25-го слова, которое вы можете хранить в секрете, чтобы защитить семя. + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + Рекомендуется создать несколько копий фразы-семени и хранить в разных местах.<br><br><b>Внимание:</b> ключевая фраза не может быть (повторно) создана из ваших закрытых ключей. <br> При потере фразы-семени и не имея резервной копии файла wallet.dat, вы потеряете ваши монеты! + + + + Please enter the mnemonic words and password given on the previous screen. + Пожалуйста введите мнемоническую фразу и пароль данные в предыдущем окне. + + + + Please enter your mnemonic words and (optional) password. + Пожалуйста введите вашу мнемоническую фразу и (необязательно) пароль. + + + + This help is likely not to be of any help. + Скорее всего, эта помощь ничем не поможет. + + + + Alias Wallet Setup Help + Справка по настройке кошелька Alias + + + + SpectreBridge + + + default + по умолчанию + + + + <b>%1</b> from your public balance to %2 (%3) + <b>%1</b> из вашего видимого баланса в %2 (%3) + + + + <b>%1</b> from public to private, using address %2 (%3) + <b>%1</b> из видимого в скрытый, используя адресс %2 (%3) + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + <b>%1</b> с вашего скрытого баланса, размер кольцевой подписи %2, в %3(%4) + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + <b>%1</b> из скрытого в видимый, размер кольцевой подписи %2, используя адрес %3 (%4) + + + + + + + Error: + Ошибка: + + + + Unknown txn type detected %1. + Обнаружен неизвестный тип txn %1. + + + + Input types must match for all recipients. + Типы ввода должны совпадать для всех получателей. + + + + Ring sizes must match for all recipients. + Размеры колец должны соответствовать всем получателям. + + + + Ring size must be %1. + Размер кольцевой подписи должен быть %1. + + + + Ring size outside range [%1, %2]. + Размер кольцевой подписи за пределами диапазона [%1, %2]. + + + + + Confirm send coins + Подтверждение отправки монет + + + + Are you sure you want to send? +Ring size of one is not anonymous. + Вы уверены, что хотите отправить? +Кольцевая подпись из одного не анонимна. + + + + + and + и + + + + Are you sure you want to convert %1? + Вы уверены, что хотите преобразовать %1? + + + + Are you sure you want to send %1? + Вы уверены, что хотите отправить %1? + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + Отправка монет + + + + The change address is not valid, please recheck. + Выбранный адрес недействителен, пожалуйста проверьте ещё раз. + + + + The recipient address is not valid, please recheck. + Адрес получателя недействителен, пожалуйста проверьте ещё раз. + + + + Only ALIAS from your Private balance can be send to a stealth address. + Только Alias из вашего скрытого баланса могут быть отправлены на скрытый адрес. + + + + Transfer from Public to Private is only allowed within your account. + Перевод из Открытого в Скрытый разрешён только с вашего аккаунта. + + + + Transfer from Private to Public is only allowed within your account. + Перевод из Скрытого в Открытый разрешён только с вашего аккаунта. + + + + The amount to pay must be larger than 0. + Размер выплаты должен быть больше 0. + + + + The amount exceeds your balance. + Количество превышает ваш баланс. + + + + The total exceeds your balance when the %1 transaction fee is included. + Суммарная сумма превышает ваш баланс, если учитывать комиссию за транзакцию в размере %1. + + + + Duplicate address found, can only send to each address once per send operation. + Дублировать найденный адрес, можно отправить на каждый адрес только один раз за операцию отправки. + + + + Error: Transaction creation failed. + Ошибка: провал создания перевода. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Ошибка: В транзакции отказано. Такое может произойти, если некоторые монеты уже были потрачены, например, если Вы используете одну копию файла wallet.dat, а монеты были потрачены из другой копии, но не были отмечены как потраченные в этой. + + + + Error: Note is too long. + Ошибка: Запись слишком большая. + + + + Error: Ring Size Error. + Ошибка: Ошибка кольцевой подписи. + + + + Error: Input Type Error. + Ошибка: Ошибка ввода данных. + + + + Error: Must be in full mode to send anon. + Ошибка: Необходим полноценный режим, чтобы отправлять анонимно. + + + + Error: Invalid Stealth Address. + Ошибка: неверный Скрытый адрес. + + + + Convert Alias from Private to Public + Перевести Alias из Скрытого в Открытый + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + Ошибка: Некорректный Скрытый адрес. Для перевод из скрытого в публичный требует скрытого адреса. + + + + The amount exceeds your ALIAS balance. + Количество превышает ваш ALIAS баланс. + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + Суммарная сумма превышает Ваш личный баланс ALIAS, если учитывать комиссию за транзакцию в размере %1. + + + + Error generating transaction. + Ошибка создания перевода. + + + + Error generating transaction: %1 + Ошибка создания перевода: %1 + + + + Transaction successfully created. + Перевод успешно создан. + + + + Please restart wallet + Пожалуйста перезапустите кошелёк + + + + The used language has changed. +Please restart the wallet! + Используемый язык был изменён. +Пожалуйста перезапустите кошелёк. + + + + SpectreGUI + + + Public received with + Общественно полученный с + + + + Public received from + Общественный полученный от + + + + Public sent to + Публика, направленная в + + + + Public sent to self + Публика посылает к себе + + + + Private sent to self + Личный отправлен к себе + + + + Public staked + Общественный кол + + + + Public donated + Пожертвованный государством + + + + Public contributed + Вклад общественности + + + + Private staked + Частная ставка + + + + Private donated + Частное пожертвование + + + + Private contributed + Частные пожертвования + + + + Private received with + Наедине с + + + + Private sent to + Рядовой отправлен в + + + + Private to Public + От частного к государственному + + + + Public to Private + От государства к частному + + + + Other + Другое + + + + + + + Alias + Alias + + + + Client + Клиент + + + + ..Start UI.. + ...запустите пользовательский интерфейс... + + + + .Start UI. + Запустите пользовательский интерфейс. + + + + Ready! + Готов! + + + + E&xit + поездка и переезд + + + + Quit application + Прекратить применение + + + + &About Alias + О псевдониме + + + + Show information about Alias + Показать информацию о псевдониме + + + + About &Qt + О компании &Qt + + + + Show information about Qt + Показать информацию о Qt + + + + &Options... + &Опции... + + + + Modify configuration options for Alias + Изменить параметры конфигурации для псевдонима + + + + &Show / Hide + &Show / Прячьтесь + + + + &Encrypt Wallet... + Бумажник с шифром... + + + + Encrypt or decrypt wallet + Зашифровать или расшифровать бумажник + + + + &Backup Wallet... + &Backup бумажник... + + + + Backup wallet to another location + Резервный кошелек в другое место + + + + &Change Passphrase... + &Change Passphrase... + + + + Change the passphrase used for wallet encryption + Измените парольную фразу, используемую для шифрования кошелька + + + + &Unlock Wallet... + Кошелёк с отмычкой... + + + + Unlock wallet + Разблокировать кошелек + + + + &Lock Wallet + &Lock кошелек + + + + Lock wallet + Запирающий кошелёк + + + + &Debug window + окно отладки + + + + Open debugging and diagnostic console + Открытая консоль отладки и диагностики + + + + &File + &Файл + + + + &Settings + &Настройки + + + + &Help + &Помощь + + + + Wallet + Бумажник + + + + + [testnet] + [тестнет] + + + + %n active connection(s) to Alias network + %n активные подключения к сети Alias%n активные подключения к сети Alias%n активные подключения к сети Alias%n активные подключения к сети Alias + + + + block + блок + + + + header + заголовок + + + + blocks + блоки + + + + headers + заголовки + + + + + Synchronizing with network... + Синхронизация с сетью... + + + + Downloading filtered blocks... + Скачивание отфильтрованных блоков... + + + + ~%1 filtered block(s) remaining (%2% done). + ~%1 отфильтрованный блок(ы) оставшийся (%2% сделано). + + + + Importing blocks... + Импортные блоки... + + + + ~%n block(s) remaining + %n остатки блоков%n остатки блоков%n остатки блоков%n остатки блоков + + + + Imported %1 of %2 %3 of transaction history (%4% done). + Импортировано %1 из %2 %3 истории транзакций (%4% сделано). + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + Загружен %1 из %2 %3 истории транзакций (%4% сделано). + + + + Imported %n block(s) of transaction history. + Импортируемые %n блоки истории транзакций.Импортируемые %n блоки истории транзакций.Импортируемые %n блоки истории транзакций.Импортируемые %n блоки истории транзакций. + + + + Downloaded %n block(s) of transaction history. + Скачаны блоки истории транзакций %n.Скачаны блоки истории транзакций %n.Скачаны блоки истории транзакций %n.Скачаны блоки истории транзакций %n. + + + + %n second(s) ago + %n секунд назад%n секунд назад%n секунд назад%n секунд назад + + + + %n minute(s) ago + % минут назад% минут назад% минут назад% минут назад + + + + %n hour(s) ago + % часов назад% часов назад% часов назад% часов назад + + + + %n day(s) ago + % дней назад% дней назад% дней назад% дней назад + + + + Up to date + На сегодняшний день + + + + Catching up... + Догоняю... + + + + Last received %1 was generated %2. + Последний полученный %1 был сгенерирован %2. + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + За обработку данной транзакции будет взиматься плата в размере %1 за поддержку сети. Вы хотите отправить транзакцию? + + + + Confirm transaction fee + Подтвердить операционный сбор + + + + %1 %2 + %1 %2 + + + + Address: %1 +Note: %2 + + Адрес: %1 +Примечание: %2 + + + + + Address: %1 + + Адрес: %1 + + + + + + URI handling + обработка URI + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + URI нельзя разобрать! Это может быть вызвано недействительным адресом псевдонима или неправильными параметрами URI. + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + Бумажник<b> зашифрован</b> и в настоящее время <b>разблокирован</b>только для ставок + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Бумажник <b>зашифрован</b> и в настоящее время </b>разблокирован</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Бумажник<b> зашифрован</b> и в настоящее время <b>заблокирован</b> + + + + Backup Wallet + Backup кошелек + + + + Wallet Data (*.dat) + Данные кошелька (*.dat) + + + + Backup Failed + Резервное копирование не удалось + + + + There was an error trying to save the wallet data to the new location. + Произошла ошибка при попытке сохранить данные кошелька на новое место. + + + + Lock Wallet + Запирающий кошелек + + + + Error: Wallet must first be encrypted to be locked. + Ошибка: Бумажник сначала должен быть зашифрован, чтобы его можно было заблокировать. + + + + %1 second(s) + %1 секунда(ы) + + + + %1 minute(s), %2 second(s) + %1 минута(ы), %2 секунды(ы) + + + + %1 hour(s), %2 minute(s) + %1 час(ы), %2 минуты(ы) + + + + %1 day(s), %2 hour(s) + %1 день(ы), %2 часа(ы) + + + + (last 72 blocks %1) + (последние 72 блока %1) + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + Стакинг. <br/>Ваш вес - %1<br/> Вес сети - %2%3 <br/>Среднее время между наградами - %4 + + + + Not staking because wallet is in thin mode + Не ставить, потому что бумажник в тонком режиме. + + + + Not staking, staking is disabled + Не ставку, ставку отключили. + + + + Not staking because wallet is locked + Не ставить, потому что кошелек заперт. + + + + Not staking because wallet is offline + Не ставить, потому что кошелек отключен. + + + + Not staking because wallet is syncing + Не ставить, потому что кошелек синхронизирован. + + + + Initializing staking... + Инициализация ставки... + + + + Not staking because you don't have mature coins + Не ставить, потому что у тебя нет зрелых монет. + + + + Not staking + Не ставить + + + + TrafficGraphWidget + + + KB/s + КБ/с + + + + TransactionDesc + + + Open for %n block(s) + Не делать ставкуОткрыть для %n блоковНе делать ставкуОткрыть для %n блоковНе делать ставкуОткрыть для %n блоковНе делать ставкуОткрыть для %n блоков + + + + Open until %1 + Открыто до %1 + + + + conflicted + конфликт + + + + %1/offline + %1/оффлайн + + + + %1/unconfirmed + %1/не подтверждено + + + + %1 confirmations + %1 подтверждений + + + + Transaction ID + ID транзакции + + + + Block Hash + Блок Хэш + + + + Status + Статус + + + + , has not been successfully broadcast yet + , ещё не было успешно разослано + + + + , broadcast through %n node(s) + , рассылка через %n узел, рассылка через %n узла, рассылка через %n узлов, рассылка через %n узлов + + + + Date + Дата + + + + Source + Источник + + + + Generated + Сгенерировано + + + + + Credit + Кредит + + + + matures in %n more block(s) + выдерживается в %n больше блоковвыдерживается в %n больше блоковвыдерживается в %n больше блоковвыдерживается в %n больше блоков + + + + not accepted + не принято + + + + Transaction fee + Комиссия + + + + Net amount + Чистая сумма + + + + Message + Сообщение + + + + Comment + Комментарий + + + + Comment-To + Комментарий по адресу + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Генерируемые монеты должны быть выдержаны в 450 блоках, прежде чем их можно будет потратить. Когда вы генерировали этот блок, он транслировался в сеть для добавления в цепочку блоков. Если он не попадет в цепочку, его состояние изменится на "не принято" и он не будет потрачен. Иногда это может произойти, если другой узел в течение нескольких секунд генерирует блок. + + + + Debug information + Отладочная информация + + + + Debit + Дебет + + + + Transaction + Транзакция + + + + Inputs + Входы + + + + Amount + Количество + + + + true + истина + + + + false + ложь + + + + + Converted + Конвертированный + + + + from public to private + от государственного к частному + + + + from private to public + от частного к государственному + + + + Address + Адрес + + + + + Note + Примечание + + + + unknown + неизвестно + + + + <dd> + <dd> + + + + TransactionDescDialog + + + Transaction details + Детали транзакции + + + + This pane shows a detailed description of the transaction + Данный диалог показывает детализированную статистику по выбранной транзакции + + + + TransactionTableModel + + + Date + Дата + + + + Type + Тип + + + + Address + Адрес + + + + Note + Примечание + + + + Amount + Количество + + + + Open for %n more block(s) + Открыть для %n больше блоковОткрыть для %n больше блоковОткрыть для %n больше блоковОткрыть для %n больше блоков + + + + Open until %1 + Открыто до %1 + + + + Offline + Оффлайн + + + + Unconfirmed + Не подтверждено + + + + Confirming (%1 of %2 required confirmations) + Подтверждение (%1 от %2 требуемых подтверждений). + + + + Confirming (%1 of %2 recommended confirmations) + Подтверждается (%1 из %2 рекомендованных подтверждений) + + + + Confirmed (%1 confirmations) + Подтверждено (%1 подтверждений) + + + + Conflicted + Конфликт + + + + Immature (%1 confirmations, will be available after %2) + Незрелые (%1 подтверждений, будут доступны после %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + Сирота %1 кол, блок не был получен никакими другими узлами и, вероятно, не будет принят! + + + + Orphan %1 stake, someone else submitted the block before you. + Сирота %1 кол, кто-то другой подал блок до тебя. + + + + (n/a) + [не доступно] + + + + Transaction status. Hover over this field to show number of confirmations. + Статус транзакции. Подведите курсор к нужному полю для того, чтобы увидеть количество подтверждений. + + + + Date and time that the transaction was received. + Дата и время, когда транзакция была получена. + + + + Type of transaction. + Тип транзакции. + + + + Destination address of transaction. + Адрес назначения транзакции. + + + + Amount removed from or added to balance. + Сумма, добавленная, или снятая с баланса. + + + + WalletModel + + + + Sending... + Отправка.... + + + + alias-bridge + + + Overview + Обзор + + + + Wallet + Бумажник + + + + Send + Отправить + + + + Receive + Получить + + + + Transactions + Сделки + + + + Address Book + адресная книга + + + + Options + Варианты + + + + Advanced + Расширенный сайт + + + + Backup Wallet + Backup кошелек + + + + Encrypt Wallet + Шифрованный кошелек + + + + Change Passphrase + Изменить пароль + + + + (Un)lock Wallet + (Un)lock Кошелек + + + + Tools + Инструменты + + + + Chain Data + Данные цепочки + + + + Block Explorer + Проводник блоков + + + + Sign Message + Знаковое сообщение + + + + Verify Message + Проверить сообщение + + + + Debug + Отладка + + + + About Alias + О Alias + + + + About QT + О КТ + + + + QR code + QR-код + + + + Address: + Адрес: + + + + Label: + Ярлык: + + + + Amount: + Сумма: + + + + Add new receive address + Добавить новый адрес получения + + + + Add Address + Адрес + + + + Add a new contact + Добавить новый контакт + + + + Address Lookup + Поиск адреса + + + + Address Type + Тип адреса + + + + Stealth + Стелс + + + + Group + Группа + + + + BIP32 + BIP32 + + + + Label + Ярлык + + + + Address + Адрес + + + + Public Key + Открытый ключ + + + + Transaction Hash + Хэш-транзакция + + + + Recent Transactions + Последние сделки + + + + Coin Control + Контроль за монетами + + + + Make payment + произвести оплату + + + + Balance transfer + Перевод баланса + + + + Select Inputs + Выберите Входы + + + + Automatically selected + Автоматически выбранный + + + + Quantity: + Количество: + + + + Fee: + Гонорар: + + + + After Fee: + После Фи: + + + + Bytes: + Байты: + + + + Priority: + Приоритет: + + + + LowOutput: + LowOutput: + + + + Change: + Перемены: + + + + Custom change address + Настраиваемый адрес изменения + + + + From account + Со счета + + + + PUBLIC + ПУБЛИКА + + + + PRIVATE + ЧАСТНЫЙ + + + + Balance: + Баланс: + + + + Ring Size: + Размер кольца: + + + + To account + Отчитаться + + + + Pay to + Платить до + + + + (no label) + (без этикетки) + + + + Master + Мастер + + + + Wallet is encrypted and currently locked + Бумажник зашифрован и в настоящее время заблокирован + + + + Not staking because wallet is locked + Не ставить, потому что кошелек заперт. + + + + 0 active connection(s) to Alias network + 0 активное подключение(я) к сети Alias + + + + Enter a label for this address to add it to your address book + Введите ярлык для этого адреса, чтобы добавить его в адресную книгу. + + + + Enter a address to add it to your address book + Введите адрес, чтобы добавить его в адресную книгу. + + + + Inputs + Входы + + + + Values + Значения + + + + Outputs + Выходы + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Введите адрес Alias для подписи сообщения (например, SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV). + + + + Enter the message you want to sign + Введите сообщение, которое вы хотите подписать + + + + Click sign message to generate signature + Нажмите на сообщение с подписью, чтобы сгенерировать подпись + + + + Copy the signed message signature + Скопируйте подпись подписанного сообщения + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + Введите адрес Alias для проверки сообщения с помощью (например, SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV). + + + + Enter the message you want to verify + Введите сообщение, которое вы хотите проверить. + + + + Enter a Alias signature + Введите подпись псевдонима + + + + Paste signature from clipboard + Вставить подпись из буфера обмена + + + + Your total balance + Ваш общий баланс + + + + Recent in/out transactions or stakes + Недавние входящие/исходящие сделки или ставки + + + + Select inputs to spend + Выберите входы, которые нужно потратить + + + + Optional address to receive transaction change + Необязательный адрес для получения изменения транзакции + + + + Choose from address book + Выберите из адресной книги + + + + Paste address from clipboard + Вставить адрес из буфера обмена + + + + Remove this recipient + Удалить этого получателя + + + + Send from public or private + Отправить из государственных или частных + + + + Current spendable send payment balance + Текущие расходы отправить платежный баланс + + + + Send to public or private + Отправить в общественный или частный + + + + Current spendable balance to account + Текущий расходный остаток на счету + + + + The label for this address + Ярлык для этого адреса + + + + Amount to transfer + Сумма, подлежащая перечислению + + + + Send to multiple recipients at once + Отправить нескольким получателям одновременно + + + + Date and time that the transaction was received. + Дата и время получения транзакции. + + + + Transaction status. Hover over this field to show number of confirmations. + Статус операции. Наведите курсор на это поле, чтобы показать количество подтверждений. + + + + Type of transaction. + Тип сделки. + + + + Destination address of transaction. + Адрес назначения сделки. + + + + Short payment note. + Краткое платежное извещение. + + + + Amount removed from or added to balance. + Сумма, снятая с баланса или добавленная к нему. + + + + Name for this Wallet + Имя для этого кошелька + + + + Enter a password + Введите пароль + + + + Would you like to create a bip44 path? + Хотите создать путь bip44? + + + + Your recovery phrase (Keep this safe!) + Ваша восстановительная фраза (Храните это в безопасности!) + + + + Recovery Phrase + Восстановительная фраза + + + + Wallet Name for recovered account + Имя кошелька для восстановленного счета + + + + Enter the password for the wallet you are trying to recover + Введите пароль для кошелька, который вы пытаетесь восстановить. + + + + Is this a bip44 path? + Это путь биф44? + + + + ID + ID + + + + Created + Создан + + + + Active Account + Активная учетная запись + + + + Default + По умолчанию + + + + Path + Путь + + + + Active + Активный сайт + + + + Amount + Сумма + + + + Note + Примечание + + + + Public coins, visible on blockchain + Государственные монеты, видимые на блок-папке + + + + Private coins, untraceable and unlinkable on blockchain + Частные монеты, неотслеживаемые и несвязанные на блок-постели. + + + + Available coins for spending + Доступные для расходования монеты + + + + Reserved coins are not used for staking + Зарезервированные монеты не используются для ставок + + + + Staked coins must mature before they can be accessed + Штампованные монеты должны созреть до того, как они будут доступны. + + + + Stake + Кол + + + + Sub-Wallets + Субкошельки + + + + Start Alias on system login + Запустите псевдоним на системном логине + + + + Detach databases at shutdown + Отсоединить базы данных при выключении + + + + Pay transaction fee + оплатить транзакционный взнос + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + Сбор за транзакцию за кБ. Более высокая комиссия обеспечивает быструю обработку Ваших транзакций в периоды большого объема транзакций. + + + + Most transactions are 1kB. The minimal fee is 0.0001 + Большинство сделок составляет 1 кБ. Минимальная комиссия составляет 0.0001 + + + + Enable Staking + Включить ставку + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + Включает или выключает процесс стадирования. Если ваш кошелек зашифрован, вам нужно будет разблокировать его для размещения ставки. + + + + Staking Donation + Ставка Пожертвование + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + Каждый шестой блок на цепочке является блоком вклада в развитие (БВР). Взносы DCB вносятся в фонд развития независимо от того, какой процент пожертвований установлен. Пожалуйста, не стесняйтесь делать дополнительные пожертвования из оставшихся бонусов долевого участия, определив шанс пожертвования. Спасибо. + + + + Reserve + Резерв + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + Зарезервированная сумма не участвует в ставках и поэтому может быть потрачена в любое время. + + + + Minimum Stake Interval + Минимальный интервал ставок + + + + Main + Главный + + + + Window + Окно + + + + Display + Показать + + + + Minimize to the tray instead of the taskbar + Минимизируйте до лотка, а не до панели задач. + + + + Minimize on close + Минимум на близком расстоянии + + + + User Interface language + Язык пользовательского интерфейса + + + + Unit to show amounts in + Единица измерения для показа сумм в + + + + Rows per page + Ряды на страницу + + + + Display addresses in transaction list + Отображение адресов в списке транзакций + + + + Notifications + Уведомления + + + + Visible Transaction Types + Видимые виды сделок + + + + Cancel + Отменить + + + + Apply + Подать заявку на сайте . + + + + Ok + Ok + + + + Reserved + Зарезервирован + + + + Unconfirmed + Неподтверждённый + + + + Immature + Незрелый + + + + Type + Введите . + + + + Date + Дата + + + + Send Payment + Отправить оплату + + + + The address to send the payment to + Адрес для отправки платежа + + + + Enter a label for this address + Введите ярлык для этого адреса + + + + Add Sub-Wallet + Добавить суб-кошелек + + + + Immature generated coins with Proof-of-Work + Незрелые сгенерированные монеты с доказательством подлинности. + + + + Blockchain Info + Информация о блокировке + + + + Checking wallet state with network + Проверка состояния кошелька в сети + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + Публичный ALIAS требует 1 подтверждения <br>Приватный ALIAS требует 10 подтверждений + + + + Total Balance + Общий баланс + + + + Balance + Баланс + + + + Available + Имеется на вебсайте . + + + + Public + Общественный + + + + Private + Частный + + + + Tor+OBFS4 connection online + Подключение Tor+OBFS4 онлайн + + + + Wallet Encryption + Бумажник Шифрование + + + + A short reference for the recipient (max 24 characters) + Краткая ссылка для получателя (не более 24 символов). + + + + ALIAS Denomination Value + Значение деноминации АЛИАС + + + + No. Owned (* = Immature) + Нет. Собственный (* = Незрелый) + + + + No. System Unspent (* = Immature) + Нет. Система не израсходована (* = незрелая). + + + + No. available Mixins (* = Immature) + Нет. Доступные смесители (* = незрелые) + + + + No. System (** = Compromised) + Нет. Система (** = Скомпрометированная) + + + + The last block a coin of this denomination was created + Последний блок монеты этого номинала был создан... + + + + Owned (*) + Собственный (*) + + + + Unspent (*) + Неизрасходованный (*) + + + + Mixins (*) + Смесители (*) + + + + System (**) + Система (**) + + + + Least Depth + Наименьшая глубина + + + + Value Out + Значение на выходе + + + + Value + Значение + + + + Addressbook + Адресная книга + + + + Refresh + Обновить + + + + Hash + Хаш + + + + Height + Высота + + + + Timestamp + Таймштамп + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + Введите адрес Alias (например, SXywGBZBowrppUwNUo1GCRDTibzJi7g2M). + + + + An address label for the payment senders address book + Адресная этикетка для адресной книги отправителя платежа + + + + Enter a short note to send with a payment (max 24 characters) + Введите короткое сообщение для отправки с оплатой (максимум 24 символа). + + + + Filter by label or address... + Фильтровать по ярлыку или адресу... + + + + Note to send with payment (max 24 characters) + Примечание для отправки с оплатой (макс. 24 символа) + + + + The private address to transfer the balance to + Личный адрес для перевода остатка на + + + + Search by label or address + Поиск по метке или адресу + + + + Search + Поиск + + + + Family vacation funds + Фонды семейного отдыха + + + + Grouping will consolidate transactions of chosen + Группировка будет консолидировать сделки выбранных + + + + Reset form + Форма сброса + + + + Restore Sub-Wallet + Восстановление субкошелька + + + + Filter outputs + Выходы фильтра + + + + Find Block by hash/height/transaction + Найти блок по хэшу/высоте/транзакции + + + + alias-core + + + To use the %s option + Использовать опцию %s + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + %s, в конфигурационном файле необходимо задать rpcpassword: +%s +Рекомендуется использовать следующий случайный пароль: +rpcuser=aliasrpc +rpcpassword=%s +(тебе не нужно запоминать этот пароль) +Имя пользователя и пароль НЕ ДОЛЖНЫ совпадать. +Если файл не существует, создайте его с разрешениями только для чтения владельцем. +Рекомендуется также установить alertnotify, чтобы вы получали уведомления о проблемах; +например: alertnotify=echo %s | mail -s "Alias Alert" admin@foo.com. + + + + + Error + Ошибка + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + Произошла ошибка при настройке порта RPC %u для прослушивания на IPv6, возвращаясь к IPv4: %s. + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + Произошла ошибка при настройке порта RPC %u для прослушивания на IPv4: %s. + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + В файле конфигурации необходимо установить rpcpassword=<password>: +%s +Если файл не существует, создайте его с разрешениями только для чтения владельцем. + + + + Alias version + псевдонимная версия + + + + Usage: + Использование: + + + + Send command to -server or aliaswalletd + Отправьте команду -server или aliaswalletd + + + + List commands + Список команд + + + + Get help for a command + Получить помощь для команды + + + + Alias + Alias + + + + Options: + Варианты: + + + + This help message + Это справочное сообщение + + + + Specify configuration file (default: alias.conf) + Укажите файл конфигурации (по умолчанию: alias.conf). + + + + Specify pid file (default: alias.pid) + Укажите файл pid (по умолчанию: alias.pid). + + + + Specify data directory + Укажите каталог данных + + + + Specify wallet file (within data directory) + Укажите файл кошелька (в каталоге данных). + + + + Set database cache size in megabytes (default: 25) + Установить размер кэша базы данных в мегабайтах (по умолчанию: 25) + + + + Set database disk log size in megabytes (default: 100) + Установить размер журнала базы данных в мегабайтах (по умолчанию: 100) + + + + Specify connection timeout in milliseconds (default: 5000) + Укажите время ожидания соединения в миллисекундах (по умолчанию: 5000). + + + + Connect through socks proxy + Подключиться через прокси-сервер носков + + + + Select the version of socks proxy to use (4-5, default: 5) + Выберите версию прокси-сервера для носков (4-5, по умолчанию: 5) + + + + Use proxy to reach tor hidden services (default: same as -proxy) + Использовать прокси для доступа к скрытым сервисам тор (по умолчанию: то же самое, что и -proxy). + + + + Allow DNS lookups for -addnode, -seednode and -connect + Разрешить поиск DNS для -addnode, -seednode и -connect + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + Прослушивайте соединения<port> (по умолчанию: 37347 или тестируемый телефон: 37111). + + + + Maintain at most <n> connections to peers (default: 125) + Поддерживать максимум<n> соединений с коллегами (по умолчанию: 125) + + + + Add a node to connect to and attempt to keep the connection open + Добавить узел для подключения и попытаться сохранить соединение открытым. + + + + Connect only to the specified node(s) + Подключайтесь только к указанному узлу (узлам). + + + + Connect to a node to retrieve peer addresses, and disconnect + Подключение к узлу для получения одноранговых адресов и отключение + + + + Specify your own public address + Укажите свой собственный публичный адрес + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Подключайтесь только к узлам в сети <net>(IPv4, IPv6 или Tor). + + + + Discover own IP address (default: 1 when listening and no -externalip) + Обнаружить собственный IP-адрес (по умолчанию: 1 при прослушивании и нет -внешний). + + + + Find peers using internet relay chat (default: 0) + Поиск коллег с помощью ретрансляционного интернет-чата (по умолчанию: 0) + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Принимать подключения извне (по умолчанию: 1, если нет -прокси или -подключить). + + + + Bind to given address. Use [host]:port notation for IPv6 + Привяжите к указанному адресу. Используйте [host]:port notation для IPv6. + + + + Find peers using DNS lookup (default: 1) + Поиск коллег с помощью DNS поиска (по умолчанию: 1) + + + + Stake your coins to support network and gain reward (default: 1) + Ставьте ваши монеты для поддержки сети и получения вознаграждения (по умолчанию: 1) + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + Синхронизация времени с другими узлами. Отключите, если время в системе точное, например, синхронизация с NTP (по умолчанию: 1). + + + + Sync checkpoints policy (default: strict) + Синхронизация политики контрольных точек (по умолчанию: строгая) + + + + Threshold for disconnecting misbehaving peers (default: 100) + Порог отключения для отключения недобросовестных коллег (по умолчанию: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Количество секунд, чтобы не допустить переподключения ошибочно настроенных коллег (по умолчанию: 86400). + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Максимальный буфер приема на каждое соединение, <n>*1000 байт (по умолчанию: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Максимальный буфер отправки на каждое соединение, <n>*1000 байт (по умолчанию: 1000) + + + + Use UPnP to map the listening port (default: 1 when listening) + Используйте UPnP для отображения порта прослушивания (по умолчанию: 1 при прослушивании). + + + + Use UPnP to map the listening port (default: 0) + Используйте UPnP для отображения порта прослушивания (по умолчанию: 0). + + + + Detach block and address databases. Increases shutdown time (default: 0) + Отсоедините блок и адресные базы данных. Увеличивает время выключения (по умолчанию: 0). + + + + Fee per KB to add to transactions you send + Комиссионный сбор за KB для добавления к отправленным транзакциям + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + При создании транзакций игнорируйте входы со значением меньше этого (по умолчанию: 0.01). + + + + Accept command line and JSON-RPC commands + Принять команды командной строки и JSON-RPC + + + + Run in the background as a daemon and accept commands + Бегите в фоновом режиме как демон и принимайте команды. + + + + Use the test network + Использовать тестовую сеть + + + + Output extra debugging information. Implies all other -debug* options + Выводите дополнительную отладочную информацию. Подразумевает все остальные опции -debug*. + + + + Output extra network debugging information + Вывод дополнительной информации об отладке сети + + + + Prepend debug output with timestamp + Подготовка отладочного вывода с временной меткой + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Уменьшить файл debug.log при запуске клиента (по умолчанию: 1 при отсутствии -debug) + + + + Send trace/debug info to console instead of debug.log file + Отправка информации о трассировке/отладке в консоль вместо файла debug.log + + + + Send trace/debug info to debugger + Отправить информацию об отслеживании/отладке в отладчик + + + + Username for JSON-RPC connections + Имя пользователя для JSON-RPC соединений + + + + Password for JSON-RPC connections + Пароль для JSON-RPC соединений + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + Прослушайте JSON-RPC соединения<port> (по умолчанию: 36657 или тестируемый телефон: 36757). + + + + Allow JSON-RPC connections from specified IP address + Разрешать JSON-RPC соединения с указанного IP-адреса + + + + Send commands to node running on <ip> (default: 127.0.0.1) + Отправлять команды на запущенный узел<ip> (по умолчанию: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Выполнить команду, когда меняется лучший блок (%s в команде заменяется на хэш блока) + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Выполнять команду, когда изменяется транзакция кошелька (%s в команде заменяется на TxID) + + + + Require a confirmations for change (default: 0) + Необходимые подтверждения для изменения (по умолчанию: 0) + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + Внедрить скрипты транзакций для использования канонических операторов PUSH (по умолчанию: 1) + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + Выполнить команду при получении соответствующего предупреждения (%s в команде заменяется на сообщение). + + + + Upgrade wallet to latest format + Обновить кошелёк до последнего формата + + + + Set key pool size to <n> (default: 100) + Установить размер общего фонда ключей в <n> (по умолчанию: 100) + + + + Rescan the block chain for missing wallet transactions + Перепроверить цепь блоков на предмет отсутствующих в бумажнике транзакций + + + + Attempt to recover private keys from a corrupt wallet.dat + Попытка восстановить личные ключи из поврежденного кошелька. + + + + How many blocks to check at startup (default: 2500, 0 = all) + Сколько блоков нужно проверить при запуске (по умолчанию: 2500, 0 = все). + + + + How thorough the block verification is (0-6, default: 1) + Насколько тщательна проверка блока (0-6, по умолчанию: 1). + + + + Imports blocks from external blk000?.dat file + Импортирует блоки из внешнего файла blk000?.dat. + + + + Block creation options: + Параметры создания блоков: + + + + Set minimum block size in bytes (default: 0) + Установить минимальный размер блока в байтах (по умолчанию: 0). + + + + Set maximum block size in bytes (default: 250000) + Установить максимальный размер блока в байтах (по умолчанию: 250000). + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Установить максимальный размер высокоприоритетных/низкопороговых транзакций в байтах (по умолчанию: 27000). + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + SSL-опции: (инструкции по настройке SSL см. в Вики-библиотеке Bitcoin). + + + + Use OpenSSL (https) for JSON-RPC connections + Используйте OpenSSL (https) для соединений JSON-RPC. + + + + Server certificate file (default: server.cert) + Файл серверного сертификата (по умолчанию: server.cert) + + + + Server private key (default: server.pem) + Скрытый ключ сервера (по умолчанию: server.pem) + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + Допустимые шифры (по умолчанию: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + Invalid amount for -paytxfee=<amount>: '%s' + Неверное количество в параметре -paytxfee=<amount>: '%s' + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Внимание: -paytxfee установлен очень высоко! Это плата за транзакцию, которую вы заплатите, если отправите транзакцию. + + + + Invalid amount for -mininput=<amount>: '%s' + Недействительная сумма для -mininput=<amount>: '%s'. + + + + Wallet %s resides outside data directory %s. + Бумажник %s находится вне каталога данных %s. + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + Не могу получить блокировку каталога данных %s. Вероятно, псевдоним уже запущен. + + + + Verifying database integrity... + Проверка целостности базы данных... + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + Ошибка инициализации среды БД %s! Чтобы восстановить, ОБНАРУЖИВАЙТЕ ЭТУ ДИРЕКТОРИЮ, затем удалите из нее все, кроме wallet.dat. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Внимание: кошелек.dat поврежден, данные сохранены! Оригинальный кошелек.dat сохранен как кошелек.{timestamp}.bak in %s; если ваш баланс или транзакции некорректны, вы должны восстановить из резервной копии. + + + + wallet.dat corrupt, salvage failed + wallet.dat поврежден, восстановление не удалось + + + + Unknown -socks proxy version requested: %i + Запрошена неизвестная -socks прокси версия: %i + + + + Unknown network specified in -onlynet: '%s' + Неизвестная сеть, указанная в -onlynet: '%s'. + + + + Invalid -proxy address: '%s' + Неверный адрес -proxy: '%s' + + + + Invalid -tor address: '%s' + Неверный адрес -tor: '%s' + + + + Cannot resolve -bind address: '%s' + Невозможно решить -привязать адрес: '%s' + + + + Failed to listen on any port. + Не удалось прослушать ни один порт. + + + + Failed to listen on any port. Use -listen=0 if you want this. + Не слушал ни один порт. Используйте -listen=0, если хотите. + + + + Cannot resolve -externalip address: '%s' + Не удаётся разрешить -externalip address: '%s' + + + + Invalid amount for -reservebalance=<amount> + Неверное количество в параметре -reservebalance=<amount> + + + + Unable to sign checkpoint, wrong checkpointkey? + + Невозможно подписать контрольно-пропускной пункт, неправильный контрольно-пропускной пункт? + + + + + Loading block index... + Загрузка индекса блоков... + + + + Error loading blk0001.dat + Ошибка загрузки blk0001.dat + + + + Loading wallet... + Загрузка кошелька... + + + + Error loading wallet.dat: Wallet corrupted + Ошибка при загрузке кошелька: Бумажник испорчен + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Внимание: ошибка чтения кошелька.dat! Все ключи читаются правильно, но данные транзакции или записи в адресной книге могут отсутствовать или быть неправильными. + + + + Error loading wallet.dat: Wallet requires newer version of Alias + Ошибка при загрузке кошелька: Бумажник требует более новую версию псевдонима + + + + Wallet needed to be rewritten: restart Alias to complete + Бумажник необходимо переписать: перезапустить псевдоним для завершения + + + + Error loading wallet.dat + Ошибка при загрузке wallet.dat + + + + Cannot downgrade wallet + Невозможно понизить класс кошелька + + + + Cannot initialize keypool + Не могу инициализировать клавиатурный пул + + + + Cannot write default address + Не удаётся записать адрес по умолчанию + + + + Rescanning... + Повторное сканирование... + + + + Importing blockchain data file. + Импортируется файл цепи блоков. + + + + Importing bootstrap blockchain data file. + Импортируется bootstrap-файл цепи блоков. + + + + Loading addresses... + Загрузка адресов... + + + + Error: could not start node + Ошибка: не удалось запустить узел + + + + Done loading + Загрузка завершена + + + + Unable to bind to %s on this computer. Alias is probably already running. + Невозможно привязать к %s на этом компьютере. Псевдоним, вероятно, уже работает. + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Невозможно связать с %s на этом компьютере (связать возвращаемую ошибку %d, %s) + + + + Error: Wallet locked, unable to create transaction + Ошибка: Бумажник заблокирован, не может создать транзакцию + + + + Error: Wallet unlocked for staking only, unable to create transaction. + Ошибка: Бумажник разблокирован только для ставки, не может создать сделку. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + Ошибка: Данная транзакция требует плату за транзакцию в размере не менее %s из-за ее объема, сложности или использования недавно полученных средств. + + + + Error: Transaction creation failed + Ошибка: Создание транзакции не удалось + + + + Sending... + Отправка.... + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Ошибка: Сделка была отклонена. Это может произойти, если некоторые монеты в вашем кошельке уже были потрачены, например, если вы использовали копию wallet.dat и монеты были потрачены в копии, но не помечены как потраченные здесь. + + + + Invalid amount + Неверное количество + + + + Insufficient funds + Недостаточно монет + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + Внимание: Пожалуйста, проверьте правильность даты и времени на вашем компьютере! Если ваши часы неправильные, псевдоним будет работать неправильно. + + + + Warning: This version is obsolete, upgrade required! + Внимание: данная версия устарела, необходимо обновление! + + + + WARNING: syncronized checkpoint violation detected, but skipped! + ВНИМАНИЕ: синхронизация контрольной точки нарушено, но пропущено! + + + + Warning: Disk space is low! + Внимание: мало места на диске! + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + ВНИМАНИЕ: Недействительный контрольно-пропускной пункт найден! Отображаемые транзакции могут быть некорректными! Может потребоваться обновление или уведомление разработчиков. + + + + Read ATXOs... (%d) + Читайте ATXO... (%d) + + + + Read spent ATXOs... (%d) + Читать потраченные ATXO... (%d) + + + + Note must be 24 characters or less. + Запись должна состоять из 24 символов или меньше. + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Ошибка: Сделка была отклонена. Это может произойти, если некоторые монеты в вашем кошельке уже были потрачены, например, если вы использовали копию wallet.dat и монеты были потрачены в копии, но не помечены как потраченные здесь. + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + Ошибка: Найдены неподдерживаемые аргументы - носки. Установка версии SOCKS больше не возможна, поддерживаются только SOCKS5 прокси. + + + + Initialization sanity check failed. Alias is shutting down. + Ошибка проверки работоспособности. Alias завершает работу. + + + + Loading block index... (%d) + Загружается индекс блока... (%d) + + + + Calculating chain trust... (%d) + Рассчёт доверительной цепи... (%d) + + + + Validating last %d block... + Проверка последнего %d блока... + + + + -bip44key is not allowed if wallet.dat already exists + -bip44key не допускается, если файл wallet.dat уже существует + + + + Cannot resolve binding address: '%s' + Не удаётся разрешить привязку адреса: '%s' + + + + Error: could not start tor node + Ошибка: не удалось запустить узел tor + + + + Timed out waiting for onion hostname. + Истекло время ожидания для onion хоста. + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + Ошибка загрузки blk0001.dat: обнаружена неверная цепочка блоков, пожалуйста выполните повторную синхронизацию или используйте файл начальной загрузки (bootstrap). + + + + Loading wallet items... (%d) + Загрузка элементов кошелька... (%d) + + + + Reindexing from blk000?.dat files. + Повторная индексация блока из blk000?.dat файлов. + + + + Reindexing block... (%d) + Повторная индексация блока... (%d) + + + + Core started! + Ядро запущено! + + + + Use tor hidden services version 2 instead of version 3 + Использовать скрытые службы TOR версии 2 вместо версии 3 + + + + Find peers using .onion seeds (default: 1 unless -connect) + Найти узлы с использованием .onion семян(по умолчанию: 1, если не используется -connect) + + + + Minimum time in seconds between successful stakes (default: 30) + Минимальное время в секундах, между добытыми блоками (по умолчанию: 30) + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + Процент от вознаграждения за добычу блоков, который будет пожертвован разработчикам (между 0 и 100 включительно, по умолчанию 5) + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + Милисекунды между попытками стейкинга. Уменьшение параметра не приведёт к увеличению вознаграждений. (по умолчанию: 500) + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + Количество секунд для повторного подключения одноранговых узлов (по умолчанию: 3600) + + + + Simple command line interface - if not run as daemon + Внешний вид простой командной строки - если не запущен как демон + + + + Output extra blockchain debugging information + Вывести дополнительную информацию для отладки о цепочке блоков + + + + Output extra Proof of Stake debugging information + Вывести дополнительную информацию о Доказательстве Доли(PoS) для отладки + + + + Send trace/debug info to debug.log file + Отправить информацию отслеживания/отладки в debug.log файл + + + + Wait for RPC server to start + Ожидание удалённого вызова процедур сервера, для запуска + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + Хранить в памяти<n> максимум МиБ неприсоединяемых блоков (по умолчанию: %u) + + + + Rebuild block chain index from current blk000?.dat files on startup + Перестроить индексацию цепочки блоков с текущего blk000?.dat файла при запуске + + + + Show version and exit + Показать версию и выйти + + + + Thin options: + Тонкая настройка: + + + + Operate in less secure, less resource hungry 'thin' mode + Работать в менее безопасном, менее ресурсоёмком "тонком" режиме + + + + Keep the entire block index in memory. (default: 0) + Держать в памяти полный индекс блока. (по умолчанию:0) + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + Когда не тонкая ссылка, максимальное количество заголовков блоков для сохранения в памяти. (по умолчанию: 4096) + + + + Disable supporting thin nodes. (default: 0) + Отключить поддержку тонких узлов. (по умолчанию: 0) + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + Отключить пересылку, или запросить все стелс-тексты. (по умолчанию: 0) + + + + Don't connect to more than <n> thin peers (default: 8) + Не подключайтесь к более чем<n> тонким аналогам (по умолчанию: 8). + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Допустимые шифры (по умолчанию: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + conn + conn + + + + Error: Wallet locked, unable to create transaction. + Ошибка: Кошелёк заблокирован, невозможно создать перевод. + + + + Error: Must be in full mode. + Ошибка: Нужно находиться в полноценном режиме. + + + + Error: Block chain must be fully synced first. + Ошибка: Сначала цепочка блоков должна быть полностью согласована. + + + + Error: Alias is not connected! + Ошибка: Alias не установил соединение! + + + + Update balance... + Обновить баланс... + + + + ...Start UI... + ...Запуск интерфейса... + + + + Shutdown... + Выключение... + + + \ No newline at end of file diff --git a/src/qt/locale/alias_sk.ts b/src/qt/locale/alias_sk.ts new file mode 100644 index 0000000000..0551b40ff0 --- /dev/null +++ b/src/qt/locale/alias_sk.ts @@ -0,0 +1,3996 @@ + + + AboutDialog + + + About Alias + O Alias + + + + <b>Alias</b> version + verzia <b>Aliascoinu</b> + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Popis + + + + Address + Adresa + + + + pubkey + + + + + stealth + + + + + (no label) + (bez popisu) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Dialóg hesla + + + + Enter passphrase + Zadajte heslo + + + + New passphrase + Nové heslo + + + + Repeat new passphrase + Zopakujte nové heslo + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Slúži na vypnutie trivial sendmoney keď je ohrozený OS účet. Neposkytuje žiadnu skutočnú istotu. + + + + For staking only + Len pre stávkovanie + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Zadajte nové heslo k peňaženke.<br/>Prosím použite heslo s dĺžkou aspon <b>10 a viac náhodných znakov</b>, alebo <b>8 a viac slov</b>. + + + + Encrypt wallet + Zašifrovať peňaženku + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Táto operácia potrebuje heslo k vašej peňaženke aby ju mohla odomknúť. + + + + Unlock wallet + Odomknúť peňaženku + + + + This operation needs your wallet passphrase to decrypt the wallet. + Táto operácia potrebuje heslo k vašej peňaženke na dešifrovanie peňaženky. + + + + Decrypt wallet + Dešifrovať peňaženku + + + + Change passphrase + Zmena hesla + + + + Enter the old and new passphrase to the wallet. + Zadajte staré a nové heslo k peňaženke. + + + + Confirm wallet encryption + Potvrďte zašifrovanie peňaženky + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Upozornenie: Ak zašifrujete vašu peňaženku a stratíte prístupové heslo, potom <b>prídete o všetky svoje MINCE</b>! + + + + Are you sure you wish to encrypt your wallet? + Ste si istí, že si želáte zašifrovať peňaženku? + + + + + Wallet encrypted + Peňaženka zašifrovaná + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias sa teraz zavrie aby dokončil proces zašifrovania. Nezabudnite, že zašifrovanie vašej peňaženky nemôže plne chrániť vaše mince pred krádežou malwarom napadnutím vašeho počítača. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + DÔLEŽITÉ: Všetky predchádzajúce zálohy vašej peňaženky, ktoré ste vykonali by mali byť nahradené novo vytvorenou, zašifrovanou peňaženkou. Z bezpečnostných dôvodov bude predchádzajúca záloha nezašifrovanej peňaženky k ničomu, akonáhle začnete používať novú, zašifrovanú peňaženku. + + + + + + + Wallet encryption failed + Šifrovanie peňaženky zlyhalo + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Šifrovanie peňaženky zlyhalo kôli internej chybe. Vaša peňaženka nebola zašifrovaná. + + + + + The supplied passphrases do not match. + Zadané heslá nesúhlasia. + + + + Wallet unlock failed + Odomykanie peňaženky zlyhalo + + + + + + The passphrase entered for the wallet decryption was incorrect. + Zadané heslo pre dešifrovanie peňaženky bolo nesprávne. + + + + Wallet decryption failed + Zlyhalo šifrovanie peňaženky. + + + + Wallet passphrase was successfully changed. + Heslo k peňaženke bolo úspešne zmenené. + + + + + Warning: The Caps Lock key is on! + Upozornenie: Máte zapnutý Caps Lock! + + + + ClientModel + + + Network Alert + Výstraha siete + + + + CoinControlDialog + + + Coin Control + Kontrola mincí + + + + Quantity: + Množstvo: + + + + Bytes: + Bajty: + + + + Amount: + Suma: + + + + Priority: + Priorita: + + + + Fee: + Poplatok: + + + + Low Output: + Nízky výstup: + + + + After Fee: + Po poplatku: + + + + Change: + Zmena: + + + + (un)select all + (ne)označiť všetko + + + + Tree mode + Stromový režim + + + + List mode + Zoznamový režim + + + + Amount + Suma + + + + Label + Menovka + + + + Address + Adresa + + + + Date + Dátum + + + + Confirmations + Potvrdenia + + + + Confirmed + Potvrdené + + + + Priority + Priorita + + + + Copy address + Kopírovať adresu + + + + Copy label + Kopírovať popis + + + + + Copy amount + Kopírovať sumu + + + + Copy transaction ID + Kopírovať ID transakcie + + + + Copy quantity + Kopírovať množstvo + + + + Copy fee + Kopírovať poplatok + + + + Copy after fee + Kopírovať po poplatku + + + + Copy bytes + Kopírovať bajty + + + + Copy priority + Kopírovať prioritu + + + + Copy low output + Kopírovať nízky výstup + + + + Copy change + Kopírovať zmenu + + + + highest + najvyššie + + + + high + vysoké + + + + medium-high + stredne vysoké + + + + medium + stredné + + + + low-medium + stredne nízke + + + + low + nízke + + + + lowest + najnižšie + + + + + DUST + PRACH + + + + + yes + áno + + + + + no + nie + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Tento popis sčervená, v prípade, že veľkosť transakcie je väčšia ako 10000 bajtov. + + To znamená, že je potrebný poplatok vo výške najmenej %1 za kb. + +Môže sa líšiť +/- 1 bajt za vstup. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Transakcie s vyššou prioritou sa dostanú s väčšou pravdepodobnosťou do bloku. + +Tento popis sčervenie, ak je priorita menšia ako "stredná". + +To znamená, že je nutný poplatok vo výške aspoň %1 za kb. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Tento popis sčervenie, ak príjemca dostane sumu menšiu ako %1. + +To znamená, že je potrebný poplatok aspoň %2. + +Sumy nižšie ako 0,546 násobok minimálneho poplatku sú zobrazené ako PRACH. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Tento popis sčervenie, ak je zmena menšia než %1. + +To znamená, že je potrebný poplatok aspoň %2. + + + + + (no label) + (bez popisu) + + + + change from %1 (%2) + zmena od %1 (%2) + + + + (change) + (zmena) + + + + EditAddressDialog + + + Edit Address + Upraviť adresu + + + + &Label + &Popis + + + + The label associated with this address book entry + Popis spojený s touto položkou v adresáry + + + + &Address + &Adresa + + + + The address associated with this address book entry. This can only be modified for sending addresses. + Adresa spojená s položkou v tomto adresári. Toto môže byť zmenené iba pre odosielané adresy. + + + + &Stealth Address + + + + + New receiving address + Nová adresa pre prijímanie + + + + New sending address + Nová adresa pre odoslanie + + + + Edit receiving address + Upraviť adresu pre prijímanie + + + + Edit sending address + Upraviť adresu pre odosielanie + + + + The entered address "%1" is not a valid Alias address. + Zadaná adresa "%1" nie je platnou Alias adresou. + + + + The entered address "%1" is already in the address book. + Zadaná adresa "%1" sa už nachádza v adresári. + + + + Could not unlock wallet. + Nepodarilo sa odomknúť peňaženku. + + + + New key generation failed. + Generovanie nového kľúča zlyhalo. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + verzia + + + + Usage: + Použitie: + + + + command-line options + možnosti príkazového riadka + + + + UI options + Možnosti používateľského rozhrania + + + + Set language, for example "de_DE" (default: system locale) + Nastavenie jazyka, napr "de_DE" (predvolené: miestne nastavenie systému) + + + + Start minimized + Spustiť minimalizované + + + + Show splash screen on startup (default: 1) + Zobraziť úvodnú obrazovku pri štarte (predvolené: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informácie + + + + Alias Core + + + + + Client name + Meno klienta + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + nie je k dispozícii + + + + Client version + Verzia klienta + + + + Using OpenSSL version + Používa OpenSSL verziu + + + + Using BerkeleyDB version + + + + + Build date + Dátum zostavenia + + + + Startup time + Čas spustenia + + + + Network + Sieť + + + + Name + + + + + Number of connections + Počet pripojení + + + + Block chain + Reťazec blokov + + + + Current number of blocks + Aktuálny počet blokov + + + + Estimated total blocks + Očakávaných blokov celkovo + + + + Last block time + Čas posledného bloku + + + + Debug log file + Súbor denníka ladenia + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Otvoriť + + + + Command-line options + Možnosti príkazového riadka + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + &Zobraziť + + + + &Console + &Konzola + + + + Clear console + Vymazať konzolu + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Použite šípky hore a dole pre navigáciu históriou, a <b> Ctrl-L </ b> pre vymazanie obrazovky. + + + + Type <b>help</b> for an overview of available commands. + Zadajte <b>help</b> pre prehľad dostupných príkazov. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Otvorené do %1 + + + + conflicted + v rozpore + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/nepotvrdené + + + + %1 confirmations + %1 potvrdení + + + + Transaction ID + ID transakcie + + + + Block Hash + + + + + Status + Stav + + + + , has not been successfully broadcast yet + , ešte nebola úspešne odoslaná + + + + , broadcast through %n node(s) + + + + + Date + Dátum + + + + Source + Zdroj + + + + Generated + Vygenerované + + + + + Credit + Kredit + + + + matures in %n more block(s) + + + + + not accepted + neprijaté + + + + Transaction fee + Transakčný poplatok + + + + Net amount + Čiastka netto + + + + Message + Správa + + + + Comment + Komentár + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Ladiace informácie + + + + Debit + Debet + + + + Transaction + Transakcie + + + + Inputs + Vstupy + + + + Amount + Suma + + + + true + pravda + + + + false + nepravda + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + neznámy + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Detaily transakcie + + + + This pane shows a detailed description of the transaction + Táto časť obrazovky zobrazuje detailný popis transakcie + + + + TransactionTableModel + + + Date + Dátum + + + + Type + Typ + + + + Address + Adresa + + + + Note + + + + + Amount + Hodnota + + + + Open for %n more block(s) + + + + + Open until %1 + Otvorené do %1 + + + + Offline + Offline + + + + Unconfirmed + Nepotvrdené + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Potvrdzujem (%1 z %2 doporučených potvrdení) + + + + Confirmed (%1 confirmations) + Potvrdené (%1 potvrdení) + + + + Conflicted + V rozpore + + + + Immature (%1 confirmations, will be available after %2) + Nezrelé (%1 potvrdení, bude k dispozícii po %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Status transakcie. Presuňte myš nad toto pole a zobrazí sa počet potvrdení. + + + + Date and time that the transaction was received. + Dátum a čas prijatia transakcie. + + + + Type of transaction. + Typ transakcie. + + + + Destination address of transaction. + Cieľová adresa transakcie. + + + + Amount removed from or added to balance. + Suma pridaná alebo odobraná k zostatku. + + + + WalletModel + + + + Sending... + Posielam... + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_sl_SI.ts b/src/qt/locale/alias_sl_SI.ts new file mode 100644 index 0000000000..9d9f611dfd --- /dev/null +++ b/src/qt/locale/alias_sl_SI.ts @@ -0,0 +1,3996 @@ + + + AboutDialog + + + About Alias + O Alias + + + + <b>Alias</b> version + <b>Alias</b> verzija + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Oznaka + + + + Address + Naslov + + + + pubkey + + + + + stealth + + + + + (no label) + (ni oznake) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Poziv gesla + + + + Enter passphrase + Vnesite geslo + + + + New passphrase + Novo geslo + + + + Repeat new passphrase + Ponovite novo geslo + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Služi kot onemogočenje pošiljanja prostega denarja, v primerih okužbe operacijskega sistema. Ne ponuja prave zaščite. + + + + For staking only + Samo za staking. + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Vnesite novo geslo za vstop v denarnico.<br/>Prosimo, da geslo sestavite iz <b> 10 ali več naključnih znakov</b> oz. <b>osem ali več besed</b>. + + + + Encrypt wallet + Šifriraj denarnico + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + To dejanje zahteva geslo za odklepanje vaše denarnice. + + + + Unlock wallet + Odkleni denarnico + + + + This operation needs your wallet passphrase to decrypt the wallet. + To dejanje zahteva geslo za dešifriranje vaše denarnice. + + + + Decrypt wallet + Dešifriraj denarnico + + + + Change passphrase + Zamenjaj geslo + + + + Enter the old and new passphrase to the wallet. + Vnesite staro in novo geslo denarnice. + + + + Confirm wallet encryption + Potrdi šifriranje denarnice + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Opozorilo: Če šifrirate svojo denarnico in izgubite svoje geslo, boste <b> IZGUBILI VSE SVOJE KOVANCE</b>! + + + + Are you sure you wish to encrypt your wallet? + Ali ste prepričani, da želite šifrirati vašo denarnico? + + + + + Wallet encrypted + Denarnica šifrirana + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias se bo sedaj zaprl, da dokonča proces šifriranje. Pomnite, da tudi šifriranje vaše denarnice ne more v celoti zaščititi vaših kovancev pred krajo z zlonamernimi programi in računalniškimi virusi, če ti okužijo vaš računalnik. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + POMEMBNO: Vsaka predhodna varnostna kopija datoteke denarnice mora biti nadomeščena z novo datoteko šifrirane denarnice. Zaradi varnostnih razlogov bodo namreč prejšnje varnostne kopije datoteke nešifrirane denarnice postale neuporabne takoj ko boste pričeli uporabljati novo, šifrirano denarnico. + + + + + + + Wallet encryption failed + Šifriranje denarnice je spodletelo + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Šifriranje denarnice spodletelo je zaradi notranje napake. Vaša denarnica ni šifrirana. + + + + + The supplied passphrases do not match. + Vnešeno geslo se ne ujema + + + + Wallet unlock failed + Odklep denarnice spodletel + + + + + + The passphrase entered for the wallet decryption was incorrect. + Geslo za dešifriranje denarnice, ki ste ga vnesli, ni pravilno. + + + + Wallet decryption failed + Dešifriranje denarnice je spodletelo + + + + Wallet passphrase was successfully changed. + Geslo denarnice je bilo uspešno spremenjeno. + + + + + Warning: The Caps Lock key is on! + Opozorilo: imate prižgan Cap Lock + + + + ClientModel + + + Network Alert + Omrežno Opozorilo + + + + CoinControlDialog + + + Coin Control + Kontrola kovancev + + + + Quantity: + Količina: + + + + Bytes: + Biti: + + + + Amount: + Količina: + + + + Priority: + Prednostno mesto: + + + + Fee: + Provizija: + + + + Low Output: + Nizek output: + + + + After Fee: + Po proviziji: + + + + Change: + Sprememba: + + + + (un)select all + od/obkljukaj vse + + + + Tree mode + Drevo + + + + List mode + Seznam + + + + Amount + Količina + + + + Label + Oznaka + + + + Address + Naslov + + + + Date + Datum + + + + Confirmations + Potrdila + + + + Confirmed + Potrjeno + + + + Priority + Prednostno mesto + + + + Copy address + Kopiraj naslov + + + + Copy label + Kopiraj oznako + + + + + Copy amount + Kopiraj količino + + + + Copy transaction ID + Kopiraj ID transakcije + + + + Copy quantity + Kopiraj količino + + + + Copy fee + Kopiraj provizijo + + + + Copy after fee + Kopiraj po proviziji + + + + Copy bytes + Kopiraj bite + + + + Copy priority + Kopiraj prednostno mesto + + + + Copy low output + Kopiraj nizek output: + + + + Copy change + Kopiraj spremembo + + + + highest + najvišja + + + + high + visoka + + + + medium-high + srednje visoka + + + + medium + srednje + + + + low-medium + srednje nizka + + + + low + nizka + + + + lowest + najnižja + + + + + DUST + PRAH + + + + + yes + da + + + + + no + ne + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Ta oznakla se obarva rdeče, če je transakcija večja od 10000 bajtov. + + To pomeni, da je zahtevana provizija vsaj %1 na kb. + + Lahko variira +/- 1 Bajt na vnos. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Transakcije z višjo prioriteto imajo višjo verjetnost, da so vključene v blok. + +Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". + + To pomeni, da je zahtevana provizija vsaj %1 na kb. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Ta oznaka se obarva rdeče, če prejemnik dobi količino manjšo od %1. + + To pomeni, da je potrebna vsaj %2 provizija. + + Zneski pod 0.546 krat minimalna transakcijska provizija so prikazani kot PRAH. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Ta oznakla se obarva rdeče, če je sprememba manjša od %1. + + To pomeni, da je zahtevana provizija vsaj %2. + + + + + (no label) + (ni oznake) + + + + change from %1 (%2) + spremeni iz %1 (%2) + + + + (change) + (spremeni) + + + + EditAddressDialog + + + Edit Address + Uredi naslov + + + + &Label + &Oznaka + + + + The label associated with this address book entry + Oznaka povezana s tem vnosom v imeniku + + + + &Address + &Naslov + + + + The address associated with this address book entry. This can only be modified for sending addresses. + Naslov povezan s tem vnosom v imeniku. Spremenite ga lahko le za naslove odlivov. + + + + &Stealth Address + + + + + New receiving address + Nov naslov za prilive + + + + New sending address + Nov naslov za odlive + + + + Edit receiving address + Uredi naslov za prilive + + + + Edit sending address + Uredi naslov za odlive + + + + The entered address "%1" is not a valid Alias address. + Vneseni naslov "%1" ni veljaven Alias naslov. + + + + The entered address "%1" is already in the address book. + Vnešeni naslov "&1" je že v imeniku. + + + + Could not unlock wallet. + Denarnice ni bilo mogoče odkleniti. + + + + New key generation failed. + Ustvarjanje novega ključa je spodletelo. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + različica + + + + Usage: + Uporaba: + + + + command-line options + možnosti ukazne vrstice + + + + UI options + možnosti uporabniškega vmesnika + + + + Set language, for example "de_DE" (default: system locale) + Nastavi jezik, npr. "sl_SI" (privzeto: jezikovna oznaka sistema) + + + + Start minimized + Zaženi pomanjšano + + + + Show splash screen on startup (default: 1) + Prikaži splash screen ob zagonu (default: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Informacije + + + + Alias Core + + + + + Client name + Ime odjemalca + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + Neznano + + + + Client version + Različica odjemalca + + + + Using OpenSSL version + OpenSSL različica v rabi + + + + Using BerkeleyDB version + + + + + Build date + Datum izgradnje + + + + Startup time + Čas zagona + + + + Network + Omrežje + + + + Name + + + + + Number of connections + Število povezav + + + + Block chain + veriga blokov + + + + Current number of blocks + Trenutno število blokov + + + + Estimated total blocks + Ocena vseh blokov + + + + Last block time + Čas zadnjega bloka + + + + Debug log file + Razhroščevalna dnevniška datoteka + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Odpri + + + + Command-line options + Možnosti ukazne vrstice. + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + &Prikaži + + + + &Console + &Konzola + + + + Clear console + Počisti konzolo + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Za navigiranje po zgodovini uporabite puščici gor in dol, in <b>Ctrl-L</b> za izpraznjenje zaslona. + + + + Type <b>help</b> for an overview of available commands. + Vtipkaj <b>pomoč</b> za vpogled v razpožljive ukaze. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Odpri enoto %1 + + + + conflicted + sporen + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/nepotrjeno + + + + %1 confirmations + %1 potrdil + + + + Transaction ID + ID transakcije + + + + Block Hash + + + + + Status + Stanje + + + + , has not been successfully broadcast yet + , še ni bil uspešno predvajan + + + + , broadcast through %n node(s) + + + + + Date + Datum + + + + Source + Izvor + + + + Generated + Generirano + + + + + Credit + Kredit + + + + matures in %n more block(s) + + + + + not accepted + ni bilo sprejeto + + + + Transaction fee + Provizija transakcije + + + + Net amount + Neto količina + + + + Message + Sporočilo + + + + Comment + Opomba + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Razhroščevalna informacija + + + + Debit + Dolg + + + + Transaction + Transakcija + + + + Inputs + Vnosi + + + + Amount + Količina + + + + true + pravilno + + + + false + nepravilno + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + neznano + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Podrobnosti transakcije + + + + This pane shows a detailed description of the transaction + To podokno prikazuje podroben opis transakcije + + + + TransactionTableModel + + + Date + Datum + + + + Type + Vrsta + + + + Address + Naslov + + + + Note + + + + + Amount + Količina + + + + Open for %n more block(s) + + + + + Open until %1 + Odpri enoto %1 + + + + Offline + Nepovezan + + + + Unconfirmed + Nepotrjeno + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Potrjuje (%1 od %2 priporočenih potrditev) + + + + Confirmed (%1 confirmations) + Potrjeno (%1 potrdil) + + + + Conflicted + Sporen + + + + Immature (%1 confirmations, will be available after %2) + Nezrel (%1 potrditev, na voljo bo po %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (ni na voljo) + + + + Transaction status. Hover over this field to show number of confirmations. + Stanje transakcije. Zapeljite z miško čez to polje za prikaz števila potrdil. + + + + Date and time that the transaction was received. + Datum in čas, ko je transakcija bila prejeta. + + + + Type of transaction. + Vrsta transakcije. + + + + Destination address of transaction. + Naslov prejemnika transakcije. + + + + Amount removed from or added to balance. + Količina odlita ali prilita dobroimetju. + + + + WalletModel + + + + Sending... + Pošiljanje... + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_sq.ts b/src/qt/locale/alias_sq.ts new file mode 100644 index 0000000000..718ba473ab --- /dev/null +++ b/src/qt/locale/alias_sq.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Etiketë + + + + Address + Adresë + + + + pubkey + + + + + stealth + + + + + (no label) + (pa etiketë) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + Futni frazkalimin + + + + New passphrase + Frazkalim i ri + + + + Repeat new passphrase + Përsërisni frazkalimin e ri + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Futni frazkalimin e ri në portofol.<br/>Ju lutemi përdorni një frazkalim prej<b>10 ose më shumë shkronjash të rastësishme<b/>, ose tetë apo më shumë fjalë</b>. + + + + Encrypt wallet + Enkripto portofolin + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Ky veprim ka nevojë per frazkalimin e portofolit tuaj që të ç'kyç portofolin. + + + + Unlock wallet + ç'kyç portofolin. + + + + This operation needs your wallet passphrase to decrypt the wallet. + Ky veprim kërkon frazkalimin e portofolit tuaj që të dekriptoj portofolin. + + + + Decrypt wallet + Dekripto portofolin + + + + Change passphrase + Ndrysho frazkalimin + + + + Enter the old and new passphrase to the wallet. + Futni frazkalimin e vjetër dhe të ri në portofol. + + + + Confirm wallet encryption + Konfirmoni enkriptimin e portofolit + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + Portofoli u enkriptua + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + Enkriptimi i portofolit dështoi + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Enkriptimi i portofolit dështoi për shkak të një gabimi të brëndshëm. portofoli juaj nuk u enkriptua. + + + + + The supplied passphrases do not match. + Frazkalimet e plotësuara nuk përputhen. + + + + Wallet unlock failed + ç'kyçja e portofolit dështoi + + + + + + The passphrase entered for the wallet decryption was incorrect. + Frazkalimi i futur për dekriptimin e portofolit nuk ishte i saktë. + + + + Wallet decryption failed + Dekriptimi i portofolit dështoi + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Sasia + + + + Label + + + + + Address + Adresë + + + + Date + Data + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (pa etiketë) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Ndrysho Adresën + + + + &Label + &Etiketë + + + + The label associated with this address book entry + + + + + &Address + &Adresa + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Adresë e re pritëse + + + + New sending address + Adresë e re dërgimi + + + + Edit receiving address + Ndrysho adresën pritëse + + + + Edit sending address + ndrysho adresën dërguese + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Adresa e dhënë "%1" është e zënë në librin e adresave. + + + + Could not unlock wallet. + Nuk mund të ç'kyçet portofoli. + + + + New key generation failed. + Krijimi i çelësit të ri dështoi. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Hapur deri më %1 + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + %1/I pakonfirmuar + + + + %1 confirmations + %1 konfirmimet + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + , nuk është transmetuar me sukses deri tani + + + + , broadcast through %n node(s) + + + + + Date + Data + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + Sasia + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + i/e panjohur + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Detajet e transaksionit + + + + This pane shows a detailed description of the transaction + Ky panel tregon një përshkrim të detajuar të transaksionit + + + + TransactionTableModel + + + Date + Data + + + + Type + Lloji + + + + Address + Adresë + + + + Note + + + + + Amount + Sasia + + + + Open for %n more block(s) + + + + + Open until %1 + Hapur deri më %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + I/E konfirmuar(%1 konfirmime) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (p/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_sr.ts b/src/qt/locale/alias_sr.ts new file mode 100644 index 0000000000..42cd82a4bd --- /dev/null +++ b/src/qt/locale/alias_sr.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + О Alias-u + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Етикета + + + + Address + Адреса + + + + pubkey + + + + + stealth + + + + + (no label) + (без етикете) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + Унесите лозинку + + + + New passphrase + Нова лозинка + + + + Repeat new passphrase + Поновите нову лозинку + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Унесите нову лозинку за приступ новчанику.<br/>Молимо Вас да лозинка буде <b>10 или више насумице одабраних знакова</b>, или <b>осам или више речи</b>. + + + + Encrypt wallet + Шифровање новчаника + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Ова акција захтева лозинку Вашег новчаника да би га откључала. + + + + Unlock wallet + Откључавање новчаника + + + + This operation needs your wallet passphrase to decrypt the wallet. + Ова акција захтева да унесете лозинку да би дешифловала новчаник. + + + + Decrypt wallet + Дешифровање новчаника + + + + Change passphrase + Промена лозинке + + + + Enter the old and new passphrase to the wallet. + Унесите стару и нову лозинку за шифровање новчаника. + + + + Confirm wallet encryption + Одобрите шифровање новчаника + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + Да ли сте сигурни да желите да се новчаник шифује? + + + + + Wallet encrypted + Новчаник је шифрован + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + Неуспело шифровање новчаника + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Настала је унутрашња грешка током шифровања новчаника. Ваш новчаник није шифрован. + + + + + The supplied passphrases do not match. + Лозинке које сте унели се не подударају. + + + + Wallet unlock failed + Неуспело откључавање новчаника + + + + + + The passphrase entered for the wallet decryption was incorrect. + Лозинка коју сте унели за откључавање новчаника је нетачна. + + + + Wallet decryption failed + Неуспело дешифровање новчаника + + + + Wallet passphrase was successfully changed. + Лозинка за приступ новчанику је успешно промењена. + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Iznos: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + iznos + + + + Label + + + + + Address + Адреса + + + + Date + datum + + + + Confirmations + + + + + Confirmed + Potvrdjen + + + + Priority + + + + + Copy address + kopiraj adresu + + + + Copy label + kopiraj naziv + + + + + Copy amount + kopiraj iznos + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (без етикете) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Измени адресу + + + + &Label + &Етикета + + + + The label associated with this address book entry + + + + + &Address + &Адреса + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Унешена адреса "%1" се већ налази у адресару. + + + + Could not unlock wallet. + Немогуће откључати новчаник. + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Otvorite do %1 + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + %1/nepotvrdjeno + + + + %1 confirmations + %1 potvrde + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + , nije još uvek uspešno emitovan + + + + , broadcast through %n node(s) + + + + + Date + datum + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + iznos + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + nepoznato + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + detalji transakcije + + + + This pane shows a detailed description of the transaction + Ovaj odeljak pokazuje detaljan opis transakcije + + + + TransactionTableModel + + + Date + datum + + + + Type + tip + + + + Address + Адреса + + + + Note + + + + + Amount + iznos + + + + Open for %n more block(s) + + + + + Open until %1 + Otvoreno do %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Potvrdjena (%1 potvrdjenih) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Status vaše transakcije. Predjite mišem preko ovog polja da bi ste videli broj konfirmacija + + + + Date and time that the transaction was received. + Datum i vreme primljene transakcije. + + + + Type of transaction. + Tip transakcije + + + + Destination address of transaction. + Destinacija i adresa transakcije + + + + Amount removed from or added to balance. + Iznos odbijen ili dodat balansu. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_sv.ts b/src/qt/locale/alias_sv.ts new file mode 100644 index 0000000000..722a0d4987 --- /dev/null +++ b/src/qt/locale/alias_sv.ts @@ -0,0 +1,3996 @@ + + + AboutDialog + + + About Alias + Vad du behöver veta om Alias + + + + <b>Alias</b> version + <b>Alias</b> version + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Etikett + + + + Address + Adress + + + + pubkey + + + + + stealth + + + + + (no label) + (Ingen etikett) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Lösenords Dialog + + + + Enter passphrase + Ange lösenord + + + + New passphrase + Nytt lösenord + + + + Repeat new passphrase + Upprepa nytt lösenord + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + Avaktiverar "sendmoney" om ditt operativsystem har blivit äventyrat. ger ingen verklig säkerhet. + + + + For staking only + Endast för "staking" + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Ange plånbokens nya lösenord. <br/> Använd ett lösenord på <b>10 eller fler slumpmässiga tecken,</b> eller <b>åtta eller fler ord.</b> + + + + Encrypt wallet + Kryptera plånbok + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Denna operation behöver din plånboks lösenord för att låsa upp plånboken. + + + + Unlock wallet + Lås upp plånbok + + + + This operation needs your wallet passphrase to decrypt the wallet. + Denna operation behöver din plånboks lösenord för att dekryptera plånboken. + + + + Decrypt wallet + Dekryptera plånbok + + + + Change passphrase + Ändra lösenord + + + + Enter the old and new passphrase to the wallet. + Ange plånbokens gamla och nya lösenord. + + + + Confirm wallet encryption + Bekräfta kryptering av plånbok + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Varning: Om du krypterar plånboken och glömmer lösenordet, kommer du att <b>FÖRLORA ALLA COINS</b>! + + + + Are you sure you wish to encrypt your wallet? + Är du säker på att du vill kryptera din plånbok? + + + + + Wallet encrypted + Plånboken är krypterad + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias plånboken kommer nu att stängas för att slutföra krypteringen: Kom ihåg att även en krypterad plånboks säkerhet kan äventyras genom keyloggers eller dylika malwares. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + VIKTIGT: Alla tidigare säkerhetskopior du har gjort av plånbokens fil ska ersättas med den nya genererade, krypterade plånboks filen. Av säkerhetsskäl kommer tidigare säkerhetskopior av den okrypterade plånboks filen blir oanvändbara när du börjar använda en ny, krypterad plånbok. + + + + + + + Wallet encryption failed + Kryptering av plånbok misslyckades + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Kryptering av plånbok misslyckades på grund av ett internt fel. Din plånbok blev inte krypterad. + + + + + The supplied passphrases do not match. + De angivna lösenorden överensstämmer inte. + + + + Wallet unlock failed + Upplåsning av plånbok misslyckades + + + + + + The passphrase entered for the wallet decryption was incorrect. + Lösenordet för dekryptering av plånbok var felaktig. + + + + Wallet decryption failed + Dekryptering av plånbok misslyckades + + + + Wallet passphrase was successfully changed. + Plånbokens lösenord har ändrats. + + + + + Warning: The Caps Lock key is on! + Varning: Caps Lock är påslaget! + + + + ClientModel + + + Network Alert + Nätverkslarm + + + + CoinControlDialog + + + Coin Control + Coin kontroll + + + + Quantity: + Antal: + + + + Bytes: + Bytes: + + + + Amount: + Belopp: + + + + Priority: + Prioritet: + + + + Fee: + Avgift: + + + + Low Output: + Låg utskrift: + + + + After Fee: + Efter avgift: + + + + Change: + Ändra: + + + + (un)select all + välj/avvälj alla + + + + Tree mode + Träd visning + + + + List mode + List visning + + + + Amount + Mängd + + + + Label + etikett + + + + Address + Adress + + + + Date + Datum + + + + Confirmations + Bekräftelser + + + + Confirmed + Bekräftad + + + + Priority + Prioritet + + + + Copy address + Kopiera adress + + + + Copy label + Kopiera etikett + + + + + Copy amount + Kopiera belopp + + + + Copy transaction ID + Kopiera transaktions ID + + + + Copy quantity + Kopiera antal + + + + Copy fee + Kopiera avgift + + + + Copy after fee + Kopiera efter avgift + + + + Copy bytes + Kopiera bytes + + + + Copy priority + Kopiera prioritet + + + + Copy low output + Kopiera låg utskrift + + + + Copy change + Kopiera förändringarna + + + + highest + högst + + + + high + hög + + + + medium-high + medium-hög + + + + medium + medium + + + + low-medium + låg-medium + + + + low + låg + + + + lowest + lägsta + + + + + DUST + STOFT + + + + + yes + ja + + + + + no + nej + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + Denna label blir röd, om storleken på transaktionen är över 10000 bytes. + + Detta betyder att en avgift på %1 per kb måste betalas. + + Kan variera +/- 1 Byte per ingång. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Transaktioner med en högre prioritet har en större sannolikhet att bli adderat till ett block. + +Denna label blir röd, om prioriteten är lägre än "medium". + +Detta betyder att en avgift på minst %1 krävs. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Denna label blir röd, om en mottagare får en mängd mindre än %1 + +Detta betyder att en avgift på minst %2 krävs. + +Mängder under 0,546 gånger minimiavgiften visas som DUST. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Denna label blir röd, om ändringen är mindre än %1. + +Detta betyder att en avgift på minst %2 krävs. + + + + + (no label) + (Ingen etikett) + + + + change from %1 (%2) + ändra från %1(%2) + + + + (change) + (ändra) + + + + EditAddressDialog + + + Edit Address + Redigera Adress + + + + &Label + &Etikett + + + + The label associated with this address book entry + Namnet som kopplats till denna Alias-adress + + + + &Address + &Adress + + + + The address associated with this address book entry. This can only be modified for sending addresses. + Adressen är kopplad till detta inlägg i adressboken. Denna kan endast ändras för skickande adresser. + + + + &Stealth Address + + + + + New receiving address + Ny mottagaradress + + + + New sending address + Ny avsändaradress + + + + Edit receiving address + Redigera mottagaradress + + + + Edit sending address + Redigera avsändaradress + + + + The entered address "%1" is not a valid Alias address. + Den inslagna adressen "%1" är inte en giltig Alias adress. + + + + The entered address "%1" is already in the address book. + Den angivna adressen "%1" finns redan i adressboken. + + + + Could not unlock wallet. + Plånboken kunde inte låsas upp. + + + + New key generation failed. + Misslyckades med generering av ny nyckel. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + version + + + + Usage: + Användning: + + + + command-line options + Command-line alternativ + + + + UI options + UI alternativ + + + + Set language, for example "de_DE" (default: system locale) + Ställ in språk, t.ex. "de_DE" (förval: systemets språk) + + + + Start minimized + Starta som minimerad + + + + Show splash screen on startup (default: 1) + Visa startscreen vid start (förval: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Information + + + + Alias Core + + + + + Client name + Klientnamn + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + ej tillgänglig + + + + Client version + Klient-version + + + + Using OpenSSL version + Använder OpenSSL version + + + + Using BerkeleyDB version + + + + + Build date + Kompileringsdatum + + + + Startup time + Uppstartstid + + + + Network + Nätverk + + + + Name + + + + + Number of connections + Antalet anslutningar + + + + Block chain + Blockkedja + + + + Current number of blocks + Aktuellt antal block + + + + Estimated total blocks + Beräknade totala block + + + + Last block time + Sista blocktid + + + + Debug log file + Debugloggfil + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Öppna + + + + Command-line options + Kommandoradsalternativ + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + &Visa + + + + &Console + &Konsol + + + + Clear console + Rensa konsollen + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Använd upp- och ner-pilarna för att navigera i historiken, och <b>Ctrl-L</b> för att rensa skärmen. + + + + Type <b>help</b> for an overview of available commands. + Skriv <b>help</b> för en översikt av alla kommandon. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Öppet till %1 + + + + conflicted + konflikt + + + + %1/offline + %1/nerkopplad + + + + %1/unconfirmed + %1/obekräftade + + + + %1 confirmations + %1 bekräftelser + + + + Transaction ID + Transaktions-ID + + + + Block Hash + + + + + Status + Status + + + + , has not been successfully broadcast yet + , har inte lyckats skickas ännu + + + + , broadcast through %n node(s) + + + + + Date + Datum + + + + Source + Källa + + + + Generated + Genererad + + + + + Credit + Kredit + + + + matures in %n more block(s) + + + + + not accepted + inte accepterad + + + + Transaction fee + Transaktionsavgift + + + + Net amount + Nettobelopp + + + + Message + Meddelande + + + + Comment + Kommentar + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Debug information + + + + Debit + Belasta + + + + Transaction + Transaktion + + + + Inputs + Inputs + + + + Amount + Mängd + + + + true + sant + + + + false + falsk + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + okänd + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Transaktionsdetaljer + + + + This pane shows a detailed description of the transaction + Den här panelen visar en detaljerad beskrivning av transaktionen + + + + TransactionTableModel + + + Date + Datum + + + + Type + Typ + + + + Address + Adress + + + + Note + + + + + Amount + Mängd + + + + Open for %n more block(s) + + + + + Open until %1 + Öppet till %1 + + + + Offline + Nerkopplad + + + + Unconfirmed + Obekräftad + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Bekräftar (%1 av %2 rekommenderade bekräftelser) + + + + Confirmed (%1 confirmations) + Bekräftad (%1 bekräftelser) + + + + Conflicted + Konflikt + + + + Immature (%1 confirmations, will be available after %2) + Omogen (%1 bekräftningar, kommer bli tillgänglig efter %2) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Transaktionsstatus. Håll muspekaren över för att se antal bekräftelser. + + + + Date and time that the transaction was received. + Tidpunkt då transaktionen mottogs. + + + + Type of transaction. + Transaktionstyp. + + + + Destination address of transaction. + Transaktionens destinationsadress. + + + + Amount removed from or added to balance. + Belopp draget eller tillagt till balans. + + + + WalletModel + + + + Sending... + Skickar... + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_th.ts b/src/qt/locale/alias_th.ts new file mode 100644 index 0000000000..3e765e555f --- /dev/null +++ b/src/qt/locale/alias_th.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + ชื่อ + + + + Address + ที่อยู่ + + + + pubkey + + + + + stealth + + + + + (no label) + (ไม่มีชื่อ) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + ใส่รหัสผ่าน + + + + New passphrase + รหัสผา่นใหม่ + + + + Repeat new passphrase + กรุณากรอกรหัสผ่านใหม่อีกครั้งหนึ่ง + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + + Encrypt wallet + กระเป๋าสตางค์ที่เข้ารหัส + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + + Unlock wallet + เปิดกระเป๋าสตางค์ + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + + Decrypt wallet + ถอดรหัสกระเป๋าสตางค์ + + + + Change passphrase + เปลี่ยนรหัสผ่าน + + + + Enter the old and new passphrase to the wallet. + กรอกรหัสผ่านเก่าและรหัสผ่านใหม่สำหรับกระเป๋าสตางค์ + + + + Confirm wallet encryption + ยืนยันการเข้ารหัสกระเป๋าสตางค์ + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + กระเป๋าสตางค์ถูกเข้ารหัสเรียบร้อยแล้ว + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + การเข้ารหัสกระเป๋าสตางค์ผิดพลาด + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + + The supplied passphrases do not match. + รหัสผ่านที่คุณกรอกไม่ตรงกัน + + + + Wallet unlock failed + + + + + + + The passphrase entered for the wallet decryption was incorrect. + + + + + Wallet decryption failed + + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + + + + + Label + + + + + Address + ที่อยู่ + + + + Date + + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (ไม่มีชื่อ) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + + + + + Type + + + + + Address + ที่อยู่ + + + + Note + + + + + Amount + + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_tr.ts b/src/qt/locale/alias_tr.ts new file mode 100644 index 0000000000..2e1f2b5772 --- /dev/null +++ b/src/qt/locale/alias_tr.ts @@ -0,0 +1,3996 @@ + + + AboutDialog + + + About Alias + Alias Hakkında + + + + <b>Alias</b> version + <b>Alias</b> versiyonu + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Etiket + + + + Address + Adres + + + + pubkey + + + + + stealth + + + + + (no label) + (boş etiket) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Parola Diyaloğu + + + + Enter passphrase + Parolayı giriniz + + + + New passphrase + Yeni parola + + + + Repeat new passphrase + Yeni parolayı tekrarlayınız + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + OS hesabı tehlike girdiğinde önemsiz para gönderme özelliğini devre dışı bırakmayı sağlar. Gerçek anlamda bir güvenlik sağlamaz. + + + + For staking only + Sadece pay almak için + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Cüzdanınız için yeni parolayı giriniz.<br/>Lütfen <b>10 ya da daha fazla rastgele karakter</b> veya <b>sekiz ya da daha fazla kelime</b> içeren bir parola seçiniz. + + + + Encrypt wallet + Cüzdanı şifrele + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Bu işlem cüzdan kilidini açmak için cüzdan parolanızı gerektirir. + + + + Unlock wallet + Cüzdan kilidini aç + + + + This operation needs your wallet passphrase to decrypt the wallet. + Bu işlem, cüzdan şifresini açmak için cüzdan parolasını gerektirir. + + + + Decrypt wallet + Cüzdan şifresini aç + + + + Change passphrase + Parolayı değiştir + + + + Enter the old and new passphrase to the wallet. + Cüzdan için eski ve yeni parolaları giriniz. + + + + Confirm wallet encryption + Cüzdan şifrelenmesini teyit eder + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + Uyarı: Eğer cüzdanınızı şifreleyip parolanızı kaybederseniz, <b> TÜM COINLERİNİZİ KAYBEDECEKSİNİZ</b>! + + + + Are you sure you wish to encrypt your wallet? + Cüzdanınızı şifrelemek istediğinizden emin misiniz? + + + + + Wallet encrypted + Cüzdan şifrelendi + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Alias, şifreleme işlemini tamamlamak için şimdi kapatılacak. Cüzdanınızı şifrelemenin; coinlerinizin, bilgisayarınızı etkileyen zararlı yazılımlar tarafından çalınmasını bütünüyle engelleyemeyebileceğini unutmayınız. + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + ÖNEMLİ: Önceden yapmış olduğunuz cüzdan dosyası yedeklemelerinin yeni oluşturulan, şifrelenmiş cüzdan dosyası ile değiştirilmeleri gerekmektedir. Güvenlik nedenleriyle yeni, şifrelenmiş cüzdanı kullanmaya başladığınızda, şifrelenmemiş cüzdan dosyasının önceki yedekleri işe yaramaz hale gelecektir. + + + + + + + Wallet encryption failed + Cüzdan şifrelemesi başarısız oldu + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Dahili bir hata sebebiyle cüzdan şifrelemesi başarısız oldu. Cüzdanınız şifrelenmedi. + + + + + The supplied passphrases do not match. + Girilen parolalar birbirleriyle eşleşmiyor. + + + + Wallet unlock failed + Cüzdan kilidinin açılması başarısız oldu + + + + + + The passphrase entered for the wallet decryption was incorrect. + Cüzdan şifresinin açılması için girilen parola yanlıştı. + + + + Wallet decryption failed + Cüzdan şifresinin açılması başarısız oldu + + + + Wallet passphrase was successfully changed. + Cüzdan parolası başarılı bir şekilde değiştirildi. + + + + + Warning: The Caps Lock key is on! + Uyarı: Caps Lock tuşu faal durumda! + + + + ClientModel + + + Network Alert + Ağ Uyarısı + + + + CoinControlDialog + + + Coin Control + Coin Kontrolü + + + + Quantity: + Adet: + + + + Bytes: + Bayt: + + + + Amount: + Miktar: + + + + Priority: + Öncelik: + + + + Fee: + Ücret: + + + + Low Output: + Düşük Çıktı: + + + + After Fee: + Ücretten sonra: + + + + Change: + Para üstü: + + + + (un)select all + tümünü seç(me) + + + + Tree mode + Ağaç kipi + + + + List mode + Liste kipi + + + + Amount + Miktar + + + + Label + Etiket + + + + Address + Adres + + + + Date + Tarih + + + + Confirmations + Onaylar + + + + Confirmed + Onaylandı + + + + Priority + Öncelik + + + + Copy address + Adresi kopyala + + + + Copy label + Etiketi kopyala + + + + + Copy amount + Miktarı kopyala + + + + Copy transaction ID + İşlem Numarasını Kopyala + + + + Copy quantity + Adedi kopyala + + + + Copy fee + Ücreti kopyala + + + + Copy after fee + Ücretten sonrakini kopyala + + + + Copy bytes + Baytları kopyala + + + + Copy priority + Önceliği kopyala + + + + Copy low output + Düşük çıktıyı kopyala + + + + Copy change + Para üstünü kopyala + + + + highest + en yüksek + + + + high + yüksek + + + + medium-high + orta-yüksek + + + + medium + orta + + + + low-medium + düşük-orta + + + + low + düşük + + + + lowest + en düşük + + + + + DUST + BOZUKLUK + + + + + yes + evet + + + + + no + hayır + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + İşlem büyüklüğü 10000 bayttan büyükse, bu etiket kırmızıya dönüşür. + + Bu, kb başına en az %1 ücret gerektiği anlamına gelir. + + Girdi başına +/- 1 Byte değişkenlik gösterebilir. + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + Yüksek öncelikli işlemler, daha yüksek ihtimalle bir bloğa düşer. + +Öncelik "orta" seviyeden düşükse, bu etiket kırmızıya döner. + + Bu, kb başına en az %1 ücret gerektiği anlamına gelir. + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + Eğer herhangi bir alıcı, %1'den daha küçük bir miktar alırsa, bu etiket kırmızıya dönüşür. + + Bu, en az %2 bir ücretin gerektiği anlamına gelir. + + Minimum aktarım ücretinin 0.546 katından düşük miktarlar, BOZUKLUK olarak gösterilir. + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + Eğer para üstü %1'den küçükse, bu etiket kırmızıya dönüşür. + + Bu, en az %2 bir ücretin gerektiği anlamına gelir. + + + + + (no label) + (boş etiket) + + + + change from %1 (%2) + %1 unsurundan para üstü (%2) + + + + (change) + (para üstü) + + + + EditAddressDialog + + + Edit Address + Adresi düzenle + + + + &Label + &Etiket + + + + The label associated with this address book entry + Bu adres defteri kaydıyla ilişkili etiket + + + + &Address + &Adres + + + + The address associated with this address book entry. This can only be modified for sending addresses. + Bu adres defteri kaydıyla ilişkili etiket. Bu, sadece gönderi adresleri için değiştirilebilir. + + + + &Stealth Address + + + + + New receiving address + Yeni alım adresi + + + + New sending address + Yeni gönderi adresi + + + + Edit receiving address + Alım adresini düzenle + + + + Edit sending address + Gönderi adresini düzenle + + + + The entered address "%1" is not a valid Alias address. + Girilen %1 adresi, geçerli bir Alias adresi değildir. + + + + The entered address "%1" is already in the address book. + Girilen "%1" adresi hâlihazırda adres defterinde mevcuttur. + + + + Could not unlock wallet. + Cüzdan kilidi açılamadı. + + + + New key generation failed. + Yeni anahtar oluşturulması başarısız oldu. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + versiyon + + + + Usage: + Kullanım: + + + + command-line options + komut satırı seçenekleri + + + + UI options + GA seçenekleri + + + + Set language, for example "de_DE" (default: system locale) + Dili ayarla, örneğin "de_DE" (varsayılan: sistem yerel ayarları) + + + + Start minimized + Simge durumunda başlat + + + + Show splash screen on startup (default: 1) + Başlangıçta açılış ekranını göster (varsayılan: 1) + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Malumat + + + + Alias Core + + + + + Client name + İstemci ismi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + Mevcut değil + + + + Client version + İstemci sürümü + + + + Using OpenSSL version + Kullanılan OpenSSL sürümü + + + + Using BerkeleyDB version + + + + + Build date + Derleme tarihi + + + + Startup time + Başlama zamanı + + + + Network + Şebeke + + + + Name + + + + + Number of connections + Bağlantı sayısı + + + + Block chain + Blok zinciri + + + + Current number of blocks + Güncel blok sayısı + + + + Estimated total blocks + Tahmini toplam blok sayısı + + + + Last block time + Son blok zamanı + + + + Debug log file + Hata ayıklama kütük dosyası + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + &Aç + + + + Command-line options + Komut satırı seçenekleri + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + &Göster + + + + &Console + &Konsol + + + + Clear console + Konsolu temizle + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Tarihçede gezinmek için imleç tuşlarını kullanınız, <b>Ctrl-L</b> ile de ekranı temizleyebilirsiniz. + + + + Type <b>help</b> for an overview of available commands. + Mevcut komutların listesi için <b>help</b> yazınız. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + %1 değerine dek açık + + + + conflicted + çakışma + + + + %1/offline + %1/çevrim dışı + + + + %1/unconfirmed + %1/doğrulanmadı + + + + %1 confirmations + %1 teyit + + + + Transaction ID + Muamele tanımlayıcı + + + + Block Hash + + + + + Status + Durum + + + + , has not been successfully broadcast yet + , henüz başarılı bir şekilde yayınlanmadı + + + + , broadcast through %n node(s) + + + + + Date + Tarih + + + + Source + Kaynak + + + + Generated + Oluşturuldu + + + + + Credit + Gider + + + + matures in %n more block(s) + + + + + not accepted + kabul edilmedi + + + + Transaction fee + Muamele ücreti + + + + Net amount + Net meblağ + + + + Message + Mesaj + + + + Comment + Yorum + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Hata ayıklama verileri + + + + Debit + Gelir + + + + Transaction + Muamele + + + + Inputs + Girdiler + + + + Amount + Meblağ + + + + true + doğru + + + + false + yanlış + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + bilinmiyor + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Muamele detayları + + + + This pane shows a detailed description of the transaction + Bu pano muamelenin ayrıntılı açıklamasını gösterir + + + + TransactionTableModel + + + Date + Tarih + + + + Type + Tür + + + + Address + Adres + + + + Note + + + + + Amount + Meblağ + + + + Open for %n more block(s) + + + + + Open until %1 + %1 değerine dek açık + + + + Offline + Çevrim dışı + + + + Unconfirmed + Teyit edilmemiş + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + Teyit ediliyor (tavsiye edilen %2 teyit üzerinden %1 doğrulama) + + + + Confirmed (%1 confirmations) + Doğrulandı (%1 teyit) + + + + Conflicted + Çakışma + + + + Immature (%1 confirmations, will be available after %2) + Olgunlaşmamış (%1 teyit, %2 teyit ardından kullanılabilir olacaktır) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (mevcut değil) + + + + Transaction status. Hover over this field to show number of confirmations. + Muamele durumu. Doğrulama sayısını görüntülemek için imleci bu alanda tutunuz. + + + + Date and time that the transaction was received. + Muamelenin alındığı tarih ve zaman. + + + + Type of transaction. + Muamele türü. + + + + Destination address of transaction. + Muamelenin alıcı adresi. + + + + Amount removed from or added to balance. + Bakiyeden alınan ya da bakiyeye eklenen meblağ. + + + + WalletModel + + + + Sending... + Gönderiyor... + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_uk.ts b/src/qt/locale/alias_uk.ts new file mode 100644 index 0000000000..422f072cf3 --- /dev/null +++ b/src/qt/locale/alias_uk.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Назва + + + + Address + Адреса + + + + pubkey + + + + + stealth + + + + + (no label) + (немає назви) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + Діалог введення паролю + + + + Enter passphrase + Введіть пароль + + + + New passphrase + Новий пароль + + + + Repeat new passphrase + Повторіть пароль + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Введіть новий пароль для гаманця.<br/>Будь ласка, використовуйте паролі що містять <b>як мінімум 10 випадкових символів</b>, або <b>як мінімум 8 слів</b>. + + + + Encrypt wallet + Зашифрувати гаманець + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + Ця операція потребує пароль для розблокування гаманця. + + + + Unlock wallet + Розблокувати гаманець + + + + This operation needs your wallet passphrase to decrypt the wallet. + Ця операція потребує пароль для дешифрування гаманця. + + + + Decrypt wallet + Дешифрувати гаманець + + + + Change passphrase + Змінити пароль + + + + Enter the old and new passphrase to the wallet. + Ввести старий та новий паролі для гаманця. + + + + Confirm wallet encryption + Підтвердити шифрування гаманця + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + Ви дійсно хочете зашифрувати свій гаманець? + + + + + Wallet encrypted + Гаманець зашифровано + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + ВАЖЛИВО: Всі попередні резервні копії, які ви зробили з вашого гаманця файл повинен бути замінений новоствореному, зашифрованому файлі гаманця. З міркувань безпеки, попередні резервні копії в незашифрованому файлі гаманець стане марним, як тільки ви починаєте використовувати нову, зашифрований гаманець. + + + + + + + Wallet encryption failed + Не вдалося зашифрувати гаманець + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Виникла помилка під час шифрування гаманця. Ваш гаманець не було зашифровано. + + + + + The supplied passphrases do not match. + Введені паролі не співпадають. + + + + Wallet unlock failed + Не вдалося розблокувати гаманець + + + + + + The passphrase entered for the wallet decryption was incorrect. + Введений пароль є невірним. + + + + Wallet decryption failed + Не вдалося розшифрувати гаманець + + + + Wallet passphrase was successfully changed. + Пароль було успішно змінено. + + + + + Warning: The Caps Lock key is on! + Увага: Ввімкнено Caps Lock! + + + + ClientModel + + + Network Alert + Сповіщення мережі + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + Кількість: + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Кількість + + + + Label + + + + + Address + Адреса + + + + Date + Дата + + + + Confirmations + + + + + Confirmed + Підтверджені + + + + Priority + + + + + Copy address + Скопіювати адресу + + + + Copy label + Скопіювати мітку + + + + + Copy amount + Копіювати кількість + + + + Copy transaction ID + Копіювати ID транзакції + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (немає назви) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + Редагувати адресу + + + + &Label + &Мітка + + + + The label associated with this address book entry + + + + + &Address + &Адреса + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + Нова адреса для отримання + + + + New sending address + Нова адреса для відправлення + + + + Edit receiving address + Редагувати адресу для отримання + + + + Edit sending address + Редагувати адресу для відправлення + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + Введена адреса «%1» вже присутня в адресній книзі. + + + + Could not unlock wallet. + Неможливо розблокувати гаманець. + + + + New key generation failed. + Не вдалося згенерувати нові ключі. + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + &Інформація + + + + Alias Core + + + + + Client name + Назва клієнту + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + Н/Д + + + + Client version + Версія клієнту + + + + Using OpenSSL version + Використовується OpenSSL версії + + + + Using BerkeleyDB version + + + + + Build date + Дата збирання + + + + Startup time + Час запуску + + + + Network + Мережа + + + + Name + + + + + Number of connections + Кількість підключень + + + + Block chain + Ланцюг блоків + + + + Current number of blocks + Поточне число блоків + + + + Estimated total blocks + Розрахункове число блоків + + + + Last block time + Час останнього блоку + + + + Debug log file + Файл звіту зневадження + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + Відкрити + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + Консоль + + + + Clear console + Очистити консоль + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Використовуйте стрілки вгору вниз для навігації по історії, і <b>Ctrl-L</b> для очищення екрана. + + + + Type <b>help</b> for an overview of available commands. + Наберіть <b>help</b> для перегляду доступних команд. + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + Відкрити до %1 + + + + conflicted + + + + + %1/offline + %1/поза інтернетом + + + + %1/unconfirmed + %1/не підтверджено + + + + %1 confirmations + %1 підтверджень + + + + Transaction ID + ID транзакції + + + + Block Hash + + + + + Status + Статус + + + + , has not been successfully broadcast yet + , ще не було успішно розіслано + + + + , broadcast through %n node(s) + + + + + Date + Дата + + + + Source + Джерело + + + + Generated + Згенеровано + + + + + Credit + Кредит + + + + matures in %n more block(s) + + + + + not accepted + не прийнято + + + + Transaction fee + Комісія за транзакцію + + + + Net amount + Загальна сума + + + + Message + Повідомлення + + + + Comment + Коментар + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + Отладочна інформація + + + + Debit + Дебет + + + + Transaction + Транзакція + + + + Inputs + витрати + + + + Amount + Кількість + + + + true + true + + + + false + false + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + невідомий + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + Деталі транзакції + + + + This pane shows a detailed description of the transaction + Даний діалог показує детальну статистику по вибраній транзакції + + + + TransactionTableModel + + + Date + Дата + + + + Type + Тип + + + + Address + Адреса + + + + Note + + + + + Amount + Кількість + + + + Open for %n more block(s) + + + + + Open until %1 + Відкрити до %1 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + Підтверджено (%1 підтверджень) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (недоступно) + + + + Transaction status. Hover over this field to show number of confirmations. + Статус транзакції. Наведіть вказівник на це поле, щоб показати кількість підтверджень. + + + + Date and time that the transaction was received. + Дата і час, коли транзакцію було отримано. + + + + Type of transaction. + Тип транзакції. + + + + Destination address of transaction. + Адреса отримувача транзакції. + + + + Amount removed from or added to balance. + Сума, додана чи знята з балансу. + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_ur_PK.ts b/src/qt/locale/alias_ur_PK.ts new file mode 100644 index 0000000000..e8352069c0 --- /dev/null +++ b/src/qt/locale/alias_ur_PK.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + + + + + Address + + + + + pubkey + + + + + stealth + + + + + (no label) + + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + + + + + New passphrase + + + + + Repeat new passphrase + + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + + Encrypt wallet + + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + + Unlock wallet + + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + + Decrypt wallet + + + + + Change passphrase + + + + + Enter the old and new passphrase to the wallet. + + + + + Confirm wallet encryption + + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + + The supplied passphrases do not match. + + + + + Wallet unlock failed + + + + + + + The passphrase entered for the wallet decryption was incorrect. + + + + + Wallet decryption failed + + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + + + + + Label + + + + + Address + + + + + Date + + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + + + + + Type + + + + + Address + + + + + Note + + + + + Amount + + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_vi.ts b/src/qt/locale/alias_vi.ts new file mode 100644 index 0000000000..cb0bfe42fe --- /dev/null +++ b/src/qt/locale/alias_vi.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + Nhãn dữ liệu + + + + Address + Địa chỉ + + + + pubkey + + + + + stealth + + + + + (no label) + (chưa có nhãn) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + + + + + New passphrase + + + + + Repeat new passphrase + + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + + Encrypt wallet + + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + + Unlock wallet + + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + + Decrypt wallet + + + + + Change passphrase + + + + + Enter the old and new passphrase to the wallet. + + + + + Confirm wallet encryption + + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + + The supplied passphrases do not match. + + + + + Wallet unlock failed + + + + + + + The passphrase entered for the wallet decryption was incorrect. + + + + + Wallet decryption failed + + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Số lượng + + + + Label + + + + + Address + Địa chỉ + + + + Date + + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (chưa có nhãn) + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + Số lượng + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + + + + + Type + + + + + Address + Địa chỉ + + + + Note + + + + + Amount + Số lượng + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_vi_VN.ts b/src/qt/locale/alias_vi_VN.ts new file mode 100644 index 0000000000..d32fe237c5 --- /dev/null +++ b/src/qt/locale/alias_vi_VN.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + + + + + Address + + + + + pubkey + + + + + stealth + + + + + (no label) + + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + + + + + New passphrase + + + + + Repeat new passphrase + + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + + Encrypt wallet + + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + + Unlock wallet + + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + + Decrypt wallet + + + + + Change passphrase + + + + + Enter the old and new passphrase to the wallet. + + + + + Confirm wallet encryption + + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + + The supplied passphrases do not match. + + + + + Wallet unlock failed + + + + + + + The passphrase entered for the wallet decryption was incorrect. + + + + + Wallet decryption failed + + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + + + + + Label + + + + + Address + + + + + Date + + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + + + + + Type + + + + + Address + + + + + Note + + + + + Amount + + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_zh_CN.ts b/src/qt/locale/alias_zh_CN.ts new file mode 100644 index 0000000000..f1c06701b4 --- /dev/null +++ b/src/qt/locale/alias_zh_CN.ts @@ -0,0 +1,4304 @@ + + + AboutDialog + + + About Alias + 关于别名币 + + + + <b>Alias</b> version + <b>别名币客户端</b> 版本 + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + 2020别名币开发者 +2016幽灵币开发者 +2014暗影币开发者 +2014黑币开发者 +2012Nova币开发者 +2009比特币开发者 + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + 标签 + + + + Address + 地址 + + + + pubkey + 公钥 + + + + stealth + 匿名 + + + + (no label) + (没有标签) + + + + Stealth Address + 隐密地址 + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + 密码对话框 + + + + Enter passphrase + 输入密码 + + + + New passphrase + 新密码 + + + + Repeat new passphrase + 重复新密码 + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + 在系统允许的情况下用于防止sendmoney欺诈,并未提供真正的安全防护措施。 + + + + For staking only + 仅用于权益增值 + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + 输入钱包的新密码。<br/>使用的密码请至少包含<b>10个以上随机字符</>,或者是<b>8个以上的单词</b>。 + + + + Encrypt wallet + 加密钱包 + + + + Keep wallet unlocked for staking. + 保持钱包解锁状态并继续挖矿 + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + 别名币钱包登录 + + + + This operation needs your wallet passphrase to unlock the wallet. + 此操作需要您首先输入密码解锁该钱包。 + + + + Unlock wallet + 解锁钱包 + + + + This operation needs your wallet passphrase to decrypt the wallet. + 该操作需要您首先使用密码解密钱包。 + + + + Decrypt wallet + 解密钱包 + + + + Change passphrase + 更改密码 + + + + Enter the old and new passphrase to the wallet. + 请输入该钱包的旧密码与新密码。 + + + + Confirm wallet encryption + 确认加密钱包 + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + 警告:如果您丢失了加密该钱包的密码,其中所有的暗影币将会丢失! + + + + Are you sure you wish to encrypt your wallet? + 您确定需要为钱包加密吗? + + + + + Wallet encrypted + 钱包已加密 + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + 别名币客户端即将关闭以完成加密过程。请记住,加密钱包并不能完全防止您的电子货币被入侵您计算机的木马软件盗窃。 + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + 重要提示:您以前备份的钱包文件应该替换成最新生成的加密钱包文件(重新备份)。从安全性上考虑,您以前备份的未加密的钱包文件,在您使用新的加密钱包后将无效,请重新备份。 + + + + + + + Wallet encryption failed + 钱包加密失败 + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + 由于一个本地错误,加密钱包的操作已经失败。您的钱包没能被加密。 + + + + + The supplied passphrases do not match. + 密码不匹配。 + + + + Wallet unlock failed + 钱包解锁失败 + + + + + + The passphrase entered for the wallet decryption was incorrect. + 用于解密钱包的密码不正确。 + + + + Wallet decryption failed + 钱包解密失败。 + + + + Wallet passphrase was successfully changed. + 修改钱包密码成功。 + + + + + Warning: The Caps Lock key is on! + 警告:大写锁定键处于打开状态! + + + + ClientModel + + + Network Alert + 网络警报 + + + + CoinControlDialog + + + Coin Control + 别名币控制 + + + + Quantity: + 总量: + + + + Bytes: + 字节: + + + + Amount: + 金额: + + + + Priority: + 优先级: + + + + Fee: + 费用: + + + + Low Output: + 低输出 + + + + After Fee: + 加上交易费用后: + + + + Change: + 变更 : + + + + (un)select all + (不)全选 + + + + Tree mode + 树状模式 + + + + List mode + 列表模式 + + + + Amount + 金额 + + + + Label + 标签 + + + + Address + 地址 + + + + Date + 日期 + + + + Confirmations + 确认 + + + + Confirmed + 已确认 + + + + Priority + 优先级 + + + + Copy address + 复制地址 + + + + Copy label + 复制标签 + + + + + Copy amount + 复制金额 + + + + Copy transaction ID + 复制交易编号 + + + + Copy quantity + 复制金额 + + + + Copy fee + 复制交易费 + + + + Copy after fee + 复制含交易费的金额 + + + + Copy bytes + 复制字节 + + + + Copy priority + 复制优先级 + + + + Copy low output + 复制低输出 + + + + Copy change + 复制零钱 + + + + highest + 最高 + + + + high + + + + + medium-high + 中高 + + + + medium + 中等 + + + + low-medium + 中低 + + + + low + + + + + lowest + 最低 + + + + + DUST + DUST + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + 交易数据量超过10000字节时,该标签变为红色。 +此时每kb数据量将会收取 %1 的手续费。 +可能有+/-1字节的误差。 + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + 优先度较高的交易有更高可能进入到区块中。 +当优先度为中级以下时,该标签变为红色。 +此时需要收取每kb %1 的手续费。 + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + 如果零钱少于 %1,该标签变为红色。 +此时需收取 %2 的手续费。 + + + + + (no label) + (没有标签) + + + + change from %1 (%2) + 来自%1的零钱 (%2) + + + + (change) + (零钱) + + + + EditAddressDialog + + + Edit Address + 编辑地址 + + + + &Label + 标签(&L) + + + + The label associated with this address book entry + 地址簿内该项目对应的标签 + + + + &Address + 地址(&A) + + + + The address associated with this address book entry. This can only be modified for sending addresses. + 地址簿内该项目对应的地址。只有“收款人地址”分类下的地址可以修改。 + + + + &Stealth Address + 匿名地址 + + + + New receiving address + 新建接收地址 + + + + New sending address + 新建发送地址 + + + + Edit receiving address + 编辑接收地址 + + + + Edit sending address + 编辑发送地址 + + + + The entered address "%1" is not a valid Alias address. + "%1" 不是有效的暗影币地址。 + + + + The entered address "%1" is already in the address book. + 输入的地址"%1"已经存在于地址簿中。 + + + + Could not unlock wallet. + 无法解锁钱包 + + + + New key generation failed. + 新的密钥生成失败。 + + + + EncryptWalletPage + + + Wallet Encryption + 钱包加密 + + + + Please enter a password to encrypt the wallet.dat file. + 请输入密码来加密钱包.dat 文件 + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + 钱包密码 + + + + &Verify Password: + 验证密码 + + + + Create and encrypt wallet.dat ... + 创建并加密钱包.dat + + + + Error + 错误 + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + 别名 + + + + version + 版本 + + + + Usage: + 使用 + + + + command-line options + 命令行选项 + + + + UI options + 用户界面选项 + + + + Set language, for example "de_DE" (default: system locale) + 设定语言,例如 “de_DE" (默认语言为本地操作系统语言) + + + + Start minimized + 启动时最小化 + + + + Show splash screen on startup (default: 1) + 登录时显示Logo界面 (默认开启) + + + + ImportWalletDatPage + + + Import wallet.dat + 导入钱包.dat文件 + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + 选择钱包.dat + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + 钱包文件(*.dat) + + + + Error + 错误 + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + 语言 + + + + &Seed Password: + 种子密码 + + + + &Verify Password: + 验证密码 + + + + Error + 错误 + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + 种子密码 + + + + <br>Enter Mnemonic Seed Words: + 输入种子助记词 + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + 信息(&I) + + + + Alias Core + 别名币核心 + + + + Client name + 客户端名称 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + 不可用 + + + + Client version + 客户端版本 + + + + Using OpenSSL version + 使用 OpenSSL 版本 + + + + Using BerkeleyDB version + + + + + Build date + 创建时间 + + + + Startup time + 启动时间 + + + + Network + 网络 + + + + Name + 名称 + + + + Number of connections + 连接数 + + + + Block chain + 数据链 + + + + Current number of blocks + 当前数据块数量 + + + + Estimated total blocks + 预计数据块数量 + + + + Last block time + 上一数据块时间 + + + + Debug log file + 调试日志文件 + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + 打开(&O) + + + + Command-line options + 命令行选项 + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + 显示(&S) + + + + &Console + 控制台(&C) + + + + Clear console + 清空控制台 + + + + &Network Traffic + 网络交通 + + + + &Clear + 清除 + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + 方向 + + + + Version + 版本 + + + + User Agent + + + + + Services + 服务 + + + + Starting Height + + + + + Sync Height + 同步高度 + + + + Ban Score + + + + + Connection Time + + + + + Last Send + 上次发送 + + + + Last Receive + 上次接收 + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + 使用上下方向键浏览历史, <b>Ctrl-L</b>清除屏幕。 + + + + Type <b>help</b> for an overview of available commands. + 使用 <b>help</b> 命令显示帮助信息。 + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + 未知 + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + 错误 + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + 错误 + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + 发送币 + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + 至 %1 个数据块时开启 + + + + conflicted + 发现冲突 + + + + %1/offline + %1 / 离线 + + + + %1/unconfirmed + %1/未确认 + + + + %1 confirmations + %1 已确认 + + + + Transaction ID + 交易ID + + + + Block Hash + + + + + Status + 状态 + + + + , has not been successfully broadcast yet + ,未被成功广播 + + + + , broadcast through %n node(s) + + + + + Date + 日期 + + + + Source + + + + + Generated + 生成 + + + + + Credit + 收入 + + + + matures in %n more block(s) + + + + + not accepted + 未被接受 + + + + Transaction fee + 交易费 + + + + Net amount + 净额 + + + + Message + 消息 + + + + Comment + 备注 + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + 调试信息 + + + + Debit + 支出 + + + + Transaction + 交易 + + + + Inputs + 输入 + + + + Amount + 金额 + + + + true + 正确 + + + + false + 错误 + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + 未知 + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + 交易细节 + + + + This pane shows a detailed description of the transaction + 当前面板显示了交易的详细信息 + + + + TransactionTableModel + + + Date + 日期 + + + + Type + 类型 + + + + Address + 地址 + + + + Note + + + + + Amount + 数量 + + + + Open for %n more block(s) + + + + + Open until %1 + 至 %1 个数据块时开启 + + + + Offline + 掉线 + + + + Unconfirmed + 未确认的 + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + 确认中 (推荐 %2个确认,已经有 %1个确认) + + + + Confirmed (%1 confirmations) + 已确认 (%1 条确认信息) + + + + Conflicted + 冲突的 + + + + Immature (%1 confirmations, will be available after %2) + 未成熟 (%1 个确认,将在 %2 个后可用) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (不可用) + + + + Transaction status. Hover over this field to show number of confirmations. + 交易状态。 鼠标移到此区域可显示确认项数量。 + + + + Date and time that the transaction was received. + 接收到交易的时间 + + + + Type of transaction. + 交易类别。 + + + + Destination address of transaction. + 交易目的地址。 + + + + Amount removed from or added to balance. + 从余额添加或移除的金额。 + + + + WalletModel + + + + Sending... + 正在发送 + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_zh_HK.ts b/src/qt/locale/alias_zh_HK.ts new file mode 100644 index 0000000000..0b1c7c97c6 --- /dev/null +++ b/src/qt/locale/alias_zh_HK.ts @@ -0,0 +1,3982 @@ + + + AboutDialog + + + About Alias + + + + + <b>Alias</b> version + + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + + + + + Address + + + + + pubkey + + + + + stealth + + + + + (no label) + + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + + + + + Enter passphrase + + + + + New passphrase + + + + + Repeat new passphrase + + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + + + + + For staking only + + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + + Encrypt wallet + + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + + Unlock wallet + + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + + Decrypt wallet + + + + + Change passphrase + + + + + Enter the old and new passphrase to the wallet. + + + + + Confirm wallet encryption + + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + + + + + Are you sure you wish to encrypt your wallet? + + + + + + Wallet encrypted + + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + + + + + + + + Wallet encryption failed + + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + + The supplied passphrases do not match. + + + + + Wallet unlock failed + + + + + + + The passphrase entered for the wallet decryption was incorrect. + + + + + Wallet decryption failed + + + + + Wallet passphrase was successfully changed. + + + + + + Warning: The Caps Lock key is on! + + + + + ClientModel + + + Network Alert + + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + + + + + Label + + + + + Address + + + + + Date + + + + + Confirmations + + + + + Confirmed + + + + + Priority + + + + + Copy address + + + + + Copy label + + + + + + Copy amount + + + + + Copy transaction ID + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lowest + + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + + + + + change from %1 (%2) + + + + + (change) + + + + + EditAddressDialog + + + Edit Address + + + + + &Label + + + + + The label associated with this address book entry + + + + + &Address + + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + + + + + New sending address + + + + + Edit receiving address + + + + + Edit sending address + + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + + + + + Could not unlock wallet. + + + + + New key generation failed. + + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + + + + + Alias Core + + + + + Client name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + Client version + + + + + Using OpenSSL version + + + + + Using BerkeleyDB version + + + + + Build date + + + + + Startup time + + + + + Network + + + + + Name + + + + + Number of connections + + + + + Block chain + + + + + Current number of blocks + + + + + Estimated total blocks + + + + + Last block time + + + + + Debug log file + + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + + + + + Clear console + + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + + Type <b>help</b> for an overview of available commands. + + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Notifications + + + + + Options + + + + + Wallet Management + + + + + Add New Wallet + + + + + Import Wallet + + + + + Advanced + + + + + Backup + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Narration: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Normal + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Market + + + + + Advanced Options + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Tor connection offline + + + + + i2p connection offline + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Wallet is syncing + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Balances overview + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The address transfer the balance to + + + + + The address to transfer the balance to + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + Choose address from address book + + + + + Enter a public key for the address above + + + + + Enter a label for this group + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Public ALIAS requires 1 block confirmation<br>Private ALIAS requires 10 blocks confirmations + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + + + + + conflicted + + + + + %1/offline + + + + + %1/unconfirmed + + + + + %1 confirmations + + + + + Transaction ID + + + + + Block Hash + + + + + Status + + + + + , has not been successfully broadcast yet + + + + + , broadcast through %n node(s) + + + + + Date + + + + + Source + + + + + Generated + + + + + + Credit + + + + + matures in %n more block(s) + + + + + not accepted + + + + + Transaction fee + + + + + Net amount + + + + + Message + + + + + Comment + + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + + + + + Debit + + + + + Transaction + + + + + Inputs + + + + + Amount + + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + + Date + + + + + Type + + + + + Address + + + + + Note + + + + + Amount + + + + + Open for %n more block(s) + + + + + Open until %1 + + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Date and time that the transaction was received. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Amount removed from or added to balance. + + + + + WalletModel + + + + Sending... + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/alias_zh_TW.ts b/src/qt/locale/alias_zh_TW.ts new file mode 100644 index 0000000000..77119c0d25 --- /dev/null +++ b/src/qt/locale/alias_zh_TW.ts @@ -0,0 +1,4294 @@ + + + AboutDialog + + + About Alias + 關于黑幣 + + + + <b>Alias</b> version + <b>黑幣客戶端</b> 版本 + + + + © 2020 Alias developers +© 2016 Spectrecoin developers +© 2014 ShadowCash developers +© 2014 BlackCoin developers +© 2012 NovaCoin developers +© 2009 Bitcoin developers + + + + + This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. + + + + + AddressTableModel + + + Label + 標記 + + + + Address + 位址 + + + + pubkey + + + + + stealth + + + + + (no label) + (無標記) + + + + Stealth Address + + + + + n/a + + + + + AskPassphraseDialog + + + Passphrase Dialog + 密碼對話視窗 + + + + Enter passphrase + 請輸入密碼 + + + + New passphrase + 新密碼 + + + + Repeat new passphrase + 重複新密碼 + + + + Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. + 在系統允許的情況下用于防止sendmoney欺詐,並未提供真正的安全防護措施。 + + + + For staking only + 仅用于权益增值 + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + 請輸入錢包的新密碼。<br/>建議用<b>10 個以上的任意字元</b>,或是<b>8 個以上的單字</b>。 + + + + Encrypt wallet + 加密錢包 + + + + Keep wallet unlocked for staking. + + + + + Your wallet contains locked ATXOs for which its spending state can only be determinate with your private key. Your <b>private ALIAS balance might be shown wrong</b>. + + + + + <b>Alias Wallet Login</b> + + + + + This operation needs your wallet passphrase to unlock the wallet. + 這個動作需要你的錢包密碼來解鎖錢包。 + + + + Unlock wallet + 解鎖錢包 + + + + This operation needs your wallet passphrase to decrypt the wallet. + 這個動作需要你的錢包密碼來把錢包解密。 + + + + Decrypt wallet + 解密錢包 + + + + Change passphrase + 改變密碼 + + + + Enter the old and new passphrase to the wallet. + 請輸入錢包的舊密碼及新密碼。 + + + + Confirm wallet encryption + 確認錢包加密 + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! + 警告:如果您丟失了加密該錢包的密碼,其中所有的黑幣將會丟失! + + + + Are you sure you wish to encrypt your wallet? + 你確定要把錢包加密嗎? + + + + + Wallet encrypted + 錢包已加密 + + + + Alias will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + 黑幣客戶端即將關閉以完成加密過程。請記住,加密錢包並不能完全防止您的電子貨幣被入侵您計算機的木馬軟件盜竊。 + + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + 重要: 請改用新產生有加密的錢包檔,來取代舊錢包檔的備份。為了安全性的理由,當你開始使用新的有加密的錢包後,舊錢包檔的備份就不能再使用了。 + + + + + + + Wallet encryption failed + 錢包加密失敗 + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + 因為內部錯誤導致錢包加密失敗。你的錢包還是沒加密。 + + + + + The supplied passphrases do not match. + 提供的密碼不一樣。 + + + + Wallet unlock failed + 錢包解鎖失敗 + + + + + + The passphrase entered for the wallet decryption was incorrect. + 輸入要用來解密錢包的密碼不對。 + + + + Wallet decryption failed + 錢包解密失敗 + + + + Wallet passphrase was successfully changed. + 錢包密碼改成功了。 + + + + + Warning: The Caps Lock key is on! + 警告: 大寫字母鎖定作用中! + + + + ClientModel + + + Network Alert + 網路警報 + + + + CoinControlDialog + + + Coin Control + + + + + Quantity: + 數目: + + + + Bytes: + 位元組數: + + + + Amount: + 金額: + + + + Priority: + 優先度: + + + + Fee: + 手續費: + + + + Low Output: + 低輸出: + + + + After Fee: + 計費後金額: + + + + Change: + 找零金額: + + + + (un)select all + 全選或全不選 + + + + Tree mode + 樹狀模式 + + + + List mode + 列表模式 + + + + Amount + 金額 + + + + Label + + + + + Address + 位址 + + + + Date + 日期 + + + + Confirmations + 確認次數 + + + + Confirmed + 已確定 + + + + Priority + 優先度 + + + + Copy address + 複製位址 + + + + Copy label + 複製標記 + + + + + Copy amount + 複製金額 + + + + Copy transaction ID + 複製交易識別碼 + + + + Copy quantity + 複製數目 + + + + Copy fee + 複製手續費 + + + + Copy after fee + 複製計費後金額 + + + + Copy bytes + 複製位元組數 + + + + Copy priority + 複製優先度 + + + + Copy low output + 複製低輸出 + + + + Copy change + 複製找零金額 + + + + highest + 最高 + + + + high + + + + + medium-high + 中高 + + + + medium + 中等 + + + + low-medium + 中低 + + + + low + + + + + lowest + 最低 + + + + + DUST + + + + + + yes + + + + + + no + + + + + This label turns red, if the transaction size is bigger than 10000 bytes. + + This means a fee of at least %1 per kb is required. + + Can vary +/- 1 Byte per input. + + + + + Transactions with higher priority get more likely into a block. + +This label turns red, if the priority is smaller than "medium". + + This means a fee of at least %1 per kb is required. + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + This means a fee of at least %2 is required. + + Amounts below 0.546 times the minimum relay fee are shown as DUST. + + + + + This label turns red, if the change is smaller than %1. + + This means a fee of at least %2 is required. + + + + + + (no label) + (無標記) + + + + change from %1 (%2) + 找零前是 %1 (%2) + + + + (change) + (找零) + + + + EditAddressDialog + + + Edit Address + 編輯位址 + + + + &Label + 標記 + + + + The label associated with this address book entry + + + + + &Address + 位址 + + + + The address associated with this address book entry. This can only be modified for sending addresses. + + + + + &Stealth Address + + + + + New receiving address + 造新的收款位址 + + + + New sending address + 造新的付款位址 + + + + Edit receiving address + 編輯收款位址 + + + + Edit sending address + 編輯付款位址 + + + + The entered address "%1" is not a valid Alias address. + + + + + The entered address "%1" is already in the address book. + 輸入的位址 %1 在位址簿中已經有了。 + + + + Could not unlock wallet. + 沒辦法把錢包解鎖。 + + + + New key generation failed. + 產生新的密鑰失敗了。 + + + + EncryptWalletPage + + + Wallet Encryption + + + + + Please enter a password to encrypt the wallet.dat file. + + + + + The password protects your private keys and will be asked by the wallet on startup and for critical operations. + + + + + &Wallet Password: + + + + + &Verify Password: + + + + + Create and encrypt wallet.dat ... + + + + + Error + + + + + Failed to create wallet.dat. ErrorCode: %1 + + + + + GUIUtil::HelpMessageBox + + + + Alias + + + + + version + + + + + Usage: + + + + + command-line options + + + + + UI options + + + + + Set language, for example "de_DE" (default: system locale) + + + + + Start minimized + + + + + Show splash screen on startup (default: 1) + + + + + ImportWalletDatPage + + + Import wallet.dat + + + + + Please import a wallet.dat file with your private keys. + + + + + &Select wallet.dat + + + + + QFileDialog::getOpenFileName() + + + + + Wallet Files (*.dat) + + + + + Error + + + + + Failed to copy wallet.dat: %1 + + + + + IntroPage + + + Set Up Your Wallet + + + + + The application has detected that you don't have a wallet.dat file, which holds your private keys. Please choose how you want to create or restore your private keys. + + + + + &Create new mnemonic recovery seed words + + + + + &Recover from your existing mnemonic seed words + + + + + &Import wallet.dat file + + + + + NewMnemonicResultPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 2/3: Write down your mnemonic recovery seed words. + + + + + Mnemonic Recovery Seed Words: + + + + + You need the Mnemonic Recovery Seed Words to restore this wallet. Write them down and keep them somewhere safe.<br>You will be asked to confirm the Recovery Seed Words in the next screen to ensure you have written it down correctly. + + + + + NewMnemonicSettingsPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 1/3: Please define language to use and optional password to protect your seed. + + + + + Creating mnemonic seed words is a three step procedure:<ol><li>Define language and optional password for your seed.</li><li>Write down created seed words.</li><li>Verify seed words and seed password.</li></ol> + + + + + &Language: + + + + + &Seed Password: + + + + + &Verify Password: + + + + + Error + + + + + Failed to create Mnemonic Seed Words. %1 + + + + + NewMnemonicVerificationPage + + + Create private keys with Mnemonic Recovery Seed Words + + + + + Step 3/3: Verify you have the correct words and (optional) password noted. + + + + + &Seed Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + PaymentServer + + + Cannot start Alias: click-to-pay handler + + + + + PeerTableModel + + + Address/Hostname + + + + + User Agent + + + + + Ping Time + + + + + QObject + + + %1 d + + + + + %1 h + + + + + %1 m + + + + + + %1 s + + + + + None + + + + + N/A + + + + + %1 ms + + + + + RPCConsole + + + Alias - Debug window + + + + + &Information + 資訊 + + + + Alias Core + + + + + Client name + 客戶端軟體名稱 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + 未知 + + + + Client version + 客戶端軟體版本 + + + + Using OpenSSL version + 使用的 OpenSSL 版本 + + + + Using BerkeleyDB version + + + + + Build date + 建置日期 + + + + Startup time + 啓動時間 + + + + Network + 網路 + + + + Name + + + + + Number of connections + 連線數 + + + + Block chain + 區塊鏈 + + + + Current number of blocks + 目前區塊數 + + + + Estimated total blocks + 估計總區塊數 + + + + Last block time + 最近區塊時間 + + + + Debug log file + 除錯紀錄檔 + + + + Open the Alias debug log file from the current data directory. This can take a few seconds for large log files. + + + + + &Open + 開啓 + + + + Command-line options + + + + + Show the Alias help message to get a list with possible Alias command-line options. + + + + + &Show + + + + + &Console + 主控台 + + + + Clear console + 清主控台 + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + &Peers + + + + + + + Select a peer to view detailed information. + + + + + Peer ID + + + + + Direction + + + + + Version + + + + + User Agent + + + + + Services + + + + + Starting Height + + + + + Sync Height + + + + + Ban Score + + + + + Connection Time + + + + + Last Send + + + + + Last Receive + + + + + Bytes Sent + + + + + Bytes Received + + + + + Ping Time + + + + + Time Offset + + + + + Welcome to the Alias Core RPC console. + + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + 請用上下游標鍵來瀏覽先前指令的紀錄,並用 <b>Ctrl-L</b> 來清理畫面。 + + + + Type <b>help</b> for an overview of available commands. + 請打 <b>help</b> 來看可用指令的簡介。 + + + + via %1 + + + + + + never + + + + + Inbound + + + + + Outbound + + + + + Unknown + + + + + + Fetching... + + + + + RecoverFromMnemonicPage + + + Recover private keys from Mnemonic Seed Words + + + + + Please enter (optional) password and your mnemonic seed words to recover private keys. + + + + + &Seed Password: + + + + + &Verify Password: + + + + + <br>Enter Mnemonic Seed Words: + + + + + Error + + + + + Failed to recover private keys from Mnemonic Seed Words. %1 + + + + + RestartDialog + + + Please restart wallet + + + + + The used language has changed. +Please restart the wallet! + + + + + SetupWalletWizard + + + Alias Wallet Setup + + + + + The file 'wallet.dat', which holds your private keys, could not be found during startup. It must be created now.<br><br>The private key consists of alphanumerical characters that give a user access and control over their funds to their corresponding cryptocurrency address. In other words, the private key creates unique digital signatures for every transaction that enable a user to spend their funds, by proving that the user does in fact have ownership of those funds. + + + + + If you have a backup of a wallet.dat, you can import this file. + + + + + Mnemonic Seed Words allow you to create and later recover your private keys. The seed consists of 24 words and the optional password functions as a 25th word that you can keep secret to protect your seed. + + + + + It is recommended to make multiple copies of the seed words, stored in different locations.<br><br><b>Attention:</b> Seed Words cannot later be (re)created from your exsting private keys.<br>If you you loose your Seed Words and don't have a backup of the wallet.dat file, you loose your coins! + + + + + Please enter the mnemonic words and password given on the previous screen. + + + + + Please enter your mnemonic words and (optional) password. + + + + + This help is likely not to be of any help. + + + + + Alias Wallet Setup Help + + + + + SpectreBridge + + + default + + + + + <b>%1</b> from your public balance to %2 (%3) + + + + + <b>%1</b> from public to private, using address %2 (%3) + + + + + <b>%1</b> from your private balance, ring size %2, to %3 (%4) + + + + + <b>%1</b> from private to public, ring size %2, using address %3 (%4) + + + + + + + + Error: + + + + + Unknown txn type detected %1. + + + + + Input types must match for all recipients. + + + + + Ring sizes must match for all recipients. + + + + + Ring size must be %1. + + + + + Ring size outside range [%1, %2]. + + + + + + Confirm send coins + + + + + Are you sure you want to send? +Ring size of one is not anonymous. + + + + + + and + + + + + Are you sure you want to convert %1? + + + + + Are you sure you want to send %1? + + + + + + + + + + + + + + + + + + + + + + + + + Send Coins + + + + + The change address is not valid, please recheck. + + + + + The recipient address is not valid, please recheck. + + + + + Only ALIAS from your Private balance can be send to a stealth address. + + + + + Transfer from Public to Private is only allowed within your account. + + + + + Transfer from Private to Public is only allowed within your account. + + + + + The amount to pay must be larger than 0. + + + + + The amount exceeds your balance. + + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + + Duplicate address found, can only send to each address once per send operation. + + + + + Error: Transaction creation failed. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Note is too long. + + + + + Error: Ring Size Error. + + + + + Error: Input Type Error. + + + + + Error: Must be in full mode to send anon. + + + + + Error: Invalid Stealth Address. + + + + + Convert Alias from Private to Public + + + + + Error: Invalid Stealth Address. Private to public conversion requires a stealth address. + + + + + The amount exceeds your ALIAS balance. + + + + + The total exceeds your private ALIAS balance when the %1 transaction fee is included. + + + + + Error generating transaction. + + + + + Error generating transaction: %1 + + + + + Transaction successfully created. + + + + + SpectreGUI + + + Public received with + + + + + Public received from + + + + + Public sent to + + + + + Public sent to self + + + + + Private sent to self + + + + + Public staked + + + + + Public donated + + + + + Public contributed + + + + + Private staked + + + + + Private donated + + + + + Private contributed + + + + + Private received with + + + + + Private sent to + + + + + Private to Public + + + + + Public to Private + + + + + Other + + + + + + + + Alias + + + + + Client + + + + + ..Start UI.. + + + + + .Start UI. + + + + + Ready! + + + + + E&xit + + + + + Quit application + + + + + &About Alias + + + + + Show information about Alias + + + + + &Restart Alias + + + + + Show notice about required wallet restart + + + + + About &Qt + + + + + Show information about Qt + + + + + &Options... + + + + + Modify configuration options for Alias + + + + + &Show / Hide + + + + + &Encrypt Wallet... + + + + + Encrypt or decrypt wallet + + + + + &Backup Wallet... + + + + + Backup wallet to another location + + + + + &Change Passphrase... + + + + + Change the passphrase used for wallet encryption + + + + + &Unlock Wallet... + + + + + Unlock wallet + + + + + &Lock Wallet + + + + + Lock wallet + + + + + &Debug window + + + + + Open debugging and diagnostic console + + + + + &File + + + + + &Settings + + + + + &Help + + + + + Wallet + + + + + + [testnet] + + + + + %n active connection(s) to Alias network + + + + + block + + + + + header + + + + + blocks + + + + + headers + + + + + + Synchronizing with network... + + + + + Downloading filtered blocks... + + + + + ~%1 filtered block(s) remaining (%2% done). + + + + + Importing blocks... + + + + + ~%n block(s) remaining + + + + + Imported %1 of %2 %3 of transaction history (%4% done). + + + + + Downloaded %1 of %2 %3 of transaction history (%4% done). + + + + + Imported %n block(s) of transaction history. + + + + + Downloaded %n block(s) of transaction history. + + + + + %n second(s) ago + + + + + %n minute(s) ago + + + + + %n hour(s) ago + + + + + %n day(s) ago + + + + + Up to date + + + + + Catching up... + + + + + Last received %1 was generated %2. + + + + + To process this transaction, a fee of %1 will be charged to support the network. Do you want to submit the transaction? + + + + + Confirm transaction fee + + + + + %1 %2 + + + + + Address: %1 +Note: %2 + + + + + + Address: %1 + + + + + + + URI handling + + + + + + URI can not be parsed! This can be caused by an invalid Alias address or malformed URI parameters. + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + + Backup Wallet + + + + + Wallet Data (*.dat) + + + + + Backup Failed + + + + + There was an error trying to save the wallet data to the new location. + + + + + Lock Wallet + + + + + Error: Wallet must first be encrypted to be locked. + + + + + %1 second(s) + + + + + %1 minute(s), %2 second(s) + + + + + %1 hour(s), %2 minute(s) + + + + + %1 day(s), %2 hour(s) + + + + + (last 72 blocks %1) + + + + + Staking.<br/>Your weight is %1<br/>Network weight is %2%3<br/>Average time between rewards is %4 + + + + + Not staking because wallet is in thin mode + + + + + Not staking, staking is disabled + + + + + Not staking because wallet is locked + + + + + Not staking because wallet is offline + + + + + Not staking because wallet is syncing + + + + + Initializing staking... + + + + + Not staking because you don't have mature coins + + + + + Not staking + + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open for %n block(s) + + + + + Open until %1 + 要到 %1 才確定 + + + + conflicted + + + + + %1/offline + %1/離線中 + + + + %1/unconfirmed + %1/未確定 + + + + %1 confirmations + %1 次確認 + + + + Transaction ID + 交易識別碼 + + + + Block Hash + + + + + Status + 狀態 + + + + , has not been successfully broadcast yet + ,還沒成功公告出去 + + + + , broadcast through %n node(s) + + + + + Date + 日期 + + + + Source + 來源 + + + + Generated + 生產出來 + + + + + Credit + 入帳 + + + + matures in %n more block(s) + + + + + not accepted + 不被接受 + + + + Transaction fee + 交易手續費 + + + + Net amount + 淨額 + + + + Message + 訊息 + + + + Comment + 附註 + + + + Comment-To + + + + + Generated coins must mature 450 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + + Debug information + 除錯資訊 + + + + Debit + 出帳 + + + + Transaction + 交易 + + + + Inputs + 輸入 + + + + Amount + 金額 + + + + true + + + + + false + + + + + + Converted + + + + + from public to private + + + + + from private to public + + + + + Address + + + + + + Note + + + + + unknown + 未知 + + + + <dd> + + + + + TransactionDescDialog + + + Transaction details + 交易明細 + + + + This pane shows a detailed description of the transaction + 這個版面顯示這次交易的詳細說明 + + + + TransactionTableModel + + + Date + 日期 + + + + Type + 種類 + + + + Address + 位址 + + + + Note + + + + + Amount + 金額 + + + + Open for %n more block(s) + + + + + Open until %1 + 要到 %1 才確定 + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 required confirmations) + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Confirmed (%1 confirmations) + 已確定(%1 次確認) + + + + Conflicted + + + + + Immature (%1 confirmations, will be available after %2) + 未成熟(%1 次確認,會在 %2 次確認後可用) + + + + Orphan %1 stake, block was not received by any other nodes and will probably not be accepted! + + + + + Orphan %1 stake, someone else submitted the block before you. + + + + + (n/a) + (不適用) + + + + Transaction status. Hover over this field to show number of confirmations. + 交易狀態。把游標停在欄位上會顯示確認次數。 + + + + Date and time that the transaction was received. + 收到交易的日期和時間。 + + + + Type of transaction. + 交易的種類。 + + + + Destination address of transaction. + 交易的目的地位址。 + + + + Amount removed from or added to balance. + 要減掉或加進餘額的金額。 + + + + WalletModel + + + + Sending... + + + + + alias-bridge + + + Overview + + + + + Wallet + + + + + Send + + + + + Receive + + + + + Transactions + + + + + Address Book + + + + + Options + + + + + Advanced + + + + + Backup Wallet + + + + + Encrypt Wallet + + + + + Change Passphrase + + + + + (Un)lock Wallet + + + + + Tools + + + + + Chain Data + + + + + Block Explorer + + + + + Sign Message + + + + + Verify Message + + + + + Debug + + + + + About Alias + + + + + About QT + + + + + QR code + + + + + Address: + + + + + Label: + + + + + Amount: + + + + + Add new receive address + + + + + Add Address + + + + + Add a new contact + + + + + Address Lookup + + + + + Address Type + + + + + Stealth + + + + + Group + + + + + BIP32 + + + + + Label + + + + + Address + + + + + Public Key + + + + + Transaction Hash + + + + + Recent Transactions + + + + + Coin Control + + + + + Make payment + + + + + Balance transfer + + + + + Select Inputs + + + + + Automatically selected + + + + + Quantity: + + + + + Fee: + + + + + After Fee: + + + + + Bytes: + + + + + Priority: + + + + + LowOutput: + + + + + Change: + + + + + Custom change address + + + + + From account + + + + + PUBLIC + + + + + PRIVATE + + + + + Balance: + + + + + Ring Size: + + + + + To account + + + + + Pay to + + + + + (no label) + + + + + Master + + + + + Wallet is encrypted and currently locked + + + + + Not staking because wallet is locked + + + + + 0 active connection(s) to Alias network + + + + + Enter a label for this address to add it to your address book + + + + + Enter a address to add it to your address book + + + + + Inputs + + + + + Values + + + + + Outputs + + + + + Enter a Alias address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to sign + + + + + Click sign message to generate signature + + + + + Copy the signed message signature + + + + + Enter a Alias address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) + + + + + Enter the message you want to verify + + + + + Enter a Alias signature + + + + + Paste signature from clipboard + + + + + Your total balance + + + + + Recent in/out transactions or stakes + + + + + Select inputs to spend + + + + + Optional address to receive transaction change + + + + + Choose from address book + + + + + Paste address from clipboard + + + + + Remove this recipient + + + + + Send from public or private + + + + + Current spendable send payment balance + + + + + Send to public or private + + + + + Current spendable balance to account + + + + + The label for this address + + + + + Amount to transfer + + + + + Send to multiple recipients at once + + + + + Date and time that the transaction was received. + + + + + Transaction status. Hover over this field to show number of confirmations. + + + + + Type of transaction. + + + + + Destination address of transaction. + + + + + Short payment note. + + + + + Amount removed from or added to balance. + + + + + Name for this Wallet + + + + + Enter a password + + + + + Would you like to create a bip44 path? + + + + + Your recovery phrase (Keep this safe!) + + + + + Recovery Phrase + + + + + Wallet Name for recovered account + + + + + Enter the password for the wallet you are trying to recover + + + + + Is this a bip44 path? + + + + + ID + + + + + Created + + + + + Active Account + + + + + Default + + + + + Path + + + + + Active + + + + + Amount + + + + + Note + + + + + Public coins, visible on blockchain + + + + + Private coins, untraceable and unlinkable on blockchain + + + + + Available coins for spending + + + + + Reserved coins are not used for staking + + + + + Staked coins must mature before they can be accessed + + + + + Stake + + + + + Sub-Wallets + + + + + Start Alias on system login + + + + + Detach databases at shutdown + + + + + Pay transaction fee + + + + + Transaction fee per kB. A higher fee makes sure your transactions are processed quickly in times of high transaction volume. + + + + + Most transactions are 1kB. The minimal fee is 0.0001 + + + + + Enable Staking + + + + + Enables or disables the staking process. If your wallet is encrypted, you will need to unlock it for staking. + + + + + Staking Donation + + + + + Every sixth block on the blockchain is a development contribution block (DCB). Staking rewards of DCBs are contributed to the development fund no matter the donation percentage setting. Please feel free to additionally donate from your remaining stake rewards by defining a donation chance. Thank you. + + + + + Reserve + + + + + Reserved amount does not participate in staking and is therefore spendable at any time. + + + + + Minimum Stake Interval + + + + + Main + + + + + Window + + + + + Display + + + + + Minimize to the tray instead of the taskbar + + + + + Minimize on close + + + + + User Interface language + + + + + Unit to show amounts in + + + + + Rows per page + + + + + Display addresses in transaction list + + + + + Notifications + + + + + Visible Transaction Types + + + + + Cancel + + + + + Apply + + + + + Ok + + + + + Reserved + + + + + Unconfirmed + + + + + Immature + + + + + Type + + + + + Date + + + + + Send Payment + + + + + The address to send the payment to + + + + + Enter a label for this address + + + + + Add Sub-Wallet + + + + + Immature generated coins with Proof-of-Work + + + + + Blockchain Info + + + + + Checking wallet state with network + + + + + Public ALIAS requires 1 confirmation<br>Private ALIAS requires 10 confirmations + + + + + Total Balance + + + + + Balance + + + + + Available + + + + + Public + + + + + Private + + + + + Tor+OBFS4 connection online + + + + + Wallet Encryption + + + + + A short reference for the recipient (max 24 characters) + + + + + ALIAS Denomination Value + + + + + No. Owned (* = Immature) + + + + + No. System Unspent (* = Immature) + + + + + No. available Mixins (* = Immature) + + + + + No. System (** = Compromised) + + + + + The last block a coin of this denomination was created + + + + + Owned (*) + + + + + Unspent (*) + + + + + Mixins (*) + + + + + System (**) + + + + + Least Depth + + + + + Value Out + + + + + Value + + + + + Addressbook + + + + + Refresh + + + + + Hash + + + + + Height + + + + + Timestamp + + + + + Enter a Alias address (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) + + + + + An address label for the payment senders address book + + + + + Enter a short note to send with a payment (max 24 characters) + + + + + Filter by label or address... + + + + + Note to send with payment (max 24 characters) + + + + + The private address to transfer the balance to + + + + + Search by label or address + + + + + Search + + + + + Family vacation funds + + + + + Grouping will consolidate transactions of chosen + + + + + Reset form + + + + + Restore Sub-Wallet + + + + + Filter outputs + + + + + Find Block by hash/height/transaction + + + + + alias-core + + + To use the %s option + + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=aliasrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Alias Alert" admin@foo.com + + + + + + Error + + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + + Alias version + + + + + Usage: + + + + + Send command to -server or aliaswalletd + + + + + List commands + + + + + Get help for a command + + + + + Alias + + + + + Options: + + + + + This help message + + + + + Specify configuration file (default: alias.conf) + + + + + Specify pid file (default: alias.pid) + + + + + Specify data directory + + + + + Specify wallet file (within data directory) + + + + + Set database cache size in megabytes (default: 25) + + + + + Set database disk log size in megabytes (default: 100) + + + + + Specify connection timeout in milliseconds (default: 5000) + + + + + Connect through socks proxy + + + + + Select the version of socks proxy to use (4-5, default: 5) + + + + + Use proxy to reach tor hidden services (default: same as -proxy) + + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + + Listen for connections on <port> (default: 37347 or testnet: 37111) + + + + + Maintain at most <n> connections to peers (default: 125) + + + + + Add a node to connect to and attempt to keep the connection open + + + + + Connect only to the specified node(s) + + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + + Specify your own public address + + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + + Find peers using internet relay chat (default: 0) + + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + + Bind to given address. Use [host]:port notation for IPv6 + + + + + Find peers using DNS lookup (default: 1) + + + + + Stake your coins to support network and gain reward (default: 1) + + + + + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) + + + + + Sync checkpoints policy (default: strict) + + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + + Use UPnP to map the listening port (default: 0) + + + + + Detach block and address databases. Increases shutdown time (default: 0) + + + + + Fee per KB to add to transactions you send + + + + + When creating transactions, ignore inputs with value less than this (default: 0.01) + + + + + Accept command line and JSON-RPC commands + + + + + Run in the background as a daemon and accept commands + + + + + Use the test network + + + + + Output extra debugging information. Implies all other -debug* options + + + + + Output extra network debugging information + + + + + Prepend debug output with timestamp + + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + + Send trace/debug info to console instead of debug.log file + + + + + Send trace/debug info to debugger + + + + + Username for JSON-RPC connections + + + + + Password for JSON-RPC connections + + + + + Listen for JSON-RPC connections on <port> (default: 36657 or testnet: 36757) + + + + + Allow JSON-RPC connections from specified IP address + + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + + Require a confirmations for change (default: 0) + + + + + Enforce transaction scripts to use canonical PUSH operators (default: 1) + + + + + Execute command when a relevant alert is received (%s in cmd is replaced by message) + + + + + Upgrade wallet to latest format + + + + + Set key pool size to <n> (default: 100) + + + + + Rescan the block chain for missing wallet transactions + + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + + How many blocks to check at startup (default: 2500, 0 = all) + + + + + How thorough the block verification is (0-6, default: 1) + + + + + Imports blocks from external blk000?.dat file + + + + + Block creation options: + + + + + Set minimum block size in bytes (default: 0) + + + + + Set maximum block size in bytes (default: 250000) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + + + + SSL options: (see the Bitcoin Wiki for SSL setup instructions) + + + + + Use OpenSSL (https) for JSON-RPC connections + + + + + Server certificate file (default: server.cert) + + + + + Server private key (default: server.pem) + + + + + Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + + Invalid amount for -mininput=<amount>: '%s' + + + + + Wallet %s resides outside data directory %s. + + + + + + Cannot obtain a lock on data directory %s. Alias is probably already running. + + + + + Verifying database integrity... + + + + + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. + + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + + wallet.dat corrupt, salvage failed + + + + + Unknown -socks proxy version requested: %i + + + + + Unknown network specified in -onlynet: '%s' + + + + + Invalid -proxy address: '%s' + + + + + Invalid -tor address: '%s' + + + + + Cannot resolve -bind address: '%s' + + + + + Failed to listen on any port. + + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + + Cannot resolve -externalip address: '%s' + + + + + Invalid amount for -reservebalance=<amount> + + + + + Unable to sign checkpoint, wrong checkpointkey? + + + + + + Loading block index... + + + + + Error loading blk0001.dat + + + + + Loading wallet... + + + + + Error loading wallet.dat: Wallet corrupted + + + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + + Error loading wallet.dat: Wallet requires newer version of Alias + + + + + Wallet needed to be rewritten: restart Alias to complete + + + + + Error loading wallet.dat + + + + + Cannot downgrade wallet + + + + + Cannot initialize keypool + + + + + Cannot write default address + + + + + Rescanning... + + + + + Importing blockchain data file. + + + + + Importing bootstrap blockchain data file. + + + + + Loading addresses... + + + + + Error: could not start node + + + + + Done loading + + + + + Unable to bind to %s on this computer. Alias is probably already running. + + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + + Error: Wallet locked, unable to create transaction + + + + + Error: Wallet unlocked for staking only, unable to create transaction. + + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds + + + + + Error: Transaction creation failed + + + + + Sending... + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Invalid amount + + + + + Insufficient funds + + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Alias will not work properly. + + + + + Warning: This version is obsolete, upgrade required! + + + + + WARNING: syncronized checkpoint violation detected, but skipped! + + + + + Warning: Disk space is low! + + + + + WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. + + + + + Read ATXOs... (%d) + + + + + Read spent ATXOs... (%d) + + + + + Note must be 24 characters or less. + + + + + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported. + + + + + Initialization sanity check failed. Alias is shutting down. + + + + + Loading block index... (%d) + + + + + Calculating chain trust... (%d) + + + + + Validating last %d block... + + + + + -bip44key is not allowed if wallet.dat already exists + + + + + Cannot resolve binding address: '%s' + + + + + Error: could not start tor node + + + + + Timed out waiting for onion hostname. + + + + + Error loading blk0001.dat: Invalid chain detected, please resync or use bootstrap files. + + + + + Loading wallet items... (%d) + + + + + Reindexing from blk000?.dat files. + + + + + Reindexing block... (%d) + + + + + Core started! + + + + + Use tor hidden services version 2 instead of version 3 + + + + + Find peers using .onion seeds (default: 1 unless -connect) + + + + + Minimum time in seconds between successful stakes (default: 30) + + + + + Percentage of staking rewards to donate to the developers (between 0 and 100 inclusive, default 5) + + + + + Milliseconds between stake attempts. Lowering this param will not result in more stakes. (default: 500) + + + + + Number of seconds to keep soft banned peers from reconnecting (default: 3600) + + + + + Simple command line interface - if not run as daemon + + + + + Output extra blockchain debugging information + + + + + Output extra Proof of Stake debugging information + + + + + Send trace/debug info to debug.log file + + + + + Wait for RPC server to start + + + + + Keep at most <n> MiB of unconnectable blocks in memory (default: %u) + + + + + Rebuild block chain index from current blk000?.dat files on startup + + + + + Show version and exit + + + + + Thin options: + + + + + Operate in less secure, less resource hungry 'thin' mode + + + + + Keep the entire block index in memory. (default: 0) + + + + + When not thinfullindex, the max number of block headers to keep in memory. (default: 4096) + + + + + Disable supporting thin nodes. (default: 0) + + + + + Disable forwarding, or requesting all stealth txns. (default: 0) + + + + + Don't connect to more than <n> thin peers (default: 8) + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + + conn + + + + + Error: Wallet locked, unable to create transaction. + + + + + Error: Must be in full mode. + + + + + Error: Block chain must be fully synced first. + + + + + Error: Alias is not connected! + + + + + Update balance... + + + + + ...Start UI... + + + + + Shutdown... + + + + \ No newline at end of file diff --git a/src/qt/locale/umbra_af_ZA.ts b/src/qt/locale/umbra_af_ZA.ts deleted file mode 100644 index 5c8d03a1fd..0000000000 --- a/src/qt/locale/umbra_af_ZA.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiket - - - - Address - Adres - - - - pubkey - - - - - stealth - - - - - (no label) - (geen etiket) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Tik Wagwoord in - - - - New passphrase - Nuwe wagwoord - - - - Repeat new passphrase - Herhaal nuwe wagwoord - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Tik die nuwe wagwoord vir die beursie in.<br/>Gebruik asseblief 'n wagwoord van <b>ten minste 10 ewekansige karakters</b>, of <b>agt (8) of meer woorde.</b> - - - - Encrypt wallet - Enkripteer beursie - - - - This operation needs your wallet passphrase to unlock the wallet. - Hierdie operasie benodig 'n wagwoord om die beursie oop te sluit. - - - - Unlock wallet - Sluit beursie oop - - - - This operation needs your wallet passphrase to decrypt the wallet. - Hierdie operasie benodig 'n wagwoord om die beursie oop te sluit. - - - - Decrypt wallet - Sluit beursie oop - - - - Change passphrase - Verander wagwoord - - - - Enter the old and new passphrase to the wallet. - Tik asseblief die ou en nuwe wagwoord vir die beursie in. - - - - Confirm wallet encryption - Bevestig beursie enkripsie. - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Die beursie is nou bewaak - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Die beursie kon nie bewaak word nie - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Beursie bewaaking het misluk as gevolg van 'n interne fout. Die beursie is nie bewaak nie! - - - - - The supplied passphrases do not match. - Die wagwoord stem nie ooreen nie - - - - Wallet unlock failed - Beursie oopsluiting het misluk - - - - - - The passphrase entered for the wallet decryption was incorrect. - Die wagwoord wat ingetik was om die beursie oop te sluit, was verkeerd. - - - - Wallet decryption failed - Beursie dekripsie het misluk - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Bedrag: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Bedrag - - - - Label - - - - - Address - Adres - - - - Date - Datum - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - Maak kopie van adres - - - - Copy label - - - - - - Copy amount - Kopieer bedrag - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (geen etiket) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nuwe ontvangende adres - - - - New sending address - Nuwe stuurende adres - - - - Edit receiving address - Wysig ontvangende adres - - - - Edit sending address - Wysig stuurende adres - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Kon nie die beursie oopsluit nie. - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - Datum - - - - Source - - - - - Generated - - - - - - - From - Van - - - - - - - To - Na - - - - - - - own address - eie adres - - - - - label - etiket - - - - - - - - Credit - Krediet - - - - matures in %n more block(s) - - - - - not accepted - nie aanvaar nie - - - - - - - Debit - Debiet - - - - Transaction fee - Transaksie fooi - - - - Net amount - Netto bedrag - - - - Message - Boodskap - - - - Comment - - - - - Transaction ID - Transaksie ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - Bedrag - - - - true - waar - - - - false - onwaar - - - - , has not been successfully broadcast yet - - - - - - unknown - onbekend - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - Datum - - - - Type - Tipe - - - - Address - Adres - - - - Amount - Bedrag - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - (n.v.t) - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - Datum en tyd wat die transaksie ontvang was. - - - - Type of transaction. - Tipe transaksie. - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Gebruik: - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - Opsies: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Onderhou op die meeste <n> konneksies na eweknieë (standaard: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - Gebruik die toets netwerk - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Hierdie help boodskap - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - Laai adresse... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Ongeldige bedrag - - - - Insufficient funds - Onvoldoende fondse - - - - Loading block index... - Laai blok indeks... - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Laai beursie... - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - Klaar gelaai - - - - To use the %s option - - - - - Error - Fout - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_ar.ts b/src/qt/locale/umbra_ar.ts deleted file mode 100644 index b610a58e88..0000000000 --- a/src/qt/locale/umbra_ar.ts +++ /dev/null @@ -1,3392 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - عن البلاك كوين - - - - <b>ShadowCoin</b> version - جزء البلاك كوين - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - وصف - - - - Address - عنوان - - - - pubkey - - - - - stealth - - - - - (no label) - (لا وصف) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - حوار كلمة المرور - - - - Enter passphrase - ادخل كلمة المرور - - - - New passphrase - عبارة مرور جديدة - - - - Repeat new passphrase - ادخل الجملة السرية مرة أخرى - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - أدخل عبارة مرور جديدة إلى المحفظة. الرجاء استخدام عبارة مرور تتكون من10 حروف عشوائية على الاقل, أو أكثر من 7 كلمات - - - - Encrypt wallet - تشفير المحفظة - - - - This operation needs your wallet passphrase to unlock the wallet. - هذه العملية تحتاج عبارة المرور محفظتك لفتحها - - - - Unlock wallet - إفتح المحفظة - - - - This operation needs your wallet passphrase to decrypt the wallet. - هذه العملية تحتاج عبارة المرور محفظتك فك تشفيرها - - - - Decrypt wallet - فك تشفير المحفظة - - - - Change passphrase - تغيير عبارة المرور - - - - Enter the old and new passphrase to the wallet. - أدخل عبارة المرور القديمة والجديدة إلى المحفظة. - - - - Confirm wallet encryption - تأكيد التشفير المحفظة - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - تخذير : اذا تم تشفير المحفظة وضيعت كلمة المرور, لن تستطيع الحصول علي البلاك كوين - - - - Are you sure you wish to encrypt your wallet? - هل انت متأكد من رغبتك في تشفير المحفظة؟ - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - محفظة مشفرة - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - بلاك كوين - - - - - - - Wallet encryption failed - فشل تشفير المحفظة - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - شل تشفير المحفظة بسبب خطأ داخلي. لم يتم تشفير محفظتك. - - - - - The supplied passphrases do not match. - عبارتي المرور ليستا متطابقتان - - - - - Wallet unlock failed - فشل فتح المحفظة - - - - - - The passphrase entered for the wallet decryption was incorrect. - عبارة المرور التي تم إدخالها لفك شفرة المحفظة غير صحيحة. - - - - - Wallet decryption failed - فشل فك التشفير المحفظة - - - - Wallet passphrase was successfully changed. - كلمة مرور المحفظة تم تغييره بشكل ناجح - - - - ClientModel - - - Network Alert - تحذير الشبكة - - - - CoinControlDialog - - - Coin Control - سيطرة الكوين - - - - Quantity: - الكمية: - - - - Bytes: - - - - - Amount: - المبلغ: - - - - Priority: - اهمية: - - - - Fee: - رسوم: - - - - Low Output: - - - - - - no - لا - - - - After Fee: - بعد الرسوم: - - - - Change: - تغيير: - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - المبلغ - - - - Label - - - - - Address - عنوان - - - - Date - التاريخ - - - - Confirmations - - - - - Confirmed - تأكيد - - - - Priority - - - - - Copy address - انسخ عنوان - - - - Copy label - انسخ التسمية - - - - - Copy amount - نسخ الكمية - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - نعم - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (لا وصف) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - عدل العنوان - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - العنوان - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - عنوان تلقي جديد - - - - New sending address - عنوان إرسال جديد - - - - Edit receiving address - تعديل عنوان التلقي - - - - - Edit sending address - تعديل عنوان الارسال - - - - The entered address "%1" is already in the address book. - هدا العنوان "%1" موجود مسبقا في دفتر العناوين - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - يمكن فتح المحفظة. - - - - New key generation failed. - فشل توليد مفتاح جديد. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - اسم العميل - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - غير معروف - - - - Client version - نسخه العميل - - - - &Information - المعلومات - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - الشبكه - - - - Name - - - - - Number of connections - عدد الاتصالات - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - الفتح - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - وقت البناء - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - مفتوح حتى 1٪ - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - 1% غير متواجد - - - - %1/unconfirmed - غير مؤكدة/1% - - - - %1 confirmations - تأكيد %1 - - - - Status - الحالة. - - - - , broadcast through %n node(s) - - - - - Date - التاريخ - - - - Source - المصدر - - - - Generated - تم اصداره. - - - - - - From - من - - - - - - - To - الى - - - - - - - own address - عنوانه - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - غير مقبولة - - - - - - - Debit - دين - - - - Transaction fee - رسوم التحويل - - - - Net amount - - - - - Message - - - - - Comment - تعليق - - - - Transaction ID - رقم المعاملة - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - معاملة - - - - Inputs - - - - - Amount - المبلغ - - - - true - صحيح - - - - false - خاطئ - - - - , has not been successfully broadcast yet - لم يتم حتى الآن البث بنجاح - - - - - unknown - غير معروف - - - - TransactionDescDialog - - - Transaction details - تفاصيل المعاملة - - - - This pane shows a detailed description of the transaction - يبين هذا الجزء وصفا مفصلا لهده المعاملة - - - - TransactionTableModel - - - Date - التاريخ - - - - Type - النوع - - - - Address - عنوان - - - - Amount - المبلغ - - - - Open until %1 - مفتوح حتى 1٪ - - - - Confirmed (%1 confirmations) - تأكيد الإرسال Coins - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - غير متصل - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - لم يتم تلقى هذه الكتلة (Block) من قبل أي العقد الأخرى وربما لن تكون مقبولة! - - - - Generated but not accepted - ولدت ولكن لم تقبل - - - - (n/a) - غير متوفر - - - - Transaction status. Hover over this field to show number of confirmations. - حالة المعاملة. تحوم حول هذا الحقل لعرض عدد التأكيدات. - - - - Date and time that the transaction was received. - التاريخ والوقت الذي تم فيه تلقي المعاملة. - - - - Type of transaction. - نوع المعاملات - - - - Destination address of transaction. - عنوان وجهة المعاملة - - - - Amount removed from or added to balance. - المبلغ الذي أزيل أو أضيف الى الرصيد - - - - WalletModel - - - - Sending... - ارسال.... - - - - bitcoin-core - - - ShadowCoin version - جزع البلاك كوين - - - - Usage: - المستخدم - - - - Send command to -server or shadowcoind - - - - - List commands - اعرض الأوامر - - - - Get help for a command - مساعدة في كتابة الاوامر - - - - Options: - خيارات: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - حدد موقع مجلد المعلومات او data directory - - - - Set database cache size in megabytes (default: 25) - ضع حجم كاش قاعدة البيانات بالميجابايت (الافتراضي: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - حدد عنوانك العام هنا - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - تحذير صناعة المعاملة فشلت - - - - Error: Wallet locked, unable to create transaction - خطا : المحفظة مقفلة, لا يمكن عمل المعاملة - - - - Importing blockchain data file. - استيراد بيانات ملف سلسلة الكتل - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - استخدم التحقق من الشبكه - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - قبول الاتصالات من خارج - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - تحذير : تأكد من ساعة وتاريخ الكمبيوتر! اذا ساعة غير صحيحة بلاك كوين لن يعمل بشكل صحيح - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - تحذير : خطا في قراءة wallet.dat! كل المفاتيح تم قرائتة بشكل صحيح لكن بيانات الصفقة او إدخالات كتاب العنوان غير صحيحة او غير موجودة - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - تخذير :wallet.dat غير صالح تم حفظ البيانات. المحفظة الاصلية تم حفظه ك wallet.{timestamp}.bak %s في ; اذا حسابك او صفقاتك غير صحيح يجب عليك استعادة النسخ الاحتياطي - - - - Attempt to recover private keys from a corrupt wallet.dat - محاولة استرجاع المفاتيح الخاصة من wallet.dat الغير صالح - - - - Block creation options: - خيارات صناعة الكتل - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - فشل في الاستماع على أي منفذ. استخدام الاستماع = 0 إذا كنت تريد هذا. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - تحذير : مساحة القرص منخفض - - - - Warning: This version is obsolete, upgrade required! - تحذير هذا الجزء قديم, التجديد مطلوب - - - - wallet.dat corrupt, salvage failed - wallet.dat غير صالح لا يمكن الاسترجاع - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - عند - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - ارقاء المحفظة الي اخر نسخة - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - اعادة بحث سلسلة الكتلة لايجاد معالمات المحفظة - - - - How many blocks to check at startup (default: 2500, 0 = all) - كمية الكتل التي تريد ان تبحث عنه عند بداية البرنامج (التلقائي 2500, 0 = الكل) - - - - How thorough the block verification is (0-6, default: 1) - كمية تأكيد الكتل (0-6 التلقائي 1) - - - - Imports blocks from external blk000?.dat file - نقل كتل من ملف blk000.dat خارجي - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - رسالة المساعدة هذه - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - البلاك كوين - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - تحميل العنوان - - - - Error loading blkindex.dat - خظا في تحميل blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - خطأ عند تنزيل wallet.dat: المحفظة تالفة - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - المحفظة يجب أن يعاد كتابته : أعد البلاك كوين لتكتمل - - - - Error loading wallet.dat - خطأ عند تنزيل wallet.dat - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - ارسال.... - - - - Invalid amount - مبلغ خاطئ - - - - Insufficient funds - حسابك لا يكفي - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - تحميل المحفظه - - - - Cannot downgrade wallet - لا يمكن خفض المحفظة - - - - Cannot initialize keypool - - - - - Cannot write default address - لا يمكن كتابة العنوان الافتراضي - - - - Rescanning... - إعادة مسح - - - - Done loading - انتهاء التحميل - - - - To use the %s option - - - - - Error - خطأ - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_be_BY.ts b/src/qt/locale/umbra_be_BY.ts deleted file mode 100644 index dfea1c5851..0000000000 --- a/src/qt/locale/umbra_be_BY.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Пазнака - - - - Address - Адрас - - - - pubkey - - - - - stealth - - - - - (no label) - непазначаны - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Увядзіце кодавую фразу - - - - New passphrase - Новая кодавая фраза - - - - Repeat new passphrase - Паўтарыце новую кодавую фразу - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Увядзіце новую кодавую фразу для гаманца. <br/>Калі ласка, ўжывайце пароль <b>не меньша за 10 адвольных сімвалаў</b>, ці <b>болей васьмі слоў</b>. - - - - Encrypt wallet - Зашыфраваць гаманец. - - - - This operation needs your wallet passphrase to unlock the wallet. - Гэтая аперацыя патрабуе кодавую фразу, каб рзблакаваць гаманец. - - - - Unlock wallet - Разблакаваць гаманец - - - - This operation needs your wallet passphrase to decrypt the wallet. - Гэтая аперацыя патрабуе пароль каб расшыфраваць гаманец. - - - - Decrypt wallet - Рачшыфраваць гаманец - - - - Change passphrase - Змяніць пароль - - - - Enter the old and new passphrase to the wallet. - Увядзіце стары і новы пароль да гаманца. - - - - Confirm wallet encryption - Пацвердзіце шыфраванне гаманца - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Гаманец зашыфраваны - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Шыфраванне гаманца няўдалае - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Шыфраванне гаманца не адбылося з-за ўнутранай памылкі. Гаманец незашыфраваны. - - - - - The supplied passphrases do not match. - Уведдзеныя паролі не супадаюць - - - - Wallet unlock failed - Разблакаванне гаманца няўдалае - - - - - - The passphrase entered for the wallet decryption was incorrect. - Уведзена пароль дзеля расшыфравання гаманца памылковы - - - - Wallet decryption failed - Расшыфраванне гаманца няўдалае - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Колькасць - - - - Label - - - - - Address - Адрас - - - - Date - Дата - - - - Confirmations - - - - - Confirmed - Пацверджана - - - - Priority - - - - - Copy address - Капіяваць адрас - - - - Copy label - Капіяваць пазнаку - - - - - Copy amount - Капіяваць колькасць - - - - Copy transaction ID - Капіяваць ID транзакцыі - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - непазначаны - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Рэдагаваць Адрас - - - - &Label - Пазнака - - - - The label associated with this address book entry - - - - - &Address - Адрас - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Новы адрас для атрымання - - - - New sending address - Новы адрас для дасылання - - - - Edit receiving address - Рэдагаваць адрас прымання - - - - Edit sending address - Рэдагаваць адрас дасылання - - - - The entered address "%1" is already in the address book. - Уведзены адрас "%1" ужо ў кніге адрасоў - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Немагчыма разблакаваць гаманец - - - - New key generation failed. - Генерацыя новага ключа няўдалая - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - %1/непацверджана - - - - %1 confirmations - %1 пацверджанняў - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - Дата - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - Колькасць - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - , пакуль не было паспяхова транслявана - - - - - unknown - невядома - - - - TransactionDescDialog - - - Transaction details - Дэталі транзакцыі - - - - This pane shows a detailed description of the transaction - Гэтая панэль паказвае дэтальнае апісанне транзакцыі - - - - TransactionTableModel - - - Date - Дата - - - - Type - Тып - - - - Address - Адрас - - - - Amount - Колькасць - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - Пацверджана (%1 пацверджанняў) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Гэты блок не быў прыняты іншымі вузламі і магчыма не будзе ўхвалены! - - - - Generated but not accepted - Згенеравана, але не прынята - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Статус транзакцыі. Навядзіце курсар на гэтае поле, каб паказаць колькасць пацверджанняў. - - - - Date and time that the transaction was received. - Дата і час, калі транзакцыя была прынята. - - - - Type of transaction. - Тып транзакцыі - - - - Destination address of transaction. - Адрас прызначэння транзакцыі. - - - - Amount removed from or added to balance. - Колькасць аднятая ці даданая да балансу. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Ужыванне: - - - - Send command to -server or shadowcoind - - - - - List commands - Спіс каманд - - - - Get help for a command - Атрымаць дапамогу для каманды - - - - Options: - Опцыі: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Вызначыць каталог даных - - - - Set database cache size in megabytes (default: 25) - Пазначыць памер кэшу базы звестак у мегабайтах (тыпова: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Трымаць не больш за <n> злучэнняў на асобу (зыходна: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Парог для адлучэння злаўмысных карыстальнікаў (тыпова: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Колькасць секунд для ўстрымання асобаў да перадалучэння (заходна: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Прымаць камандны радок і JSON-RPC каманды - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Запусціць у фоне як дэман і прымаць каманды - - - - Use the test network - Ужываць тэставае сеціва - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Слаць trace/debug звесткі ў кансоль замест файла debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Імя карыстальника для JSON-RPC злучэнняў - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - Пароль для JSON-RPC злучэнняў - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Дазволіць JSON-RPC злучэнні з пэўнага IP адрасу - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Адпраўляць каманды вузлу на <ip> (зыходна: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Выканаць каманду калі лепшы блок зменіцца (%s замяняецца на хэш блока) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Абнавіць гаманец на новы фармат - - - - Set key pool size to <n> (default: 100) - Устанавіць памер фонда ключоў у <n> (тыпова: 100) - - - - Rescan the block chain for missing wallet transactions - Перасканаваць ланцуг блокаў дзеля пошуку адсутных транзакцый - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Ужываць OpenSSL (https) для JSON-RPC злучэнняў - - - - Server certificate file (default: server.cert) - Файл-сертыфікат сервера (зыходна: server.cert) - - - - Server private key (default: server.pem) - Прыватны ключ сервера (зыходна: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - Загружаем адрасы... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Памылка загрузкі wallet.dat: гаманец пашкоджаны - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Памылка загрузкі wallet.dat - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Памылковая колькасць - - - - Insufficient funds - Недастаткова сродкаў - - - - Loading block index... - Загружаем індэкс блокаў... - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Загружаем гаманец... - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - Перасканаванне... - - - - Done loading - Загрузка выканана - - - - To use the %s option - - - - - Error - Памылка - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_bg.ts b/src/qt/locale/umbra_bg.ts deleted file mode 100644 index f8b5a0b560..0000000000 --- a/src/qt/locale/umbra_bg.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Име - - - - Address - Адрес - - - - pubkey - - - - - stealth - - - - - (no label) - (без име) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Въведи парола - - - - New passphrase - Нова парола - - - - Repeat new passphrase - Още веднъж - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Въведете нова парола за портфейла.<br/>Моля използвайте <b>поне 10 случайни символа</b> или <b>8 или повече думи</b>. - - - - Encrypt wallet - Криптиране на портфейла - - - - This operation needs your wallet passphrase to unlock the wallet. - Тази операция изисква Вашата парола за отключване на портфейла. - - - - Unlock wallet - Отключване на портфейла - - - - This operation needs your wallet passphrase to decrypt the wallet. - Тази операция изисква Вашата парола за декриптиране на портфейла. - - - - Decrypt wallet - Декриптиране на портфейла - - - - Change passphrase - Смяна на паролата - - - - Enter the old and new passphrase to the wallet. - Въведете текущата и новата парола за портфейла. - - - - Confirm wallet encryption - Потвърждаване на криптирането - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Портфейлът е криптиран - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Криптирането беше неуспешно - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Криптирането на портфейла беше неуспешно поради неизвестен проблем. Портфейлът не е криптиран. - - - - - The supplied passphrases do not match. - Паролите не съвпадат - - - - Wallet unlock failed - Отключването беше неуспешно - - - - - - The passphrase entered for the wallet decryption was incorrect. - Паролата въведена за декриптиране на портфейла е грешна. - - - - Wallet decryption failed - Декриптирането беше неуспешно - - - - Wallet passphrase was successfully changed. - Паролата на портфейла беше променена успешно. - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Сума: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Сума - - - - Label - - - - - Address - Адрес - - - - Date - Дата - - - - Confirmations - - - - - Confirmed - Потвърдени - - - - Priority - - - - - Copy address - Копирай адрес - - - - Copy label - Копирай име - - - - - Copy amount - Копирай сума - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (без име) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Редактиране на адрес - - - - &Label - &Име - - - - The label associated with this address book entry - - - - - &Address - &Адрес - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Нов адрес за получаване - - - - New sending address - Нов адрес за изпращане - - - - Edit receiving address - Редактиране на входящ адрес - - - - Edit sending address - Редактиране на изходящ адрес - - - - The entered address "%1" is already in the address book. - Вече има адрес "%1" в списъка с адреси. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Отключването на портфейла беше неуспешно. - - - - New key generation failed. - Създаването на ключ беше неуспешно. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - Мрежа - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - Изчисти конзолата - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Използвайте стрелки надолу и нагореза разглеждане на историятаот команди и <b>Ctrl-L</b> за изчистване на конзолата. - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Подлежи на промяна до %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/офлайн - - - - %1/unconfirmed - %1/непотвърдени - - - - %1 confirmations - включена в %1 блока - - - - Status - Статус - - - - , broadcast through %n node(s) - - - - - Date - Дата - - - - Source - Източник - - - - Generated - Издадени - - - - - - From - От - - - - - - - To - За - - - - - - - own address - собствен адрес - - - - - label - име - - - - - - - - Credit - Кредит - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - Дебит - - - - Transaction fee - Такса - - - - Net amount - Сума нето - - - - Message - Съобщение - - - - Comment - Коментар - - - - Transaction ID - ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - Транзакция - - - - Inputs - - - - - Amount - Сума - - - - true - true - - - - false - false - - - - , has not been successfully broadcast yet - , все още не е изпратено - - - - - unknown - неизвестен - - - - TransactionDescDialog - - - Transaction details - Транзакция - - - - This pane shows a detailed description of the transaction - Описание на транзакцията - - - - TransactionTableModel - - - Date - Дата - - - - Type - Тип - - - - Address - Адрес - - - - Amount - Сума - - - - Open until %1 - Подлежи на промяна до %1 - - - - Confirmed (%1 confirmations) - Потвърдени (%1 потвърждения) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Блокът не е получен от останалите участници и най-вероятно няма да бъде одобрен. - - - - Generated but not accepted - Генерирана, но отхвърлена от мрежата - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Състояние на транзакцията. Задръжте върху това поле за брой потвърждения. - - - - Date and time that the transaction was received. - Дата и час на получаване. - - - - Type of transaction. - Тип на транзакцията. - - - - Destination address of transaction. - Получател на транзакцията. - - - - Amount removed from or added to balance. - Сума извадена или добавена към баланса. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Използване: - - - - Send command to -server or shadowcoind - - - - - List commands - Вписване на команди - - - - Get help for a command - Получете помощ за команда - - - - Options: - Опции: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Определете директория за данните - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Праг на прекъсване на връзката при непорядъчно държащи се пиъри (по подразбиране:100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Брой секунди до възтановяване на връзката за зле държащите се пиъри (по подразбиране:86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - Използвайте тестовата мрежа - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Изпрати локализиращата или дебъг информацията към конзолата, вместо файлът debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Потребителско име за JSON-RPC връзките - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - Парола за JSON-RPC връзките - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Разреши JSON-RPC връзките от отучнен IP адрес - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Изпрати команди до възел функциониращ на <ip> (По подразбиране: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - Повторно сканиране на блок-връзка за липсващи портефейлни транзакции - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Използвайте OpenSSL (https) за JSON-RPC връзките - - - - Server certificate file (default: server.cert) - Сертификатен файл на сървъра (По подразбиране:server.cert) - - - - Server private key (default: server.pem) - Поверителен ключ за сървъра (default: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Това помощно съобщение - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - Зареждане на адресите... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - Невалиден -proxy address: '%s' - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - Зареждане на блок индекса... - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Зареждане на портфейла... - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - Преразглеждане на последовтелността от блокове... - - - - Done loading - Зареждането е завършено - - - - To use the %s option - - - - - Error - Грешка - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_bs.ts b/src/qt/locale/umbra_bs.ts deleted file mode 100644 index cfe8e0f450..0000000000 --- a/src/qt/locale/umbra_bs.ts +++ /dev/null @@ -1,3447 +0,0 @@ - - - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - - - - - Address - - - - - pubkey - - - - - stealth - - - - - (no label) - - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - - - - - New passphrase - - - - - Repeat new passphrase - - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - - Encrypt wallet - - - - - This operation needs your wallet passphrase to unlock the wallet. - - - - - Unlock wallet - - - - - This operation needs your wallet passphrase to decrypt the wallet. - - - - - Decrypt wallet - - - - - Change passphrase - - - - - Enter the old and new passphrase to the wallet. - - - - - Confirm wallet encryption - - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - - - - - %n minute(s) ago - - - - - - - - - %n hour(s) ago - - - - - - - - - %n day(s) ago - - - - - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - - - - - %n minute(s) - - - - - - - - - %n hour(s) - - - - - - - - - %n day(s) - - - - - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - diff --git a/src/qt/locale/umbra_ca.ts b/src/qt/locale/umbra_ca.ts deleted file mode 100644 index 5490253be8..0000000000 --- a/src/qt/locale/umbra_ca.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiqueta - - - - Address - Adreça - - - - pubkey - - - - - stealth - - - - - (no label) - (sense etiqueta) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Introduïu la frase-contrasenya - - - - New passphrase - Nova frase-contrasenya - - - - Repeat new passphrase - Repetiu la nova frase-contrasenya - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Introduïu la nova frase-contrasenya per a la cartera.<br/>Empreu una frase-contrasenya de <b>10 o més caràcters aleatoris<b/>, o <b>vuit o més paraules<b/>. - - - - Encrypt wallet - Encriptar cartera - - - - This operation needs your wallet passphrase to unlock the wallet. - Cal que introduïu la frase-contrasenya de la cartera per a desbloquejar-la. - - - - Unlock wallet - Desbloquejar cartera - - - - This operation needs your wallet passphrase to decrypt the wallet. - Cal que introduïu la frase-contrasenya de la cartera per a desencriptar-la. - - - - Decrypt wallet - Desencriptar cartera - - - - Change passphrase - Canviar frase-contrasenya - - - - Enter the old and new passphrase to the wallet. - Introduïu l'antiga i la nova frase-contrasenya per a la cartera. - - - - Confirm wallet encryption - Confirmeu l'encriptació de cartera - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Cartera encriptada - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - L'encriptació de cartera ha fallat - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - L'encriptació de cartera ha fallat degut a un error intern. La vostra cartera no ha estat encriptada. - - - - - The supplied passphrases do not match. - Les frases-contrasenya no concorden. - - - - Wallet unlock failed - El desbloqueig de cartera ha fallat - - - - - - The passphrase entered for the wallet decryption was incorrect. - La frase-contrasenya per a la desencriptació de cartera és incorrecta. - - - - Wallet decryption failed - La desencriptació de cartera ha fallat - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - Adreça - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (sense etiqueta) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Editar adreça - - - - &Label - &Etiqueta - - - - The label associated with this address book entry - - - - - &Address - &Adreça - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - Adreça - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_ca@valencia.ts b/src/qt/locale/umbra_ca@valencia.ts deleted file mode 100644 index faeb4fb7b2..0000000000 --- a/src/qt/locale/umbra_ca@valencia.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - - - - - Address - - - - - pubkey - - - - - stealth - - - - - (no label) - - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - - - - - New passphrase - - - - - Repeat new passphrase - - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - - Encrypt wallet - - - - - This operation needs your wallet passphrase to unlock the wallet. - - - - - Unlock wallet - - - - - This operation needs your wallet passphrase to decrypt the wallet. - - - - - Decrypt wallet - - - - - Change passphrase - - - - - Enter the old and new passphrase to the wallet. - - - - - Confirm wallet encryption - - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_ca_ES.ts b/src/qt/locale/umbra_ca_ES.ts deleted file mode 100644 index 8c6e29ca72..0000000000 --- a/src/qt/locale/umbra_ca_ES.ts +++ /dev/null @@ -1,3418 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Sobre ShadowCoin - - - - <b>ShadowCoin</b> version - versió <b>ShadowCoin</b> - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiqueta - - - - Address - Adreça - - - - pubkey - - - - - stealth - - - - - (no label) - (sense etiqueta) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Dialeg de contrasenya - - - - Enter passphrase - Introdueix contrasenya - - - - New passphrase - Nova contrasenya - - - - Repeat new passphrase - Repeteix la nova contrasenya - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Serveix per desactivar l'enviament trivial de diners quan el compte del sistema operatiu ha estat compromès. No ofereix seguretat real. - - - - For staking only - Només per a fer "stake" - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Introdueixi la nova contrasenya al moneder<br/>Si us plau useu una contrasenya de <b>10 o més caracters aleatoris</b>, o <b>vuit o més paraules</b>. - - - - Encrypt wallet - Xifrar el moneder - - - - This operation needs your wallet passphrase to unlock the wallet. - Aquesta operació requereix la seva contrasenya del moneder per a desbloquejar-lo. - - - - Unlock wallet - Desbloqueja el moneder - - - - This operation needs your wallet passphrase to decrypt the wallet. - Aquesta operació requereix la seva contrasenya del moneder per a desencriptar-lo. - - - - Decrypt wallet - Desencripta el moneder - - - - Change passphrase - Canviar la contrasenya - - - - Enter the old and new passphrase to the wallet. - Introdueixi tant l'antiga com la nova contrasenya de moneder. - - - - Confirm wallet encryption - Confirmar l'encriptació del moneder - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Avís: Si xifra el seu moneder i perd la contrasenya, podrà <b> PERDRE TOTES LES SEVES MONEDES </ b>! - - - - Are you sure you wish to encrypt your wallet? - Esteu segur que voleu encriptar el vostre moneder? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANT: Tota copia de seguretat que hagis realitzat hauria de ser reemplaçada pel, recentment generat, arxiu encriptat del moneder. - - - - - Warning: The Caps Lock key is on! - Advertència: Les lletres majúscules estàn activades! - - - - - Wallet encrypted - Moneder encriptat - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin tancarà ara per acabar el procés de xifrat. Recordeu que l'encriptació del seu moneder no pot protegir completament les seves monedes de ser robades pel malware que pugui infectar al seu equip. - - - - - - - Wallet encryption failed - L'encriptació del moneder ha fallat - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - L'encriptació del moneder ha fallat per un error intern. El seu moneder no ha estat encriptat. - - - - - The supplied passphrases do not match. - La contrasenya introduïda no coincideix. - - - - Wallet unlock failed - El desbloqueig del moneder ha fallat - - - - - - The passphrase entered for the wallet decryption was incorrect. - La contrasenya introduïda per a desencriptar el moneder és incorrecte. - - - - Wallet decryption failed - La desencriptació del moneder ha fallat - - - - Wallet passphrase was successfully changed. - La contrasenya del moneder ha estat modificada correctament. - - - - ClientModel - - - Network Alert - Alerta de xarxa - - - - CoinControlDialog - - - Coin Control - Opcions del control de monedes - - - - Quantity: - Quantitat: - - - - Bytes: - Bytes: - - - - Amount: - Quantitat: - - - - Priority: - Prioritat: - - - - Fee: - Quota: - - - - Low Output: - Sortida baixa: - - - - - no - no - - - - After Fee: - Quota posterior: - - - - Change: - Canvi: - - - - (un)select all - (de)seleccionar tot - - - - Tree mode - Mode arbre - - - - List mode - Mode llista - - - - Amount - Quantitat - - - - Label - Etiqueta - - - - Address - Adreça - - - - Date - Data - - - - Confirmations - Confirmacions - - - - Confirmed - Confirmat - - - - Priority - Prioritat - - - - Copy address - Copiar adreça - - - - Copy label - Copiar etiqueta - - - - - Copy amount - Copiar quantitat - - - - Copy transaction ID - Copiar ID de transacció - - - - Copy quantity - Copiar quantitat - - - - Copy fee - Copiar comisió - - - - Copy after fee - Copiar després de comisió - - - - Copy bytes - Copiar bytes - - - - Copy priority - Copiar prioritat - - - - Copy low output - Copiar sortida baixa - - - - Copy change - Copiar canvi - - - - highest - El més alt - - - - high - Alt - - - - medium-high - mig-alt - - - - medium - mig - - - - low-medium - baix-mig - - - - low - baix - - - - lowest - el més baix - - - - - DUST - POLS - - - - - yes - si - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Aquesta etiqueta es tornarà vermell, si la mida de la transacció és més gran que 10000 bytes. - -En aquest cas es requereix una comisió d'almenys el 1% per kb. - -Pot variar + / - 1 Byte per entrada. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Les operacions amb més prioritat entren mes facilment a un bloc. - -Aquesta etiqueta es torna vermella, si la prioritat és menor que "mitja". - -En aquest cas es requereix una comisió d'almenys el 1% per kb. - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Aquesta etiqueta es torna vermella, si qualsevol beneficiari rep una quantitat inferior a 1%. - -En aquest cas es requereix una comisió d'almenys 2%. - -Les quantitats inferiors a 0.546 vegades la quota mínima del relé es mostren com a POLS. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Aquesta etiqueta es torna vermella, si el canvi és menor que 1%. - -En aquest cas es requereix una comisió d'almenys 2%. - - - - - (no label) - (sense etiqueta) - - - - change from %1 (%2) - canvi desde %1 (%2) - - - - (change) - (canviar) - - - - EditAddressDialog - - - Edit Address - Editar Adreça - - - - &Label - &Etiqueta - - - - The label associated with this address book entry - L'etiqueta associada amb aquesta entrada de la llibreta d'adreces - - - - &Address - &Direcció - - - - The address associated with this address book entry. This can only be modified for sending addresses. - La direcció associada amb aquesta entrada de la llibreta d'adreces. Només pot ser modificada per a l'enviament d'adreces. - - - - &Stealth Address - - - - - New receiving address - Nova adreça de recepció. - - - - New sending address - Nova adreça d'enviament - - - - Edit receiving address - Editar adreces de recepció - - - - Edit sending address - Editar adreces d'enviament - - - - The entered address "%1" is already in the address book. - L'adreça introduïda "%1" ja és present a la llibreta d'adreces. - - - - The entered address "%1" is not a valid ShadowCoin address. - La direcció introduïda "%1" no és una adreça ShadowCoin vàlida. - - - - Could not unlock wallet. - No s'ha pogut desbloquejar el moneder. - - - - New key generation failed. - Ha fallat la generació d'una nova clau. - - - - GUIUtil::HelpMessageBox - - - version - versió - - - - - Shadow - - - - - Usage: - Ús: - - - - command-line options - Opcions de la línia d'ordres - - - - UI options - Opcions de IU - - - - Set language, for example "de_DE" (default: system locale) - Definir llenguatge, per exemple "de_DE" (per defecte: Preferències locals de sistema) - - - - Start minimized - Iniciar minimitzat - - - - Show splash screen on startup (default: 1) - Mostrar finestra de benvinguda a l'inici (per defecte: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nom del client - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Versió del client - - - - &Information - &Informació - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Utilitzant OpenSSL versió - - - - Using BerkeleyDB version - - - - - Startup time - &Temps d'inici - - - - Network - Xarxa - - - - Name - - - - - Number of connections - Nombre de connexions - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Bloquejar cadena - - - - Current number of blocks - Nombre de blocs actuals - - - - Estimated total blocks - Total estimat de blocs - - - - Last block time - Últim temps de bloc - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Obrir - - - - Command-line options - Opcions de la línia d'ordres - - - - &Show - &Mostra - - - - &Console - &Consola - - - - Build date - Data de compilació - - - - Debug log file - Dietàri de depuració - - - - Clear console - Netejar consola - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Utilitza les fletxes d'amunt i avall per navegar per l'històric, i <b>Ctrl-L<\b> per netejar la pantalla. - - - - Type <b>help</b> for an overview of available commands. - Escriu <b>help<\b> per a obtenir una llistat de les ordres disponibles. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Obert fins %1 - - - - Open for %n block(s) - Obert per a %n blocObert per a %n blocs - - - - conflicted - conflicte - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/sense confirmar - - - - %1 confirmations - %1 confrimacions - - - - Status - Estat - - - - , broadcast through %n node(s) - , transmès a través de %n node, transmès a través de %n nodes - - - - Date - Data - - - - Source - Font - - - - Generated - Generat - - - - - - From - Des de - - - - - - - To - A - - - - - - - own address - Adreça pròpia - - - - - label - etiqueta - - - - - - - - Credit - Crèdit - - - - matures in %n more block(s) - madura en %n bloc mésmadura en %n blocs més - - - - not accepted - no acceptat - - - - - - - Debit - Dèbit - - - - Transaction fee - Comissió de transacció - - - - Net amount - Quantitat neta - - - - Message - Missatge - - - - Comment - Comentar - - - - Transaction ID - ID de transacció - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Informació de depuració - - - - Transaction - Transacció - - - - Inputs - Entrades - - - - Amount - Quantitat - - - - true - cert - - - - false - fals - - - - , has not been successfully broadcast yet - , encara no ha estat emès correctement - - - - - unknown - desconegut - - - - TransactionDescDialog - - - Transaction details - Detall de la transacció - - - - This pane shows a detailed description of the transaction - Aquest panell mostra una descripció detallada de la transacció - - - - TransactionTableModel - - - Date - Data - - - - Type - Tipus - - - - Address - Direcció - - - - Amount - Quantitat - - - - Open until %1 - Obert fins %1 - - - - Confirmed (%1 confirmations) - Confirmat (%1 confirmacions) - - - - Open for %n more block(s) - Obert per a %n bloc mésObert per a %n blocs més - - - - Narration - - - - - Offline - Desconnectat - - - - Unconfirmed - Sense confirmar - - - - Confirming (%1 of %2 recommended confirmations) - Confirmant (%1 de %2 confirmacions recomanat) - - - - Conflicted - Conflicte - - - - Immature (%1 confirmations, will be available after %2) - Immadurs (%1 confirmacions, estaran disponibles després de %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Aquest bloc no ha estat rebut per cap altre node i probablement no serà acceptat! - - - - Generated but not accepted - Generat però no acceptat - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Estat de la transacció. Desplaça't per aquí sobre per mostrar el nombre de confirmacions. - - - - Date and time that the transaction was received. - Data i hora en que la transacció va ser rebuda. - - - - Type of transaction. - Tipus de transacció. - - - - Destination address of transaction. - Adreça del destinatari de la transacció. - - - - Amount removed from or added to balance. - Quantitat extreta o afegida del balanç. - - - - WalletModel - - - - Sending... - Enviant... - - - - bitcoin-core - - - ShadowCoin version - versió ShadowCoin - - - - Usage: - Ús: - - - - Send command to -server or shadowcoind - Enviar comandes a -server o shadowcoind - - - - List commands - Llista d'ordres - - - - Get help for a command - Obtenir ajuda per a un ordre. - - - - Options: - Opcions: - - - - Specify configuration file (default: shadowcoin.conf) - Especifiqueu el fitxer de configuració (per defecte: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Especificar arxiu pid (per defecte: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Especifica un arxiu de moneder (dintre del directori de les dades) - - - - Specify data directory - Especificar directori de dades - - - - Set database cache size in megabytes (default: 25) - Establir tamany de la memoria cau en megabytes (per defecte: 25) - - - - Set database disk log size in megabytes (default: 100) - Configurar la mida del registre en disc de la base de dades en megabytes (per defecte: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Escoltar connexions en <port> (per defecte: 51737 o testnet: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Mantenir com a molt <n> connexions a peers (per defecte: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Connectar al node per obtenir les adreces de les connexions, i desconectar - - - - Specify your own public address - Especificar la teva adreça pública - - - - Bind to given address. Use [host]:port notation for IPv6 - Enllaçar a l'adreça donada. Utilitzeu la notació [host]:port per a IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Posa les teves monedes a fer "stake" per donar suport a la xarxa i obtenir una recompensa (per defecte: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Límit per a desconectar connexions errònies (per defecte: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Nombre de segons abans de reconectar amb connexions errònies (per defecte: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Ha sorgit un error al configurar el port RPC %u escoltant a IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Separeu el bloc i les bases de dades d'adreces. Augmenta el temps d'apagada (per defecte: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: La transacció ha sigut rebutjada. Això pot passar si algunes de les monedes al moneder ja s'han gastat, per exemple, si vostè utilitza una còpia del wallet.dat i les monedes han estat gastades a la cópia pero no s'han marcat com a gastades aqui. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Error: Aquesta transacció requereix una comisió d'almenys %s degut a la seva quantitat, complexitat, o l'ús dels fons rebuts recentment - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Escoltar connexions JSON-RPC al port <port> (per defecte: 51736 o testnet: 51996) - - - - Accept command line and JSON-RPC commands - Acceptar línia d'ordres i ordres JSON-RPC - - - - Error: Transaction creation failed - Error: La creació de transacció ha fallat. - - - - Error: Wallet locked, unable to create transaction - Error: Moneder bloquejat, no es pot de crear la transacció - - - - Importing blockchain data file. - Important fitxer de dades de la cadena de blocs - - - - Importing bootstrap blockchain data file. - Important fitxer de dades d'arrencada de la cadena de blocs - - - - Run in the background as a daemon and accept commands - Executar en segon pla com a programa dimoni i acceptar ordres - - - - Use the test network - Usar la xarxa de prova - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Aceptar connexions d'afora (per defecte: 1 si no -proxy o -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Ha sorgit un error al configurar el port RPC %u escoltant a IPv6, retrocedint a IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Error en inicialitzar l'entorn de base de dades %s! Per recuperar, FACI UNA COPIA DE SEGURETAT D'AQUEST DIRECTORI, a continuació, retiri tot d'ella excepte l'arxiu wallet.dat. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Establir la grandària màxima de les transaccions alta-prioritat/baixa-comisió en bytes (per defecte: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Advertència: el -paytxfee és molt elevat! Aquesta és la comissió de transacció que pagaràs quan enviis una transacció. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Avís: Comproveu que la data i hora de l'equip siguin correctes! Si el seu rellotge és erroni ShadowCoin no funcionarà correctament. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Advertència: Error llegint l'arxiu wallet.dat!! Totes les claus es llegeixen correctament, però hi ha dades de transaccions o entrades del llibre d'adreces absents o bé son incorrectes. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Advertència: L'arxiu wallet.dat és corrupte, dades rescatades! L'arxiu wallet.dat original ha estat desat com wallet.{estampa_temporal}.bak al directori %s; si el teu balanç o transaccions son incorrectes hauries de restaurar-lo de un backup. - - - - Attempt to recover private keys from a corrupt wallet.dat - Intentar recuperar les claus privades d'un arxiu wallet.dat corrupte - - - - Block creation options: - Opcions de la creació de blocs: - - - - Connect only to the specified node(s) - Connectar només al(s) node(s) especificats - - - - Discover own IP address (default: 1 when listening and no -externalip) - Descobrir la pròpia adreça IP (per defecte: 1 quan escoltant i no -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Error al escoltar a qualsevol port. Utilitza -listen=0 si vols això. - - - - Find peers using DNS lookup (default: 1) - Trobar companys utilitzant la recerca de DNS (per defecte: 1) - - - - Sync checkpoints policy (default: strict) - Política dels punts de control de sincronització (per defecte: estricta) - - - - Invalid -tor address: '%s' - Adreça -tor invalida: '%s' - - - - Invalid amount for -reservebalance=<amount> - Quantitat invalida per a -reservebalance=<amount> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Mida màxima del buffer de recepció per a cada connexió, <n>*1000 bytes (default: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Mida màxima del buffer d'enviament per a cada connexió, <n>*1000 bytes (default: 5000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Només connectar als nodes de la xarxa <net> (IPv4, IPv6 o Tor) - - - - Output extra debugging information. Implies all other -debug* options - Sortida d'informació de depuració extra. Implica totes les opcions de depuracó -debug* - - - - Output extra network debugging information - Sortida d'informació de depuració de xarxa addicional - - - - Prepend debug output with timestamp - Anteposar marca de temps a la sortida de depuració - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Opcions SSL: (veure la Wiki de Bitcoin per a instruccions de configuració SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - Seleccioneu la versió de proxy socks per utilitzar (4-5, per defecte: 5) - - - - Send trace/debug info to console instead of debug.log file - Enviar informació de traça/depuració a la consola en comptes del arxiu debug.log - - - - Send trace/debug info to debugger - Enviar informació de traça/depuració al depurador - - - - Set maximum block size in bytes (default: 250000) - Establir una mida máxima de bloc en bytes (per defecte: 250000) - - - - Set minimum block size in bytes (default: 0) - Establir una mida mínima de bloc en bytes (per defecte: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Reduir l'arxiu debug.log al iniciar el client (per defecte 1 quan no -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Especificar el temps limit per a un intent de connexió en milisegons (per defecte: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - No es pot signar el punt de control, la clau del punt de control esta malament? - - - - - Use UPnP to map the listening port (default: 0) - Utilitza UPnP per a mapejar els ports d'escolta (per defecte: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Utilitza UPnP per a mapejar els ports d'escolta (per defecte: 1 quan s'escolta) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Utilitza proxy per arribar als serveis ocults de Tor (per defecte: la mateixa que -proxy) - - - - Username for JSON-RPC connections - Nom d'usuari per a connexions JSON-RPC - - - - Verifying database integrity... - Comprovant la integritat de la base de dades ... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - ADVERTÈNCIA: violació de punt de control sincronitzat detectada, es saltarà! - - - - Warning: Disk space is low! - Avís: L'espai en disc és baix! - - - - Warning: This version is obsolete, upgrade required! - Advertència: Aquetsa versió està obsoleta, és necessari actualitzar! - - - - wallet.dat corrupt, salvage failed - L'arxiu wallet.data és corrupte, el rescat de les dades ha fallat - - - - Password for JSON-RPC connections - Contrasenya per a connexions JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, ha d'establir un rpcpassword al fitxer de configuració: -%s -Es recomana utilitzar la següent contrasenya aleatòria: -rpcuser=shadowcoinrpc -rpcpassword=%s -(No cal recordar aquesta contrasenya) -El nom d'usuari i contrasenya NO HA DE SER el mateix. -Si no hi ha l'arxiu, s'ha de crear amb els permisos de només lectura per al propietari. -També es recomana establir alertnotify per a que se li notifiquin els problemes; -per exemple: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - Trobar companys utilitzant l'IRC (per defecte: 1) {0)?} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Sincronitzar el temps amb altres nodes. Desactivar si el temps al seu sistema és precís, per exemple, si fa ús de sincronització amb NTP (per defecte: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - En crear transaccions, ignorar les entrades amb valor inferior a aquesta (per defecte: 0.01) - - - - Allow JSON-RPC connections from specified IP address - Permetre connexions JSON-RPC d'adreces IP específiques - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Enviar ordre al node en execució a <ip> (per defecte: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Executar orde quan el millor bloc canviï (%s al cmd es reemplaça per un bloc de hash) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Executar una ordre quan una transacció del moneder canviï (%s in cmd es canvia per TxID) - - - - Require a confirmations for change (default: 0) - Requerir les confirmacions de canvi (per defecte: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Fer complir als scripts de transaccions d'utilitzar operadors PUSH canòniques (per defecte: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - -Executar una ordre quan es rep un avís rellevant (%s en cmd es substitueix per missatge) - - - - Upgrade wallet to latest format - Actualitzar moneder a l'últim format - - - - Set key pool size to <n> (default: 100) - Establir límit de nombre de claus a <n> (per defecte: 100) - - - - Rescan the block chain for missing wallet transactions - Re-escanejar cadena de blocs en cerca de transaccions de moneder perdudes - - - - How many blocks to check at startup (default: 2500, 0 = all) - Quants blocs s'han de confirmar a l'inici (per defecte: 2500, 0 = tots) - - - - How thorough the block verification is (0-6, default: 1) - Com és de minuciosa la verificació del bloc (0-6, per defecte: 1) - - - - Imports blocks from external blk000?.dat file - Importar blocs desde l'arxiu extern blk000?.dat - - - - Use OpenSSL (https) for JSON-RPC connections - Utilitzar OpenSSL (https) per a connexions JSON-RPC - - - - Server certificate file (default: server.cert) - Arxiu del certificat de servidor (per defecte: server.cert) - - - - Server private key (default: server.pem) - Clau privada del servidor (per defecte: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Xifres acceptables (per defecte: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Error: Cartera bloquejada nomès per a fer "stake", no es pot de crear la transacció - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - ADVERTÈNCIA: Punt de control invàlid! Les transaccions mostrades podríen no ser correctes! Podria ser necessari actualitzar o notificar-ho als desenvolupadors. - - - - This help message - Aquest misatge d'ajuda - - - - Wallet %s resides outside data directory %s. - El moneder %s resideix fora del directori de dades %s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - No es pot obtenir un bloqueig en el directori de dades %s. ShadowCoin probablement ja estigui en funcionament. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Impossible d'unir %s a aquest ordinador (s'ha retornat l'error %d, %s) - - - - Connect through socks proxy - Conectar a través d'un proxy SOCKS - - - - Allow DNS lookups for -addnode, -seednode and -connect - Permetre consultes DNS per a -addnode, -seednode i -connect - - - - Loading addresses... - Carregant adreces... - - - - Error loading blkindex.dat - Error carregant blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Error carregant wallet.dat: Moneder corrupte - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Error en carregar wallet.dat: El moneder requereix la versió més recent de ShadowCoin - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - El moneder necessita ser reescrita: reiniciar ShadowCoin per completar - - - - Error loading wallet.dat - Error carregant wallet.dat - - - - Invalid -proxy address: '%s' - Adreça -proxy invalida: '%s' - - - - Unknown network specified in -onlynet: '%s' - Xarxa desconeguda especificada a -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - S'ha demanat una versió desconeguda de -socks proxy: %i - - - - Cannot resolve -bind address: '%s' - No es pot resoldre l'adreça -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - No es pot resoldre l'adreça -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Quantitat invalida per a -paytxfee=<amount>: '%s' - - - - Error: could not start node - Error: no s'ha pogut iniciar el node - - - - Sending... - Enviant... - - - - Invalid amount - Quanitat invalida - - - - Insufficient funds - Balanç insuficient - - - - Loading block index... - Carregant índex de blocs... - - - - Add a node to connect to and attempt to keep the connection open - Afegir un node per a connectar's-hi i intentar mantenir la connexió oberta - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - No es pot enllaçar a %s en aquest equip. ShadowCoin probablement ja estigui en funcionament. - - - - Fee per KB to add to transactions you send - Comisió per KB per a afegir a les transaccions que enviï - - - - Invalid amount for -mininput=<amount>: '%s' - Quantitat invalida per a -mininput=<amount>: '%s' - - - - Loading wallet... - Carregant moneder... - - - - Cannot downgrade wallet - No es pot reduir la versió del moneder - - - - Cannot initialize keypool - No es pot inicialitzar el keypool - - - - Cannot write default address - No es pot escriure l'adreça per defecte - - - - Rescanning... - Re-escanejant... - - - - Done loading - Càrrega acabada - - - - To use the %s option - Utilitza la opció %s - - - - Error - Error - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Has de configurar el rpcpassword=<password> a l'arxiu de configuració:\n %s\n Si l'arxiu no existeix, crea'l amb els permís owner-readable-only. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_cs.ts b/src/qt/locale/umbra_cs.ts deleted file mode 100644 index 5b632c3a73..0000000000 --- a/src/qt/locale/umbra_cs.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - O ShadowCoinu - - - - <b>ShadowCoin</b> version - Verze <b>ShadowCoinu</b> - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Označení - - - - Address - Adresa - - - - pubkey - - - - - stealth - - - - - (no label) - (bez označení) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Změna hesla - - - - Enter passphrase - Zadej platné heslo - - - - New passphrase - Zadej nové heslo - - - - Repeat new passphrase - Totéž heslo ještě jednou - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Zadej nové heslo k peněžence.<br/>Použij <b>alespoň 10 náhodných znaků</b> nebo <b>alespoň osm slov</b>. - - - - Encrypt wallet - Zašifruj peněženku - - - - This operation needs your wallet passphrase to unlock the wallet. - K provedení této operace musíš zadat heslo k peněžence, aby se mohla odemknout. - - - - Unlock wallet - Odemkni peněženku - - - - This operation needs your wallet passphrase to decrypt the wallet. - K provedení této operace musíš zadat heslo k peněžence, aby se mohla dešifrovat. - - - - Decrypt wallet - Dešifruj peněženku - - - - Change passphrase - Změň heslo - - - - Enter the old and new passphrase to the wallet. - Zadej staré a nové heslo k peněžence. - - - - Confirm wallet encryption - Potvrď zašifrování peněženky - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Jsi si jistý, že chceš peněženku zašifrovat? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - DŮLEŽITÉ: Všechny předchozí zálohy peněženky by měly být nahrazeny nově vygenerovanou, zašifrovanou peněženkou. Z bezpečnostních důvodů budou předchozí zálohy nešifrované peněženky nepoužitelné, jakmile začneš používat novou zašifrovanou peněženku. - - - - - Warning: The Caps Lock key is on! - Upozornění: Caps Lock je zapnutý! - - - - - Wallet encrypted - Peněženka je zašifrována - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Zašifrování peněženky selhalo - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Zašifrování peněženky selhalo kvůli vnitřní chybě. Tvá peněženka tedy nebyla zašifrována. - - - - - The supplied passphrases do not match. - Zadaná hesla nejsou shodná. - - - - Wallet unlock failed - Odemčení peněženky selhalo - - - - - - The passphrase entered for the wallet decryption was incorrect. - Nezadal jsi správné heslo pro dešifrování peněženky. - - - - Wallet decryption failed - Dešifrování peněženky selhalo - - - - Wallet passphrase was successfully changed. - Heslo k peněžence bylo v pořádku změněno. - - - - ClientModel - - - Network Alert - Upozornění sítě - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Částka: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Částka - - - - Label - - - - - Address - Adresa - - - - Date - Datum - - - - Confirmations - - - - - Confirmed - Potvrzeno - - - - Priority - - - - - Copy address - Kopírovat sdresu - - - - Copy label - Kopírovat popis - - - - - Copy amount - Kopíruj částku - - - - Copy transaction ID - Kopíruj ID transakce - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (bez popisu) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Uprav adresu - - - - &Label - &Označení - - - - The label associated with this address book entry - - - - - &Address - &Adresa - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nová přijímací adresa - - - - New sending address - Nová odesílací adresa - - - - Edit receiving address - Uprav přijímací adresu - - - - Edit sending address - Uprav odesílací adresu - - - - The entered address "%1" is already in the address book. - Zadaná adresa "%1" už v adresáři je. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Nemohu odemknout peněženku. - - - - New key generation failed. - Nepodařilo se mi vygenerovat nový klíč. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Název klienta - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Verze klienta - - - - &Information - &Informace - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Používaná verze OpenSSL - - - - Using BerkeleyDB version - - - - - Startup time - Čas spuštění - - - - Network - Síť - - - - Name - - - - - Number of connections - Počet spojení - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Řetězec bloků - - - - Current number of blocks - Aktuální počet bloků - - - - Estimated total blocks - Odhad celkového počtu bloků - - - - Last block time - Čas posledního bloku - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Otevřít - - - - Command-line options - - - - - &Show - - - - - &Console - &Konzole - - - - Build date - Datum kompilace - - - - Debug log file - Soubor s ladicími záznamy - - - - Clear console - Vyčistit konzoli - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - V historii se pohybuješ šipkami nahoru a dolů a pomocí <b>Ctrl-L</b> čistíš obrazovku. - - - - Type <b>help</b> for an overview of available commands. - Napsáním <b>help</b> si vypíšeš přehled dostupných příkazů. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Otřevřeno dokud %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/nepotvrzeno - - - - %1 confirmations - %1 potvrzení - - - - Status - Stav - - - - , broadcast through %n node(s) - , rozesláno přes 1 uzel, rozesláno přes %n uzly, rozesláno přes %n uzlů - - - - Date - Datum - - - - Source - Zdroj - - - - Generated - Vygenerováno - - - - - - From - Od - - - - - - - To - Pro - - - - - - - own address - vlastní adresa - - - - - label - označení - - - - - - - - Credit - Příjem - - - - matures in %n more block(s) - dozraje po jednom blokudozraje po %n blocíchdozraje po %n blocích - - - - not accepted - neakceptováno - - - - - - - Debit - Výdaj - - - - Transaction fee - Transakční poplatek - - - - Net amount - Čistá částka - - - - Message - Zpráva - - - - Comment - Komentář - - - - Transaction ID - ID transakce - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Ladicí informace - - - - Transaction - Transakce - - - - Inputs - Vstupy - - - - Amount - Částka - - - - true - true - - - - false - false - - - - , has not been successfully broadcast yet - , ještě nebylo rozesláno - - - - - unknown - neznámo - - - - TransactionDescDialog - - - Transaction details - Detaily transakce - - - - This pane shows a detailed description of the transaction - Toto okno zobrazuje detailní popis transakce - - - - TransactionTableModel - - - Date - Datum - - - - Type - Typ - - - - Address - Adresa - - - - Amount - Částka - - - - Open until %1 - Otřevřeno dokud %1 - - - - Confirmed (%1 confirmations) - Potvrzeno (%1 potvrzení) - - - - Open for %n more block(s) - Otevřeno pro 1 další blokOtevřeno pro %n další blokyOtevřeno pro %n dalších bloků - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Tento blok nedostal žádný jiný uzel a pravděpodobně nebude akceptován! - - - - Generated but not accepted - Vygenerováno, ale neakceptováno - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Stav transakce. Najetím myši na toto políčko si zobrazíš počet potvrzení. - - - - Date and time that the transaction was received. - Datum a čas přijetí transakce. - - - - Type of transaction. - Druh transakce. - - - - Destination address of transaction. - Cílová adresa transakce. - - - - Amount removed from or added to balance. - Částka odečtená z nebo přičtená k účtu. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Užití: - - - - Send command to -server or shadowcoind - - - - - List commands - Výpis příkazů - - - - Get help for a command - Získat nápovědu pro příkaz - - - - Options: - Možnosti: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - Udej název souboru s peněženkou (v rámci datového adresáře) - - - - Specify data directory - Adresář pro data - - - - Set database cache size in megabytes (default: 25) - Nastavit velikost databázové vyrovnávací paměti v megabajtech (výchozí: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Povolit nejvýše <n> připojení k uzlům (výchozí: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Připojit se k uzlu, získat adresy jeho protějšků a odpojit se - - - - Specify your own public address - Specifikuj svou veřejnou adresu - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Práh pro odpojování zlobivých uzlů (výchozí: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Doba ve vteřinách, po kterou se nebudou moci zlobivé uzly znovu připojit (výchozí: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Při nastavování naslouchacího RPC portu %i pro IPv4 nastala chyba: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Akceptovat příkazy z příkazové řádky a přes JSON-RPC - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Běžet na pozadí jako démon a akceptovat příkazy - - - - Use the test network - Použít testovací síť (testnet) - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Přijímat spojení zvenčí (výchozí: 1, pokud není zadáno -proxy nebo -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Při nastavování naslouchacího RPC portu %u pro IPv6 nastala chyba, vracím se k IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Upozornění: -paytxfee je nastaveno velmi vysoko! Toto je transakční poplatek, který zaplatíš za každou poslanou transakci. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Upozornění: nastala chyba při čtení souboru wallet.dat! Všechny klíče se přečetly správně, ale data o transakcích nebo záznamy v adresáři mohou chybět či být nesprávné. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Upozornění: soubor wallet.dat je poškozený, data jsou však zachráněna! Původní soubor wallet.dat je uložený jako wallet.{timestamp}.bak v %s. Pokud je stav tvého účtu nebo transakce nesprávné, zřejmě bys měl obnovit zálohu. - - - - Attempt to recover private keys from a corrupt wallet.dat - Pokusit se zachránit soukromé klíče z poškozeného souboru wallet.dat - - - - Block creation options: - Možnosti vytvoření bloku: - - - - Connect only to the specified node(s) - Připojit se pouze k zadanému uzlu (příp. zadaným uzlům) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Zjistit vlastní IP adresu (výchozí: 1, pokud naslouchá a není zadáno -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Nepodařilo se naslouchat na žádném portu. Použij -listen=0, pokud to byl tvůj záměr. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximální velikost přijímacího bufferu pro každé spojení, <n>*1000 bajtů (výchozí: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maximální velikost odesílacího bufferu pro každé spojení, <n>*1000 bajtů (výchozí: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Připojit se pouze k uzlům v <net> síti (IPv4, IPv6 nebo Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Možnosti SSL: (viz instrukce nastavení SSL v Bitcoin Wiki) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Posílat stopovací/ladicí informace do konzole místo do souboru debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Nastavit minimální velikost bloku v bajtech (výchozí: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Při spuštění klienta zmenšit soubor debug.log (výchozí: 1, pokud není zadáno -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Zadej časový limit spojení v milisekundách (výchozí: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Použít UPnP k namapování naslouchacího portu (výchozí: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Použít UPnP k namapování naslouchacího portu (výchozí: 1, pokud naslouchá) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Uživatelské jméno pro JSON-RPC spojení - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Upozornění: tahle verze je zastaralá, měl bys ji aktualizovat! - - - - wallet.dat corrupt, salvage failed - Soubor wallet.dat je poškozen, jeho záchrana se nezdařila - - - - Password for JSON-RPC connections - Heslo pro JSON-RPC spojení - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Povolit JSON-RPC spojení ze specifikované IP adresy - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Posílat příkazy uzlu běžícím na <ip> (výchozí: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Spustit příkaz, když se změní nejlepší blok (%s se v příkazu nahradí hashem bloku) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Spustit příkaz, když se objeví transakce týkající se peněženky (%s se v příkazu nahradí za TxID) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Převést peněženku na nejnovější formát - - - - Set key pool size to <n> (default: 100) - Nastavit zásobník klíčů na velikost <n> (výchozí: 100) - - - - Rescan the block chain for missing wallet transactions - Přeskenovat řetězec bloků na chybějící transakce tvé pěněženky - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Použít OpenSSL (https) pro JSON-RPC spojení - - - - Server certificate file (default: server.cert) - Soubor se serverovým certifikátem (výchozí: server.cert) - - - - Server private key (default: server.pem) - Soubor se serverovým soukromým klíčem (výchozí: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Tato nápověda - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Nedaří se mi připojit na %s na tomhle počítači (operace bind vrátila chybu %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Povolit DNS dotazy pro -addnode (přidání uzlu), -seednode a -connect (připojení) - - - - Loading addresses... - Načítám adresy... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Chyba při načítání wallet.dat: peněženka je poškozená - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Chyba při načítání wallet.dat - - - - Invalid -proxy address: '%s' - Neplatná -proxy adresa: '%s' - - - - Unknown network specified in -onlynet: '%s' - V -onlynet byla uvedena neznámá síť: '%s' - - - - Unknown -socks proxy version requested: %i - V -socks byla požadována neznámá verze proxy: %i - - - - Cannot resolve -bind address: '%s' - Nemohu přeložit -bind adresu: '%s' - - - - Cannot resolve -externalip address: '%s' - Nemohu přeložit -externalip adresu: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Neplatná částka pro -paytxfee=<částka>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Neplatná částka - - - - Insufficient funds - Nedostatek prostředků - - - - Loading block index... - Načítám index bloků... - - - - Add a node to connect to and attempt to keep the connection open - Přidat uzel, ke kterému se připojit a snažit se spojení udržet - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Načítám peněženku... - - - - Cannot downgrade wallet - Nemohu převést peněženku do staršího formátu - - - - Cannot initialize keypool - - - - - Cannot write default address - Nemohu napsat výchozí adresu - - - - Rescanning... - Přeskenovávám... - - - - Done loading - Načítání dokončeno - - - - To use the %s option - K použití volby %s - - - - Error - Chyba - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Musíš nastavit rpcpassword=<heslo> v konfiguračním souboru: -%s -Pokud konfigurační soubor ještě neexistuje, vytvoř ho tak, aby ho mohl číst pouze vlastník. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_cy.ts b/src/qt/locale/umbra_cy.ts deleted file mode 100644 index 2c9538b072..0000000000 --- a/src/qt/locale/umbra_cy.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Label - - - - Address - Cyfeiriad - - - - pubkey - - - - - stealth - - - - - (no label) - (heb label) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Teipiwch gyfrinymadrodd - - - - New passphrase - Cyfrinymadrodd newydd - - - - Repeat new passphrase - Ailadroddwch gyfrinymadrodd newydd - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Dewiswch gyfrinymadrodd newydd ar gyfer y waled. <br/> Defnyddiwch cyfrinymadrodd o <b>10 neu fwy o lythyrennau hapgyrch</b>, neu <b> wyth neu fwy o eiriau. - - - - Encrypt wallet - Amgryptio'r waled - - - - This operation needs your wallet passphrase to unlock the wallet. - Mae angen i'r gweithred hon ddefnyddio'ch cyfrinymadrodd er mwyn datgloi'r waled. - - - - Unlock wallet - Datgloi'r waled - - - - This operation needs your wallet passphrase to decrypt the wallet. - Mae angen i'r gweithred hon ddefnyddio'ch cyfrinymadrodd er mwyn dadgryptio'r waled. - - - - Decrypt wallet - Dadgryptio'r waled - - - - Change passphrase - Newid cyfrinymadrodd - - - - Enter the old and new passphrase to the wallet. - Teipiwch yr hen cyfrinymadrodd a chyfrinymadrodd newydd i mewn i'r waled. - - - - Confirm wallet encryption - Cadarnau amgryptiad y waled - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Waled wedi'i amgryptio - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Amgryptiad waled wedi methu - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Methodd amgryptiad y waled oherwydd gwall mewnol. Ni amgryptwyd eich waled. - - - - - The supplied passphrases do not match. - Dydy'r cyfrinymadroddion a ddarparwyd ddim yn cyd-fynd â'u gilydd. - - - - Wallet unlock failed - Methodd ddatgloi'r waled - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - Methodd dadgryptiad y waled - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - Cyfeiriad - - - - Date - Dyddiad - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (heb label) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Golygu'r cyfeiriad - - - - &Label - &Label - - - - The label associated with this address book entry - - - - - &Address - &Cyfeiriad - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Cyfeiriad derbyn newydd - - - - New sending address - Cyfeiriad anfon newydd - - - - Edit receiving address - Golygu'r cyfeiriad derbyn - - - - Edit sending address - Golygu'r cyfeiriad anfon - - - - The entered address "%1" is already in the address book. - Mae'r cyfeiriad "%1" sydd newydd gael ei geisio gennych yn y llyfr cyfeiriad yn barod. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Methodd ddatgloi'r waled. - - - - New key generation failed. - Methodd gynhyrchu allwedd newydd. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Agor tan %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - Dyddiad - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - Neges - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - Dyddiad - - - - Type - Math - - - - Address - Cyfeiriad - - - - Amount - - - - - Open until %1 - Agor tan %1 - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - Gwall - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_da.ts b/src/qt/locale/umbra_da.ts deleted file mode 100644 index 6157145d41..0000000000 --- a/src/qt/locale/umbra_da.ts +++ /dev/null @@ -1,3419 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Om ShadowCoin - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> version - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Mærkat - - - - Address - Adresse - - - - pubkey - - - - - stealth - - - - - (no label) - (ingen mærkat) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Adgangskodedialog - - - - Enter passphrase - Indtast adgangskode - - - - New passphrase - Ny adgangskode - - - - Repeat new passphrase - Gentag ny adgangskode - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Deaktivere trivielle sendmoney når OS konto er kompromitteret. Giver ingen reel sikkerhed. - - - - For staking only - Kun til renteberegning - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Indtast den nye adgangskode til tegnebogen.<br/>Brug venligst en adgangskode på <b>10 eller flere tilfældige tegn</b> eller <b>otte eller flere ord</b>. - - - - Encrypt wallet - Krypter tegnebog - - - - This operation needs your wallet passphrase to unlock the wallet. - Denne funktion har brug for din tegnebogs adgangskode for at låse tegnebogen op. - - - - Unlock wallet - Lås tegnebog op - - - - This operation needs your wallet passphrase to decrypt the wallet. - Denne funktion har brug for din tegnebogs adgangskode for at dekryptere tegnebogen. - - - - Decrypt wallet - Dekrypter tegnebog - - - - Change passphrase - Skift adgangskode - - - - Enter the old and new passphrase to the wallet. - Indtast den gamle og den nye adgangskode til tegnebogen. - - - - Confirm wallet encryption - Bekræft tegnebogskryptering - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Advarsel: Hvis du krypterer din tegnebog og mister din adgangskode, vil du <b> miste alle dine mønter </ b>! - - - - Are you sure you wish to encrypt your wallet? - Er du sikker på, at du ønsker at kryptere din tegnebog? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - VIGTIGT: Enhver tidligere sikkerhedskopi, som du har lavet af tegnebogsfilen, bør blive erstattet af den nyligt genererede, krypterede tegnebogsfil. Af sikkerhedsmæssige årsager vil tidligere sikkerhedskopier af den ikke-krypterede tegnebogsfil blive ubrugelig i det øjeblik, du starter med at anvende den nye, krypterede tegnebog. - - - - - Warning: The Caps Lock key is on! - Advarsel: Caps Lock-tasten er aktiveret! - - - - - Wallet encrypted - Tegnebog krypteret - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin lukker nu for at afslutte krypteringen. Husk at en krypteret tegnebog ikke fuldt ud beskytter dine mønter mod at blive stjålet af malware som har inficeret din computer. - - - - - - - Wallet encryption failed - Tegnebogskryptering mislykkedes - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Tegnebogskryptering mislykkedes på grund af en intern fejl. Din tegnebog blev ikke krypteret. - - - - - The supplied passphrases do not match. - De angivne adgangskoder stemmer ikke overens. - - - - Wallet unlock failed - Tegnebogsoplåsning mislykkedes - - - - - - The passphrase entered for the wallet decryption was incorrect. - Den angivne adgangskode for tegnebogsdekrypteringen er forkert. - - - - Wallet decryption failed - Tegnebogsdekryptering mislykkedes - - - - Wallet passphrase was successfully changed. - Tegnebogens adgangskode blev ændret. - - - - ClientModel - - - Network Alert - Netværksadvarsel - - - - CoinControlDialog - - - Coin Control - Mønt Kontrol - - - - Quantity: - Antal: - - - - Bytes: - Bytes: - - - - Amount: - Beløb: - - - - Priority: - Prioritet: - - - - Fee: - Gebyr: - - - - Low Output: - Lav Udgangseffekt: - - - - - no - nej - - - - After Fee: - Efter Gebyr: - - - - Change: - Ændre: - - - - (un)select all - (fra)vælg alle - - - - Tree mode - Træ tilstand - - - - List mode - Liste tilstand - - - - Amount - Beløb - - - - Label - Mærkat - - - - Address - Adresse - - - - Date - Dato - - - - Confirmations - Bekræftelser - - - - Confirmed - Bekræftet - - - - Priority - Prioritet - - - - Copy address - Kopier adresse - - - - Copy label - Kopier mærkat - - - - - Copy amount - Kopier beløb - - - - Copy transaction ID - Kopier transaktionens ID - - - - Copy quantity - Kopier antal - - - - Copy fee - Kopier transkationsgebyr - - - - Copy after fee - Kopier efter transkationsgebyr - - - - Copy bytes - Kopier bytes - - - - Copy priority - Kopier prioritet - - - - Copy low output - Lav udgangseffekt - - - - Copy change - Kopier ændring - - - - highest - højeste - - - - high - høj - - - - medium-high - medium-høj - - - - medium - medium - - - - low-medium - lav-medium - - - - low - lav - - - - lowest - lavest - - - - - DUST - DUST - - - - - yes - ja - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Denne etiket bliver rød, hvis transaktionen størrelse er større end 10000 byte. - -Det betyder, at et gebyr på mindst %1 per kb er påkrævet. - -Kan variere + / - 1 byte per indgang. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Transaktioner med højere prioritet får mere sandsynligt en blok. - -Denne etiket bliver rød, hvis prioritet er mindre end "medium". - -Det betyder, at et gebyr på mindst %1 per kb er påkrævet. - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Denne etiket bliver rød, hvis nogen modtager et beløb, der er mindre end %1. - -Det betyder, at et gebyr på mindst %2 er påkrævet. - -Beløb under 0,546 gange det minimale gebyr er vist som DUST. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Denne etiket bliver rød, hvis ændringen er mindre end %1. - -Det betyder, at et gebyr på mindst %2 er påkrævet. - - - - - (no label) - (ingen mærkat) - - - - change from %1 (%2) - skift fra %1 (%2) - - - - (change) - (skift) - - - - EditAddressDialog - - - Edit Address - Rediger adresse - - - - &Label - Mærkat - - - - The label associated with this address book entry - Etiketten er forbundet med denne post i adressekartoteket - - - - &Address - Adresse - - - - The address associated with this address book entry. This can only be modified for sending addresses. - Adressen er forbundet med denne post i adressekartoteket. Dette kan kun ændres til sende adresser. - - - - &Stealth Address - - - - - New receiving address - Ny modtagelsesadresse - - - - New sending address - Ny afsendelsesadresse - - - - Edit receiving address - Rediger modtagelsesadresse - - - - Edit sending address - Rediger afsendelsesadresse - - - - The entered address "%1" is already in the address book. - Den indtastede adresse "%1" er allerede i adressebogen. - - - - The entered address "%1" is not a valid ShadowCoin address. - Den indtastede adresse "%1" er ikke en gyldig ShadowCoin adresse. - - - - Could not unlock wallet. - Kunne ikke låse tegnebog op. - - - - New key generation failed. - Ny nøglegenerering mislykkedes. - - - - GUIUtil::HelpMessageBox - - - version - version - - - - - Shadow - - - - - Usage: - Anvendelse: - - - - command-line options - Kommandolinjeparametrene - - - - UI options - UI opsætning - - - - Set language, for example "de_DE" (default: system locale) - Indstil sprog, for eksempel "de_DE" (standard: system locale) - - - - Start minimized - Start minimeret - - - - Show splash screen on startup (default: 1) - Vis splash skærm ved opstart (default: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Klientnavn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Klientversion - - - - &Information - Information - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Anvender OpenSSL-version - - - - Using BerkeleyDB version - - - - - Startup time - Opstartstid - - - - Network - Netværk - - - - Name - - - - - Number of connections - Antal forbindelser - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Blokkæde - - - - Current number of blocks - Nuværende antal blokke - - - - Estimated total blocks - Estimeret antal blokke - - - - Last block time - Tidsstempel for seneste blok - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - Åbn - - - - Command-line options - Kommandolinjeparametrene - - - - &Show - &Vis - - - - &Console - Konsol - - - - Build date - Byggedato - - - - Debug log file - Fejlsøgningslogfil - - - - Clear console - Ryd konsol - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Brug op og ned-piletasterne til at navigere historikken og <b>Ctrl-L</b> til at rydde skærmen. - - - - Type <b>help</b> for an overview of available commands. - Tast <b>help</b> for en oversigt over de tilgængelige kommandoer. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Åben indtil %1 - - - - Open for %n block(s) - Åben for %n blokÅben for %n blok(ke) - - - - conflicted - konflikt - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/ubekræftet - - - - %1 confirmations - %1 bekræftelser - - - - Status - Status - - - - , broadcast through %n node(s) - , transmitteret igennem %n knude(r), transmitteret igennem %n knude(r) - - - - Date - Dato - - - - Source - Kilde - - - - Generated - Genereret - - - - - - From - Fra - - - - - - - To - Til - - - - - - - own address - egen adresse - - - - - label - mærkat - - - - - - - - Credit - Kredit - - - - matures in %n more block(s) - modner efter yderligere %n blok(ke)modner efter yderligere %n blok(ke) - - - - not accepted - ikke accepteret - - - - - - - Debit - Debet - - - - Transaction fee - Transaktionsgebyr - - - - Net amount - Nettobeløb - - - - Message - Besked - - - - Comment - Kommentar - - - - Transaction ID - Transaktionens ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Fejlsøgningsinformation - - - - Transaction - Transaktion - - - - Inputs - Input - - - - Amount - Beløb - - - - true - sand - - - - false - falsk - - - - , has not been successfully broadcast yet - , er ikke blevet transmitteret endnu - - - - - unknown - ukendt - - - - TransactionDescDialog - - - Transaction details - Transaktionsdetaljer - - - - This pane shows a detailed description of the transaction - Denne rude viser en detaljeret beskrivelse af transaktionen - - - - TransactionTableModel - - - Date - Dato - - - - Type - Type - - - - Address - Adresse - - - - Amount - Beløb - - - - Open until %1 - Åben indtil %1 - - - - Confirmed (%1 confirmations) - Bekræftet (%1 bekræftelser) - - - - Open for %n more block(s) - Åben %n blok(ke) yderligereÅben %n blok(ke) yderligere - - - - Narration - - - - - Offline - Offline - - - - Unconfirmed - Ubekræftede - - - - Confirming (%1 of %2 recommended confirmations) - Bekræftelse (% 1 af% 2 anbefalede bekræftelser) - - - - Conflicted - Konflikt - - - - Immature (%1 confirmations, will be available after %2) - Umodne (% 1 bekræftelser, vil være tilgængelige efter% 2) - - - - This block was not received by any other nodes and will probably not be accepted! - Denne blok blev ikke modtaget af nogen andre knuder og vil formentlig ikke blive accepteret! - - - - Generated but not accepted - Genereret, men ikke accepteret - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Transaktionsstatus. Hold musen over dette felt for at vise antallet af bekræftelser. - - - - Date and time that the transaction was received. - Dato og klokkeslæt for modtagelse af transaktionen. - - - - Type of transaction. - Transaktionstype. - - - - Destination address of transaction. - Destinationsadresse for transaktion. - - - - Amount removed from or added to balance. - Beløb fjernet eller tilføjet balance. - - - - WalletModel - - - - Sending... - Sender... - - - - bitcoin-core - - - ShadowCoin version - ShadowCoin version - - - - Usage: - Anvendelse: - - - - Send command to -server or shadowcoind - Send kommando til-server eller shadowcoind - - - - List commands - Liste over kommandoer - - - - Get help for a command - Få hjælp til en kommando - - - - Options: - Indstillinger: - - - - Specify configuration file (default: shadowcoin.conf) - Angiv konfigurationsfil (default: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Angiv pid fil (standard: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Angiv tegnebogs fil (indenfor data mappe) - - - - Specify data directory - Angiv datakatalog - - - - Set database cache size in megabytes (default: 25) - Angiv databasecachestørrelse i megabytes (standard: 25) - - - - Set database disk log size in megabytes (default: 100) - Set database disk logstørrelsen i megabyte (standard: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Lyt efter forbindelser på <port> (default: 51737 eller Testnet: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Oprethold højest <n> forbindelser til andre i netværket (standard: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Forbind til en knude for at modtage adresse, og afbryd - - - - Specify your own public address - Angiv din egen offentlige adresse - - - - Bind to given address. Use [host]:port notation for IPv6 - Binder til en given adresse. Brug [host]: port notation for IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Opbevar dine mønter for at støtte netværket og få belønning (default: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Grænse for afbrydelse til dårlige forbindelser (standard: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Antal sekunder dårlige forbindelser skal vente før reetablering (standard: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Der opstod en fejl ved angivelse af RPC-porten %u til at lytte på IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Frigør blok og adresse databaser. Øg shutdown tid (default: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Fejl: Transaktionen blev afvist. Dette kan ske, hvis nogle af mønterne i din pung allerede er blevet brugt, som hvis du brugte en kopi af wallet.dat og mønterne blev brugt i kopien, men ikke markeret her. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Fejl: Denne transaktion kræver et transaktionsgebyr på mindst% s på grund af dens størrelse, kompleksitet, eller anvendelse af nylig modtaget midler - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Spor efter JSON-RPC-forbindelser på <port> (default: 51736 eller Testnet: 51996) - - - - Accept command line and JSON-RPC commands - Accepter kommandolinje- og JSON-RPC-kommandoer - - - - Error: Transaction creation failed - Fejl: Transaktion oprettelse mislykkedes - - - - Error: Wallet locked, unable to create transaction - Fejl: Wallet låst, ude af stand til at skabe transaktion - - - - Importing blockchain data file. - Importerer blockchain datafil. - - - - Importing bootstrap blockchain data file. - Import af bootstrap blockchain datafil. - - - - Run in the background as a daemon and accept commands - Kør i baggrunden som en service, og accepter kommandoer - - - - Use the test network - Brug testnetværket - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Accepter forbindelser udefra (standard: 1 hvis hverken -proxy eller -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Der opstod en fejl ved angivelse af RPC-porten %u til at lytte på IPv6, falder tilbage til IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Fejl initialisering database miljø% s! For at gendanne, BACKUP denne mappe, og derefter fjern alt bortset fra wallet.dat. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Angiv maksimal størrelse på high-priority/low-fee transaktioner i bytes (standard: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Advarsel: -paytxfee er sat meget højt! Dette er det gebyr du vil betale, hvis du sender en transaktion. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Advarsel: Kontroller venligst, at computerens dato og klokkeslæt er korrekt! Hvis dit ur er forkert vil ShadowCoin ikke fungere korrekt. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Advarsel: fejl under læsning af wallet.dat! Alle nøgler blev læst korrekt, men transaktionsdata eller adressebogsposter kan mangle eller være forkerte. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Advarsel: wallet.dat ødelagt, data reddet! Oprindelig wallet.net gemt som wallet.{timestamp}.bak i %s; hvis din saldo eller dine transaktioner er forkert, bør du genskabe fra en sikkerhedskopi. - - - - Attempt to recover private keys from a corrupt wallet.dat - Forsøg at genskabe private nøgler fra ødelagt wallet.dat - - - - Block creation options: - Blokoprettelsestilvalg: - - - - Connect only to the specified node(s) - Tilslut kun til de(n) angivne knude(r) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Find egen IP-adresse (standard: 1 når lytter og ingen -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Lytning på enhver port mislykkedes. Brug -listen=0, hvis du ønsker dette. - - - - Find peers using DNS lookup (default: 1) - Find peer bruges DNS-opslag (default: 1) - - - - Sync checkpoints policy (default: strict) - Synkroniser checkpoints politik (default: streng) - - - - Invalid -tor address: '%s' - Ugyldig-tor-adresse: '% s' - - - - Invalid amount for -reservebalance=<amount> - Ugyldigt beløb for-reservebalance = <beløb> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maksimum for modtagelsesbuffer pr. forbindelse, <n>*1000 bytes (standard: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maksimum for afsendelsesbuffer pr. forbindelse, <n>*1000 bytes (standard: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Tilslut kun til knuder i netværk <net> (IPv4, IPv6 eller Tor) - - - - Output extra debugging information. Implies all other -debug* options - Output ekstra debugging information. Indebærer alle andre-debug * muligheder - - - - Output extra network debugging information - Output ekstra netværk debugging information - - - - Prepend debug output with timestamp - Prepend debug output med tidsstempel - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL-indstillinger: (se Bitcoin Wiki for SSL-opsætningsinstruktioner) - - - - Select the version of socks proxy to use (4-5, default: 5) - Vælg den version af socks proxy du vil bruge (4-5, standard: 5) - - - - Send trace/debug info to console instead of debug.log file - Send sporings-/fejlsøgningsinformation til konsollen i stedet for debug.log filen - - - - Send trace/debug info to debugger - Send trace / debug info til debugger - - - - Set maximum block size in bytes (default: 250000) - Indstil maks. blok størrelse i bytes (standard: 250000) - - - - Set minimum block size in bytes (default: 0) - Angiv minimumsblokstørrelse i bytes (standard: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Formindsk debug.log filen ved klientopstart (standard: 1 hvis ikke -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Angiv tilslutningstimeout i millisekunder (standard: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - Kan ikke logge checkpoint, forkert checkpointkey? - - - - - Use UPnP to map the listening port (default: 0) - Forsøg at bruge UPnP til at konfigurere den lyttende port (standard: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Forsøg at bruge UPnP til at konfigurere den lyttende port (standard: 1 når lytter) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Brug proxy til at nå tor skjulte services (Standard: samme som-proxy) - - - - Username for JSON-RPC connections - Brugernavn til JSON-RPC-forbindelser - - - - Verifying database integrity... - Bekræfter database integritet ... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - ADVARSEL: synkroniseret checkpoint overtrædelse opdaget, men skibbet! - - - - Warning: Disk space is low! - Advarsel: Diskplads lav! - - - - Warning: This version is obsolete, upgrade required! - Advarsel: Denne version er forældet, opgradering påkrævet! - - - - wallet.dat corrupt, salvage failed - wallet.dat ødelagt, redning af data mislykkedes - - - - Password for JSON-RPC connections - Adgangskode til JSON-RPC-forbindelser - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - % s, skal du indstille et rpcpassword i konfigurationsfilen: -% s -Det anbefales at bruge følgende tilfældig adgangskode: -rpcuser = shadowcoinrpc -rpcpassword =% s -(du behøver ikke at huske denne adgangskode) -Brugernavn og adgangskode må ikke være den samme. -Hvis filen ikke findes, skal du oprette den med filtilladelser ejer-læsbar-kun. -Det kan også anbefales at sætte alertnotify så du får besked om problemer; -for eksempel: alertnotify = echo%% s | mail-s "ShadowCoin Alert" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - Find peers der bruger internet relay chat (default: 1) {? 0)} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Synkroniser tid med andre noder. Deaktiver, hvis tiden på dit system er præcis eksempelvis synkroniseret med NTP (default: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - Når du opretter transaktioner ignoreres input med værdi mindre end dette (standard: 0,01) - - - - Allow JSON-RPC connections from specified IP address - Tillad JSON-RPC-forbindelser fra bestemt IP-adresse - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Send kommandoer til knude, der kører på <ip> (standard: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Udfør kommando, når den bedste blok ændres (%s i kommandoen erstattes med blokhash) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Udfør kommando, når en transaktion i tegnebogen ændres (%s i kommandoen erstattes med TxID) - - - - Require a confirmations for change (default: 0) - Kræver en bekræftelser for forandring (default: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Gennemtving transaktions omkostninger scripts til at bruge canoniske PUSH operatører (default: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Udfør kommando, når en relevant advarsel er modtaget (% s i cmd erstattes af meddelelse) - - - - Upgrade wallet to latest format - Opgrader tegnebog til seneste format - - - - Set key pool size to <n> (default: 100) - Angiv nøglepoolstørrelse til <n> (standard: 100) - - - - Rescan the block chain for missing wallet transactions - Gennemsøg blokkæden for manglende tegnebogstransaktioner - - - - How many blocks to check at startup (default: 2500, 0 = all) - Hvor mange blokke til at kontrollere ved opstart (standard: 2500, 0 = alle) - - - - How thorough the block verification is (0-6, default: 1) - Hvor grundig blok verifikation er (0-6, default: 1) - - - - Imports blocks from external blk000?.dat file - Importere blokke fra ekstern blk000?. Dat fil - - - - Use OpenSSL (https) for JSON-RPC connections - Brug OpenSSL (https) for JSON-RPC-forbindelser - - - - Server certificate file (default: server.cert) - Servercertifikat-fil (standard: server.cert) - - - - Server private key (default: server.pem) - Serverens private nøgle (standard: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Acceptable ciphers (default: TLSv1 + HØJ:! SSLv2: aNULL: eNULL: AH: 3DES: @ styrke) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Fejl: Pung låst for at udregne rente, ude af stand til at skabe transaktion. - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - ADVARSEL: Ugyldig checkpoint fundet! Viste transaktioner er måske ikke korrekte! Du kan være nødt til at opgradere, eller underrette udviklerne. - - - - This help message - Denne hjælpebesked - - - - Wallet %s resides outside data directory %s. - Wallet% s placeret udenfor data mappe% s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Kan ikke få en lås på data mappe% s. ShadowCoin kører sikkert allerede. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Kunne ikke tildele %s på denne computer (bind returnerede fejl %d, %s) - - - - Connect through socks proxy - Tilslut gennem socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Tillad DNS-opslag for -addnode, -seednode og -connect - - - - Loading addresses... - Indlæser adresser... - - - - Error loading blkindex.dat - Fejl ved indlæsning af blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Fejl ved indlæsning af wallet.dat: Tegnebog ødelagt - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Fejl ved indlæsning af wallet.dat: Wallet kræver en nyere version af ShadowCoin - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - Det er nødvendig for wallet at blive omskrevet: Genstart ShadowCoin for fuldføre - - - - Error loading wallet.dat - Fejl ved indlæsning af wallet.dat - - - - Invalid -proxy address: '%s' - Ugyldig -proxy adresse: '%s' - - - - Unknown network specified in -onlynet: '%s' - Ukendt netværk anført i -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Ukendt -socks proxy-version: %i - - - - Cannot resolve -bind address: '%s' - Kan ikke finde -bind adressen: '%s' - - - - Cannot resolve -externalip address: '%s' - Kan ikke finde -externalip adressen: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Ugyldigt beløb for -paytxfee=<amount>: '%s' - - - - Error: could not start node - Fejl: kunne ikke starte node - - - - Sending... - Sender... - - - - Invalid amount - Ugyldigt beløb - - - - Insufficient funds - Manglende dækning - - - - Loading block index... - Indlæser blokindeks... - - - - Add a node to connect to and attempt to keep the connection open - Tilføj en knude til at forbinde til og forsøg at holde forbindelsen åben - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Kunne ikke binde sig til% s på denne computer. ShadowCoin kører sikkert allerede. - - - - Fee per KB to add to transactions you send - Gebyr pr KB som tilføjes til transaktioner, du sender - - - - Invalid amount for -mininput=<amount>: '%s' - Ugyldigt beløb for-mininput = <beløb>: '% s' - - - - Loading wallet... - Indlæser tegnebog... - - - - Cannot downgrade wallet - Kan ikke nedgradere tegnebog - - - - Cannot initialize keypool - Kan ikke initialisere keypool - - - - Cannot write default address - Kan ikke skrive standardadresse - - - - Rescanning... - Genindlæser... - - - - Done loading - Indlæsning gennemført - - - - To use the %s option - For at bruge %s mulighed - - - - Error - Fejl - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Du skal angive rpcpassword=<password> i konfigurationsfilen: -%s -Hvis filen ikke eksisterer, opret den og giv ingen andre end ejeren læserettighed. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_de.ts b/src/qt/locale/umbra_de.ts deleted file mode 100644 index be856dbe07..0000000000 --- a/src/qt/locale/umbra_de.ts +++ /dev/null @@ -1,3417 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Über ShadowCoin - - - - <b>ShadowCoin</b> version - <b>Umbra</b> Version - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Bezeichnung - - - - Address - Adresse - - - - pubkey - öffentlicher Schlüssel - - - - stealth - Stealth - - - - (no label) - (keine Bezeichnung) - - - - Stealth Address - Stealth Adresse - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Passphrase Dialog - - - - Enter passphrase - Passphrase eingeben - - - - New passphrase - Neue Passphrase - - - - Repeat new passphrase - Neue Passphrase bestätigen - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - Anteil der im Netz reift und nur Zinsen kreiert. - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Geben Sie die neue Passphrase für die Wallet ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>10 oder mehr zufälligen Zeichen</b> oder <b>8 oder mehr Wörtern</b>. - - - - Encrypt wallet - Wallet verschlüsseln - - - - This operation needs your wallet passphrase to unlock the wallet. - Dieser Vorgang benötigt ihre Passphrase, um die Wallet zu entsperren. - - - - Unlock wallet - Wallet entsperren - - - - This operation needs your wallet passphrase to decrypt the wallet. - Dieser Vorgang benötigt ihre Passphrase, um die Wallet zu entschlüsseln. - - - - Decrypt wallet - Wallet entschlüsseln - - - - Change passphrase - Passphrase ändern - - - - Enter the old and new passphrase to the wallet. - Geben Sie die alte und neue Wallet-Passphrase ein. - - - - Confirm wallet encryption - Wallet-Verschlüsselung bestätigen - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Warnung: wenn sie ihr Wallet verschlüsseln und ihre Passphrase verlieren, werden sie auch alle Münzen verlieren. - - - - Are you sure you wish to encrypt your wallet? - Sind Sie sich sicher, dass Sie ihre Wallet verschlüsseln möchten? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - WICHTIG: Alle vorherigen Wallet-Sicherungen sollten durch die neu erzeugte, verschlüsselte Wallet ersetzt werden. Aus Sicherheitsgründen werden vorherige Sicherungen der unverschlüsselten Wallet nutzlos, sobald Sie die neue, verschlüsselte Wallet verwenden. - - - - - Warning: The Caps Lock key is on! - Warnung: Die Feststelltaste ist aktiviert! - - - - - Wallet encrypted - Wallet verschlüsselt - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin schließt sich jetzt um die Verschlüsselung abzuschließen. Merke: Dass ein verschlüsseltes Wallet nicht absolut vor Diebstahl, durch Computer Malware, geschützt ist. - - - - - - - Wallet encryption failed - Wallet-Verschlüsselung fehlgeschlagen - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Die Wallet-Verschlüsselung ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Wallet wurde nicht verschlüsselt. - - - - - The supplied passphrases do not match. - Die eingegebenen Passphrasen stimmen nicht überein. - - - - Wallet unlock failed - Wallet-Entsperrung fehlgeschlagen - - - - - - The passphrase entered for the wallet decryption was incorrect. - Die eingegebene Passphrase zur Wallet-Entschlüsselung war nicht korrekt. - - - - Wallet decryption failed - Wallet-Entschlüsselung fehlgeschlagen - - - - Wallet passphrase was successfully changed. - Die Wallet-Passphrase wurde erfolgreich geändert. - - - - ClientModel - - - Network Alert - Netzwerkalarm - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - Anzahl: - - - - Bytes: - Byte: - - - - Amount: - Betrag: - - - - Priority: - Priorität: - - - - Fee: - Gebühr: - - - - Low Output: - Zu geringer Ausgabebetrag: - - - - - no - nein - - - - After Fee: - Abzüglich Gebühr: - - - - Change: - Wechselgeld: - - - - (un)select all - Alles (de)selektieren - - - - Tree mode - Baumansicht - - - - List mode - Listenansicht - - - - Amount - Betrag - - - - Label - Bezeichnung - - - - Address - Adresse - - - - Date - Datum - - - - Confirmations - Bestätigungen - - - - Confirmed - Bestätigt - - - - Priority - Priorität - - - - Copy address - Adresse kopieren - - - - Copy label - Bezeichnung kopieren - - - - - Copy amount - Betrag kopieren - - - - Copy transaction ID - Transaktions-ID kopieren - - - - Copy quantity - Anzahl kopieren - - - - Copy fee - Gebühr kopieren - - - - Copy after fee - Abzüglich Gebühr kopieren - - - - Copy bytes - Byte kopieren - - - - Copy priority - Priorität kopieren - - - - Copy low output - Zu geringen Ausgabebetrag kopieren - - - - Copy change - Wechselgeld kopieren - - - - highest - am höchsten - - - - high - hoch - - - - medium-high - mittel-hoch - - - - medium - mittel - - - - low-medium - niedrig-mittel - - - - low - niedrig - - - - lowest - am niedrigsten - - - - - DUST - STAUB - - - - - yes - ja - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Diese Bezeichnung wird rot, wenn die Transaktion größer als 10000 Bytes ist. - -Dies bedeutet eine Gebühr von min. %1 per kb ist benötigt. - -Kann je nach +/- 1 Byte per Eingabe variieren. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Transaktionen mit höherer Priorität gehen schneller in einen Block. - -Diese Bezeichnung wird rot, sobald die Priorität niedriger ist als Mittel. - -Dies bedeutet eine Gebühr von min. %1 per kb ist benötigt. - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Diese Bezeichnung wird rot, wenn der empfangene Wert kleiner als %1 ist. - -Dies bedeutet eine Gebühr von min. %2 ist benötigt. - -Werte unter 0.546 mal der minimalen Gebühr werden als Staub angezeigt. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Diese Bezeichnung wird rot, wenn die Änderung ist kleiner als %1 - -Dies bedeutet eine Gebühr von min %2 ist benötigt - - - - - (no label) - (keine Bezeichnung) - - - - change from %1 (%2) - Wechselgeld von %1 (%2) - - - - (change) - (Wechselgeld) - - - - EditAddressDialog - - - Edit Address - Adresse bearbeiten - - - - &Label - &Bezeichnung - - - - The label associated with this address book entry - Die Kennzeichnung verbunden mit diesem Adressbucheintrag. - - - - &Address - &Adresse - - - - The address associated with this address book entry. This can only be modified for sending addresses. - Die Adresse verknüpft mit diesem Adressbucheintrag. Kann nur bei Ausgangsadressen verändert werden. - - - - &Stealth Address - Stealth Adresse - - - - New receiving address - Neue Empfangsadresse - - - - New sending address - Neue Zahlungsadresse - - - - Edit receiving address - Empfangsadresse bearbeiten - - - - Edit sending address - Zahlungsadresse bearbeiten - - - - The entered address "%1" is already in the address book. - Die eingegebene Adresse "%1" befindet sich bereits im Adressbuch. - - - - The entered address "%1" is not a valid ShadowCoin address. - Die eingegebene Adresse "%1" ist keine gültige ShadowCoin Adresse. - - - - Could not unlock wallet. - Wallet konnte nicht entsperrt werden. - - - - New key generation failed. - Generierung eines neuen Schlüssels fehlgeschlagen. - - - - GUIUtil::HelpMessageBox - - - version - version - - - - - Shadow - Shadow - - - - Usage: - Benutzung: - - - - command-line options - Kommandozeilen optionen - - - - UI options - Interface Optionen - - - - Set language, for example "de_DE" (default: system locale) - Sprache einstellen, zum Beispiel "de_DE" (default: system locale) - - - - Start minimized - Minimiert starten - - - - Show splash screen on startup (default: 1) - Zeige Splash Screen beim starten (default: 1) - - - - MessageModel - - - Type - Type - - - - Sent Date Time - Gesendet Datum - - - - Received Date Time - Empfangen Datum - - - - Label - Bezeichnung - - - - To Address - Zur Adresse - - - - From Address - Von Adresse - - - - Message - Nachricht - - - - Send Secure Message - Sende sichere Nachricht - - - - Send failed: %1. - Senden fehlgeschlagen: %1. - - - - - (no label) - (keine Bezeichnung) - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - Fenster konnte nicht gestartet werden: click-to-pay handler - - - - PeerTableModel - - - Address/Hostname - Adresse/Hostnamen - - - - User Agent - Benutzer Agent - - - - Ping Time - Ping Zeit - - - - QObject - - - %1 d - %1 Tag - - - - %1 h - %1 Std. - - - - %1 m - %1 Min. - - - - - %1 s - %1 Sek. - - - - None - Keine - - - - N/A - N/A - - - - %1 ms - %1 ms - - - - RPCConsole - - - Client name - Clientname - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - k.A. - - - - Client version - Clientversion - - - - &Information - &Information - - - - Shadow - Debug window - Shadow Debug Fenster - - - - Shadow Core - Shadow Core - - - - Using OpenSSL version - Verwendete OpenSSL-Version - - - - Using BerkeleyDB version - Verwendete BerkeleyDB Version - - - - Startup time - Startzeit - - - - Network - Netzwerk - - - - Name - Name - - - - Number of connections - Anzahl Verbindungen - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - Zeige eine Hilfe Liste für Shadow an, um Terminal befehle zu erhalten. - - - - &Network Traffic - & Netzwerk Traffic - - - - &Clear - &Leeren - - - - Totals - Total - - - - - In: - In: - - - - - Out: - Out: - - - - &Peers - &Nutzer - - - - - - Select a peer to view detailed information. - Einen Nutzer auswählen um detaillierte Informationen zu sehen. - - - - Peer ID - Nutzer ID - - - - Direction - Richtung - - - - Version - Version - - - - User Agent - Nutzer Agent - - - - Services - Dienste - - - - Starting Height - Starthöhe - - - - Sync Height - Sync Höhe - - - - Ban Score - Verbiete Score - - - - Connection Time - Verbindungszeit - - - - Last Send - Zuletzt gesendet - - - - Last Receive - Zuletzt Empfangen - - - - Bytes Sent - Bytes gesendet - - - - Bytes Received - Bytes Empfangen - - - - Ping Time - Ping - - - - Time Offset - Versetzte Zeit - - - - Block chain - Block kette - - - - Current number of blocks - Aktuelle Anzahl Blöcke - - - - Estimated total blocks - Geschätzte Gesamtzahl Blöcke - - - - Last block time - Letzte Blockzeit - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - Öffne die Shadow Debug Datei vom derzeitigen Ordner Pfad. Dies kann ein paar Sekunden für eine größere Datei sein. - - - - &Open - &Öffnen - - - - Command-line options - Kommandozeilen Optionen: - - - - &Show - &Zeigen - - - - &Console - &Konsole - - - - Build date - Erstellungsdatum - - - - Debug log file - Debugprotokolldatei - - - - Clear console - Konsole zurücksetzen - - - - Welcome to the Shadow Core RPC console. - Willkommen zur Shadow Core RPC Konsole - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Pfeiltaste hoch und runter, um den Verlauf durchzublättern und <b>Strg-L</b>, um die Konsole zurückzusetzen. - - - - Type <b>help</b> for an overview of available commands. - Bitte <b>help</b> eingeben, um eine Übersicht verfügbarer Befehle zu erhalten. - - - - via %1 - mit %1 - - - - - never - Niemals - - - - Inbound - Eingehend - - - - Outbound - Ausgehend - - - - Unknown - Unbekannt - - - - - Fetching... - Holen... - - - - ShadowBridge - - - Incoming Message - Eingehende Nachricht - - - - default - Standard - - - - <b>%1</b> to %2 (%3) - <b>%1</b> zu %2 (%3) - - - - <b>%1</b> to SHADOW %2 (%3) - <b>%1</b> zu SHADOW %2 (%3) - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - <b>%1</b> SHADOW, Ring Größe %2 zu SHADOW %3 (%4) - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - <b>%1</b> SHADOW, Ring Größe %2 zu SDC %3 (%4) - - - - - - - Error: - Fehler: - - - - Unknown txn type detected %1. - Unbekannter txn Typ entdeckt %1 - - - - Input types must match for all recipients. - Eingabewert muss für alle Empfänger passen. - - - - Ring sizes must match for all recipients. - Ring Größe muss für alle Empfänger passen. - - - - Ring size outside range [%1, %2]. - Ring size outside range [%1, %2]. - - - - - Confirm send coins - Senden der Münzen bestätigen - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - Sind sie sicher die Münzen zu senden ? -Ring Größe von eins ist nicht anonym und schädigt das Netzwerk. - - - - - and - und - - - - Are you sure you want to send %1? - Sind sie sicher den Betrag zu senden %1? - - - - - - - - - - - - - - - - - - - Send Coins - Sende Münzen - - - - The change address is not valid, please recheck. - Die veränderte Adresse ist nicht korrekt, bitte überprüfen. - - - - - The recipient address is not valid, please recheck. - Die Empfängeradresse ist nicht korrekt, bitte überprüfen. - - - - The amount to pay must be larger than 0. - Der Wert zum bezahlen muss größer als 0 sein. - - - - The amount exceeds your balance. - Der Wert übersteigt ihre Bilanz. - - - - The total exceeds your balance when the %1 transaction fee is included. - Der Wert übersteigt ihre Bilanz wenn die %1 Transaktionsgebühr beträgt. - - - - - Duplicate address found, can only send to each address once per send operation. - Duplizierte Adresse gefunden, nur einmaliges Senden zu den Adressen per Senden Operation erlaubt. - - - - Error: Transaction creation failed. - Fehler: Transaktion Erstellung fehlgeschlagen. - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Fehler: Die Transaktion wurde abgewiesen. Das passiert beispielsweise wenn Münzen ihrer Wallet bereits versendet wurden, zbs. wenn eine Kopie der Wallet.dat genutzt wird, wo die Coins noch nicht als gezahlt markiert sind. - - - - Error: Narration is too long. - Fehler: Kommentar ist zu lang. - - - - Error: Ring Size Error. - Fehler: Ring Größe Fehler. - - - - Error: Input Type Error. - Fehler: Input Type Fehler. - - - - Error: Must be in full mode to send anon. - Fehler: Muss in Vollen Modus sein um anonym zu senden. - - - - Error: Invalid Stealth Address. - Fehler: ungültige Stealth Adresse - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - Der Totalwert übersteigt ihre Shadow Bilanz wenn die Transaktionsgebühr 1% mit eingerechnet wird. - - - - Error generating transaction. - Fehler erstelle Transaktion - - - - Error generating transaction: %1 - Fehler: erstelle Transaktion %1 - - - - - - - - Send Message - Sende Nachricht - - - - The message can't be empty. - Die Nachricht kann nicht leer sein. - - - - Error: Message creation failed. - Fehler: Nachricht erstellen fehlgeschlagen. - - - - Error: The message was rejected. - Fehler: Die Nachricht wurde zurückgewiesen. - - - - Sanity Error! - Fähigkeits Fehler - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - Fehler: ein Fähigkeits Check hat den Transfer eines nicht gruppierten Privaten Schlüssel verhindert, bitte schließen sie ihr Wallet und reichen sie den Fehler so früh wie möglich an das Entwickler Team weiter. - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - Bezeichnung: - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - Bezeichnung - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - (keine Bezeichnung) - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - Ein fataler Fehler tritt hervor. Shadow kann nicht länger sicher fortfahren und wird beendet. - - - - - Umbra - Umbra - - - - Client - Client - - - - E&xit - E&xit - - - - Quit application - Beende Programm - - - - &About ShadowCoin - &Über ShadowCoin - - - - Show information about ShadowCoin - Zeige Informationen über ShadowCoin - - - - About &Qt - Über &Qt - - - - Show information about Qt - Zeige Informationen über Qt - - - - &Options... - &Optionen... - - - - Modify configuration options for ShadowCoin - Ändere Konfigurationsoptionen für ShadowCoin - - - - &Show / Hide - &Zeigen / Verstecken - - - - &Encrypt Wallet... - &Wallet Verschlüsseln... - - - - Encrypt or decrypt wallet - Wallet Ver- oder Entschlüsseln. - - - - &Backup Wallet... - &Wallet Kopie Sichern - - - - Backup wallet to another location - Wallet Kopie in einem anderen Pfad speichern. - - - - &Change Passphrase... - &Passphrase ändern - - - - Change the passphrase used for wallet encryption - Ändere die Passphrase für die Wallet Verschlüsselung - - - - &Unlock Wallet... - &Wallet entschlüsseln - - - - Unlock wallet - Wallet entschlüsseln - - - - &Lock Wallet - &Wallet sperren - - - - Lock wallet - Wallet sperren - - - - &Debug window - &Debug Fenster - - - - Open debugging and diagnostic console - Öffne debugging und diagnostic Konsole - - - - &File - &Datei - - - - &Settings - &Einstellungen - - - - &Help - &Hilfe - - - - Wallet - Wallet - - - - - [testnet] - [Testnetzwerk] - - - - - Umbra client - Umbra client - - - - %n active connection(s) to ShadowCoin network - - - - - block - block - - - - header - Header - - - - blocks - Blöcke - - - - headers - Headers - - - - - Synchronizing with network... - Synchronisieren mit Netzwerk - - - - Downloading filtered blocks... - Download gefilterte Blocks... - - - - ~%1 filtered block(s) remaining (%2% done). - ~%1 gefilterte block(s) verbleibend (%2% fertig). - - - - Importing blocks... - - - - - ~%n block(s) remaining - ~%n block(s) verbleiben~%n block(s) verbleiben - - - - - Imported - Importiert - - - - - Downloaded - Downloaded - - - - %1 of %2 %3 of transaction history (%4% done). - %1 of %2 %3 von Transaktionen Geschichte (%4% fertig). - - - - %1 blocks of transaction history. - %1 Blöcke der Transaktionsgeschichte - - - - %n second(s) ago - %n Sekunden bevor%n Sekunden bevor - - - - %n minute(s) ago - %n Minuten bevor%n Minuten bevor - - - - %n hour(s) ago - %n Stunden bevor%n Stunden bevor - - - - %n day(s) ago - %n Tage bevor%n Tage bevor - - - - Up to date - aktuell - - - - Catching up... - Aufholen... - - - - Last received %1 was generated %2. - Letzter Empfangen %1 wurde generiert %2. - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Die Transaktionsgröße ist über dem Limit. Sie können die Transaktion trotzdem fortsetzen mit einer Gebühr von %1, die Gebühr geht zu den Nodes die ihre Transaktion verarbeiten und das Netzwerk unterstützen. Möchten sie die Gebühr bezahlen ? - - - - Confirm transaction fee - Bestätigen der Transaktionsgebühr - - - - Sent transaction - Sende Transaktion - - - - Incoming transaction - Eingehende Transaktion - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Datum: %1 -Wert: %2 -Type: %3 -Adresse: %4 - - - - - - Incoming Message - Eingehende Nachricht - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - Datum: %1 -Von Adresse: %2 -Zur Adresse: %3 -Nachricht: %4 - - - - - - URI handling - URI Handling - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - URI kann nicht gefasst werden! Dies kann zbs. durch eine ungültige ShadowCoin Adresse ausgelöst werden. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - Wallet ist <b>verschlüsselt</b> und derzeit <b>geöffnet</b>nur für Staking - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Wallet ist <b>verschlüsselt</b> und derzeit <b>geöffnet</b> - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - Wallet ist <b>verschlüsselt</b> und derzeit <b>geschlossen</b> - - - - Backup Wallet - Wallet Kopie Sichern - - - - Wallet Data (*.dat) - Wallet Datei (*.dat) - - - - Backup Failed - Backup fehlgeschlagen - - - - There was an error trying to save the wallet data to the new location. - Ein Fehler hat das speichern der Wallet Kopie in einen neuen Pfad verhindert. - - - - Lock Wallet - sperre Wallet - - - - Error: Wallet must first be encrypted to be locked. - Fehler: Wallet muss als erstes verschlüsselt werden um es zu sperren. - - - - %n second(s) - %n Sekunden%n Sekunden - - - - %n minute(s) - %n Minuten%n Minuten - - - - %n hour(s) - %n Stunden%n Stunden - - - - %n day(s) - %n Tage%n Tage - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - Staking. -Deine Bilanz ist %1 -Netzwerk Bilanz ist %2 -Erwartete Zeit zum Stake Erhalt ist %3 - - - - Not staking because wallet is in thin mode - Nicht Staking weil das Wallet in Thin Mode ausgeführt wird - - - - Not staking, staking is disabled - Nicht Staking, da Staking deaktiviert ist - - - - Not staking because wallet is locked - Nicht Staking weil das Wallet gesperrt ist. - - - - Not staking because wallet is offline - Nicht Staking weil Wallet offline ist - - - - Not staking because wallet is syncing - Nicht Staking weil das Wallet am synchronisieren ist - - - - Not staking because you don't have mature coins - Nicht Staking weil sie keine gereiften Münzen haben - - - - Not staking - Nicht Staking - - - - Received with - Erhalten durch - - - - Received from - Erhalten von - - - - Sent to - Gesendet zu - - - - Payment to yourself - Bezahlung zu ihnen selbst - - - - Mined - Mined - - - - Received shadow - Shadow erhalten - - - - Sent shadow - Sende Shadow - - - - Other - andere - - - - TrafficGraphWidget - - - KB/s - KB/s - - - - TransactionDesc - - - Open until %1 - Offen bis %1 - - - - Open for %n block(s) - Offen für %n weitere BlöckeOffen für %n weitere Blöcke - - - - conflicted - kollidiert - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/unbestätigt - - - - %1 confirmations - %1 Bestätigungen - - - - Status - Status - - - - , broadcast through %n node(s) - , über %n Knoten übertragen, über %n Knoten übertragen - - - - Date - Datum - - - - Source - Quelle - - - - Generated - Generiert - - - - - - From - Von - - - - - - - To - An - - - - - - - own address - eigene Adresse - - - - - label - bezeichnung - - - - - - - - Credit - Gutschrift - - - - matures in %n more block(s) - reift noch %n weiteren Blockreift noch %n weitere Blöcke - - - - not accepted - nicht angenommen - - - - - - - Debit - Belastung - - - - Transaction fee - Transaktionsgebühr - - - - Net amount - Nettobetrag - - - - Message - Nachricht signieren - - - - Comment - Kommentar - - - - Transaction ID - Transaktions-ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Generated coins must mature 510 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. {120 ?} - - - - Debug information - Debuginformationen - - - - Transaction - Transaktion - - - - Inputs - Eingaben - - - - Amount - Betrag - - - - true - wahr - - - - false - falsch - - - - , has not been successfully broadcast yet - , wurde noch nicht erfolgreich übertragen - - - - - unknown - unbekannt - - - - TransactionDescDialog - - - Transaction details - Transaktionsdetails - - - - This pane shows a detailed description of the transaction - Dieser Bereich zeigt eine detaillierte Beschreibung der Transaktion an - - - - TransactionTableModel - - - Date - Datum - - - - Type - Typ - - - - Address - Adresse - - - - Amount - Betrag - - - - Open until %1 - Offen bis %1 - - - - Confirmed (%1 confirmations) - Bestätigt (%1 Bestätigungen) - - - - Open for %n more block(s) - Offen für %n weiteren BlockOffen für %n weitere Blöcke - - - - Narration - Narration - - - - Offline - Offline - - - - Unconfirmed - Unbestätigt: - - - - Confirming (%1 of %2 recommended confirmations) - wird Bestätigt (%1 von %2 Bestätigungen) - - - - Conflicted - Konflikt - - - - Immature (%1 confirmations, will be available after %2) - Unreif (%1 Bestätigungen, wird verfügbar sein nach %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Dieser Block wurde von keinem anderen Knoten empfangen und wird wahrscheinlich nicht angenommen werden! - - - - Generated but not accepted - Generiert, jedoch nicht angenommen - - - - (n/a) - (k.A.) - - - - Transaction status. Hover over this field to show number of confirmations. - Transaktionsstatus. Fahren Sie mit der Maus über dieses Feld, um die Anzahl der Bestätigungen zu sehen. - - - - Date and time that the transaction was received. - Datum und Uhrzeit als die Transaktion empfangen wurde. - - - - Type of transaction. - Art der Transaktion - - - - Destination address of transaction. - Zieladresse der Transaktion - - - - Amount removed from or added to balance. - Der Betrag, der dem Kontostand abgezogen oder hinzugefügt wurde. - - - - WalletModel - - - - Sending... - Wird gesendet... - - - - bitcoin-core - - - ShadowCoin version - ShadowCoin Version - - - - Usage: - Benutzung: - - - - Send command to -server or shadowcoind - Kommando versenden an -server oder shadowcoind - - - - List commands - Befehle auflisten - - - - Get help for a command - Hilfe zu einem Befehl erhalten - - - - Options: - Optionen: - - - - Specify configuration file (default: shadowcoin.conf) - Konfigurationsdatei angeben (Standard: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - PID Datei angeben (Standard: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Wallet-Datei festlegen (innerhalb des Datenverzeichnisses) - - - - Specify data directory - Datenverzeichnis festlegen - - - - Set database cache size in megabytes (default: 25) - Größe des Datenbankcaches in MB festlegen (Standard: 25) - - - - Set database disk log size in megabytes (default: 100) - Einstellen der Datenbank Log Größe in Megabytes (default:100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Maximal <n> Verbindungen zu Gegenstellen aufrechterhalten (Standard: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Mit dem Knoten verbinden um Adressen von Gegenstellen abzufragen, danach trennen - - - - Specify your own public address - Die eigene öffentliche Adresse angeben - - - - Bind to given address. Use [host]:port notation for IPv6 - Bind to given address. Use [host]:port notation for IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Um das Netzwerk zu schützen und Shadow zu erhalten, staken sie ihre Münzen (default: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Schwellenwert, um Verbindungen zu sich nicht konform verhaltenden Gegenstellen zu beenden (Standard: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Anzahl Sekunden, während denen sich nicht konform verhaltenden Gegenstellen die Wiederverbindung verweigert wird (Standard: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Beim Einrichten des abzuhörenden RPC-Ports %u für IPv4 ist ein Fehler aufgetreten: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Detach block and address databases. Increases shutdown time (default: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Fehler: Transaktion wurde abgelehnt. Das kann geschehen wenn einige Coins in der Brieftasche bereits ausgegeben wurden, wenn von einer Kopie der wallet.dat Coins ausgegeben wurden werden sie hier nicht als Ausgabe aufgeführt. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Fehler: Diese Transaktion benötigt eine Transaktionsgebühr von mindestens %s wegen der Anzahl, Komplexität oder Benutzung von neuerlich erhaltenen Beträgen. - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - Accept command line and JSON-RPC commands - Kommandozeilenbefehle und JSON-RPC-Befehle annehmen - - - - Error: Transaction creation failed - Fehler: Erstellung der Transaktion fehlgeschlagen - - - - Error: Wallet locked, unable to create transaction - Fehler: Brieftasche verschlüsselt, unfähig Transaktion zu erstellen - - - - Importing blockchain data file. - Importiere Block Kette aus Datei - - - - Importing bootstrap blockchain data file. - Importiere Bootstrap Blockchain Datei - - - - Run in the background as a daemon and accept commands - Als Hintergrunddienst starten und Befehle annehmen - - - - Use the test network - Das Testnetz verwenden - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Eingehende Verbindungen annehmen (Standard: 1, wenn nicht -proxy oder -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Beim Einrichten des abzuhörenden RPC-Ports %u für IPv6 ist ein Fehler aufgetreten, es wird auf IPv4 zurückgegriffen: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Warnung: -paytxfee ist auf einen sehr hohen Wert festgelegt! Dies ist die Gebühr die beim Senden einer Transaktion fällig wird. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Wanung : Bitte prüfen Sie ob Datum und Uhrzeit richtig eingestellt sind. Wenn das Datum falsch ist ShadowCoin nicht richtig funktionieren. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warnung: Lesen von wallet.dat fehlgeschlagen! Alle Schlüssel wurden korrekt gelesen, Transaktionsdaten bzw. Adressbucheinträge fehlen aber möglicherweise oder sind inkorrekt. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Warnung: wallet.dat beschädigt, Rettung erfolgreich! Original wallet.dat wurde als wallet.{Zeitstempel}.dat in %s gespeichert. Falls ihr Kontostand oder Transaktionen nicht korrekt sind, sollten Sie von einer Datensicherung wiederherstellen. - - - - Attempt to recover private keys from a corrupt wallet.dat - Versucht private Schlüssel aus einer beschädigten wallet.dat wiederherzustellen - - - - Block creation options: - Blockerzeugungsoptionen: - - - - Connect only to the specified node(s) - Nur mit dem/den angegebenen Knoten verbinden - - - - Discover own IP address (default: 1 when listening and no -externalip) - Eigene IP-Adresse erkennen (Standard: 1, wenn abgehört wird und nicht -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Fehler, es konnte kein Port abgehört werden. Wenn dies so gewünscht wird -listen=0 verwenden. - - - - Find peers using DNS lookup (default: 1) - Find peers using DNS lookup (default: 1) - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximale Größe, <n> * 1000 Byte, des Empfangspuffers pro Verbindung (Standard: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maximale Größe, <n> * 1000 Byte, des Sendepuffers pro Verbindung (Standard: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Verbinde nur zu Knoten des Netztyps <net> (IPv4, IPv6 oder Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL-Optionen: (siehe Bitcoin-Wiki für SSL-Installationsanweisungen) - - - - Select the version of socks proxy to use (4-5, default: 5) - Wähle sie die Version des Socks Proxy zum nutzen aus (4-5, default: 5) - - - - Send trace/debug info to console instead of debug.log file - Rückverfolgungs- und Debuginformationen an die Konsole senden anstatt sie in die Datei debug.log zu schreiben - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Minimale Blockgröße in Byte festlegen (Standard: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Verkleinere Datei debug.log beim Starten des Clients (Standard: 1, wenn kein -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Verbindungstimeout in Millisekunden festlegen (Standard: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - UPnP verwenden, um die Portweiterleitung einzurichten (Standard: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - UPnP verwenden, um die Portweiterleitung einzurichten (Standard: 1, wenn abgehört wird) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Proxy benutzen um versteckte Services zu erreichen (Standard: selbe Einstellung wie Proxy) - - - - Username for JSON-RPC connections - Benutzername für JSON-RPC-Verbindungen - - - - Verifying database integrity... - Überprüfe Datenbank Integrität... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - Warnung: Festplatte hat wenig freien Speicher - - - - Warning: This version is obsolete, upgrade required! - Warnung: Diese Version is veraltet, Aktualisierung erforderlich! - - - - wallet.dat corrupt, salvage failed - wallet.dat beschädigt, Rettung fehlgeschlagen - - - - Password for JSON-RPC connections - Passwort für JSON-RPC-Verbindungen - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - Knoten die IRC Chat nutzen auffinden (Standard: 1) (0)?) - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - Beim erstellen einer Transaktion werden eingaben kleiner als dieser Wert ignoriert (Standard 0,01) - - - - Allow JSON-RPC connections from specified IP address - JSON-RPC-Verbindungen von der angegebenen IP-Adresse erlauben - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Sende Befehle an Knoten <ip> (Standard: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Kommando ausführen wenn der beste Block wechselt (%s im Kommando wird durch den Hash des Blocks ersetzt) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Kommando ausführen wenn sich eine Wallet-Transaktion verändert (%s im Kommando wird durch die TxID ersetzt) - - - - Require a confirmations for change (default: 0) - Benötigt eine Bestätigung zur Änderung (Standard: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Kommando ausführen wenn eine relevante Meldung eingeht (%s in cmd wird von der Meldung ausgetauscht) - - - - Upgrade wallet to latest format - Wallet auf das neueste Format aktualisieren - - - - Set key pool size to <n> (default: 100) - Größe des Schlüsselpools festlegen auf <n> (Standard: 100) - - - - Rescan the block chain for missing wallet transactions - Blockkette erneut nach fehlenden Wallet-Transaktionen durchsuchen - - - - How many blocks to check at startup (default: 2500, 0 = all) - Anzahl der zu prüfenden Blöcke bei Programmstart (Standard: 2500, 0 = alle) - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - Importiere Blöcke aus externer blk000?.dat Datei. - - - - Use OpenSSL (https) for JSON-RPC connections - OpenSSL (https) für JSON-RPC-Verbindungen verwenden - - - - Server certificate file (default: server.cert) - Serverzertifikat (Standard: server.cert) - - - - Server private key (default: server.pem) - Privater Serverschlüssel (Standard: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Fehler: Wallet nur für Staking geöffnet, nicht möglich eine Transaktion zu erstellen. - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - WARNUNG : Ungültiger Checkpunkt gefunden! Angezeigte Transaktionen können falsch sein! Du musst vielleicht updaten oder die Entwickler benachrichtigen. - - - - This help message - Dieser Hilfetext - - - - Wallet %s resides outside data directory %s. - Wallet %s liegt außerhalb des Daten Verzeichnisses %s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Kann das Verzeichniss nicht einbinden %s. ShadowCoin Brieftasche läuft wahrscheinlich bereits. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Kann auf diesem Computer nicht an %s binden (von bind zurückgegebener Fehler %d, %s) - - - - Connect through socks proxy - Verbinde über socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Erlaube DNS-Namensauflösung für -addnode, -seednode und -connect - - - - Loading addresses... - Lade Adressen... - - - - Error loading blkindex.dat - Fehler beim laden von blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Fehler beim Laden von wallet.dat: Wallet beschädigt - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Fehler beim Laden wallet.dat. Brieftasche benötigt neuere Version der ShadowCoin Brieftasche. - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - Brieftasche muss neu geschrieben werden. Starte die ShadowCoin Brieftasche neu zum komplettieren. - - - - Error loading wallet.dat - Fehler beim Laden von wallet.dat - - - - Invalid -proxy address: '%s' - Ungültige Adresse in -proxy: '%s' - - - - Unknown network specified in -onlynet: '%s' - Unbekannter Netztyp in -onlynet angegeben: '%s' - - - - Unknown -socks proxy version requested: %i - Unbekannte Proxyversion in -socks angefordert: %i - - - - Cannot resolve -bind address: '%s' - Kann Adresse in -bind nicht auflösen: '%s' - - - - Cannot resolve -externalip address: '%s' - Kann Adresse in -externalip nicht auflösen: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Ungültiger Betrag für -paytxfee=<amount>: '%s' - - - - Error: could not start node - Fehler: Node konnte nicht gestartet werden - - - - Sending... - Wird gesendet... - - - - Invalid amount - Ungültiger Betrag - - - - Insufficient funds - Unzureichender Kontostand - - - - Loading block index... - Lade Blockindex... - - - - Add a node to connect to and attempt to keep the connection open - Mit dem Knoten verbinden und versuchen die Verbindung aufrecht zu halten - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Fehler beim anbinden %s auf diesem Computer. BlaclCoin Client läuft wahrscheinlich bereits. - - - - Fee per KB to add to transactions you send - Gebühr pro KB, zusätzlich zur ausgehenden Transaktion - - - - Invalid amount for -mininput=<amount>: '%s' - Ungültiger Betrag für -mininput=<amount>:'%s' - - - - Loading wallet... - Lade Wallet... - - - - Cannot downgrade wallet - Wallet kann nicht auf eine ältere Version herabgestuft werden - - - - Cannot initialize keypool - Keypool kann nicht initialisiert werden - - - - Cannot write default address - Standardadresse kann nicht geschrieben werden - - - - Rescanning... - Durchsuche erneut... - - - - Done loading - Laden abgeschlossen - - - - To use the %s option - Zur Nutzung der %s Option - - - - Error - Fehler - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Sie müssen den Wert rpcpassword=<passwort> in der Konfigurationsdatei angeben: -%s -Falls die Konfigurationsdatei nicht existiert, erzeugen Sie diese bitte mit Leserechten nur für den Dateibesitzer. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_el.ts b/src/qt/locale/umbra_el.ts deleted file mode 100644 index eba419efd0..0000000000 --- a/src/qt/locale/umbra_el.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - - - - - Address - - - - - pubkey - - - - - stealth - - - - - (no label) - - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - - - - - New passphrase - - - - - Repeat new passphrase - - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - - Encrypt wallet - - - - - This operation needs your wallet passphrase to unlock the wallet. - - - - - Unlock wallet - - - - - This operation needs your wallet passphrase to decrypt the wallet. - - - - - Decrypt wallet - - - - - Change passphrase - - - - - Enter the old and new passphrase to the wallet. - - - - - Confirm wallet encryption - - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_el_GR.ts b/src/qt/locale/umbra_el_GR.ts deleted file mode 100644 index acfb16e251..0000000000 --- a/src/qt/locale/umbra_el_GR.ts +++ /dev/null @@ -1,3390 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Ετικέτα - - - - Address - Διεύθυνση - - - - pubkey - - - - - stealth - - - - - (no label) - (χωρίς ετικέτα) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Φράση πρόσβασης - - - - Enter passphrase - Βάλτε κωδικό πρόσβασης - - - - New passphrase - Νέος κωδικός πρόσβασης - - - - Repeat new passphrase - Επανέλαβε τον νέο κωδικό πρόσβασης - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Εισάγετε τον νέο κωδικό πρόσβασης στον πορτοφόλι <br/> Παρακαλώ χρησιμοποιείστε ένα κωδικό με <b> 10 ή περισσότερους τυχαίους χαρακτήρες</b> ή <b> οχτώ ή παραπάνω λέξεις</b>. - - - - Encrypt wallet - Κρυπτογράφησε το πορτοφόλι - - - - This operation needs your wallet passphrase to unlock the wallet. - Αυτη η ενεργεία χρειάζεται τον κωδικό του πορτοφολιού για να ξεκλειδώσει το πορτοφόλι. - - - - Unlock wallet - Ξεκλειδωσε το πορτοφολι - - - - This operation needs your wallet passphrase to decrypt the wallet. - Αυτη η ενεργεια χρειάζεται τον κωδικο του πορτοφολιου για να αποκρυπτογραφησειι το πορτοφολι. - - - - Decrypt wallet - Αποκρυπτογράφησε το πορτοφολι - - - - Change passphrase - Άλλαξε κωδικο πρόσβασης - - - - Enter the old and new passphrase to the wallet. - Εισάγετε τον παλιό και τον νεο κωδικο στο πορτοφολι. - - - - Confirm wallet encryption - Επιβεβαίωσε την κρυπτογραφηση του πορτοφολιού - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Είστε σίγουροι ότι θέλετε να κρυπτογραφήσετε το πορτοφόλι σας; - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - ΣΗΜΑΝΤΙΚΟ: Τα προηγούμενα αντίγραφα ασφαλείας που έχετε κάνει από το αρχείο του πορτοφόλιου σας θα πρέπει να αντικατασταθουν με το νέο που δημιουργείται, κρυπτογραφημένο αρχείο πορτοφόλιου. Για λόγους ασφαλείας, τα προηγούμενα αντίγραφα ασφαλείας του μη κρυπτογραφημένου αρχείου πορτοφόλιου θα καταστουν άχρηστα μόλις αρχίσετε να χρησιμοποιείτε το νέο κρυπτογραφημένο πορτοφόλι. - - - - - Warning: The Caps Lock key is on! - Προσοχη: το πλήκτρο Caps Lock είναι ενεργο. - - - - - Wallet encrypted - Κρυπτογραφημενο πορτοφολι - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Η κρυπτογραφηση του πορτοφολιού απέτυχε - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Η κρυπτογράφηση του πορτοφολιού απέτυχε λογω εσωτερικού σφάλματος. Το πορτοφολι δεν κρυπτογραφηθηκε. - - - - - The supplied passphrases do not match. - Οι εισαχθέντες κωδικοί δεν ταιριάζουν. - - - - Wallet unlock failed - το ξεκλείδωμα του πορτοφολιού απέτυχε - - - - - - The passphrase entered for the wallet decryption was incorrect. - Ο κωδικος που εισήχθη για την αποκρυπτογραφηση του πορτοφολιού ήταν λαθος. - - - - Wallet decryption failed - Η αποκρυπτογραφηση του πορτοφολιού απέτυχε - - - - Wallet passphrase was successfully changed. - Ο κωδικος του πορτοφολιού άλλαξε με επιτυχία. - - - - ClientModel - - - Network Alert - Ειδοποίηση Δικτύου - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Ποσό: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Ποσό - - - - Label - - - - - Address - Διεύθυνση - - - - Date - Ημερομηνία - - - - Confirmations - - - - - Confirmed - Επικυρωμένες - - - - Priority - - - - - Copy address - Αντιγραφή διεύθυνσης - - - - Copy label - Αντιγραφή επιγραφής - - - - - Copy amount - Αντιγραφή ποσού - - - - Copy transaction ID - Αντιγραφη του ID Συναλλαγής - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (χωρίς ετικέτα) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Επεξεργασία Διεύθυνσης - - - - &Label - &Επιγραφή - - - - The label associated with this address book entry - - - - - &Address - &Διεύθυνση - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Νέα διεύθυνση λήψης - - - - New sending address - Νέα διεύθυνση αποστολής - - - - Edit receiving address - Επεξεργασία διεύθυνσης λήψης - - - - Edit sending address - Επεξεργασία διεύθυνσης αποστολής - - - - The entered address "%1" is already in the address book. - Η διεύθυνση "%1" βρίσκεται ήδη στο βιβλίο διευθύνσεων. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Δεν είναι δυνατό το ξεκλείδωμα του πορτοφολιού. - - - - New key generation failed. - Η δημιουργία νέου κλειδιού απέτυχε. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Όνομα Πελάτη - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - Μη διαθέσιμο - - - - Client version - Έκδοση Πελάτη - - - - &Information - &Πληροφορία - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Χρησιμοποιηση της OpenSSL εκδοσης - - - - Using BerkeleyDB version - - - - - Startup time - Χρόνος εκκίνησης - - - - Network - Δίκτυο - - - - Name - - - - - Number of connections - Αριθμός συνδέσεων - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Αλυσίδα μπλοκ - - - - Current number of blocks - Τρέχον αριθμός μπλοκ - - - - Estimated total blocks - Κατ' εκτίμηση συνολικά μπλοκς - - - - Last block time - Χρόνος τελευταίου μπλοκ - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Άνοιγμα - - - - Command-line options - - - - - &Show - - - - - &Console - &Κονσόλα - - - - Build date - Ημερομηνία κατασκευής - - - - Debug log file - Αρχείο καταγραφής εντοπισμού σφαλμάτων - - - - Clear console - Καθαρισμός κονσόλας - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Χρησιμοποιήστε το πάνω και κάτω βέλος για να περιηγηθείτε στο ιστορικο, και <b>Ctrl-L</b> για εκκαθαριση οθονης. - - - - Type <b>help</b> for an overview of available commands. - Γράψτε <b>help</b> για μια επισκόπηση των διαθέσιμων εντολών - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Ανοιχτό μέχρι %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/χωρίς σύνδεση; - - - - %1/unconfirmed - %1/χωρίς επιβεβαίωση - - - - %1 confirmations - %1 επιβεβαιώσεις - - - - Status - Κατάσταση - - - - , broadcast through %n node(s) - , έχει μεταδοθεί μέσω %n κόμβων, έχει μεταδοθεί μέσω %n κόμβων - - - - Date - Ημερομηνία - - - - Source - Πηγή - - - - Generated - Δημιουργία - - - - - - From - Από - - - - - - - To - Προς - - - - - - - own address - δική σας διεύθυνση - - - - - label - eπιγραφή - - - - - - - - Credit - Πίστωση - - - - matures in %n more block(s) - ωρίμανση σε %n επιπλέον μπλοκωρίμανση σε %n επιπλέον μπλοκ - - - - not accepted - μη αποδεκτό - - - - - - - Debit - Debit - - - - Transaction fee - Τέλος συναλλαγής - - - - Net amount - Καθαρό ποσό - - - - Message - Μήνυμα - - - - Comment - Σχόλιο: - - - - Transaction ID - ID Συναλλαγής: - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Πληροφορίες αποσφαλμάτωσης - - - - Transaction - Συναλλαγή - - - - Inputs - εισροές - - - - Amount - Ποσό - - - - true - αληθής - - - - false - αναληθής - - - - , has not been successfully broadcast yet - , δεν έχει ακόμα μεταδοθεί μ' επιτυχία - - - - - unknown - άγνωστο - - - - TransactionDescDialog - - - Transaction details - Λεπτομέρειες συναλλαγής - - - - This pane shows a detailed description of the transaction - Αυτό το παράθυρο δείχνει μια λεπτομερή περιγραφή της συναλλαγής - - - - TransactionTableModel - - - Date - Ημερομηνία - - - - Type - Τύπος - - - - Address - Διεύθυνση - - - - Amount - Ποσό - - - - Open until %1 - Ανοιχτό μέχρι %1 - - - - Confirmed (%1 confirmations) - Επικυρωμένη (%1 επικυρώσεις) - - - - Open for %n more block(s) - Ανοιχτό για %n μπλοκΑνοιχτό για %n μπλοκ - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Αυτό το μπλοκ δεν έχει παραληφθεί από κανέναν άλλο κόμβο και κατά πάσα πιθανότητα θα απορριφθεί! - - - - Generated but not accepted - Δημιουργήθηκε αλλά απορρίφθηκε - - - - (n/a) - (δ/α) - - - - Transaction status. Hover over this field to show number of confirmations. - Κατάσταση συναλλαγής. Πηγαίνετε το ποντίκι πάνω από αυτό το πεδίο για να δείτε τον αριθμό των επικυρώσεων - - - - Date and time that the transaction was received. - Ημερομηνία κι ώρα λήψης της συναλλαγής. - - - - Type of transaction. - Είδος συναλλαγής. - - - - Destination address of transaction. - Διεύθυνση αποστολής της συναλλαγής. - - - - Amount removed from or added to balance. - Ποσό που αφαιρέθηκε ή προστέθηκε στο υπόλοιπο. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Χρήση: - - - - Send command to -server or shadowcoind - - - - - List commands - Λίστα εντολών - - - - Get help for a command - Επεξήγηση εντολής - - - - Options: - Επιλογές: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Ορισμός φακέλου δεδομένων - - - - Set database cache size in megabytes (default: 25) - Όρισε το μέγεθος της βάσης προσωρινής αποθήκευσης σε megabytes(προεπιλογή:25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Μέγιστες αριθμός συνδέσεων με τους peers <n> (προεπιλογή: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Σύνδεση σε έναν κόμβο για την ανάκτηση διευθύνσεων από ομοτίμους, και αποσυνδέσh - - - - Specify your own public address - Διευκρινίστε τη δικιά σας δημόσια διεύθυνση. - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Όριο αποσύνδεσης προβληματικών peers (προεπιλογή: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Δευτερόλεπτα πριν επιτραπεί ξανά η σύνδεση των προβληματικών peers (προεπιλογή: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Ένα σφάλμα συνέβη καθώς προετοιμαζόταν η πόρτα RPC %u για αναμονή IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Αποδοχή εντολών κονσόλας και JSON-RPC - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Εκτέλεση στο παρασκήνιο κι αποδοχή εντολών - - - - Use the test network - Χρήση του δοκιμαστικού δικτύου - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Να δέχεσαι συνδέσεις από έξω(προεπιλογή:1) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Ένα σφάλμα συνέβη καθώς προετοιμαζόταν η υποδοχη RPC %u για αναμονη του IPv6, επεσε πισω στο IPv4:%s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Προειδοποίηση: Η παράμετρος -paytxfee είναι πολύ υψηλή. Πρόκειται για την αμοιβή που θα πληρώνετε για κάθε συναλλαγή που θα στέλνετε. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Προειδοποίηση : Σφάλμα wallet.dat κατα την ανάγνωση ! Όλα τα κλειδιά αναγνωρισθηκαν σωστά, αλλά τα δεδομένα των συναλλαγών ή καταχωρήσεις στο βιβλίο διευθύνσεων μπορεί να είναι ελλιπείς ή λανθασμένα. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Προειδοποίηση : το αρχειο wallet.dat ειναι διεφθαρμένο, τα δεδομένα σώζονται ! Original wallet.dat αποθηκεύονται ως wallet.{timestamp}.bak στο %s . Αν το υπόλοιπο του ή τις συναλλαγές σας, είναι λάθος θα πρέπει να επαναφέρετε από ένα αντίγραφο ασφαλείας - - - - Attempt to recover private keys from a corrupt wallet.dat - Προσπάθεια για ανακτησει ιδιωτικων κλειδιων από ενα διεφθαρμένο αρχειο wallet.dat - - - - Block creation options: - Αποκλεισμός επιλογων δημιουργίας: - - - - Connect only to the specified node(s) - Σύνδεση μόνο με ορισμένους κόμβους - - - - Discover own IP address (default: 1 when listening and no -externalip) - Ανακαλύψτε την δικη σας IP διεύθυνση (προεπιλογή: 1 όταν ακούει και δεν - externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - ταλαιπωρηθειτε για να ακούσετε σε οποιαδήποτε θύρα. Χρήση - ακούστε = 0 , αν θέλετε αυτό. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Μέγιστος buffer λήψης ανά σύνδεση, <n>*1000 bytes (προεπιλογή: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Μέγιστος buffer αποστολής ανά σύνδεση, <n>*1000 bytes (προεπιλογή: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Συνδέση μόνο σε κόμβους του δικτύου <net> (IPv4, IPv6 ή Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Ρυθμίσεις SSL: (ανατρέξτε στο Bitcoin Wiki για οδηγίες ρυθμίσεων SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Αποστολή πληροφοριών εντοπισμού σφαλμάτων στην κονσόλα αντί του αρχείου debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Ορίστε το μέγιστο μέγεθος μπλοκ σε bytes (προεπιλογή: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Συρρίκνωση του αρχείο debug.log κατα την εκκίνηση του πελάτη (προεπιλογή: 1 όταν δεν-debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Ορισμός λήξης χρονικού ορίου σε χιλιοστά του δευτερολέπτου(προεπιλογή:5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Χρησιμοποίηση του UPnP για την χρήση της πόρτας αναμονής (προεπιλογή:0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Χρησιμοποίηση του UPnP για την χρήση της πόρτας αναμονής (προεπιλογή:1) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Όνομα χρήστη για τις συνδέσεις JSON-RPC - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Προειδοποίηση: Αυτή η έκδοση είναι ξεπερασμένη, απαιτείται αναβάθμιση - - - - wallet.dat corrupt, salvage failed - Το αρχειο wallet.dat ειναι διεφθαρμένο, η διάσωση απέτυχε - - - - Password for JSON-RPC connections - Κωδικός για τις συνδέσεις JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Αποδοχή συνδέσεων JSON-RPC από συγκεκριμένη διεύθυνση IP - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Αποστολή εντολών στον κόμβο <ip> (προεπιλογή: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Εκτέλεσε την εντολή όταν το καλύτερο μπλοκ αλλάξει(%s στην εντολή αντικαθίσταται από το hash του μπλοκ) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Εκτέλεσε την εντολή όταν το καλύτερο μπλοκ αλλάξει(%s στην εντολή αντικαθίσταται από το hash του μπλοκ) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Αναβάθμισε το πορτοφόλι στην τελευταία έκδοση - - - - Set key pool size to <n> (default: 100) - Όριο πλήθους κλειδιών pool <n> (προεπιλογή: 100) - - - - Rescan the block chain for missing wallet transactions - Επανέλεγχος της αλυσίδας μπλοκ για απούσες συναλλαγές - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Χρήση του OpenSSL (https) για συνδέσεις JSON-RPC - - - - Server certificate file (default: server.cert) - Αρχείο πιστοποιητικού του διακομιστή (προεπιλογή: server.cert) - - - - Server private key (default: server.pem) - Προσωπικό κλειδί του διακομιστή (προεπιλογή: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Αυτό το κείμενο βοήθειας - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Αδύνατη η σύνδεση με τη θύρα %s αυτού του υπολογιστή (bind returned error %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Να επιτρέπονται οι έλεγχοι DNS για προσθήκη και σύνδεση κόμβων - - - - Loading addresses... - Φόρτωση διευθύνσεων... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Σφάλμα φόρτωσης wallet.dat: Κατεστραμμένο Πορτοφόλι - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Σφάλμα φόρτωσης αρχείου wallet.dat - - - - Invalid -proxy address: '%s' - Δεν είναι έγκυρη η διεύθυνση διαμεσολαβητή: '%s' - - - - Unknown network specified in -onlynet: '%s' - Άγνωστo δίκτυο ορίζεται σε onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Άγνωστo δίκτυο ορίζεται: %i - - - - Cannot resolve -bind address: '%s' - Δεν μπορώ να γράψω την προεπιλεγμένη διεύθυνση: '%s' - - - - Cannot resolve -externalip address: '%s' - Δεν μπορώ να γράψω την προεπιλεγμένη διεύθυνση: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Μη έγκυρο ποσό για την παράμετρο -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Λάθος ποσότητα - - - - Insufficient funds - Ανεπαρκές κεφάλαιο - - - - Loading block index... - Φόρτωση ευρετηρίου μπλοκ... - - - - Add a node to connect to and attempt to keep the connection open - Προσέθεσε ένα κόμβο για σύνδεση και προσπάθησε να κρατήσεις την σύνδεση ανοιχτή - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Φόρτωση πορτοφολιού... - - - - Cannot downgrade wallet - Δεν μπορώ να υποβαθμίσω το πορτοφόλι - - - - Cannot initialize keypool - - - - - Cannot write default address - Δεν μπορώ να γράψω την προεπιλεγμένη διεύθυνση - - - - Rescanning... - Ανίχνευση... - - - - Done loading - Η φόρτωση ολοκληρώθηκε - - - - To use the %s option - Χρήση της %s επιλογής - - - - Error - Σφάλμα - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Πρέπει να βάλεις ένα κωδικό στο αρχείο παραμέτρων: %s -Εάν το αρχείο δεν υπάρχει, δημιούργησε το με δικαιώματα μόνο για ανάγνωση από τον δημιουργό - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_en.ts b/src/qt/locale/umbra_en.ts deleted file mode 100644 index d2790fa075..0000000000 --- a/src/qt/locale/umbra_en.ts +++ /dev/null @@ -1,3480 +0,0 @@ - - - - - AboutDialog - - - About ShadowCoin - About ShadowCoin - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> version - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - AddressTableModel - - - Label - Label - - - - Address - Address - - - - pubkey - pubkey - - - - stealth - stealth - - - - (no label) - (no label) - - - - Stealth Address - Stealth Address - - - - n/a - n/a - - - - AskPassphraseDialog - - - Passphrase Dialog - Passphrase Dialog - - - - Enter passphrase - Enter passphrase - - - - New passphrase - New passphrase - - - - Repeat new passphrase - Repeat new passphrase - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - For staking only - For staking only - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - Encrypt wallet - Encrypt wallet - - - - This operation needs your wallet passphrase to unlock the wallet. - This operation needs your wallet passphrase to unlock the wallet. - - - - Unlock wallet - Unlock wallet - - - - This operation needs your wallet passphrase to decrypt the wallet. - This operation needs your wallet passphrase to decrypt the wallet. - - - - Decrypt wallet - Decrypt wallet - - - - Change passphrase - Change passphrase - - - - Enter the old and new passphrase to the wallet. - Enter the old and new passphrase to the wallet. - - - - Confirm wallet encryption - Confirm wallet encryption - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - Are you sure you wish to encrypt your wallet? - Are you sure you wish to encrypt your wallet? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - Warning: The Caps Lock key is on! - Warning: The Caps Lock key is on! - - - - - Wallet encrypted - Wallet encrypted - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - Wallet encryption failed - Wallet encryption failed - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - The supplied passphrases do not match. - The supplied passphrases do not match. - - - - Wallet unlock failed - Wallet unlock failed - - - - - - The passphrase entered for the wallet decryption was incorrect. - The passphrase entered for the wallet decryption was incorrect. - - - - Wallet decryption failed - Wallet decryption failed - - - - Wallet passphrase was successfully changed. - Wallet passphrase was successfully changed. - - - - ClientModel - - - Network Alert - Network Alert - - - - CoinControlDialog - - - Coin Control - Coin Control - - - - Quantity: - Quantity: - - - - Bytes: - Bytes: - - - - Amount: - Amount: - - - - Priority: - Priority: - - - - Fee: - Fee: - - - - Low Output: - Low Output: - - - - - no - no - - - - After Fee: - After Fee: - - - - Change: - Change: - - - - (un)select all - (un)select all - - - - Tree mode - Tree mode - - - - List mode - List mode - - - - Amount - Amount - - - - Label - Label - - - - Address - Address - - - - Date - Date - - - - Confirmations - Confirmations - - - - Confirmed - Confirmed - - - - Priority - Priority - - - - Copy address - Copy address - - - - Copy label - Copy label - - - - - Copy amount - Copy amount - - - - Copy transaction ID - Copy transaction ID - - - - Copy quantity - Copy quantity - - - - Copy fee - Copy fee - - - - Copy after fee - Copy after fee - - - - Copy bytes - Copy bytes - - - - Copy priority - Copy priority - - - - Copy low output - Copy low output - - - - Copy change - Copy change - - - - highest - highest - - - - high - high - - - - medium-high - medium-high - - - - medium - medium - - - - low-medium - low-medium - - - - low - low - - - - lowest - lowest - - - - - DUST - DUST - - - - - yes - yes - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - (no label) - (no label) - - - - change from %1 (%2) - change from %1 (%2) - - - - (change) - (change) - - - - EditAddressDialog - - - Edit Address - Edit Address - - - - &Label - &Label - - - - The label associated with this address book entry - The label associated with this address book entry - - - - &Address - &Address - - - - The address associated with this address book entry. This can only be modified for sending addresses. - The address associated with this address book entry. This can only be modified for sending addresses. - - - - &Stealth Address - &Stealth Address - - - - New receiving address - New receiving address - - - - New sending address - New sending address - - - - Edit receiving address - Edit receiving address - - - - Edit sending address - Edit sending address - - - - The entered address "%1" is already in the address book. - The entered address "%1" is already in the address book. - - - - The entered address "%1" is not a valid ShadowCoin address. - The entered address "%1" is not a valid ShadowCoin address. - - - - Could not unlock wallet. - Could not unlock wallet. - - - - New key generation failed. - New key generation failed. - - - - GUIUtil::HelpMessageBox - - - version - version - - - - - Shadow - Shadow - - - - Usage: - Usage: - - - - command-line options - command-line options - - - - UI options - UI options - - - - Set language, for example "de_DE" (default: system locale) - Set language, for example "de_DE" (default: system locale) - - - - Start minimized - Start minimized - - - - Show splash screen on startup (default: 1) - Show splash screen on startup (default: 1) - - - - MessageModel - - - Type - Type - - - - Sent Date Time - Sent Date Time - - - - Received Date Time - Received Date Time - - - - Label - Label - - - - To Address - To Address - - - - From Address - From Address - - - - Message - Message - - - - Send Secure Message - Send Secure Message - - - - Send failed: %1. - Send failed: %1. - - - - - (no label) - (no label) - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - Cannot start shadow: click-to-pay handler - - - - PeerTableModel - - - Address/Hostname - Address/Hostname - - - - User Agent - User Agent - - - - Ping Time - Ping Time - - - - QObject - - - %1 d - %1 d - - - - %1 h - %1 h - - - - %1 m - %1 m - - - - - %1 s - %1 s - - - - None - None - - - - N/A - N/A - - - - %1 ms - %1 ms - - - - RPCConsole - - - Client name - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Client version - - - - &Information - &Information - - - - Shadow - Debug window - Shadow - Debug window - - - - Shadow Core - Shadow Core - - - - Using OpenSSL version - Using OpenSSL version - - - - Using BerkeleyDB version - Using BerkeleyDB version - - - - Startup time - Startup time - - - - Network - Network - - - - Name - Name - - - - Number of connections - Number of connections - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - &Network Traffic - &Network Traffic - - - - &Clear - &Clear - - - - Totals - Totals - - - - - In: - In: - - - - - Out: - Out: - - - - &Peers - &Peers - - - - - - Select a peer to view detailed information. - Select a peer to view detailed information. - - - - Peer ID - Peer ID - - - - Direction - Direction - - - - Version - Version - - - - User Agent - User Agent - - - - Services - Services - - - - Starting Height - Starting Height - - - - Sync Height - Sync Height - - - - Ban Score - Ban Score - - - - Connection Time - Connection Time - - - - Last Send - Last Send - - - - Last Receive - Last Receive - - - - Bytes Sent - Bytes Sent - - - - Bytes Received - Bytes Received - - - - Ping Time - Ping Time - - - - Time Offset - Time Offset - - - - Block chain - Block chain - - - - Current number of blocks - Current number of blocks - - - - Estimated total blocks - Estimated total blocks - - - - Last block time - Last block time - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - &Open - &Open - - - - Command-line options - Command-line options - - - - &Show - &Show - - - - &Console - &Console - - - - Build date - Build date - - - - Debug log file - Debug log file - - - - Clear console - Clear console - - - - Welcome to the Shadow Core RPC console. - Welcome to the Shadow Core RPC console. - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - Type <b>help</b> for an overview of available commands. - Type <b>help</b> for an overview of available commands. - - - - via %1 - via %1 - - - - - never - never - - - - Inbound - Inbound - - - - Outbound - Outbound - - - - Unknown - Unknown - - - - - Fetching... - Fetching... - - - - ShadowBridge - - - Incoming Message - Incoming Message - - - - default - default - - - - <b>%1</b> to %2 (%3) - <b>%1</b> to %2 (%3) - - - - <b>%1</b> to SHADOW %2 (%3) - <b>%1</b> to SHADOW %2 (%3) - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - Error: - Error: - - - - Unknown txn type detected %1. - Unknown txn type detected %1. - - - - Input types must match for all recipients. - Input types must match for all recipients. - - - - Ring sizes must match for all recipients. - Ring sizes must match for all recipients. - - - - Ring size outside range [%1, %2]. - Ring size outside range [%1, %2]. - - - - - Confirm send coins - Confirm send coins - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - and - and - - - - Are you sure you want to send %1? - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - Send Coins - Send Coins - - - - The change address is not valid, please recheck. - The change address is not valid, please recheck. - - - - - The recipient address is not valid, please recheck. - The recipient address is not valid, please recheck. - - - - The amount to pay must be larger than 0. - The amount to pay must be larger than 0. - - - - The amount exceeds your balance. - The amount exceeds your balance. - - - - The total exceeds your balance when the %1 transaction fee is included. - The total exceeds your balance when the %1 transaction fee is included. - - - - - Duplicate address found, can only send to each address once per send operation. - Duplicate address found, can only send to each address once per send operation. - - - - Error: Transaction creation failed. - Error: Transaction creation failed. - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - Error: Narration is too long. - Error: Narration is too long. - - - - Error: Ring Size Error. - Error: Ring Size Error. - - - - Error: Input Type Error. - Error: Input Type Error. - - - - Error: Must be in full mode to send anon. - Error: Must be in full mode to send anon. - - - - Error: Invalid Stealth Address. - Error: Invalid Stealth Address. - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - Error generating transaction. - Error generating transaction. - - - - Error generating transaction: %1 - Error generating transaction: %1 - - - - - - - - Send Message - Send Message - - - - The message can't be empty. - The message can't be empty. - - - - Error: Message creation failed. - Error: Message creation failed. - - - - Error: The message was rejected. - Error: The message was rejected. - - - - Sanity Error! - Sanity Error! - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - Overview - - - - - Wallet - Wallet - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - Backup Wallet - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - Amount: - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - Label - - - - Address - Address - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - Coin Control - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - Quantity: - - - - Fee: - Fee: - - - - After Fee: - After Fee: - - - - Bytes: - Bytes: - - - - Priority: - Priority: - - - - LowOutput: - - - - - Change: - Change: - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - (no label) - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - Not staking because wallet is locked - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - Inputs - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - Date and time that the transaction was received. - - - - Transaction status. Hover over this field to show number of confirmations. - Transaction status. Hover over this field to show number of confirmations. - - - - Type of transaction. - Type of transaction. - - - - Destination address of transaction. - Destination address of transaction. - - - - Short payment note. - - - - - Amount removed from or added to balance. - Amount removed from or added to balance. - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - Umbra - Umbra - - - - Client - Client - - - - E&xit - E&xit - - - - Quit application - Quit application - - - - &About ShadowCoin - &About ShadowCoin - - - - Show information about ShadowCoin - Show information about ShadowCoin - - - - About &Qt - About &Qt - - - - Show information about Qt - Show information about Qt - - - - &Options... - &Options... - - - - Modify configuration options for ShadowCoin - Modify configuration options for ShadowCoin - - - - &Show / Hide - &Show / Hide - - - - &Encrypt Wallet... - &Encrypt Wallet... - - - - Encrypt or decrypt wallet - Encrypt or decrypt wallet - - - - &Backup Wallet... - &Backup Wallet... - - - - Backup wallet to another location - Backup wallet to another location - - - - &Change Passphrase... - &Change Passphrase... - - - - Change the passphrase used for wallet encryption - Change the passphrase used for wallet encryption - - - - &Unlock Wallet... - &Unlock Wallet... - - - - Unlock wallet - Unlock wallet - - - - &Lock Wallet - &Lock Wallet - - - - Lock wallet - Lock wallet - - - - &Debug window - &Debug window - - - - Open debugging and diagnostic console - Open debugging and diagnostic console - - - - &File - &File - - - - &Settings - &Settings - - - - &Help - &Help - - - - Wallet - Wallet - - - - - [testnet] - [testnet] - - - - - Umbra client - Umbra client - - - - %n active connection(s) to ShadowCoin network - - %n active connection to ShadowCoin network - %n active connections to ShadowCoin network - - - - - block - block - - - - header - header - - - - blocks - blocks - - - - headers - headers - - - - - Synchronizing with network... - Synchronizing with network... - - - - Downloading filtered blocks... - Downloading filtered blocks... - - - - ~%1 filtered block(s) remaining (%2% done). - ~%1 filtered block(s) remaining (%2% done). - - - - Importing blocks... - - - - - ~%n block(s) remaining - - ~%n block(s) remaining - ~%n block(s) remaining - - - - - - Imported - Imported - - - - - Downloaded - Downloaded - - - - %1 of %2 %3 of transaction history (%4% done). - %1 of %2 %3 of transaction history (%4% done). - - - - %1 blocks of transaction history. - %1 blocks of transaction history. - - - - %n second(s) ago - - %n second ago - %n seconds ago - - - - - %n minute(s) ago - - %n minute ago - %n minutes ago - - - - - %n hour(s) ago - - %n hour ago - %n hours ago - - - - - %n day(s) ago - - %n day ago - %n days ago - - - - - Up to date - Up to date - - - - Catching up... - Catching up... - - - - Last received %1 was generated %2. - Last received %1 was generated %2. - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Confirm transaction fee - Confirm transaction fee - - - - Sent transaction - Sent transaction - - - - Incoming transaction - Incoming transaction - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - Incoming Message - Incoming Message - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - URI handling - URI handling - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - Backup Wallet - Backup Wallet - - - - Wallet Data (*.dat) - Wallet Data (*.dat) - - - - Backup Failed - Backup Failed - - - - There was an error trying to save the wallet data to the new location. - There was an error trying to save the wallet data to the new location. - - - - Lock Wallet - Lock Wallet - - - - Error: Wallet must first be encrypted to be locked. - Error: Wallet must first be encrypted to be locked. - - - - %n second(s) - - %n second - %n seconds - - - - - %n minute(s) - - %n minute - %n minutes - - - - - %n hour(s) - - %n hour - %n hours - - - - - %n day(s) - - %n day - %n days - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - Not staking because wallet is in thin mode - Not staking because wallet is in thin mode - - - - Not staking, staking is disabled - Not staking, staking is disabled - - - - Not staking because wallet is locked - Not staking because wallet is locked - - - - Not staking because wallet is offline - Not staking because wallet is offline - - - - Not staking because wallet is syncing - Not staking because wallet is syncing - - - - Not staking because you don't have mature coins - Not staking because you don't have mature coins - - - - Not staking - Not staking - - - - Received with - Received with - - - - Received from - Received from - - - - Sent to - Sent to - - - - Payment to yourself - Payment to yourself - - - - Mined - Mined - - - - Received shadow - Received shadow - - - - Sent shadow - Sent shadow - - - - Other - Other - - - - TrafficGraphWidget - - - KB/s - KB/s - - - - TransactionDesc - - - Open until %1 - Open until %1 - - - - Open for %n block(s) - - Open for %n block - Open for %n blocks - - - - - conflicted - conflicted - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/unconfirmed - - - - %1 confirmations - %1 confirmations - - - - Status - Status - - - - , broadcast through %n node(s) - - , broadcast through %n node - , broadcast through %n nodes - - - - - Date - Date - - - - Source - Source - - - - Generated - Generated - - - - - - From - From - - - - - - - To - To - - - - - - - own address - own address - - - - - label - label - - - - - - - - Credit - Credit - - - - matures in %n more block(s) - - matures in %n more block - matures in %n more blocks - - - - - not accepted - not accepted - - - - - - - Debit - Debit - - - - Transaction fee - Transaction fee - - - - Net amount - Net amount - - - - Message - Message - - - - Comment - Comment - - - - Transaction ID - Transaction ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Generated coins must mature 510 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. {120 ?} - - - - Debug information - Debug information - - - - Transaction - Transaction - - - - Inputs - Inputs - - - - Amount - Amount - - - - true - true - - - - false - false - - - - , has not been successfully broadcast yet - , has not been successfully broadcast yet - - - - - unknown - unknown - - - - TransactionDescDialog - - - Transaction details - Transaction details - - - - This pane shows a detailed description of the transaction - This pane shows a detailed description of the transaction - - - - TransactionTableModel - - - Date - Date - - - - Type - Type - - - - Address - Address - - - - Amount - Amount - - - - Open until %1 - Open until %1 - - - - Confirmed (%1 confirmations) - Confirmed (%1 confirmations) - - - - Open for %n more block(s) - - Open for %n more block - Open for %n more blocks - - - - - Narration - Narration - - - - Offline - Offline - - - - Unconfirmed - Unconfirmed - - - - Confirming (%1 of %2 recommended confirmations) - Confirming (%1 of %2 recommended confirmations) - - - - Conflicted - Conflicted - - - - Immature (%1 confirmations, will be available after %2) - Immature (%1 confirmations, will be available after %2) - - - - This block was not received by any other nodes and will probably not be accepted! - This block was not received by any other nodes and will probably not be accepted! - - - - Generated but not accepted - Generated but not accepted - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Transaction status. Hover over this field to show number of confirmations. - - - - Date and time that the transaction was received. - Date and time that the transaction was received. - - - - Type of transaction. - Type of transaction. - - - - Destination address of transaction. - Destination address of transaction. - - - - Amount removed from or added to balance. - Amount removed from or added to balance. - - - - WalletModel - - - - Sending... - Sending... - - - - bitcoin-core - - - ShadowCoin version - ShadowCoin version - - - - Usage: - Usage: - - - - Send command to -server or shadowcoind - Send command to -server or shadowcoind - - - - List commands - List commands - - - - Get help for a command - Get help for a command - - - - Options: - Options: - - - - Specify configuration file (default: shadowcoin.conf) - Specify configuration file (default: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Specify pid file (default: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Specify wallet file (within data directory) - - - - Specify data directory - Specify data directory - - - - Set database cache size in megabytes (default: 25) - Set database cache size in megabytes (default: 25) - - - - Set database disk log size in megabytes (default: 100) - Set database disk log size in megabytes (default: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Maintain at most <n> connections to peers (default: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Connect to a node to retrieve peer addresses, and disconnect - - - - Specify your own public address - Specify your own public address - - - - Bind to given address. Use [host]:port notation for IPv6 - Bind to given address. Use [host]:port notation for IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Stake your coins to support network and gain reward (default: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Threshold for disconnecting misbehaving peers (default: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Detach block and address databases. Increases shutdown time (default: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - Accept command line and JSON-RPC commands - Accept command line and JSON-RPC commands - - - - Error: Transaction creation failed - Error: Transaction creation failed - - - - Error: Wallet locked, unable to create transaction - Error: Wallet locked, unable to create transaction - - - - Importing blockchain data file. - Importing blockchain data file. - - - - Importing bootstrap blockchain data file. - Importing bootstrap blockchain data file. - - - - Run in the background as a daemon and accept commands - Run in the background as a daemon and accept commands - - - - Use the test network - Use the test network - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - Attempt to recover private keys from a corrupt wallet.dat - Attempt to recover private keys from a corrupt wallet.dat - - - - Block creation options: - Block creation options: - - - - Connect only to the specified node(s) - Connect only to the specified node(s) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Discover own IP address (default: 1 when listening and no -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Failed to listen on any port. Use -listen=0 if you want this. - - - - Find peers using DNS lookup (default: 1) - Find peers using DNS lookup (default: 1) - - - - Sync checkpoints policy (default: strict) - Sync checkpoints policy (default: strict) - - - - Invalid -tor address: '%s' - Invalid -tor address: '%s' - - - - Invalid amount for -reservebalance=<amount> - Invalid amount for -reservebalance=<amount> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - Output extra debugging information. Implies all other -debug* options - Output extra debugging information. Implies all other -debug* options - - - - Output extra network debugging information - Output extra network debugging information - - - - Prepend debug output with timestamp - Prepend debug output with timestamp - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - Select the version of socks proxy to use (4-5, default: 5) - Select the version of socks proxy to use (4-5, default: 5) - - - - Send trace/debug info to console instead of debug.log file - Send trace/debug info to console instead of debug.log file - - - - Send trace/debug info to debugger - Send trace/debug info to debugger - - - - Set maximum block size in bytes (default: 250000) - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - Set minimum block size in bytes (default: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Specify connection timeout in milliseconds (default: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - Unable to sign checkpoint, wrong checkpointkey? - - - - - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Use UPnP to map the listening port (default: 1 when listening) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - Username for JSON-RPC connections - - - - Verifying database integrity... - Verifying database integrity... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - WARNING: syncronized checkpoint violation detected, but skipped! - - - - Warning: Disk space is low! - Warning: Disk space is low! - - - - Warning: This version is obsolete, upgrade required! - Warning: This version is obsolete, upgrade required! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrupt, salvage failed - - - - Password for JSON-RPC connections - Password for JSON-RPC connections - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - Find peers using internet relay chat (default: 1) {0)?} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - Allow JSON-RPC connections from specified IP address - Allow JSON-RPC connections from specified IP address - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Send commands to node running on <ip> (default: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - Require a confirmations for change (default: 0) - Require a confirmations for change (default: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Upgrade wallet to latest format - Upgrade wallet to latest format - - - - Set key pool size to <n> (default: 100) - Set key pool size to <n> (default: 100) - - - - Rescan the block chain for missing wallet transactions - Rescan the block chain for missing wallet transactions - - - - How many blocks to check at startup (default: 2500, 0 = all) - How many blocks to check at startup (default: 2500, 0 = all) - - - - How thorough the block verification is (0-6, default: 1) - How thorough the block verification is (0-6, default: 1) - - - - Imports blocks from external blk000?.dat file - Imports blocks from external blk000?.dat file - - - - Use OpenSSL (https) for JSON-RPC connections - Use OpenSSL (https) for JSON-RPC connections - - - - Server certificate file (default: server.cert) - Server certificate file (default: server.cert) - - - - Server private key (default: server.pem) - Server private key (default: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Error: Wallet unlocked for staking only, unable to create transaction. - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - This help message - This help message - - - - Wallet %s resides outside data directory %s. - Wallet %s resides outside data directory %s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - Connect through socks proxy - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Allow DNS lookups for -addnode, -seednode and -connect - - - - Loading addresses... - Loading addresses... - - - - Error loading blkindex.dat - Error loading blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet corrupted - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - Error loading wallet.dat - Error loading wallet.dat - - - - Invalid -proxy address: '%s' - Invalid -proxy address: '%s' - - - - Unknown network specified in -onlynet: '%s' - Unknown network specified in -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Unknown -socks proxy version requested: %i - - - - Cannot resolve -bind address: '%s' - Cannot resolve -bind address: '%s' - - - - Cannot resolve -externalip address: '%s' - Cannot resolve -externalip address: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - - - - Error: could not start node - Error: could not start node - - - - Sending... - Sending... - - - - Invalid amount - Invalid amount - - - - Insufficient funds - Insufficient funds - - - - Loading block index... - Loading block index... - - - - Add a node to connect to and attempt to keep the connection open - Add a node to connect to and attempt to keep the connection open - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - Fee per KB to add to transactions you send - Fee per KB to add to transactions you send - - - - Invalid amount for -mininput=<amount>: '%s' - Invalid amount for -mininput=<amount>: '%s' - - - - Loading wallet... - Loading wallet... - - - - Cannot downgrade wallet - Cannot downgrade wallet - - - - Cannot initialize keypool - Cannot initialize keypool - - - - Cannot write default address - Cannot write default address - - - - Rescanning... - Rescanning... - - - - Done loading - Done loading - - - - To use the %s option - To use the %s option - - - - Error - Error - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - diff --git a/src/qt/locale/umbra_eo.ts b/src/qt/locale/umbra_eo.ts deleted file mode 100644 index 47fdcd0d99..0000000000 --- a/src/qt/locale/umbra_eo.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etikedo - - - - Address - Adreso - - - - pubkey - - - - - stealth - - - - - (no label) - (neniu etikedo) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Dialogo pri pasfrazo - - - - Enter passphrase - Enigu pasfrazon - - - - New passphrase - Nova pasfrazo - - - - Repeat new passphrase - Ripetu la novan pasfrazon - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Enigu novan pasfrazon por la monujo.<br/>Bonvolu uzi pasfrazon kun <b>almenaŭ 10 hazardaj signoj</b>, aŭ <b>almenaŭ ok vortoj</b>. - - - - Encrypt wallet - Ĉifri la monujon - - - - This operation needs your wallet passphrase to unlock the wallet. - Ĉi tiu operacio bezonas vian monujan pasfrazon, por malŝlosi la monujon. - - - - Unlock wallet - Malŝlosi la monujon - - - - This operation needs your wallet passphrase to decrypt the wallet. - Ĉi tiu operacio bezonas vian monujan pasfrazon, por malĉifri la monujon. - - - - Decrypt wallet - Malĉifri la monujon - - - - Change passphrase - Ŝanĝi la pasfrazon - - - - Enter the old and new passphrase to the wallet. - Tajpu la malnovan kaj novan monujajn pasfrazojn. - - - - Confirm wallet encryption - Konfirmo de ĉifrado de la monujo - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Ĉu vi certas, ke vi volas ĉifri la monujon? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - GRAVE: antaŭaj sekur-kopioj de via monujo-dosiero estas forigindaj kiam vi havas nove kreitan ĉifritan monujo-dosieron. Pro sekureco, antaŭaj kopioj de la neĉifrita dosiero ne plu funkcios tuj kiam vi ekuzos la novan ĉifritan dosieron. - - - - - Warning: The Caps Lock key is on! - Atentu: la majuskla baskulo estas ŝaltita! - - - - - Wallet encrypted - La monujo estas ĉifrita - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Ĉifrado de la monujo fiaskis - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Ĉifrado de monujo fiaskis pro interna eraro. Via monujo ne estas ĉifrita. - - - - - The supplied passphrases do not match. - La pasfrazoj entajpitaj ne samas. - - - - Wallet unlock failed - Malŝloso de la monujo fiaskis - - - - - - The passphrase entered for the wallet decryption was incorrect. - La pasfrazo enigita por ĉifrado de monujo ne ĝustas. - - - - Wallet decryption failed - Malĉifrado de la monujo fiaskis - - - - Wallet passphrase was successfully changed. - Vi sukcese ŝanĝis la pasfrazon de la monujo. - - - - ClientModel - - - Network Alert - Reta Averto - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - Kvanto: - - - - Bytes: - Bajtoj: - - - - Amount: - Sumo: - - - - Priority: - Prioritato: - - - - Fee: - Krompago: - - - - Low Output: - Malalta Eligo: - - - - - no - ne - - - - After Fee: - Post krompago: - - - - Change: - Restmono: - - - - (un)select all - (mal)elekti ĉion - - - - Tree mode - Arboreĝimo - - - - List mode - Listreĝimo - - - - Amount - Sumo - - - - Label - - - - - Address - Adreso - - - - Date - Dato - - - - Confirmations - Konfirmoj - - - - Confirmed - Konfirmita - - - - Priority - Prioritato - - - - Copy address - Kopii adreson - - - - Copy label - Kopii etikedon - - - - - Copy amount - Kopii sumon - - - - Copy transaction ID - Kopii transakcian ID-on - - - - Copy quantity - Kopii kvanton - - - - Copy fee - Kopii krompagon - - - - Copy after fee - Kopii post krompago - - - - Copy bytes - Kopii bajtojn - - - - Copy priority - Kopii prioritaton - - - - Copy low output - Kopii malaltan eligon - - - - Copy change - Kopii restmonon - - - - highest - plej alta - - - - high - alta - - - - medium-high - mezalta - - - - medium - meza - - - - low-medium - mezmalalta - - - - low - malalta - - - - lowest - plej malalta - - - - - DUST - - - - - - yes - jes - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (neniu etikedo) - - - - change from %1 (%2) - restmono de %1 (%2) - - - - (change) - (restmono) - - - - EditAddressDialog - - - Edit Address - Redakti Adreson - - - - &Label - &Etikedo - - - - The label associated with this address book entry - - - - - &Address - &Adreso - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nova adreso por ricevi - - - - New sending address - Nova adreso por sendi - - - - Edit receiving address - Redakti adreson por ricevi - - - - Edit sending address - Redakti adreson por sendi - - - - The entered address "%1" is already in the address book. - La adreso enigita "%1" jam ekzistas en la adresaro. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Ne eblis malŝlosi monujon. - - - - New key generation failed. - Fiaskis kreo de nova ŝlosilo. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nomo de kliento - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - neaplikebla - - - - Client version - Versio de kliento - - - - &Information - &Informoj - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - uzas OpenSSL-version - - - - Using BerkeleyDB version - - - - - Startup time - Horo de lanĉo - - - - Network - Reto - - - - Name - - - - - Number of connections - Nombro de konektoj - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Blokĉeno - - - - Current number of blocks - Aktuala nombro de blokoj - - - - Estimated total blocks - Supozita totalo da blokoj - - - - Last block time - Horo de la lasta bloko - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Malfermi - - - - Command-line options - - - - - &Show - - - - - &Console - &Konzolo - - - - Build date - Dato de kompilado - - - - Debug log file - Sencimiga protokoldosiero - - - - Clear console - Malplenigi konzolon - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Uzu la sagojn supran kaj malsupran por esplori la historion, kaj <b>stir-L</b> por malplenigi la ekranon. - - - - Type <b>help</b> for an overview of available commands. - Tajpu <b>help</b> por superrigardo de la disponeblaj komandoj. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Malferma ĝis %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/senkonekte - - - - %1/unconfirmed - %1/nekonfirmite - - - - %1 confirmations - %1 konfirmoj - - - - Status - Stato - - - - , broadcast through %n node(s) - , elsendita(j) tra %n nodo, elsendita(j) tra %n nodoj - - - - Date - Dato - - - - Source - Fonto - - - - Generated - Kreita - - - - - - From - De - - - - - - - To - Al - - - - - - - own address - propra adreso - - - - - label - etikedo - - - - - - - - Credit - Kredito - - - - matures in %n more block(s) - maturiĝos post %n blokomaturiĝos post %n blokoj - - - - not accepted - ne akceptita - - - - - - - Debit - Debeto - - - - Transaction fee - Krompago - - - - Net amount - Neta sumo - - - - Message - Mesaĝo - - - - Comment - Komento - - - - Transaction ID - Transakcia ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Sencimigaj informoj - - - - Transaction - Transakcio - - - - Inputs - Enigoj - - - - Amount - Sumo - - - - true - vera - - - - false - malvera - - - - , has not been successfully broadcast yet - , ankoraŭ ne elsendita sukcese - - - - - unknown - nekonata - - - - TransactionDescDialog - - - Transaction details - Transakciaj detaloj - - - - This pane shows a detailed description of the transaction - Tiu ĉi panelo montras detalan priskribon de la transakcio - - - - TransactionTableModel - - - Date - Dato - - - - Type - Tipo - - - - Address - Adreso - - - - Amount - Sumo - - - - Open until %1 - Malferma ĝis %1 - - - - Confirmed (%1 confirmations) - Konfirmita (%1 konfirmoj) - - - - Open for %n more block(s) - Malferma dum ankoraŭ %n blokoMalferma dum ankoraŭ %n blokoj - - - - Narration - - - - - Offline - Senkonekte - - - - Unconfirmed - Nekonfirmita - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Tiun ĉi blokon ne ricevis ajna alia nodo, kaj ĝi verŝajne ne akceptiĝos! - - - - Generated but not accepted - Kreita sed ne akceptita - - - - (n/a) - neaplikebla - - - - Transaction status. Hover over this field to show number of confirmations. - Transakcia stato. Ŝvebi super tiu ĉi kampo por montri la nombron de konfirmoj. - - - - Date and time that the transaction was received. - Dato kaj horo kiam la transakcio alvenis. - - - - Type of transaction. - Tipo de transakcio. - - - - Destination address of transaction. - Celadreso de la transakcio. - - - - Amount removed from or added to balance. - Sumo elprenita de aŭ aldonita al la saldo. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Uzado: - - - - Send command to -server or shadowcoind - - - - - List commands - Listigi komandojn - - - - Get help for a command - Vidigi helpon pri iu komando - - - - Options: - Agordoj: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - Specifi monujan dosieron (ene de dosierujo por datumoj) - - - - Specify data directory - Specifi dosieron por datumoj - - - - Set database cache size in megabytes (default: 25) - Specifi grandon de datumbazo je megabajtoj (defaŭlte: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Subteni maksimume <n> konektojn al samtavolanoj (defaŭlte: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Konekti al nodo por ricevi adresojn de samtavolanoj, kaj malkonekti - - - - Specify your own public address - Specifi vian propran publikan adreson - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Sojlo por malkonekti misagantajn samtavolanojn (defaŭlte: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Nombro da sekundoj por rifuzi rekonekton de misagantaj samtavolanoj (defaŭlte: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Eraro okazis dum estigo de RPC-pordo %u por aŭskulti per IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Akcepti komandojn JSON-RPC kaj el komandlinio - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Ruli fone kiel demono kaj akcepti komandojn - - - - Use the test network - Uzi la test-reton - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Akcepti konektojn el ekstere (defaŭlte: 1 se ne estas -proxy nek -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Eraro okazis dum estigo de RPC-pordo %u por aŭskulti per IPv6; retrodefaŭltas al IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Averto: -paytxfee estas agordita per tre alta valoro! Tio estas la krompago, kion vi pagos se vi sendas la transakcion. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Averto: okazis eraro dum lego de wallet.dat! Ĉiuj ŝlosiloj sukcese legiĝis, sed la transakciaj datumoj aŭ la adresaro eble mankas aŭ malĝustas. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Averto: via wallet.dat estas difektita, sed la datumoj sukcese saviĝis! La originala wallet.dat estas nun konservita kiel wallet.{timestamp}.bak en %s; se via saldo aŭ transakcioj estas malĝustaj vi devus restaŭri per alia sekurkopio. - - - - Attempt to recover private keys from a corrupt wallet.dat - Provo ripari privatajn ŝlosilojn el difektita wallet.dat - - - - Block creation options: - Blok-kreaj agordaĵoj: - - - - Connect only to the specified node(s) - Konekti nur al specifita(j) nodo(j) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Malkovri la propran IP-adreson (defaŭlte: 1 dum aŭskultado sen -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Ne sukcesis aŭskulti ajnan pordon. Uzu -listen=0 se tion vi volas. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maksimuma po riceva bufro por konektoj, <n>*1000 bajtoj (defaŭlte: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maksimuma po senda bufro por konektoj, <n>*1000 bajtoj (defaŭlte: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Konekti nur la nodoj en la reto <net> (IPv4, IPv6 aŭ Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL-agordaĵoj: (vidu la vikio de Bitmono por instrukcioj pri agordado de SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Sendi spurajn/sencimigajn informojn al la konzolo anstataŭ al dosiero debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Agordi minimuman grandon de blokoj je bajtoj (defaŭlte: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Malpligrandigi la sencimigan protokol-dosieron kiam kliento lanĉiĝas (defaŭlte: 1 kiam mankas -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Specifi konektan tempolimon je milisekundoj (defaŭlte: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Uzi UPnP por mapi la aŭskultan pordon (defaŭlte: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Uzi UPnP por mapi la aŭskultan pordon (defaŭlte: 1 dum aŭskultado) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Salutnomo por konektoj JSON-RPC - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Averto: tiu ĉi versio estas eksdata. Vi bezonas ĝisdatigon! - - - - wallet.dat corrupt, salvage failed - wallet.dat estas difektita, riparo malsukcesis - - - - Password for JSON-RPC connections - Pasvorto por konektoj JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Permesi konektojn JSON-RPC de specifa IP-adreso - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Sendi komandon al nodo ĉe <ip> (defaŭlte: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Plenumi komandon kiam plej bona bloko ŝanĝiĝas (%s en cmd anstataŭiĝas per bloka haketaĵo) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Plenumi komandon kiam monuja transakcio ŝanĝiĝas (%s en cmd anstataŭiĝas per TxID) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Ĝisdatigi monujon al plej lasta formato - - - - Set key pool size to <n> (default: 100) - Agordi la grandon de la ŝlosilo-vico al <n> (defaŭlte: 100) - - - - Rescan the block chain for missing wallet transactions - Reskani la blokĉenon por mankantaj monujaj transakcioj - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Uzi OpenSSL (https) por konektoj JSON-RPC - - - - Server certificate file (default: server.cert) - Dosiero de servila atestilo (defaŭlte: server.cert) - - - - Server private key (default: server.pem) - Dosiero de servila privata ŝlosilo (defaŭlte: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Tiu ĉi helpmesaĝo - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Ne eblis bindi al %s en tiu ĉi komputilo (bind resendis eraron %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Permesi DNS-elserĉojn por -addnote, -seednote kaj -connect - - - - Loading addresses... - Ŝarĝante adresojn... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Eraro dum ŝargado de wallet.dat: monujo difektita - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Eraro dum ŝargado de wallet.dat - - - - Invalid -proxy address: '%s' - Nevalid adreso -proxy: '%s' - - - - Unknown network specified in -onlynet: '%s' - Nekonata reto specifita en -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Nekonata versio de -socks petita: %i - - - - Cannot resolve -bind address: '%s' - Ne eblas trovi la adreson -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - Ne eblas trovi la adreson -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Nevalida sumo por -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Nevalida sumo - - - - Insufficient funds - Nesufiĉa mono - - - - Loading block index... - Ŝarĝante blok-indekson... - - - - Add a node to connect to and attempt to keep the connection open - Aldoni nodon por alkonekti kaj provi daŭrigi la malferman konekton - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Ŝargado de monujo... - - - - Cannot downgrade wallet - Ne eblas malpromocii monujon - - - - Cannot initialize keypool - - - - - Cannot write default address - Ne eblas skribi defaŭltan adreson - - - - Rescanning... - Reskanado... - - - - Done loading - Ŝargado finiĝis - - - - To use the %s option - Por uzi la agordon %s - - - - Error - Eraro - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Vi devas agordi rpcpassword=<password> en la konfigura dosiero: -%s -Se la dosiero ne ekzistas, kreu ĝin kun permeso "nur posedanto rajtas legi". - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_es.ts b/src/qt/locale/umbra_es.ts deleted file mode 100644 index 6eaa24ed12..0000000000 --- a/src/qt/locale/umbra_es.ts +++ /dev/null @@ -1,3433 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Acerca de ShadowCoin - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> versión - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiqueta - - - - Address - Dirección - - - - pubkey - - - - - stealth - - - - - (no label) - (sin etiqueta) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Diálogo de contraseña - - - - Enter passphrase - Introducir contraseña - - - - New passphrase - Nueva contraseña - - - - Repeat new passphrase - Repita la nueva contraseña - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Sirve para desactivar SendMoney cuando la cuenta del Sistema Operativo está comprometida. No ofrece seguridad real. - - - - For staking only - Para "Staking" solamente - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Introduzca la nueva contraseña del monedero.<br/>Por favor elija una con <b>10 o más caracteres aleatorios</b>, u <b>ocho o más palabras</b>. - - - - Encrypt wallet - Cifrar el monedero - - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operación requiere su contraseña para desbloquear el monedero. - - - - Unlock wallet - Desbloquear monedero - - - - This operation needs your wallet passphrase to decrypt the wallet. - Esta operación requiere su contraseña para descifrar el monedero. - - - - Decrypt wallet - Descifrar el monedero - - - - Change passphrase - Cambiar contraseña - - - - Enter the old and new passphrase to the wallet. - Introduzca la contraseña anterior del monedero y la nueva. - - - - Confirm wallet encryption - Confirmar cifrado del monedero - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Advertencia: Si encripta su cartera y pierde su frase de contraseña, puede <b>PERDER TODAS SUS MONEDAS</ b>! - - - - Are you sure you wish to encrypt your wallet? - ¿Seguro que desea cifrar su monedero? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: Cualquier copia de seguridad que haya realizado previamente de su archivo de monedero debe reemplazarse con el nuevo archivo de monedero cifrado. Por razones de seguridad, las copias de seguridad previas del archivo de monedero no cifradas serán inservibles en cuanto comience a usar el nuevo monedero cifrado. - - - - - Warning: The Caps Lock key is on! - Aviso: ¡La tecla de bloqueo de mayúsculas está activada! - - - - - Wallet encrypted - Monedero cifrado - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin cerrará para terminar el proceso de encriptación. Recuerde que la encriptación de su monedero no puede proteger completamente que sus monedas sean robadas por malware infectando su computadora. - - - - - - - Wallet encryption failed - Ha fallado el cifrado del monedero - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Ha fallado el cifrado del monedero debido a un error interno. El monedero no ha sido cifrado. - - - - - The supplied passphrases do not match. - Las contraseñas no coinciden. - - - - Wallet unlock failed - Ha fallado el desbloqueo del monedero - - - - - - The passphrase entered for the wallet decryption was incorrect. - La contraseña introducida para descifrar el monedero es incorrecta. - - - - Wallet decryption failed - Ha fallado el descifrado del monedero - - - - Wallet passphrase was successfully changed. - Se ha cambiado correctamente la contraseña del monedero. - - - - ClientModel - - - Network Alert - Alerta de red - - - - CoinControlDialog - - - Coin Control - Control de Moneda - - - - Quantity: - Cantidad: - - - - Bytes: - Bytes: - - - - Amount: - Cantidad: - - - - Priority: - Prioridad: - - - - Fee: - Tasa: - - - - Low Output: - Envío pequeño: - - - - - no - no - - - - After Fee: - Después de tasas: - - - - Change: - Cambio: - - - - (un)select all - (des)marcar todos - - - - Tree mode - Modo árbol - - - - List mode - Modo lista - - - - Amount - Cuantía - - - - Label - Etiqueta - - - - Address - Dirección - - - - Date - Fecha - - - - Confirmations - Confirmaciones - - - - Confirmed - Confirmado - - - - Priority - Prioridad - - - - Copy address - Copiar dirección - - - - Copy label - Copiar etiqueta - - - - - Copy amount - Copiar cuantía - - - - Copy transaction ID - Copiar identificador de transacción - - - - Copy quantity - Copiar cantidad - - - - Copy fee - Copiar donación - - - - Copy after fee - Copiar después de aplicar donación - - - - Copy bytes - Copiar bytes - - - - Copy priority - Copiar prioridad - - - - Copy low output - Copiar envío pequeño - - - - Copy change - Copiar cambio - - - - highest - lo más alto - - - - high - alto - - - - medium-high - medio-alto - - - - medium - medio - - - - low-medium - bajo-medio - - - - low - bajo - - - - lowest - lo más bajo - - - - - DUST - DUST - - - - - yes - si - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Esta etiqueta se convierte en rojo, si el tamaño de la transacción es mayor que 10000 bytes. - -Esto significa que se requiere una cuota de al menos el %1 por kb. - -Puede variar + / - 1 Byte por entrada. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Las transacciones con mayor prioridad son más probables en entrar hacia un bloque. - -Esta etiqueta se convierte en rojo, si la prioridad es menor que "medium". - -Esto significa que se requiere una cuota de al menos el %1 por kb. - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Esta etiqueta se convierte en rojo, si cualquier recipiente recibe una cantidad menor que %1. - -Esto significa que se requiere una cuota de al menos %2. - -Las cantidades inferiores a 0.546 veces la cuota mínima del relé se muestran en forma de DUST. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Esta etiqueta se convierte en rojo, si el cambio es menor que %1. - -Esto significa que se requiere una cuota de al menos %2. - - - - - (no label) - (sin etiqueta) - - - - change from %1 (%2) - Enviar desde %1 (%2) - - - - (change) - (cambio) - - - - EditAddressDialog - - - Edit Address - Editar Dirección - - - - &Label - &Etiqueta - - - - The label associated with this address book entry - La etiqueta asociada con esta entrada de la libreta de direcciones - - - - &Address - &Dirección - - - - The address associated with this address book entry. This can only be modified for sending addresses. - La dirección asociada con esta entrada de la libreta de direcciones. Esto sólo puede ser modificada para direcciones de envío. - - - - &Stealth Address - - - - - New receiving address - Nueva dirección de recepción - - - - New sending address - Nueva dirección de envío - - - - Edit receiving address - Editar dirección de recepción - - - - Edit sending address - Editar dirección de envío - - - - The entered address "%1" is already in the address book. - La dirección introducida "%1" ya está presente en la libreta de direcciones. - - - - The entered address "%1" is not a valid ShadowCoin address. - La dirección introducida "%1" no es una dirección válida de ShadowCoin. - - - - Could not unlock wallet. - No se pudo desbloquear el monedero. - - - - New key generation failed. - Ha fallado la generación de la nueva clave. - - - - GUIUtil::HelpMessageBox - - - version - Versión - - - - - Shadow - - - - - Usage: - Uso: - - - - command-line options - opciones de líneas de comandos - - - - UI options - opciones del interfaz de usuario - - - - Set language, for example "de_DE" (default: system locale) - Defina el idioma, por ejemplo "de_DE" (predeterminado: región del sistema) - - - - Start minimized - Iniciar minimizado - - - - Show splash screen on startup (default: 1) - Mostrar pantalla de bienvenida al iniciar (predeterminado: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nombre del cliente - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/D - - - - Client version - Versión del cliente - - - - &Information - &Información - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Utilizando la versión OpenSSL - - - - Using BerkeleyDB version - - - - - Startup time - Hora de inicio - - - - Network - Red - - - - Name - - - - - Number of connections - Número de conexiones - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Cadena de bloques - - - - Current number of blocks - Número actual de bloques - - - - Estimated total blocks - Bloques totales estimados - - - - Last block time - Hora del último bloque - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Abrir - - - - Command-line options - Opciones de línea de comandos - - - - &Show - &Mostrar - - - - &Console - &Consola - - - - Build date - Fecha de compilación - - - - Debug log file - Archivo de registro de depuración - - - - Clear console - Borrar consola - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Use las flechas arriba y abajo para navegar por el historial y <b>Control+L</b> para vaciar la pantalla. - - - - Type <b>help</b> for an overview of available commands. - Escriba <b>help</b> para ver un resumen de los comandos disponibles. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Abierto hasta %1 - - - - Open for %n block(s) - Abierto para %n bloqueAbierto para %n bloques - - - - conflicted - en conflicto - - - - %1/offline - %1/fuera de línea - - - - %1/unconfirmed - %1/no confirmado - - - - %1 confirmations - %1 confirmaciones - - - - Status - Estado - - - - , broadcast through %n node(s) - , transmitir a través de %n nodo, transmitir a través de %n nodos - - - - Date - Fecha - - - - Source - Fuente - - - - Generated - Generado - - - - - - From - De - - - - - - - To - Para - - - - - - - own address - dirección propia - - - - - label - etiqueta - - - - - - - - Credit - Crédito - - - - matures in %n more block(s) - disponible en %n bloque másdisponible en %n bloques más - - - - not accepted - no aceptada - - - - - - - Debit - Débito - - - - Transaction fee - Comisión de transacción - - - - Net amount - Cantidad neta - - - - Message - Mensaje - - - - Comment - Comentario - - - - Transaction ID - Identificador de transacción - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Información de depuración - - - - Transaction - Transacción - - - - Inputs - entradas - - - - Amount - Cantidad - - - - true - verdadero - - - - false - falso - - - - , has not been successfully broadcast yet - , todavía no se ha sido difundido satisfactoriamente - - - - - unknown - desconocido - - - - TransactionDescDialog - - - Transaction details - Detalles de transacción - - - - This pane shows a detailed description of the transaction - Esta ventana muestra información detallada sobre la transacción - - - - TransactionTableModel - - - Date - Fecha - - - - Type - Tipo - - - - Address - Dirección - - - - Amount - Cantidad - - - - Open until %1 - Abierto hasta %1 - - - - Confirmed (%1 confirmations) - Confirmado (%1 confirmaciones) - - - - Open for %n more block(s) - Abrir para %n bloque másAbrir para %n bloques más - - - - Narration - - - - - Offline - Sin conexión - - - - Unconfirmed - Sin confirmar - - - - Confirming (%1 of %2 recommended confirmations) - Confirmando (%1 de %2 confirmaciones recomendadas) - - - - Conflicted - En conflicto - - - - Immature (%1 confirmations, will be available after %2) - No vencidos (%1 confirmaciones. Estarán disponibles al cabo de %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Este bloque no ha sido recibido por otros nodos y probablemente no sea aceptado! - - - - Generated but not accepted - Generado pero no aceptado - - - - (n/a) - (nd) - - - - Transaction status. Hover over this field to show number of confirmations. - Estado de transacción. Pasa el ratón sobre este campo para ver el número de confirmaciones. - - - - Date and time that the transaction was received. - Fecha y hora en que se recibió la transacción. - - - - Type of transaction. - Tipo de transacción. - - - - Destination address of transaction. - Dirección de destino de la transacción. - - - - Amount removed from or added to balance. - Cantidad retirada o añadida al saldo. - - - - WalletModel - - - - Sending... - Enviando... - - - - bitcoin-core - - - ShadowCoin version - versión ShadowCoin - - - - Usage: - Uso: - - - - Send command to -server or shadowcoind - Envía un comando a -server o shadowcoind - - - - List commands - Muestra comandos - - - - - Get help for a command - Recibir ayuda para un comando - - - - - Options: - Opciones: - - - - - Specify configuration file (default: shadowcoin.conf) - Especifica un archivo de configuración (por defecto: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Especifica un archivo pid (por defecto: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Especificar archivo de monedero (dentro del directorio de datos) - - - - Specify data directory - Especificar directorio para los datos - - - - Set database cache size in megabytes (default: 25) - Establecer el tamaño de caché de la base de datos en megabytes (predeterminado: 25) - - - - Set database disk log size in megabytes (default: 100) - Ajusta el tamaño de la base de datos del registro en megabytes (por defecto: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Escuchando conexiones en el puerto <port> (por defecto: 51737 o testnet: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Mantener como máximo <n> conexiones a pares (predeterminado: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Conectar a un nodo para obtener direcciones de pares y desconectar - - - - Specify your own public address - Especifique su propia dirección pública - - - - Bind to given address. Use [host]:port notation for IPv6 - Enlazar a la dirección dada. Utilice la notación [host]:puerto para IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Pon tus monedas en participación "Stake" para dar soporte a la red y ganar alguna recompensa (por defecto: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Umbral para la desconexión de pares con mal comportamiento (predeterminado: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Número de segundos en que se evita la reconexión de pares con mal comportamiento (predeterminado: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Ha ocurrido un error al configurar el puerto RPC %u para escucha en IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Separa el bloque y la base de datos de direcciones. Aumenta el tiempo de apagado (por defecto: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: La transacción ha sido rechazada. Esto puede ocurrir si algunas de sus monedas en el monedero ya se gastaron, por ejemplo, si se usa una copia del wallet.dat y se gastaron las monedas de la copia pero no se han marcado como gastadas aquí. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Error: Esta transacción requiere de una comisión de transacción de al menos %s debido a su tamaño, complejidad, o uso de fondos recibidos recientemente. - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Escuchar conexiones JSON-RPC en <port> (predeterminado: 51736 o testnet: 51996) - - - - Accept command line and JSON-RPC commands - Aceptar comandos consola y JSON-RPC - - - - - Error: Transaction creation failed - Error: Fallo al crear la transacción. - - - - Error: Wallet locked, unable to create transaction - Error: Monedero bloqueado, no es posible crear una transacción - - - - Importing blockchain data file. - Importando el archivo de datos de la cadena de bloques. - - - - Importing bootstrap blockchain data file. - Importando el archivo de datos de arranque de la cadena de bloques. - - - - Run in the background as a daemon and accept commands - Ejecutar en segundo plano como daemon y aceptar comandos - - - - - Use the test network - Usar la red de pruebas - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Aceptar conexiones desde el exterior (predeterminado: 1 si no -proxy o -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Ha ocurrido un error al configurar el puerto RPC %u para escuchar mediante IPv6. Recurriendo a IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Error al inicializar el entorno de base de datos %s! Para recuperar, HAGA UNA COPIA DE SEGURIDAD DEL DIRECTORIO, a continuación, elimine todo de ella excepto el archivo wallet.dat. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Establecer el tamaño máximo de las transacciones alta-prioridad/baja-comisión en bytes (por defecto: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Aviso: ¡-paytxfee tiene un valor muy alto! Esta es la comisión que pagará si envía una transacción. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Advertencia: Verifique que la fecha y hora del equipo sean correctas! Si su reloj es erróneo ShadowCoin no funcionará correctamente. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Aviso: ¡Error al leer wallet.dat! Todas las claves se han leído correctamente, pero podrían faltar o ser incorrectos los datos de transacciones o las entradas de la libreta de direcciones. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Aviso: ¡Recuperados datos de wallet.dat corrupto! El wallet.dat original se ha guardado como wallet.{timestamp}.bak en %s; si hubiera errores en su saldo o transacciones, deberá restaurar una copia de seguridad. - - - - Attempt to recover private keys from a corrupt wallet.dat - Intento de recuperar claves privadas de un wallet.dat corrupto - - - - Block creation options: - Opciones de creación de bloques: - - - - Connect only to the specified node(s) - Conectar sólo a los nodos (o nodo) especificados - - - - Discover own IP address (default: 1 when listening and no -externalip) - Descubrir dirección IP propia (predeterminado: 1 al escuchar sin -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Ha fallado la escucha en todos los puertos. Use -listen=0 si desea esto. - - - - Find peers using DNS lookup (default: 1) - Encontrar pares usando la búsqueda de DNS (por defecto: 1) - - - - Sync checkpoints policy (default: strict) - Política de puntos de control de sincronización (por defecto: estricta) - - - - Invalid -tor address: '%s' - Dirección -tor inválida: '%s' - - - - Invalid amount for -reservebalance=<amount> - Cantidad no válida para -reservebalance=<amount> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Búfer de recepción máximo por conexión, <n>*1000 bytes (predeterminado: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Búfer de recepción máximo por conexión, , <n>*1000 bytes (predeterminado: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Conectarse solo a nodos de la red <net> (IPv4, IPv6 o Tor) - - - - Output extra debugging information. Implies all other -debug* options - Salida de información de depuración extra. Implica todas las opciones -debug* de depuración - - - - Output extra network debugging information - Salida extra de información de depuración de red - - - - Prepend debug output with timestamp - Prefijar salida de depuración con marca de tiempo - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuración SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - Selecciona la versión de socks proxy a usar (4-5, por defecto: 5) - - - - Send trace/debug info to console instead of debug.log file - Enviar información de trazas/depuración a la consola en lugar de al archivo debug.log - - - - Send trace/debug info to debugger - Enviar información de rastreo / depurado al depurador - - - - Set maximum block size in bytes (default: 250000) - Establecer el tamaño máximo de bloque en bytes (por defecto: 250000) - - - - Set minimum block size in bytes (default: 0) - Establecer tamaño mínimo de bloque en bytes (predeterminado: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Reducir el archivo debug.log al iniciar el cliente (predeterminado: 1 sin -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Especificar el tiempo máximo de conexión en milisegundos (predeterminado: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - No es posible firmar el punto de control, clave de punto de control incorrecta?%s - - - - Use UPnP to map the listening port (default: 0) - Usar UPnP para asignar el puerto de escucha (predeterminado: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Usar UPnP para asignar el puerto de escucha (predeterminado: 1 al escuchar) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Usar proxy para alcanzar a ver los servicios ocultos (por defecto: los mismos que -proxy) - - - - Username for JSON-RPC connections - Nombre de usuario para las conexiones JSON-RPC - - - - - Verifying database integrity... - Verificando la integridad de la base de datos... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - ADVERTENCIA: violación de un punto de control sincronizado detectada, se saltara! - - - - Warning: Disk space is low! - Advertencia: Espacio en disco bajo! - - - - Warning: This version is obsolete, upgrade required! - Aviso: Esta versión es obsoleta, actualización necesaria! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrupto. Ha fallado la recuperación. - - - - Password for JSON-RPC connections - Contraseña para las conexiones JSON-RPC - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, debe establecer un rpcpassword en el fichero de configuración: -%s -Se recomienda utilizar la siguiente contraseña aleatoria: -rpcuser=shadowcoinrpc -rpcpassword=%s -(no necesita recordar este password) -El nombre de usuario y contraseña no debe ser el mismo. -Si no existe el archivo, créelo con permisos de sólo lectura para el dueño. -También se recomienda establecer alertnotify para ser notificado de los problemas; -por ejemplo: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - Encontrar pares usando IRC (por defecto:1) {0)?} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Sincronizar el tiempo con otros nodos. Desactivar si el tiempo en su sistema es preciso, por ejemplo si usa sincronización con NTP (por defecto: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - Al crear transacciones, ignorar las entradas con valor inferior a esta (por defecto: 0.01) - - - - Allow JSON-RPC connections from specified IP address - Permitir conexiones JSON-RPC desde la dirección IP especificada - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Enviar comando al nodo situado en <ip> (predeterminado: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Ejecutar un comando cuando cambia el mejor bloque (%s en cmd se sustituye por el hash de bloque) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Ejecutar comando cuando una transacción del monedero cambia (%s en cmd se remplazará por TxID) - - - - Require a confirmations for change (default: 0) - Requerir confirmaciones para cambio (por defecto: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Exigir a los scripts de transacción que usen los operadores PUSH canónicos (por defecto: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Ejecutar comando cuando una alerta relevante sea recibida (%s en la linea de comandos es reemplazado por un mensaje) - - - - Upgrade wallet to latest format - Actualizar el monedero al último formato - - - - Set key pool size to <n> (default: 100) - Ajustar el número de claves en reserva <n> (predeterminado: 100) - - - - - Rescan the block chain for missing wallet transactions - Volver a examinar la cadena de bloques en busca de transacciones del monedero perdidas - - - - How many blocks to check at startup (default: 2500, 0 = all) - Cuantos bloques para comprobar al inicio (por defecto: 2500, 0 = todos) - - - - How thorough the block verification is (0-6, default: 1) - Cómo de minuciosa es la verificación del bloque (0-6, por defecto: 1) - - - - Imports blocks from external blk000?.dat file - Importar bloques desde el archivo externo blk000?.dat - - - - Use OpenSSL (https) for JSON-RPC connections - Usar OpenSSL (https) para las conexiones JSON-RPC - - - - - Server certificate file (default: server.cert) - Certificado del servidor (predeterminado: server.cert) - - - - - Server private key (default: server.pem) - Clave privada del servidor (predeterminado: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Cifras aceptables: (por defecto: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Error: Monedero desbloqueado sólo para hacer "stake", no es posible crear una transacción. - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - ADVERTENCIA: Punto de control no válido encontrado! Las transacciones que se muestran pueden no ser correctas! Puede que tenga que actualizar o notificar a los desarrolladores. - - - - This help message - Este mensaje de ayuda - - - - - Wallet %s resides outside data directory %s. - El monedero %s reside fuera del directorio de datos %s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - No se puede obtener un bloqueo en el directorio de datos %s. ShadowCoin probablemente ya esté en funcionamiento. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - No es posible conectar con %s en este sistema (bind ha dado el error %d, %s) - - - - Connect through socks proxy - Conecte a través del socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Permitir búsquedas DNS para -addnode, -seednode y -connect - - - - Loading addresses... - Cargando direcciones... - - - - Error loading blkindex.dat - Error al cargar blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Error al cargar wallet.dat: el monedero está dañado - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Error cargando wallet.dat: El monedero requiere una nueva versión de ShadowCoin - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - El monedero necesita ser reescrito: reinicie ShadowCoin para completar - - - - Error loading wallet.dat - Error al cargar wallet.dat - - - - Invalid -proxy address: '%s' - Dirección -proxy inválida: '%s' - - - - Unknown network specified in -onlynet: '%s' - La red especificada en -onlynet '%s' es desconocida - - - - Unknown -socks proxy version requested: %i - Solicitada versión de proxy -socks desconocida: %i - - - - Cannot resolve -bind address: '%s' - No se puede resolver la dirección de -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - No se puede resolver la dirección de -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Cantidad inválida para -paytxfee=<amount>: '%s' - - - - Error: could not start node - Error: no se pudo iniciar el nodo - - - - Sending... - Enviando... - - - - Invalid amount - Cuantía no válida - - - - Insufficient funds - Fondos insuficientes - - - - Loading block index... - Cargando el índice de bloques... - - - - Add a node to connect to and attempt to keep the connection open - Añadir un nodo al que conectarse y tratar de mantener la conexión abierta - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - No se puede enlazar a %s en este equipo. ShadowCoin probablemente ya esté en funcionamiento. - - - - Fee per KB to add to transactions you send - Comisión por KB a añadir a las transacciones que envía - - - - Invalid amount for -mininput=<amount>: '%s' - Cantidad no válida para -mininput=<amount>: '%s' - - - - Loading wallet... - Cargando monedero... - - - - Cannot downgrade wallet - No se puede rebajar el monedero - - - - Cannot initialize keypool - No se puede inicializar el keypool - - - - Cannot write default address - No se puede escribir la dirección predeterminada - - - - Rescanning... - Reexplorando... - - - - Done loading - Generado pero no aceptado - - - - To use the %s option - Para utilizar la opción %s - - - - Error - Error - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Tiene que establecer rpcpassword=<contraseña> en el fichero de configuración: ⏎ -%s ⏎ -Si el archivo no existe, créelo con permiso de lectura solamente del propietario. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_es_CL.ts b/src/qt/locale/umbra_es_CL.ts deleted file mode 100644 index c639468c5a..0000000000 --- a/src/qt/locale/umbra_es_CL.ts +++ /dev/null @@ -1,3408 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiqueta - - - - Address - Dirección - - - - pubkey - - - - - stealth - - - - - (no label) - (sin etiqueta) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Introduce contraseña actual - - - - New passphrase - Nueva contraseña - - - - Repeat new passphrase - Repite nueva contraseña - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Introduce la nueva contraseña para la billetera.<br/>Por favor utiliza un contraseña de<b>10 o más caracteres aleatorios</b>, u <b>ocho o más palabras</b>. - - - - Encrypt wallet - Codificar billetera - - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operación necesita la contraseña para desbloquear la billetera. - - - - Unlock wallet - Desbloquea billetera - - - - This operation needs your wallet passphrase to decrypt the wallet. - Esta operación necesita la contraseña para decodificar la billetara. - - - - Decrypt wallet - Decodificar cartera - - - - Change passphrase - Cambia contraseña - - - - Enter the old and new passphrase to the wallet. - Introduce la contraseña anterior y la nueva de cartera - - - - Confirm wallet encryption - Confirma la codificación de cartera - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - ¿Seguro que quieres seguir codificando la billetera? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: Cualquier versión anterior que hayas realizado de tu archivo de billetera será reemplazada por el nuevo archivo de billetera encriptado. Por razones de seguridad, los respaldos anteriores de los archivos de billetera se volverán inútiles en tanto comiences a usar la nueva billetera encriptada. - - - - - Warning: The Caps Lock key is on! - Precaucion: Mayúsculas Activadas - - - - - Wallet encrypted - Billetera codificada - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Falló la codificación de la billetera - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - La codificación de la billetera falló debido a un error interno. Tu billetera no ha sido codificada. - - - - - The supplied passphrases do not match. - Las contraseñas no coinciden. - - - - Wallet unlock failed - Ha fallado el desbloqueo de la billetera - - - - - - The passphrase entered for the wallet decryption was incorrect. - La contraseña introducida para decodificar la billetera es incorrecta. - - - - Wallet decryption failed - Ha fallado la decodificación de la billetera - - - - Wallet passphrase was successfully changed. - La contraseña de billetera ha sido cambiada con éxito. - - - - ClientModel - - - Network Alert - Alerta de Red - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Cantidad: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Cantidad - - - - Label - - - - - Address - Dirección - - - - Date - Fecha - - - - Confirmations - - - - - Confirmed - Confirmado - - - - Priority - - - - - Copy address - Copia dirección - - - - Copy label - Copia etiqueta - - - - - Copy amount - Copiar Cantidad - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (sin etiqueta) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Editar dirección - - - - &Label - &Etiqueta - - - - The label associated with this address book entry - - - - - &Address - &Dirección - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nueva dirección para recibir - - - - New sending address - Nueva dirección para enviar - - - - Edit receiving address - Editar dirección de recepción - - - - Edit sending address - Editar dirección de envio - - - - The entered address "%1" is already in the address book. - La dirección introducida "%1" ya esta guardada en la libreta de direcciones. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - No se pudo desbloquear la billetera. - - - - New key generation failed. - La generación de nueva clave falló. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nombre del cliente - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Versión del Cliente - - - - &Information - &Información - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - Tiempo de inicio - - - - Network - Red - - - - Name - - - - - Number of connections - Número de conexiones - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Bloquea cadena - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Abrir - - - - Command-line options - - - - - &Show - - - - - &Console - &Consola - - - - Build date - - - - - Debug log file - - - - - Clear console - Limpiar Consola - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Abierto hasta %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/fuera de linea - - - - %1/unconfirmed - %1/no confirmado - - - - %1 confirmations - %1 confirmaciónes - - - - Status - Estado - - - - , broadcast through %n node(s) - - - - - Date - Fecha - - - - Source - - - - - Generated - Generado - - - - - - From - De - - - - - - - To - A - - - - - - - own address - propia dirección - - - - - label - etiqueta - - - - - - - - Credit - Credito - - - - matures in %n more block(s) - - - - - not accepted - no aceptada - - - - - - - Debit - Debito - - - - Transaction fee - Comisión transacción - - - - Net amount - Cantidad total - - - - Message - Mensaje - - - - Comment - Comentario - - - - Transaction ID - ID de Transacción - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - Transacción - - - - Inputs - - - - - Amount - Cantidad - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - , no ha sido emitido satisfactoriamente todavía - - - - - unknown - desconocido - - - - TransactionDescDialog - - - Transaction details - Detalles de transacción - - - - This pane shows a detailed description of the transaction - Esta ventana muestra información detallada sobre la transacción - - - - TransactionTableModel - - - Date - Fecha - - - - Type - Tipo - - - - Address - Dirección - - - - Amount - Cantidad - - - - Open until %1 - Abierto hasta %1 - - - - Confirmed (%1 confirmations) - Confirmado (%1 confirmaciones) - - - - Open for %n more block(s) - Abierto para &n bloque másAbierto para &n bloques más - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Este bloque no ha sido recibido por otros nodos y probablemente no sea aceptado ! - - - - Generated but not accepted - Generado pero no acceptado - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Estado de transacción. Pasa el raton sobre este campo para ver el numero de confirmaciónes. - - - - Date and time that the transaction was received. - Fecha y hora cuando se recibió la transaccion - - - - Type of transaction. - Tipo de transacción. - - - - Destination address of transaction. - Dirección de destino para la transacción - - - - Amount removed from or added to balance. - Cantidad restada o añadida al balance - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Uso: - - - - Send command to -server or shadowcoind - - - - - List commands - Muestra comandos - - - - - Get help for a command - Recibir ayuda para un comando - - - - - Options: - Opciones: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Especifica directorio para los datos - - - - - Set database cache size in megabytes (default: 25) - Asigna el tamaño del caché de la base de datos en MB (25 predeterminado) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Mantener al menos <n> conecciones por cliente (por defecto: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Umbral de desconección de clientes con mal comportamiento (por defecto: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Aceptar comandos consola y JSON-RPC - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Correr como demonio y acepta comandos - - - - - Use the test network - Usa la red de pruebas - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Precaución: -paytxfee es muy alta. Esta es la comisión que pagarás si envias una transacción. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - Conecta solo al nodo especificado - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuración SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Enviar informacion de seguimiento a la consola en vez del archivo debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Establezca el tamaño mínimo del bloque en bytes (por defecto: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - Especifica tiempo de espera para conexion en milisegundos (predeterminado: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Intenta usar UPnP para mapear el puerto de escucha (default: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Intenta usar UPnP para mapear el puerto de escucha (default: 1 when listening) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Usuario para las conexiones JSON-RPC - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Advertencia: Esta versión está obsoleta, se necesita actualizar! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrompió, guardado fallido - - - - Password for JSON-RPC connections - Contraseña para las conexiones JSON-RPC - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Permite conexiones JSON-RPC desde la dirección IP especificada - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Envia comando al nodo situado en <ip> (predeterminado: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Actualizar billetera al formato actual - - - - Set key pool size to <n> (default: 100) - Ajusta el numero de claves en reserva <n> (predeterminado: 100) - - - - - Rescan the block chain for missing wallet transactions - Rescanea la cadena de bloques para transacciones perdidas de la cartera - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Usa OpenSSL (https) para las conexiones JSON-RPC - - - - - Server certificate file (default: server.cert) - Certificado del servidor (Predeterminado: server.cert) - - - - - Server private key (default: server.pem) - Clave privada del servidor (Predeterminado: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Este mensaje de ayuda - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - No es posible escuchar en el %s en este ordenador (bind returned error %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Permite búsqueda DNS para addnode y connect - - - - - Loading addresses... - Cargando direcciónes... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Error cargando wallet.dat: Billetera corrupta - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Error cargando wallet.dat - - - - Invalid -proxy address: '%s' - Dirección -proxy invalida: '%s' - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - Cantidad inválida para -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Cantidad inválida - - - - Insufficient funds - Fondos insuficientes - - - - Loading block index... - Cargando el index de bloques... - - - - Add a node to connect to and attempt to keep the connection open - Agrega un nodo para conectarse and attempt to keep the connection open - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Cargando cartera... - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - Rescaneando... - - - - Done loading - Carga completa - - - - To use the %s option - Para utilizar la opción %s - - - - Error - Error - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_es_DO.ts b/src/qt/locale/umbra_es_DO.ts deleted file mode 100644 index aa1b7e252c..0000000000 --- a/src/qt/locale/umbra_es_DO.ts +++ /dev/null @@ -1,3406 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiqueta - - - - Address - Dirección - - - - pubkey - - - - - stealth - - - - - (no label) - (sin etiqueta) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Diálogo de contraseña - - - - Enter passphrase - Introducir contraseña - - - - New passphrase - Nueva contraseña - - - - Repeat new passphrase - Repita la nueva contraseña - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Introduzca la nueva contraseña de la cartera.<br/>Por favor elija una con <b>10 o más caracteres aleatorios</b>, u <b>ocho o más palabras</b>. - - - - Encrypt wallet - Cifrar la cartera - - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operación requiere su contraseña para desbloquear la cartera - - - - Unlock wallet - Desbloquear cartera - - - - This operation needs your wallet passphrase to decrypt the wallet. - Esta operación requiere su contraseña para descifrar la cartera. - - - - Decrypt wallet - Descifrar la certare - - - - Change passphrase - Cambiar contraseña - - - - Enter the old and new passphrase to the wallet. - Introduzca la contraseña anterior de la cartera y la nueva. - - - - Confirm wallet encryption - Confirmar cifrado de la cartera - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - ¿Seguro que desea cifrar su monedero? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: Cualquier copia de seguridad que haya realizado previamente de su archivo de monedero debe reemplazarse con el nuevo archivo de monedero cifrado. Por razones de seguridad, las copias de seguridad previas del archivo de monedero no cifradas serán inservibles en cuanto comience a usar el nuevo monedero cifrado. - - - - - Warning: The Caps Lock key is on! - Aviso: ¡La tecla de bloqueo de mayúsculas está activada! - - - - - Wallet encrypted - Monedero cifrado - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Ha fallado el cifrado del monedero - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Ha fallado el cifrado del monedero debido a un error interno. El monedero no ha sido cifrado. - - - - - The supplied passphrases do not match. - Las contraseñas no coinciden. - - - - Wallet unlock failed - Ha fallado el desbloqueo del monedero - - - - - - The passphrase entered for the wallet decryption was incorrect. - La contraseña introducida para descifrar el monedero es incorrecta. - - - - Wallet decryption failed - Ha fallado el descifrado del monedero - - - - Wallet passphrase was successfully changed. - Se ha cambiado correctamente la contraseña del monedero. - - - - ClientModel - - - Network Alert - Alerta de red - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - Cantidad: - - - - Bytes: - Bytes: - - - - Amount: - Cuantía: - - - - Priority: - Prioridad: - - - - Fee: - Tasa: - - - - Low Output: - Envío pequeño: - - - - - no - no - - - - After Fee: - Después de tasas: - - - - Change: - Cambio: - - - - (un)select all - (des)selecciona todos - - - - Tree mode - Modo arbol - - - - List mode - Modo lista - - - - Amount - Cantidad - - - - Label - - - - - Address - Dirección - - - - Date - Fecha - - - - Confirmations - Confirmaciones - - - - Confirmed - Confirmado - - - - Priority - Prioridad - - - - Copy address - Copiar dirección - - - - Copy label - Copiar etiqueta - - - - - Copy amount - Copiar cantidad - - - - Copy transaction ID - Copiar identificador de transacción - - - - Copy quantity - Copiar cantidad - - - - Copy fee - Copiar donación - - - - Copy after fee - Copiar después de aplicar donación - - - - Copy bytes - Copiar bytes - - - - Copy priority - Copiar prioridad - - - - Copy low output - Copiar envío pequeño - - - - Copy change - Copiar cambio - - - - highest - lo más alto - - - - high - alto - - - - medium-high - medio-alto - - - - medium - medio - - - - low-medium - bajo-medio - - - - low - bajo - - - - lowest - lo más bajo - - - - - DUST - - - - - - yes - si - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (sin etiqueta) - - - - change from %1 (%2) - Enviar desde %1 (%2) - - - - (change) - (cambio) - - - - EditAddressDialog - - - Edit Address - Editar Dirección - - - - &Label - &Etiqueta - - - - The label associated with this address book entry - - - - - &Address - &Dirección - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nueva dirección de recepción - - - - New sending address - Nueva dirección de envío - - - - Edit receiving address - Editar dirección de recepción - - - - Edit sending address - Editar dirección de envío - - - - The entered address "%1" is already in the address book. - La dirección introducida "%1" ya está presente en la libreta de direcciones. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - No se pudo desbloquear el monedero. - - - - New key generation failed. - Ha fallado la generación de la nueva clave. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nombre del cliente - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/D - - - - Client version - Versión del cliente - - - - &Information - &Información - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Utilizando la versión OpenSSL - - - - Using BerkeleyDB version - - - - - Startup time - Hora de inicio - - - - Network - Red - - - - Name - - - - - Number of connections - Número de conexiones - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Cadena de bloques - - - - Current number of blocks - Número actual de bloques - - - - Estimated total blocks - Bloques totales estimados - - - - Last block time - Hora del último bloque - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Abrir - - - - Command-line options - - - - - &Show - - - - - &Console - &Consola - - - - Build date - Fecha de compilación - - - - Debug log file - Archivo de registro de depuración - - - - Clear console - Borrar consola - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Use las flechas arriba y abajo para navegar por el historial y <b>Control+L</b> para limpiar la pantalla. - - - - Type <b>help</b> for an overview of available commands. - Escriba <b>help</b> para ver un resumen de los comandos disponibles. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Abierto hasta %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/fuera de línea - - - - %1/unconfirmed - %1/no confirmado - - - - %1 confirmations - %1 confirmaciones - - - - Status - Estado - - - - , broadcast through %n node(s) - , transmitir a través de %n nodo, transmitir a través de %n nodos - - - - Date - Fecha - - - - Source - Fuente - - - - Generated - Generado - - - - - - From - De - - - - - - - To - Para - - - - - - - own address - dirección propia - - - - - label - etiqueta - - - - - - - - Credit - Crédito - - - - matures in %n more block(s) - disponible en %n bloque másdisponible en %n bloques más - - - - not accepted - no aceptada - - - - - - - Debit - Débito - - - - Transaction fee - Comisión de transacción - - - - Net amount - Cantidad neta - - - - Message - Mensaje - - - - Comment - Comentario - - - - Transaction ID - Identificador de transacción - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Información de depuración - - - - Transaction - Transacción - - - - Inputs - entradas - - - - Amount - Cantidad - - - - true - verdadero - - - - false - falso - - - - , has not been successfully broadcast yet - , todavía no se ha sido difundido satisfactoriamente - - - - - unknown - desconocido - - - - TransactionDescDialog - - - Transaction details - Detalles de transacción - - - - This pane shows a detailed description of the transaction - Esta ventana muestra información detallada sobre la transacción - - - - TransactionTableModel - - - Date - Fecha - - - - Type - Tipo - - - - Address - Dirección - - - - Amount - Cantidad - - - - Open until %1 - Abierto hasta %1 - - - - Confirmed (%1 confirmations) - Confirmado (%1 confirmaciones) - - - - Open for %n more block(s) - Abrir para %n bloque másAbrir para %n bloques más - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Este bloque no ha sido recibido por otros nodos y probablemente no sea aceptado! - - - - Generated but not accepted - Generado pero no aceptado - - - - (n/a) - (nd) - - - - Transaction status. Hover over this field to show number of confirmations. - Estado de transacción. Pasa el ratón sobre este campo para ver el número de confirmaciones. - - - - Date and time that the transaction was received. - Fecha y hora en que se recibió la transacción. - - - - Type of transaction. - Tipo de transacción. - - - - Destination address of transaction. - Dirección de destino de la transacción. - - - - Amount removed from or added to balance. - Cantidad retirada o añadida al saldo. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Uso: - - - - Send command to -server or shadowcoind - - - - - List commands - Muestra comandos - - - - - Get help for a command - Recibir ayuda para un comando - - - - - Options: - Opciones: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - Especificar archivo de monedero (dentro del directorio de datos) - - - - Specify data directory - Especificar directorio para los datos - - - - Set database cache size in megabytes (default: 25) - Establecer el tamaño de caché de la base de datos en megabytes (predeterminado: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Mantener como máximo <n> conexiones a pares (predeterminado: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Conectar a un nodo para obtener direcciones de pares y desconectar - - - - Specify your own public address - Especifique su propia dirección pública - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Umbral para la desconexión de pares con mal comportamiento (predeterminado: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Número de segundos en que se evita la reconexión de pares con mal comportamiento (predeterminado: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Ha ocurrido un error al configurar el puerto RPC %u para escucha en IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Aceptar comandos consola y JSON-RPC - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Ejecutar en segundo plano como daemon y aceptar comandos - - - - - Use the test network - Usar la red de pruebas - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Aceptar conexiones desde el exterior (predeterminado: 1 si no -proxy o -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Ha ocurrido un error al configurar el puerto RPC %u para escuchar mediante IPv6. Recurriendo a IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Aviso: ¡-paytxfee tiene un valor muy alto! Esta es la comisión que pagará si envía una transacción. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Aviso: ¡Error al leer wallet.dat! Todas las claves se han leído correctamente, pero podrían faltar o ser incorrectos los datos de transacciones o las entradas de la libreta de direcciones. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Aviso: ¡Recuperados datos de wallet.dat corrupto! El wallet.dat original se ha guardado como wallet.{timestamp}.bak en %s; si hubiera errores en su saldo o transacciones, deberá restaurar una copia de seguridad. - - - - Attempt to recover private keys from a corrupt wallet.dat - Intento de recuperar claves privadas de un wallet.dat corrupto - - - - Block creation options: - Opciones de creación de bloques: - - - - Connect only to the specified node(s) - Conectar sólo a los nodos (o nodo) especificados - - - - Discover own IP address (default: 1 when listening and no -externalip) - Descubrir dirección IP propia (predeterminado: 1 al escuchar sin -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Ha fallado la escucha en todos los puertos. Use -listen=0 si desea esto. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Búfer de recepción máximo por conexión, <n>*1000 bytes (predeterminado: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Búfer de recepción máximo por conexión, , <n>*1000 bytes (predeterminado: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Conectarse solo a nodos de la red <net> (IPv4, IPv6 o Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuración SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Enviar información de trazas/depuración a la consola en lugar de al archivo debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Establecer tamaño mínimo de bloque en bytes (predeterminado: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Reducir el archivo debug.log al iniciar el cliente (predeterminado: 1 sin -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Especificar el tiempo máximo de conexión en milisegundos (predeterminado: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Usar UPnP para asignar el puerto de escucha (predeterminado: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Usar UPnP para asignar el puerto de escucha (predeterminado: 1 al escuchar) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Nombre de usuario para las conexiones JSON-RPC - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Aviso: Esta versión es obsoleta, actualización necesaria! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrupto. Ha fallado la recuperación. - - - - Password for JSON-RPC connections - Contraseña para las conexiones JSON-RPC - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Permitir conexiones JSON-RPC desde la dirección IP especificada - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Enviar comando al nodo situado en <ip> (predeterminado: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Ejecutar un comando cuando cambia el mejor bloque (%s en cmd se sustituye por el hash de bloque) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Ejecutar comando cuando una transacción del monedero cambia (%s en cmd se remplazará por TxID) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Actualizar el monedero al último formato - - - - Set key pool size to <n> (default: 100) - Ajustar el número de claves en reserva <n> (predeterminado: 100) - - - - - Rescan the block chain for missing wallet transactions - Volver a examinar la cadena de bloques en busca de transacciones del monedero perdidas - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Usar OpenSSL (https) para las conexiones JSON-RPC - - - - - Server certificate file (default: server.cert) - Certificado del servidor (predeterminado: server.cert) - - - - - Server private key (default: server.pem) - Clave privada del servidor (predeterminado: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Este mensaje de ayuda - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - No es posible conectar con %s en este sistema (bind ha dado el error %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Permitir búsquedas DNS para -addnode, -seednode y -connect - - - - Loading addresses... - Cargando direcciones... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Error al cargar wallet.dat: el monedero está dañado - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Error al cargar wallet.dat - - - - Invalid -proxy address: '%s' - Dirección -proxy inválida: '%s' - - - - Unknown network specified in -onlynet: '%s' - La red especificada en -onlynet '%s' es desconocida - - - - Unknown -socks proxy version requested: %i - Solicitada versión de proxy -socks desconocida: %i - - - - Cannot resolve -bind address: '%s' - No se puede resolver la dirección de -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - No se puede resolver la dirección de -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Cantidad inválida para -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Cuantía no válida - - - - Insufficient funds - Fondos insuficientes - - - - Loading block index... - Cargando el índice de bloques... - - - - Add a node to connect to and attempt to keep the connection open - Añadir un nodo al que conectarse y tratar de mantener la conexión abierta - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Cargando monedero... - - - - Cannot downgrade wallet - No se puede rebajar el monedero - - - - Cannot initialize keypool - - - - - Cannot write default address - No se puede escribir la dirección predeterminada - - - - Rescanning... - Reexplorando... - - - - Done loading - Generado pero no aceptado - - - - To use the %s option - Para utilizar la opción %s - - - - Error - Error - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Tiene que establecer rpcpassword=<contraseña> en el fichero de configuración: ⏎ -%s ⏎ -Si el archivo no existe, créelo con permiso de lectura solamente del propietario. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_es_MX.ts b/src/qt/locale/umbra_es_MX.ts deleted file mode 100644 index a941d63ef6..0000000000 --- a/src/qt/locale/umbra_es_MX.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiqueta - - - - Address - Domicilio - - - - pubkey - - - - - stealth - - - - - (no label) - (sin etiqueta) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Ingrese la contraseña - - - - New passphrase - Nueva contraseña - - - - Repeat new passphrase - Repita la nueva contraseña - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Ingrese la nueva contraseña a la cartera<br/>Por favor use una contraseña de<b>10 o más caracteres aleatorios</b> o <b>ocho o más palabras</b>. - - - - Encrypt wallet - Cartera encriptada. - - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operación necesita la contraseña de su cartera para desbloquear su cartera. - - - - Unlock wallet - Desbloquear cartera. - - - - This operation needs your wallet passphrase to decrypt the wallet. - Esta operación necesita la contraseña de su cartera para desencriptar su cartera. - - - - Decrypt wallet - Desencriptar la cartera - - - - Change passphrase - Cambiar contraseña - - - - Enter the old and new passphrase to the wallet. - Ingrese la antugüa y nueva contraseña de la cartera - - - - Confirm wallet encryption - Confirmar la encriptación de cartera - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Cartera encriptada - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - La encriptación de la cartera falló - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - La encriptación de la cartera falló debido a un error interno. Su cartera no fue encriptada. - - - - - The supplied passphrases do not match. - Las contraseñas dadas no coinciden - - - - Wallet unlock failed - El desbloqueo de la cartera Fallo - - - - - - The passphrase entered for the wallet decryption was incorrect. - La contraseña ingresada para la des encriptación de la cartera es incorrecto - - - - Wallet decryption failed - La desencriptación de la cartera fallo - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - Bytes: - - - - Amount: - Monto: - - - - Priority: - Prioridad: - - - - Fee: - Cuota: - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Monto - - - - Label - - - - - Address - Domicilio - - - - Date - Fecha - - - - Confirmations - - - - - Confirmed - Confirmado - - - - Priority - - - - - Copy address - Copiar dirección - - - - Copy label - Copiar capa - - - - - Copy amount - copiar monto - - - - Copy transaction ID - - - - - Copy quantity - copiar cantidad - - - - Copy fee - copiar cuota - - - - Copy after fee - copiar despues de cuota - - - - Copy bytes - copiar bytes - - - - Copy priority - copiar prioridad - - - - Copy low output - - - - - Copy change - copiar cambio - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (sin etiqueta) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Editar dirección - - - - &Label - &Etiqueta - - - - The label associated with this address book entry - - - - - &Address - &Dirección - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nueva dirección de entregas - - - - New sending address - Nueva dirección de entregas - - - - Edit receiving address - Editar dirección de entregas - - - - Edit sending address - Editar dirección de envios - - - - The entered address "%1" is already in the address book. - El domicilio ingresado "%1" ya existe en la libreta de direcciones - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - No se puede desbloquear la cartera - - - - New key generation failed. - La generación de la nueva clave fallo - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Abrir hasta %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - %1/No confirmado - - - - %1 confirmations - %1 confirmaciones - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - Fecha - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - Monto - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - , no ha sido transmitido aun - - - - - unknown - desconocido - - - - TransactionDescDialog - - - Transaction details - Detalles de la transacción - - - - This pane shows a detailed description of the transaction - Este panel muestras una descripción detallada de la transacción - - - - TransactionTableModel - - - Date - Fecha - - - - Type - Tipo - - - - Address - Domicilio - - - - Amount - Monto - - - - Open until %1 - Abrir hasta %1 - - - - Confirmed (%1 confirmations) - Confimado (%1 confirmaciones) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Este bloque no fue recibido por ningun nodo y probablemente no fue aceptado ! - - - - Generated but not accepted - Generado pero no aprovado - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - Fecha y hora en que la transacción fue recibida - - - - Type of transaction. - Escriba una transacción - - - - Destination address of transaction. - Direccion del destinatario de la transacción - - - - Amount removed from or added to balance. - Cantidad removida del saldo o agregada - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Uso: - - - - Send command to -server or shadowcoind - - - - - List commands - Lista de comandos - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - Cargando direcciones... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - Cargando indice de bloques... - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Cargando billetera... - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - Carga completa - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_es_UY.ts b/src/qt/locale/umbra_es_UY.ts deleted file mode 100644 index e3893e362d..0000000000 --- a/src/qt/locale/umbra_es_UY.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiqueta - - - - Address - Direccion - - - - pubkey - - - - - stealth - - - - - (no label) - (Sin etiqueta) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Escriba la contraseña - - - - New passphrase - Nueva contraseña - - - - Repeat new passphrase - Repetir nueva contraseña - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Introduzca la nueva contraseña para el monedero. <br/> Utilice una contraseña de <b> 10 o más caracteres al azar </ b>, o <b> ocho o más palabras </ b>. - - - - Encrypt wallet - Monedero cifrado - - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operacion necesita la contraseña del monedero para desbloquear el mismo - - - - Unlock wallet - Monedero destrabado - - - - This operation needs your wallet passphrase to decrypt the wallet. - Esta operacion necesita la contraseña del monedero para descifrar el mismo - - - - Decrypt wallet - Monedero descifrado - - - - Change passphrase - Cambiar contraseña - - - - Enter the old and new passphrase to the wallet. - Ingrese la contraseña anterior y la nueva de acceso a el monedero - - - - Confirm wallet encryption - Confirme el cifrado del monedero - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Monedero cifrado - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Fallo en el cifrado del monedero - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Fallo en el cifrado del monedero a causa de un error interno. Su monedero no esta cifrado - - - - - The supplied passphrases do not match. - Las contraseñas suministradas no coinciden. - - - - Wallet unlock failed - Fallo en el desbloqueo del mondero - - - - - - The passphrase entered for the wallet decryption was incorrect. - La contraseña introducida para el descifrado del monedero es incorrecta. - - - - Wallet decryption failed - Fallo en el descifrado del monedero - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - Direccion - - - - Date - Fecha - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (Sin etiqueta) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Editar dirección - - - - &Label - &Etiqueta - - - - The label associated with this address book entry - - - - - &Address - &Direccion - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nueva dirección de recepción - - - - New sending address - Nueva dirección de envío - - - - Edit receiving address - Editar dirección de recepcion - - - - Edit sending address - Editar dirección de envío - - - - The entered address "%1" is already in the address book. - La dirección introducida "% 1" ya está en la libreta de direcciones. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - No se puede abrir el monedero. - - - - New key generation failed. - Fallo en la nueva clave generada. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Abrir hasta %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - Fecha - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - desconocido - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - Fecha - - - - Type - - - - - Address - Direccion - - - - Amount - - - - - Open until %1 - Abrir hasta %1 - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_et.ts b/src/qt/locale/umbra_et.ts deleted file mode 100644 index f21564e44e..0000000000 --- a/src/qt/locale/umbra_et.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Info ShadowCoin'i kohta - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b>'i versioon - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Silt - - - - Address - Aadress - - - - pubkey - - - - - stealth - - - - - (no label) - (silti pole) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Salafraasi dialoog - - - - Enter passphrase - Sisesta salasõna - - - - New passphrase - Uus salasõna - - - - Repeat new passphrase - Korda salafraasi - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Sisesta rahakotile uus salafraas.<br/>Palun kasuta salafraasina <b>vähemalt 10 tähte/numbrit/sümbolit</b>, või <b>vähemalt 8 sõna</b>. - - - - Encrypt wallet - Krüpteeri rahakott - - - - This operation needs your wallet passphrase to unlock the wallet. - See toiming nõuab sinu rahakoti salafraasi. - - - - Unlock wallet - Tee rahakott lukust lahti. - - - - This operation needs your wallet passphrase to decrypt the wallet. - See toiming nõuab sinu rahakoti salafraasi. - - - - Decrypt wallet - Dekrüpteeri rahakott. - - - - Change passphrase - Muuda salafraasi - - - - Enter the old and new passphrase to the wallet. - Sisesta rahakoti vana ning uus salafraas. - - - - Confirm wallet encryption - Kinnita rahakoti krüpteering - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Kas soovid oma rahakoti krüpteerida? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - TÄHTIS: Kõik varasemad rahakoti varundfailid tuleks üle kirjutada äsja loodud krüpteeritud rahakoti failiga. Turvakaalutlustel tühistatakse krüpteerimata rahakoti failid alates uue, krüpteeritud rahakoti, kasutusele võtust. - - - - - Warning: The Caps Lock key is on! - Hoiatus: Caps Lock on sisse lülitatud! - - - - - Wallet encrypted - Rahakott krüpteeritud - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Tõrge rahakoti krüpteerimisel - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Rahakoti krüpteering ebaõnnestus tõrke tõttu. Sinu rahakotti ei krüpteeritud. - - - - - The supplied passphrases do not match. - Salafraasid ei kattu. - - - - Wallet unlock failed - Rahakoti avamine ebaõnnestus - - - - - - The passphrase entered for the wallet decryption was incorrect. - Rahakoti salafraas ei ole õige. - - - - Wallet decryption failed - Rahakoti dekrüpteerimine ei õnnestunud - - - - Wallet passphrase was successfully changed. - Rahakoti salafraasi muutmine õnnestus. - - - - ClientModel - - - Network Alert - Võrgu Häire - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Summa: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Kogus - - - - Label - - - - - Address - Aadress - - - - Date - Kuupäev - - - - Confirmations - - - - - Confirmed - Kinnitatud - - - - Priority - - - - - Copy address - Aadressi kopeerimine - - - - Copy label - Märgise kopeerimine - - - - - Copy amount - Kopeeri summa - - - - Copy transaction ID - Kopeeri tehingu ID - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (silti pole) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Muuda aadressi - - - - &Label - &Märgis - - - - The label associated with this address book entry - - - - - &Address - &Aadress - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Uus sissetulev aadress - - - - New sending address - Uus väljaminev aadress - - - - Edit receiving address - Sissetulevate aadresside muutmine - - - - Edit sending address - Väljaminevate aadresside muutmine - - - - The entered address "%1" is already in the address book. - Selline aadress on juba olemas: "%1" - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Rahakotti ei avatud - - - - New key generation failed. - Tõrge uue võtme loomisel. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Kliendi nimi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Kliendi versioon - - - - &Information - &Informatsioon - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Kasutan OpenSSL versiooni - - - - Using BerkeleyDB version - - - - - Startup time - Käivitamise hetk - - - - Network - Võrgustik - - - - Name - - - - - Number of connections - Ühenduste arv - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Ploki jada - - - - Current number of blocks - Plokkide hetkearv - - - - Estimated total blocks - Ligikaudne plokkide kogus - - - - Last block time - Viimane ploki aeg - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Ava - - - - Command-line options - - - - - &Show - - - - - &Console - &Konsool - - - - Build date - Valmistusaeg - - - - Debug log file - Debugimise logifail - - - - Clear console - Puhasta konsool - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Ajaloo sirvimiseks kasuta üles ja alla nooli, ekraani puhastamiseks <b>Ctrl-L</b>. - - - - Type <b>help</b> for an overview of available commands. - Ülevaateks võimalikest käsklustest trüki <b>help</b>. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Avatud kuni %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %/1offline'is - - - - %1/unconfirmed - %1/kinnitamata - - - - %1 confirmations - %1 kinnitust - - - - Status - Staatus - - - - , broadcast through %n node(s) - , levita läbi %n node'i, levita läbi %n node'i - - - - Date - Kuupäev - - - - Source - Allikas - - - - Generated - Genereeritud - - - - - - From - Saatja - - - - - - - To - Saaja - - - - - - - own address - oma aadress - - - - - label - märgis - - - - - - - - Credit - Krediit - - - - matures in %n more block(s) - aegub %n bloki pärastaegub %n bloki pärast - - - - not accepted - mitte aktsepteeritud - - - - - - - Debit - Deebet - - - - Transaction fee - Tehingu tasu - - - - Net amount - Neto summa - - - - Message - Sõnum - - - - Comment - Kommentaar - - - - Transaction ID - Tehingu ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Debug'imise info - - - - Transaction - Tehing - - - - Inputs - Sisendid - - - - Amount - Kogus - - - - true - õige - - - - false - vale - - - - , has not been successfully broadcast yet - , veel esitlemata - - - - - unknown - tundmatu - - - - TransactionDescDialog - - - Transaction details - Tehingu üksikasjad - - - - This pane shows a detailed description of the transaction - Paan kuvab tehingu detailid - - - - TransactionTableModel - - - Date - Kuupäev - - - - Type - Tüüp - - - - Address - Aadress - - - - Amount - Kogus - - - - Open until %1 - Avatud kuni %1 - - - - Confirmed (%1 confirmations) - Kinnitatud (%1 kinnitust) - - - - Open for %n more block(s) - Avaneb %n bloki pärastAvaneb %n bloki pärast - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Antud klotsi pole saanud ükski osapool ning tõenäoliselt seda ei aktsepteerita! - - - - Generated but not accepted - Loodud, kuid aktsepteerimata - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Tehingu staatus. Kinnituste arvu kuvamiseks liigu hiire noolega selle peale. - - - - Date and time that the transaction was received. - Tehingu saamise kuupäev ning kellaaeg. - - - - Type of transaction. - Tehingu tüüp. - - - - Destination address of transaction. - Tehingu saaja aadress. - - - - Amount removed from or added to balance. - Jäägile lisatud või eemaldatud summa. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Kasutus: - - - - Send command to -server or shadowcoind - - - - - List commands - Käskluste loetelu - - - - Get help for a command - Käskluste abiinfo - - - - Options: - Valikud: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Täpsusta andmekataloog - - - - Set database cache size in megabytes (default: 25) - Sea andmebaasi vahemälu suurus MB (vaikeväärtus: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Säilita vähemalt <n> ühendust peeridega (vaikeväärtus: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Peeri aadressi saamiseks ühendu korraks node'iga - - - - Specify your own public address - Täpsusta enda avalik aadress - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Ulakate peeride valulävi (vaikeväärtus: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Mitme sekundi pärast ulakad peerid tagasi võivad tulla (vaikeväärtus: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - RPC pordi %u kuulamiseks seadistamisel ilmnes viga IPv4'l: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Luba käsurea ning JSON-RPC käsklusi - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Tööta taustal ning aktsepteeri käsklusi - - - - Use the test network - Testvõrgu kasutamine - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Luba välisühendusi (vaikeväärtus: 1 kui puudub -proxy või -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - RPC pordi %u kuulamiseks seadistamisel ilmnes viga IPv6'l, lülitumine tagasi IPv4'le : %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Hoiatus: -paytxfee on seatud väga kõrgeks! See on sinu poolt makstav tehingu lisatasu. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Hoiatus: ilmnes tõrge wallet.dat faili lugemisel! Võtmed on terved, kuid tehingu andmed või aadressiraamatu kirjed võivad olla kadunud või vigased. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Hoiatus: toimus wallet.dat faili andmete päästmine! Originaal wallet.dat nimetati kaustas %s ümber wallet.{ajatempel}.bak'iks, jäägi või tehingute ebakõlade puhul tuleks teha backup'ist taastamine. - - - - Attempt to recover private keys from a corrupt wallet.dat - Püüa vigasest wallet.dat failist taastada turvavõtmed - - - - Block creation options: - Blokeeri loomise valikud: - - - - Connect only to the specified node(s) - Ühendu ainult määratud node'i(de)ga - - - - Discover own IP address (default: 1 when listening and no -externalip) - Leia oma IP aadress (vaikeväärtus: 1, kui kuulatakse ning puudub -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Pordi kuulamine nurjus. Soovikorral kasuta -listen=0. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maksimaalne saamise puhver -connection kohta , <n>*1000 baiti (vaikeväärtus: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maksimaalne saatmise puhver -connection kohta , <n>*1000 baiti (vaikeväärtus: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Ühenda ainult node'idega <net> võrgus (IPv4, IPv6 või Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL valikud: (vaata Bitcoini Wikist või SSL sätete juhendist) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Saada jälitus/debug, debug.log faili asemel, konsooli - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Sea minimaalne bloki suurus baitides (vaikeväärtus: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Kahanda programmi käivitamisel debug.log faili (vaikeväärtus: 1, kui ei ole -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Sea ühenduse timeout millisekundites (vaikeväärtus: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Kasuta kuulatava pordi määramiseks UPnP ühendust (vaikeväärtus: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Kasuta kuulatava pordi määramiseks UPnP ühendust (vaikeväärtus: 1, kui kuulatakse) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - JSON-RPC ühenduste kasutajatunnus - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Hoiatus: versioon on aegunud, uuendus on nõutav! - - - - wallet.dat corrupt, salvage failed - wallet.dat fail on katki, päästmine ebaõnnestus - - - - Password for JSON-RPC connections - JSON-RPC ühenduste salasõna - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - JSON-RPC ühenduste lubamine kindla IP pealt - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Saada käsklusi node'ile IP'ga <ip> (vaikeväärtus: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Käivita käsklus, kui parim plokk muutub (käskluse %s asendatakse ploki hash'iga) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Käivita käsklus, kui rahakoti tehing muutub (%s cmd's muudetakse TxID'ks) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Uuenda rahakott uusimasse vormingusse - - - - Set key pool size to <n> (default: 100) - Sea võtmete hulgaks <n> (vaikeväärtus: 100) - - - - Rescan the block chain for missing wallet transactions - Otsi ploki jadast rahakoti kadunud tehinguid - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Kasuta JSON-RPC ühenduste jaoks OpenSSL'i (https) - - - - Server certificate file (default: server.cert) - Serveri sertifikaadifail (vaikeväärtus: server.cert) - - - - Server private key (default: server.pem) - Serveri privaatvõti (vaikeväärtus: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Käesolev abitekst - - - - Wallet %s resides outside data directory %s. - Rahakott %s paikenb väljaspool kataloogi %s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Selle arvutiga ei ole võimalik siduda %s külge (katse nurjus %d, %s tõttu) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - -addnode, -seednode ja -connect tohivad kasutada DNS lookup'i - - - - Loading addresses... - Aadresside laadimine... - - - - Error loading blkindex.dat - Viga faili blkindex.dat laadimisel - - - - Error loading wallet.dat: Wallet corrupted - Viga wallet.dat käivitamisel. Vigane rahakkott - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Viga faili wallet.dat laadimisel: rahakott vajab ShadowCoin'i uuemat versiooni. - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - Rahakott on vaja üle kirjutada: käivita ShadowCoin uuesti toimingu lõpetamiseks - - - - Error loading wallet.dat - Viga wallet.dat käivitamisel - - - - Invalid -proxy address: '%s' - Vigane -proxi aadress: '%s' - - - - Unknown network specified in -onlynet: '%s' - Kirjeldatud tundmatu võrgustik -onlynet'is: '%s' - - - - Unknown -socks proxy version requested: %i - Küsitud tundmatu -socks proxi versioon: %i - - - - Cannot resolve -bind address: '%s' - Tundmatu -bind aadress: '%s' - - - - Cannot resolve -externalip address: '%s' - Tundmatu -externalip aadress: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - -paytxfee=<amount> jaoks vigane kogus: '%s' - - - - Error: could not start node - - - - - Sending... - Saatmine... - - - - Invalid amount - Kehtetu summa - - - - Insufficient funds - Liiga suur summa - - - - Loading block index... - Klotside indeksi laadimine... - - - - Add a node to connect to and attempt to keep the connection open - Lisa node ning hoia ühendus avatud - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Rahakoti laadimine... - - - - Cannot downgrade wallet - Rahakoti vanandamine ebaõnnestus - - - - Cannot initialize keypool - - - - - Cannot write default address - Tõrge vaikimisi aadressi kirjutamisel - - - - Rescanning... - Üleskaneerimine... - - - - Done loading - Laetud - - - - To use the %s option - %s valiku kasutamine - - - - Error - Tõrge - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - rpcpassword=<password> peab sätete failis olema seadistatud:⏎ -%s⏎ -Kui seda faili ei ole, loo see ainult-omanikule-lugemiseks faili õigustes. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_eu_ES.ts b/src/qt/locale/umbra_eu_ES.ts deleted file mode 100644 index 7c813072f4..0000000000 --- a/src/qt/locale/umbra_eu_ES.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiketa - - - - Address - Helbidea - - - - pubkey - - - - - stealth - - - - - (no label) - (etiketarik ez) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Sartu pasahitza - - - - New passphrase - Pasahitz berria - - - - Repeat new passphrase - Errepikatu pasahitz berria - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Sartu zorrorako pasahitz berria.<br/> Mesedez erabili <b>gutxienez ausazko 10 karaktere</b>, edo <b>gutxienez zortzi hitz</b> pasahitza osatzeko. - - - - Encrypt wallet - Enkriptatu zorroa - - - - This operation needs your wallet passphrase to unlock the wallet. - Eragiketa honek zorroaren pasahitza behar du zorroa desblokeatzeko. - - - - Unlock wallet - Desblokeatu zorroa - - - - This operation needs your wallet passphrase to decrypt the wallet. - Eragiketa honek zure zorroaren pasahitza behar du, zorroa desenkriptatzeko. - - - - Decrypt wallet - Desenkriptatu zorroa - - - - Change passphrase - Aldatu pasahitza - - - - Enter the old and new passphrase to the wallet. - Sartu zorroaren pasahitz zaharra eta berria. - - - - Confirm wallet encryption - Berretsi zorroaren enkriptazioa - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Zorroa enkriptatuta - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Zorroaren enkriptazioak huts egin du - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Zorroaren enkriptazioak huts egin du barne-errore baten ondorioz. Zure zorroa ez da enkriptatu. - - - - - The supplied passphrases do not match. - Eman dituzun pasahitzak ez datoz bat. - - - - Wallet unlock failed - Zorroaren desblokeoak huts egin du - - - - - - The passphrase entered for the wallet decryption was incorrect. - Zorroa desenkriptatzeko sartutako pasahitza okerra da. - - - - Wallet decryption failed - Zorroaren desenkriptazioak huts egin du - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Kopurua - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Kopurua - - - - Label - - - - - Address - Helbidea - - - - Date - Data - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - Kopiatu helbidea - - - - Copy label - Kopiatu etiketa - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (etiketarik ez) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Editatu helbidea - - - - &Label - &Etiketa - - - - The label associated with this address book entry - - - - - &Address - &Helbidea - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Jasotzeko helbide berria - - - - New sending address - Bidaltzeko helbide berria - - - - Edit receiving address - Editatu jasotzeko helbidea - - - - Edit sending address - Editatu bidaltzeko helbidea - - - - The entered address "%1" is already in the address book. - Sartu berri den helbidea, "%1", helbide-liburuan dago jadanik. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Ezin desblokeatu zorroa. - - - - New key generation failed. - Gako berriaren sorrerak huts egin du. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Zabalik %1 arte - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - %1/konfirmatu gabe - - - - %1 confirmations - %1 konfirmazioak - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - Data - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - Kopurua - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - , ez da arrakastaz emititu oraindik - - - - - unknown - ezezaguna - - - - TransactionDescDialog - - - Transaction details - Transakzioaren xehetasunak - - - - This pane shows a detailed description of the transaction - Panel honek transakzioaren deskribapen xehea erakusten du - - - - TransactionTableModel - - - Date - Data - - - - Type - Mota - - - - Address - Helbidea - - - - Amount - Kopurua - - - - Open until %1 - Zabalik %1 arte - - - - Confirmed (%1 confirmations) - Konfirmatuta (%1 konfirmazio) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Bloke hau ez du beste inongo nodorik jaso, eta seguruenik ez da onartuko! - - - - Generated but not accepted - Sortua, baina ez onartua - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Transakzioaren egoera. Pasatu sagua gainetik konfirmazio kopurua ikusteko. - - - - Date and time that the transaction was received. - Transakzioa jasotako data eta ordua. - - - - Type of transaction. - Transakzio mota. - - - - Destination address of transaction. - Transakzioaren xede-helbidea. - - - - Amount removed from or added to balance. - Saldoan kendu edo gehitutako kopurua. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - Komandoen lista - - - - Get help for a command - Laguntza komando batean - - - - Options: - Aukerak - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Laguntza mezu hau - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - Birbilatzen... - - - - Done loading - Zamaketa amaitua - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_fa.ts b/src/qt/locale/umbra_fa.ts deleted file mode 100644 index 16a2fb07a3..0000000000 --- a/src/qt/locale/umbra_fa.ts +++ /dev/null @@ -1,3390 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - برچسب - - - - Address - نشانی - - - - pubkey - - - - - stealth - - - - - (no label) - (بدون برچسب) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - پنجرهٔ گذرواژه - - - - Enter passphrase - گذرواژه را وارد کنید - - - - New passphrase - گذرواژهٔ جدید - - - - Repeat new passphrase - تکرار گذرواژهٔ جدید - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - گذرواژهٔ جدید کیف پول خود را وارد کنید.<br/>لطفاً از گذرواژه‌ای با <b>حداقل ۱۰ حرف تصادفی</b>، یا <b>حداقل هشت کلمه</b> انتخاب کنید. - - - - Encrypt wallet - رمزنگاری کیف پول - - - - This operation needs your wallet passphrase to unlock the wallet. - انجام این عملیات نیازمند گذرواژهٔ کیف پول شما برای باز کردن قفل آن است. - - - - Unlock wallet - باز کردن قفل کیف پول - - - - This operation needs your wallet passphrase to decrypt the wallet. - انجام این عملیات نیازمند گذرواژهٔ کیف پول شما برای رمزگشایی کردن آن است. - - - - Decrypt wallet - رمزگشایی کیف پول - - - - Change passphrase - تغییر گذرواژه - - - - Enter the old and new passphrase to the wallet. - گذرواژهٔ قدیمی و جدید کیف پول را وارد کنید. - - - - Confirm wallet encryption - تأیید رمزنگاری کیف پول - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - آیا مطمئن هستید که می‌خواهید کیف پول خود را رمزنگاری کنید؟ - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - مهم: هر نسخهٔ پشتیبانی که تا کنون از کیف پول خود تهیه کرده‌اید، باید با کیف پول رمزنگاری شدهٔ جدید جایگزین شود. به دلایل امنیتی، پروندهٔ قدیمی کیف پول بدون رمزنگاری، تا زمانی که از کیف پول رمزنگاری‌شدهٔ جدید استفاده نکنید، غیرقابل استفاده خواهد بود. - - - - - Warning: The Caps Lock key is on! - هشدار: کلید Caps Lock روشن است! - - - - - Wallet encrypted - کیف پول رمزنگاری شد - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - رمزنگاری کیف پول با خطا مواجه شد - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - رمزنگاری کیف پول بنا به یک خطای داخلی با شکست مواجه شد. کیف پول شما رمزنگاری نشد. - - - - - The supplied passphrases do not match. - گذرواژه‌های داده شده با هم تطابق ندارند. - - - - Wallet unlock failed - بازگشایی قفل کیف‌پول با شکست مواجه شد - - - - - - The passphrase entered for the wallet decryption was incorrect. - گذرواژهٔ وارد شده برای رمزگشایی کیف پول نادرست بود. - - - - Wallet decryption failed - رمزگشایی ناموفق کیف پول - - - - Wallet passphrase was successfully changed. - گذرواژهٔ کیف پول با موفقیت عوض شد. - - - - ClientModel - - - Network Alert - پیام شبکه - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - مبلغ: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - مبلغ - - - - Label - - - - - Address - نشانی - - - - Date - تاریخ - - - - Confirmations - - - - - Confirmed - تأیید شده - - - - Priority - - - - - Copy address - کپی نشانی - - - - Copy label - کپی برچسب - - - - - Copy amount - کپی مقدار - - - - Copy transaction ID - کپی شناسهٔ تراکنش - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (بدون برچسب) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - ویرایش نشانی - - - - &Label - &برچسب - - - - The label associated with this address book entry - - - - - &Address - &نشانی - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - نشانی دریافتی جدید - - - - New sending address - نشانی ارسالی جدید - - - - Edit receiving address - ویرایش نشانی دریافتی - - - - Edit sending address - ویرایش نشانی ارسالی - - - - The entered address "%1" is already in the address book. - نشانی وارد شده «%1» در حال حاضر در دفترچه وجود دارد. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - نمی‌توان کیف پول را رمزگشایی کرد. - - - - New key generation failed. - ایجاد کلید جدید با شکست مواجه شد. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - نام کلاینت - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - ناموجود - - - - Client version - نسخهٔ کلاینت - - - - &Information - &اطلاعات - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - نسخهٔ OpenSSL استفاده شده - - - - Using BerkeleyDB version - - - - - Startup time - زمان آغاز به کار - - - - Network - شبکه - - - - Name - - - - - Number of connections - تعداد ارتباطات - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - زنجیرهٔ بلوک‌ها - - - - Current number of blocks - تعداد فعلی بلوک‌ها - - - - Estimated total blocks - تعداد تخمینی بلوک‌ها - - - - Last block time - زمان آخرین بلوک - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - با&ز کردن - - - - Command-line options - - - - - &Show - - - - - &Console - &کنسول - - - - Build date - ساخت تاریخ - - - - Debug log file - فایلِ لاگِ اشکال زدایی - - - - Clear console - پاکسازی کنسول - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - دکمه‌های بالا و پایین برای پیمایش تاریخچه و <b>Ctrl-L</b> برای پاک کردن صفحه. - - - - Type <b>help</b> for an overview of available commands. - برای نمایش یک مرور کلی از دستورات ممکن، عبارت <b>help</b> را بنویسید. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - باز تا %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/آفلاین - - - - %1/unconfirmed - %1/تأیید نشده - - - - %1 confirmations - %1 تأییدیه - - - - Status - وضعیت - - - - , broadcast through %n node(s) - ، پخش از طریق %n گره - - - - Date - تاریخ - - - - Source - منبع - - - - Generated - تولید شده - - - - - - From - فرستنده - - - - - - - To - گیرنده - - - - - - - own address - آدرس شما - - - - - label - برچسب - - - - - - - - Credit - بدهی - - - - matures in %n more block(s) - بلوغ در %n بلوک دیگر - - - - not accepted - پذیرفته نشد - - - - - - - Debit - اعتبار - - - - Transaction fee - هزینهٔ تراکنش - - - - Net amount - مبلغ خالص - - - - Message - پیام - - - - Comment - نظر - - - - Transaction ID - شناسهٔ تراکنش - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - اطلاعات اشکال‌زدایی - - - - Transaction - تراکنش - - - - Inputs - ورودی‌ها - - - - Amount - مبلغ - - - - true - درست - - - - false - نادرست - - - - , has not been successfully broadcast yet - ، هنوز با موفقیت ارسال نشده - - - - - unknown - ناشناس - - - - TransactionDescDialog - - - Transaction details - جزئیات تراکنش - - - - This pane shows a detailed description of the transaction - این پانل شامل توصیف کاملی از جزئیات تراکنش است - - - - TransactionTableModel - - - Date - تاریخ - - - - Type - نوع - - - - Address - نشانی - - - - Amount - مبلغ - - - - Open until %1 - باز شده تا %1 - - - - Confirmed (%1 confirmations) - تأیید شده (%1 تأییدیه) - - - - Open for %n more block(s) - باز برای %n بلوک دیگر - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - این بلوک از هیچ همتای دیگری دریافت نشده است و احتمال می‌رود پذیرفته نشود! - - - - Generated but not accepted - تولید شده ولی قبول نشده - - - - (n/a) - (ناموجود) - - - - Transaction status. Hover over this field to show number of confirmations. - وضعیت تراکنش. نشانگر را روی این فیلد نگه دارید تا تعداد تأییدیه‌ها نشان داده شود. - - - - Date and time that the transaction was received. - تاریخ و ساعت دریافت تراکنش. - - - - Type of transaction. - نوع تراکنش. - - - - Destination address of transaction. - نشانی مقصد تراکنش. - - - - Amount removed from or added to balance. - مبلغ کسر شده و یا اضافه شده به تراز. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - استفاده: - - - - Send command to -server or shadowcoind - - - - - List commands - نمایش لیست فرمان‌ها - - - - Get help for a command - راهنمایی در مورد یک دستور - - - - Options: - گزینه‌ها: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - مشخص کردن دایرکتوری داده‌ها - - - - Set database cache size in megabytes (default: 25) - تنظیم اندازهٔ کَش پایگاه‌داده برحسب مگابایت (پیش‌فرض: ۲۵) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - حداکثر <n> اتصال با همتایان برقرار شود (پیش‌فرض: ۱۲۵) - - - - Connect to a node to retrieve peer addresses, and disconnect - اتصال به یک گره برای دریافت آدرس‌های همتا و قطع اتصال پس از اتمام عملیات - - - - Specify your own public address - آدرس عمومی خود را مشخص کنید - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - حد آستانه برای قطع ارتباط با همتایان بدرفتار (پیش‌فرض: ۱۰۰) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - مدت زمان جلوگیری از اتصال مجدد همتایان بدرفتار، به ثانیه (پیش‌فرض: ۸۴۶۰۰) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - هنگام تنظیم پورت RPC %u برای گوش دادن روی IPv4 خطایی رخ داده است: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - پذیرش دستورات خط فرمان و دستورات JSON-RPC - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - اجرا در پشت زمینه به‌صورت یک سرویس و پذیرش دستورات - - - - Use the test network - استفاده از شبکهٔ آزمایش - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - پذیرش اتصالات از بیرون (پیش فرض:1 بدون پراکسی یا اتصال) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - هشدار: مبلغ paytxfee بسیار بالایی تنظیم شده است! این مبلغ هزینه‌ای است که شما برای تراکنش‌ها پرداخت می‌کنید. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - بستن گزینه ایجاد - - - - Connect only to the specified node(s) - تنها در گره (های) مشخص شده متصل شوید - - - - Discover own IP address (default: 1 when listening and no -externalip) - آدرس آی.پی. خود را شناسایی کنید (پیش فرض:1 در زمان when listening وno -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - شنیدن هر گونه درگاه انجام پذیر نیست. ازlisten=0 برای اینکار استفاده کیند. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - حداکثر بافر دریافت شده بر اساس اتصال <n>* 1000 بایت (پیش فرض:5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - حداکثر بافر دریافت شده بر اساس اتصال <n>* 1000 بایت (پیش فرض:1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - تنها =به گره ها در شبکه متصا شوید <net> (IPv4, IPv6 or Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - گزینه ssl (به ویکیbitcoin برای راهنمای راه اندازی ssl مراجعه شود) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - اطلاعات ردگیری/اشکال‌زدایی را به جای فایل لاگ اشکال‌زدایی به کنسول بفرستید - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - حداقل سایز بلاک بر اساس بایت تنظیم شود (پیش فرض: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - فایل debug.log را در startup مشتری کوچک کن (پیش فرض:1 اگر اشکال زدایی روی نداد) - - - - Specify connection timeout in milliseconds (default: 5000) - (میلی ثانیه )فاصله ارتباط خاص - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - از UPnP برای شناسایی درگاه شنیداری استفاده کنید (پیش فرض:0) - - - - Use UPnP to map the listening port (default: 1 when listening) - از UPnP برای شناسایی درگاه شنیداری استفاده کنید (پیش فرض:1 در زمان شنیدن) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - JSON-RPC شناسه برای ارتباطات - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - هشدار: این نسخه قدیمی است، روزآمدسازی مورد نیاز است - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - JSON-RPC عبارت عبور برای ارتباطات - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - از آدرس آی پی خاص JSON-RPC قبول ارتباطات - - - - Send commands to node running on <ip> (default: 127.0.0.1) - (127.0.0.1پیش فرض: ) &lt;ip&gt; دادن فرمانها برای استفاده گره ها روی - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - زمانی که بهترین بلاک تغییر کرد، دستور را اجرا کن (%s در cmd با block hash جایگزین شده است) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - هنگامی که یک تراکنش در کیف پولی رخ می دهد، دستور را اجرا کن(%s در دستورات بوسیله ی TxID جایگزین می شود) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - wallet را به جدیدترین فرمت روزآمد کنید - - - - Set key pool size to <n> (default: 100) - (100پیش فرض:)&lt;n&gt; گذاشتن اندازه کلید روی - - - - Rescan the block chain for missing wallet transactions - اسکان مجدد زنجیر بلوکها برای گم والت معامله - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - JSON-RPCبرای ارتباطات استفاده کنید OpenSSL (https) - - - - Server certificate file (default: server.cert) - (server.certپیش فرض: )گواهی نامه سرور - - - - Server private key (default: server.pem) - (server.pemپیش فرض: ) کلید خصوصی سرور - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - پیام کمکی - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - امکان اتصال به %s از این رایانه وجود ندارد ( bind returned error %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - به DNS اجازه بده تا برای addnode ، seednode و اتصال جستجو کند - - - - Loading addresses... - بار گیری آدرس ها - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - خطا در بارگیری wallet.dat: کیف پول خراب شده است - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - خطا در بارگیری wallet.dat - - - - Invalid -proxy address: '%s' - آدرس پراکسی اشتباه %s - - - - Unknown network specified in -onlynet: '%s' - شبکه مشخص شده غیرقابل شناسایی در onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - نسخه پراکسی ساکس غیرقابل شناسایی درخواست شده است: %i - - - - Cannot resolve -bind address: '%s' - آدرس قابل اتصال- شناسایی نیست %s - - - - Cannot resolve -externalip address: '%s' - آدرس خارجی قابل اتصال- شناسایی نیست %s - - - - Invalid amount for -paytxfee=<amount>: '%s' - میزان وجه اشتباه برای paytxfee=<میزان وجه>: %s - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - میزان وجه اشتباه - - - - Insufficient funds - بود جه نا کافی - - - - Loading block index... - بار گیری شاخص بلوک - - - - Add a node to connect to and attempt to keep the connection open - به اتصال یک گره اضافه کنید و اتصال را باز نگاه دارید - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - بار گیری والت - - - - Cannot downgrade wallet - امکان تنزل نسخه در wallet وجود ندارد - - - - Cannot initialize keypool - - - - - Cannot write default address - آدرس پیش فرض قابل ذخیره نیست - - - - Rescanning... - اسکان مجدد - - - - Done loading - بار گیری انجام شده است - - - - To use the %s option - برای استفاده از %s از انتخابات - - - - Error - خطا - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - %s، شما باید یک rpcpassword را در فایل پیکربندی تنظیم کنید :⏎%s⏎ اگر فایل ایجاد نشد، یک فایل فقط متنی ایجاد کنید. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_fa_IR.ts b/src/qt/locale/umbra_fa_IR.ts deleted file mode 100644 index c2aa3b9805..0000000000 --- a/src/qt/locale/umbra_fa_IR.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - برچسب - - - - Address - حساب - - - - pubkey - - - - - stealth - - - - - (no label) - (برچسب ندارد) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - رمز/پَس فرِیز را وارد کنید - - - - New passphrase - رمز/پَس فرِیز جدید را وارد کنید - - - - Repeat new passphrase - رمز/پَس فرِیز را دوباره وارد کنید - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - رمز/پَس فرِیز جدید را در wallet وارد کنید. برای انتخاب رمز/پَس فرِیز از 10 کاراکتر تصادفی یا بیشتر و یا هشت کلمه یا بیشتر استفاده کنید. - - - - Encrypt wallet - wallet را رمزگذاری کنید - - - - This operation needs your wallet passphrase to unlock the wallet. - برای انجام این عملکرد به رمز/پَس فرِیزِwallet نیاز است تا آن را از حالت قفل درآورد. - - - - Unlock wallet - باز کردن قفل wallet - - - - This operation needs your wallet passphrase to decrypt the wallet. - برای کشف رمز wallet، به رمز/پَس فرِیزِwallet نیاز است. - - - - Decrypt wallet - کشف رمز wallet - - - - Change passphrase - تغییر رمز/پَس فرِیز - - - - Enter the old and new passphrase to the wallet. - رمز/پَس فرِیزِ قدیم و جدید را در wallet وارد کنید - - - - Confirm wallet encryption - رمزگذاری wallet را تایید کنید - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - تایید رمزگذاری - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - رمزگذاری تایید نشد - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - رمزگذاری به علت خطای داخلی تایید نشد. wallet شما رمزگذاری نشد - - - - - The supplied passphrases do not match. - رمزهای/پَس فرِیزهایِ وارد شده با هم تطابق ندارند - - - - Wallet unlock failed - قفل wallet باز نشد - - - - - - The passphrase entered for the wallet decryption was incorrect. - رمزهای/پَس فرِیزهایِ وارد شده wallet برای کشف رمز اشتباه است. - - - - Wallet decryption failed - کشف رمز wallet انجام نشد - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - هشدار شبکه - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - میزان وجه: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - میزان - - - - Label - - - - - Address - حساب - - - - Date - تاریخ - - - - Confirmations - - - - - Confirmed - تایید شده - - - - Priority - - - - - Copy address - آدرس را کپی کنید - - - - Copy label - برچسب را کپی کنید - - - - - Copy amount - میزان وجه کپی شود - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (برچسب ندارد) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - ویرایش حساب - - - - &Label - و برچسب - - - - The label associated with this address book entry - - - - - &Address - حساب& - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - حساب دریافت کننده جدید - - - - - New sending address - حساب ارسال کننده جدید - - - - Edit receiving address - ویرایش حساب دریافت کننده - - - - Edit sending address - ویرایش حساب ارسال کننده - - - - The entered address "%1" is already in the address book. - حساب وارد شده «1%» از پیش در دفترچه حساب ها موجود است. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - عدم توانیی برای قفل گشایی wallet - - - - New key generation failed. - عدم توانیی در ایجاد کلید جدید - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - نام کنسول RPC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - ویرایش کنسول RPC - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - شبکه - - - - Name - - - - - Number of connections - تعداد اتصال - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - زنجیره مجموعه تراکنش ها - - - - Current number of blocks - تعداد زنجیره های حاضر - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - باز کن تا %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - %1 / تایید نشده - - - - %1 confirmations - %1 تایید - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - تاریخ - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - برچسب - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - پیام - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - میزان - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - ، هنوز با موفقیت ارسال نگردیده است - - - - - unknown - ناشناس - - - - TransactionDescDialog - - - Transaction details - جزئیات تراکنش - - - - This pane shows a detailed description of the transaction - این بخش جزئیات تراکنش را نشان می دهد - - - - TransactionTableModel - - - Date - تاریخ - - - - Type - گونه - - - - Address - آدرس - - - - Amount - میزان وجه - - - - Open until %1 - باز کن تا %1 - - - - Confirmed (%1 confirmations) - تایید شده (%1 تاییدها) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - این block توسط گره های دیگری دریافت نشده است و ممکن است قبول نشود - - - - Generated but not accepted - تولید شده اما قبول نشده است - - - - (n/a) - خالی - - - - Transaction status. Hover over this field to show number of confirmations. - وضعیت تراکنش. با اشاره به این بخش تعداد تاییدها نمایش داده می شود - - - - Date and time that the transaction was received. - زمان و تاریخی که تراکنش دریافت شده است - - - - Type of transaction. - نوع تراکنش - - - - Destination address of transaction. - آدرس مقصد در تراکنش - - - - Amount removed from or added to balance. - میزان وجه کم شده یا اضافه شده به حساب - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - میزان استفاده: - - - - Send command to -server or shadowcoind - - - - - List commands - فهرست دستورها - - - - Get help for a command - درخواست کمک برای یک دستور - - - - Options: - انتخابها: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - دایرکتوری داده را مشخص کن - - - - Set database cache size in megabytes (default: 25) - حافظه بانک داده را به مگابایت تنظیم کنید (پیش فرض: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - نگهداری <N> ارتباطات برای قرینه سازی (پیش فرض:125) - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - آستانه قطع برای قرینه سازی اشتباه (پیش فرض:100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - تعداد ثانیه ها برای اتصال دوباره قرینه های اشتباه (پیش فرض:86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - command line و JSON-RPC commands را قبول کنید - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - به عنوان daemon بک گراند را اجرا کنید و دستورات را قبول نمایید - - - - Use the test network - از تستِ شبکه استفاده نمایید - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - ارسال اطلاعات پیگیری/خطایابی به کنسول به جای ارسال به فایل debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - تعیین مدت زمان وقفه (time out) به هزارم ثانیه - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - شناسه کاربری برای ارتباطاتِ JSON-RPC - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - رمز برای ارتباطاتِ JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - ارتباطاتِ JSON-RPC را از آدرس آی.پی. مشخصی برقرار کنید. - - - - Send commands to node running on <ip> (default: 127.0.0.1) - دستورات را به گره اجرا شده در<ip> ارسال کنید (پیش فرض:127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - دستور را وقتی بهترین بلاک تغییر کرد اجرا کن (%s در دستور توسط block hash جایگزین شده است) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - wallet را به جدیدترین نسخه روزآمد کنید - - - - Set key pool size to <n> (default: 100) - حجم key pool را به اندازه <n> تنظیم کنید (پیش فرض:100) - - - - Rescan the block chain for missing wallet transactions - زنجیره بلاک را برای تراکنش جا افتاده در WALLET دوباره اسکن کنید - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - برای ارتباطاتِ JSON-RPC از OpenSSL (https) استفاده کنید - - - - Server certificate file (default: server.cert) - فایل certificate سرور (پیش فرض server.cert) - - - - Server private key (default: server.pem) - رمز اختصاصی سرور (پیش فرض: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - این پیام راهنما - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - لود شدن آدرسها.. - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - خطا در هنگام لود شدن wallet.dat: Wallet corrupted - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - خطا در هنگام لود شدن wallet.dat - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - میزان اشتباه است for -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - میزان اشتباه است - - - - Insufficient funds - وجوه ناکافی - - - - Loading block index... - لود شدن نمایه بلاکها.. - - - - Add a node to connect to and attempt to keep the connection open - یک گره برای اتصال اضافه کنید و تلاش کنید تا اتصال را باز نگاه دارید - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - wallet در حال لود شدن است... - - - - Cannot downgrade wallet - قابلیت برگشت به نسخه قبلی برای wallet امکان پذیر نیست - - - - Cannot initialize keypool - - - - - Cannot write default address - آدرس پیش فرض قابل ذخیره نیست - - - - Rescanning... - اسکنِ دوباره... - - - - Done loading - اتمام لود شدن - - - - To use the %s option - برای استفاده از %s از اختیارات - - - - Error - خطا - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - شما باید یک رمز rpcpassword=<password> را در فایل تنظیمات ایجاد کنید⏎ %s ⏎ اگر فایل ایجاد نشده است، آن را با یک فایل "فقط متنی" ایجاد کنید. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_fi.ts b/src/qt/locale/umbra_fi.ts deleted file mode 100644 index 21165de63d..0000000000 --- a/src/qt/locale/umbra_fi.ts +++ /dev/null @@ -1,3415 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Tietoa ShadowCoinista - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> versio - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Nimi - - - - Address - Osoite - - - - pubkey - - - - - stealth - - - - - (no label) - (ei nimeä) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Tunnuslauseen Dialogi - - - - Enter passphrase - Syötä tunnuslause - - - - New passphrase - Uusi tunnuslause - - - - Repeat new passphrase - Toista uusi tunnuslause uudelleen - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Sallii estettäväksi yksinkertaiset rahansiirrot kun käyttöjärjestelmän käyttäjätunnuksen turvallisuutta on rikottu. Tämä ei takaa oikeasti turvallisuutta. - - - - For staking only - Vain osakkuutta varten - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Anna lompakolle uusi tunnuslause.<br/>Käytä tunnuslausetta, jossa on ainakin <b>10 satunnaista merkkiä</b> tai <b>kahdeksan sanaa</b>. - - - - Encrypt wallet - Salaa lompakko - - - - This operation needs your wallet passphrase to unlock the wallet. - Tätä toimintoa varten sinun täytyy antaa lompakon tunnuslause sen avaamiseksi. - - - - Unlock wallet - Avaa lompakko lukituksestaan - - - - This operation needs your wallet passphrase to decrypt the wallet. - Tätä toimintoa varten sinun täytyy antaa lompakon tunnuslause salauksen purkuun. - - - - Decrypt wallet - Pura lompakon salaus - - - - Change passphrase - Vaihda tunnuslause - - - - Enter the old and new passphrase to the wallet. - Anna vanha ja uusi tunnuslause. - - - - Confirm wallet encryption - Vahvista lompakon salaus - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Varoitus: Jos salaat lompakkosi ja hukkaat salasanasi, <b>MENETÄT KAIKKI KOLIKKOSI</b>! - - - - Are you sure you wish to encrypt your wallet? - Haluatko varmasti salata lompakkosi? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - TÄRKEÄÄ: Kaikki vanhat lompakon varmuuskopiot tulisi korvata uusilla suojatuilla varmuuskopioilla. Turvallisuussyistä edelliset varmuuskopiot muuttuvat käyttökelvottomiksi, kun aloitat uuden salatun lompakon käytön. - - - - - Warning: The Caps Lock key is on! - Varoitus: Caps Lock-näppäin on käytössä! - - - - - Wallet encrypted - Lompakko salattu - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin-ohjelma sulkee itsensä päättääkseen salauksen luonnin. Muista, että lompakon salaaminen ei täysin turvaa kolikoitasi haittaohjelmien aiheuttamien varkauksien uhalta. - - - - - - - Wallet encryption failed - Lompakon salaus epäonnistui - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Lompakon salaaminen epäonnistui sisäisen virheen vuoksi. Lompakkoasi ei salattu. - - - - - The supplied passphrases do not match. - Annetut tunnuslauseet eivät täsmää. - - - - Wallet unlock failed - Lompakon avaaminen epäonnistui. - - - - - - The passphrase entered for the wallet decryption was incorrect. - Annettu tunnuslause oli väärä. - - - - Wallet decryption failed - Lompakon salauksen purku epäonnistui. - - - - Wallet passphrase was successfully changed. - Lompakon tunnuslause vaihdettiin onnistuneesti. - - - - ClientModel - - - Network Alert - Verkkohälytys - - - - CoinControlDialog - - - Coin Control - Rahan hallinta - - - - Quantity: - Määrä: - - - - Bytes: - Tavua: - - - - Amount: - Määrä: - - - - Priority: - Prioriteetti: - - - - Fee: - Kulu: - - - - Low Output: - Heikko ulosanti: - - - - - no - ei - - - - After Fee: - Kulujen jälkeen: - - - - Change: - Vaihdos: - - - - (un)select all - (tai ei)Valitse kaikki - - - - Tree mode - Puunäkymä - - - - List mode - Listanäkymä - - - - Amount - Määrä - - - - Label - Nimike - - - - Address - Osoite - - - - Date - Päivämäärä - - - - Confirmations - Vahvistukset - - - - Confirmed - Vahvistettu - - - - Priority - Prioriteetti - - - - Copy address - Kopioi osoite - - - - Copy label - Kopioi nimi - - - - - Copy amount - Kopioi määrä - - - - Copy transaction ID - Kopioi siirtotunnus - - - - Copy quantity - Kopioi määrä - - - - Copy fee - Kopioi kulu - - - - Copy after fee - Kopioi kulun jälkeen - - - - Copy bytes - Kopioi tavuja - - - - Copy priority - Kopioi prioriteetti - - - - Copy low output - Kopioi heikko ulosanti - - - - Copy change - Kopioi vaihdos - - - - highest - korkein - - - - high - korkea - - - - medium-high - keskikorkea - - - - medium - keski - - - - low-medium - keskimatala - - - - low - matala - - - - lowest - matalin - - - - - DUST - pölyä - - - - - yes - kyllä - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Tämä nimike muuttuu punaiseksi, jos rahansiirron koko on suurempi kuin 10000 tavua. - -Tämä tarkoittaa, että ainakin %1 rahansiirtopalkkio per kilotavu tarvitaan. - -Voi vaihdella välillä +/- 1 Tavu per syöte. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Suuremman prioriteetin rahansiirrot pääsevät suuremmalla todennäköisyydellä lohkoketjuun. - -Tämä nimike muuttuu punaiseksi, jos prioriteetti on pienempi kuin "keskikokoinen". - -Tämä tarkoittaa, että ainakin %1 rahansiirtopalkkio per kilotavu tarvitaan. - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Tämä nimike muuttuu punaiseksi, jos jokin asiakas saa pienemmän määrän kuin %1. - -Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - -Määrät alle 0.546 kertaa pienimmän rahansiirtokulun verran näytetään pölynä. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Tämä nimike muuttuu punaiseksi, jos vaihdos on pienempi kuin %1. - -Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - - - - - (no label) - (ei nimeä) - - - - change from %1 (%2) - vaihdos %1 (%2) - - - - (change) - (vaihdos) - - - - EditAddressDialog - - - Edit Address - Muokkaa osoitetta - - - - &Label - &Nimi - - - - The label associated with this address book entry - Tämän syötteen nimike osoitekirjassa - - - - &Address - &Osoite - - - - The address associated with this address book entry. This can only be modified for sending addresses. - Tämän syötteen nimike osoitekirjassa. Nimikettä voidaan muuttaa vain lähetysosoitteille. - - - - &Stealth Address - - - - - New receiving address - Uusi vastaanottava osoite - - - - New sending address - Uusi lähettävä osoite - - - - Edit receiving address - Muokkaa vastaanottajan osoitetta - - - - Edit sending address - Muokkaa lähtevää osoitetta - - - - The entered address "%1" is already in the address book. - Osoite "%1" on jo osoitekirjassa. - - - - The entered address "%1" is not a valid ShadowCoin address. - Syöttämäsi osoite "%1" ei ole hyväksytty ShadowCoin-osoite. - - - - Could not unlock wallet. - Lompakkoa ei voitu avata. - - - - New key generation failed. - Uuden avaimen luonti epäonnistui. - - - - GUIUtil::HelpMessageBox - - - version - versio - - - - - Shadow - - - - - Usage: - Kulutus: - - - - command-line options - komentokehotteen asetukset - - - - UI options - Käyttäjärajapinnan asetukset - - - - Set language, for example "de_DE" (default: system locale) - Aseta kieli, esimerkiksi "fi_FI" (oletus: järjestelmän oma) - - - - Start minimized - Käynnistä pienennettynä - - - - Show splash screen on startup (default: 1) - Näytä logo käynnistettäessä (oletus: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Pääteohjelman nimi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - Ei saatavilla - - - - Client version - Pääteohjelman versio - - - - &Information - T&ietoa - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Käytössä oleva OpenSSL-versio - - - - Using BerkeleyDB version - - - - - Startup time - Käynnistysaika - - - - Network - Verkko - - - - Name - - - - - Number of connections - Yhteyksien lukumäärä - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Lohkoketju - - - - Current number of blocks - Nykyinen Lohkojen määrä - - - - Estimated total blocks - Arvioitu lohkojen kokonaismäärä - - - - Last block time - Viimeisimmän lohkon aika - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Avaa - - - - Command-line options - Komentokehotteen ominaisuudet - - - - &Show - %Näytä - - - - &Console - &Konsoli - - - - Build date - Kääntöpäiväys - - - - Debug log file - Debug lokitiedosto - - - - Clear console - Tyhjennä konsoli - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Ylös- ja alas-nuolet selaavat historiaa ja <b>Ctrl-L</b> tyhjentää ruudun. - - - - Type <b>help</b> for an overview of available commands. - Kirjoita <b>help</b> nähdäksesi yleiskatsauksen käytettävissä olevista komennoista. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Avoinna %1 asti - - - - Open for %n block(s) - Avoinna %n:lle lohkolleAvoinna %n lohkolle - - - - conflicted - törmännyt - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/vahvistamaton - - - - %1 confirmations - %1 vahvistusta - - - - Status - Tila - - - - , broadcast through %n node(s) - lähetetty %n noodin läpilähetetty %n noodin läpi - - - - Date - Päivämäärä - - - - Source - Lähde - - - - Generated - Generoitu - - - - - - From - Lähettäjä - - - - - - - To - Saaja - - - - - - - own address - oma osoite - - - - - label - nimi - - - - - - - - Credit - Credit - - - - matures in %n more block(s) - kypsyy %n lohkon kuluttuakypsyy %n lohkon kuluttua - - - - not accepted - ei hyväksytty - - - - - - - Debit - Debit - - - - Transaction fee - Maksukulu - - - - Net amount - Netto määrä - - - - Message - Viesti - - - - Comment - Viesti - - - - Transaction ID - Siirtotunnus - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Debug tiedot - - - - Transaction - Rahansiirto - - - - Inputs - Sisääntulot - - - - Amount - Määrä - - - - true - tosi - - - - false - epätosi - - - - , has not been successfully broadcast yet - , ei ole vielä onnistuneesti lähetetty - - - - - unknown - tuntematon - - - - TransactionDescDialog - - - Transaction details - Rahansiirron yksityiskohdat - - - - This pane shows a detailed description of the transaction - Tämä ruutu näyttää yksityiskohtaisen tiedon rahansiirrosta - - - - TransactionTableModel - - - Date - Päivämäärä - - - - Type - Laatu - - - - Address - Osoite - - - - Amount - Määrä - - - - Open until %1 - Avoinna %1 asti - - - - Confirmed (%1 confirmations) - Vahvistettu (%1 vahvistusta) - - - - Open for %n more block(s) - Avoinna %n lohkolleAvoinna %n lohkolle - - - - Narration - - - - - Offline - Offline-tila - - - - Unconfirmed - Vahvistamaton - - - - Confirming (%1 of %2 recommended confirmations) - Vahvistetaan (%1 %2:sta suositellusta vahvistuksesta) - - - - Conflicted - Törmännyt - - - - Immature (%1 confirmations, will be available after %2) - Ei vahvistettu (%1 vahvistusta, on saatavilla %2:n jälkeen) - - - - This block was not received by any other nodes and will probably not be accepted! - Tätä lohkoa ei vastaanotettu mistään muusta solmusta ja sitä ei mahdollisesti hyväksytä! - - - - Generated but not accepted - Generoitu mutta ei hyväksytty - - - - (n/a) - (ei saatavilla) - - - - Transaction status. Hover over this field to show number of confirmations. - Rahansiirron tila. Siirrä osoitin kentän päälle nähdäksesi vahvistusten lukumäärä. - - - - Date and time that the transaction was received. - Rahansiirron vastaanottamisen päivämäärä ja aika. - - - - Type of transaction. - Rahansiirron laatu. - - - - Destination address of transaction. - Rahansiirron kohteen Bitcoin-osoite - - - - Amount removed from or added to balance. - Saldoon lisätty tai siitä vähennetty määrä. - - - - WalletModel - - - - Sending... - Lähetetään... - - - - bitcoin-core - - - ShadowCoin version - ShadowCoinin versio - - - - Usage: - Käyttö: - - - - Send command to -server or shadowcoind - Syötä komento kohteeseen -server tai shadowcoind - - - - List commands - Lista komennoista - - - - Get help for a command - Hanki apua käskyyn - - - - Options: - Asetukset: - - - - Specify configuration file (default: shadowcoin.conf) - Määritä asetustiedosto (oletus: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Määritä prosessitiedosto (oletus: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Määritä lompakkotiedosto (datahakemiston sisällä) - - - - Specify data directory - Määritä data-hakemisto - - - - Set database cache size in megabytes (default: 25) - Aseta tietokannan välimuistin koko megatavuina (oletus: 25) - - - - Set database disk log size in megabytes (default: 100) - Aseta tietokannan lokien maksimikoko megatavuissa (oletus: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Kuuntele yhteyksiä portissa <port> (oletus: 51737 tai testiverkko: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Pidä enintään <n> yhteyttä verkkoihin (oletus: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Yhdistä noodiin hakeaksesi naapurien osoitteet ja katkaise yhteys - - - - Specify your own public address - Määritä julkinen osoitteesi - - - - Bind to given address. Use [host]:port notation for IPv6 - Liitä annettuun osoitteeseen. Käytä [host]:port merkintää IPv6:lle - - - - Stake your coins to support network and gain reward (default: 1) - Panosta rahasi tukeaksi verkkoa ja saadaksesi palkkiota (oletus: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Kynnysarvo aikakatkaisulle heikosti toimiville verkoille (oletus: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Sekuntien määrä, kuinka kauan uudelleenkytkeydytään verkkoihin (oletus: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Virhe valmisteltaessa RPC-portin %u avaamista kuunneltavaksi: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Irroita lohko- ja osoitetietokannat lopetuksessa. Nostaa ohjelman lopetusaikaa (oletus: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Virhe: Rahansiirto on evätty. Tämä voi tapahtua jos joitakin kolikoistasi lompakossasi on jo käytetty, tai jos olet käyttänyt wallet.dat-tiedoston kopiota ja rahat olivat käytetyt kopiossa, mutta ei merkitty käytetyksi tässä. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Virhe: Tämä rahansiirto tarvitsee rahansiirtopalkkion, kooltaan %s, kokonsa, monimutkaisuutensa tai aikaisemmin saatujen varojen käytön takia. - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Kuuntele JSON-RPC-yhteyksiä portissa <port> (oletus: 51736 tai testiverkko: 51996) - - - - Accept command line and JSON-RPC commands - Hyväksy merkkipohjaiset- ja JSON-RPC-käskyt - - - - Error: Transaction creation failed - Virhe: Rahansiirron luonti epäonnistui - - - - Error: Wallet locked, unable to create transaction - Virhe: Lompakko lukittu, rahansiirtoa ei voida luoda - - - - Importing blockchain data file. - Tuodaan lohkoketjun datatiedostoa. - - - - Importing bootstrap blockchain data file. - Tuodaan esilatausohjelma lohkoketjun datatiedostolle. - - - - Run in the background as a daemon and accept commands - Aja taustalla daemonina ja hyväksy komennot - - - - Use the test network - Käytä test -verkkoa - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Hyväksy yhteyksiä ulkopuolelta (vakioasetus: 1 jos -proxy tai -connect ei määritelty) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Virhe ilmennyt asetettaessa RPC-porttia %u IPv6:n kuuntelemiseksi, palataan takaisin IPv4:ään %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Virhe alustettaessa tietokantaympäristöä %s! Palauttaaksesi sen, TEE VARMUUSKOPIO HAKEMISTOSTA ja poista tämän jälkeen kaikki hakemiston tiedostot paitsi wallet.dat-tiedosto. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Aseta maksimikoko korkean prioriteetin/pienen siirtokulun maksutapahtumille tavuina (oletus: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Varoitus: -paytxfee on asetettu erittäin korkeaksi! Tämä on maksukulu jonka tulet maksamaan kun lähetät siirron. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Varoitus: Tarkista, että tietokoneesi aika ja päivämäärä ovat oikeassa! Jos kellosi on väärässä, ShadowCoin ei toimi oikein. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Varoitus: Virhe luettaessa wallet.dat-tiedostoa! Kaikki avaimet luettiin oikein, mutta rahansiirtodata tai osoitekirjan kentät voivat olla puuttuvat tai väärät. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Varoitus: wallet.dat-tiedosto on korruptoitunut, data pelastettu! Alkuperäinen wallet.dat on tallennettu nimellä wallet.{aikaleima}.bak kohteeseen %s; Jos saldosi tai rahansiirrot ovat väärät, sinun tulee palauttaa lompakko varmuuskopiosta. - - - - Attempt to recover private keys from a corrupt wallet.dat - Yritetään palauttaa yksityisiä salausavaimia korruptoituneesta wallet.dat-tiedostosta - - - - Block creation options: - Lohkon luonnin asetukset: - - - - Connect only to the specified node(s) - Yhidstä ainoastaan määrättyihin noodeihin - - - - Discover own IP address (default: 1 when listening and no -externalip) - Hae oma IP osoite (vakioasetus: 1 kun kuuntelemassa ja ei -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Ei onnistuttu kuuntelemaan missään portissa. Käytä -listen=0 jos haluat tätä. - - - - Find peers using DNS lookup (default: 1) - Etsi vertaisiasi käyttäen DNS-nimihakua (oletus: 1) - - - - Sync checkpoints policy (default: strict) - Synkronoi tallennuspisteiden käytännöt (oletus: strict) - - - - Invalid -tor address: '%s' - Epäkelpo -tor-osoite: '%s' - - - - Invalid amount for -reservebalance=<amount> - Epäkelpo määrä -reservebalance=<amount> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Suurin vastaanottopuskuri yksittäiselle yhteydelle, <n>*1000 tavua (vakioasetus: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Suurin lähetyspuskuri yksittäiselle yhteydelle, <n>*1000 tavua (vakioasetus: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Yhdistä vain noodeihin verkossa <net> (IPv4, IPv6 tai Tor) - - - - Output extra debugging information. Implies all other -debug* options - Tulosta lisäksi debug-tietoa, seuraa kaikkia muita -debug*-asetuksia - - - - Output extra network debugging information - Tulosta lisäksi verkon debug-tietoa - - - - Prepend debug output with timestamp - Lisää debug-tulosteiden alkuun aikaleimat - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL asetukset (katso Bitcoin Wikistä tarkemmat SSL ohjeet) - - - - Select the version of socks proxy to use (4-5, default: 5) - Valitse SOCKS-välityspalvelimen versio (4-5, oletus 5) - - - - Send trace/debug info to console instead of debug.log file - Lähetä jäljitys/debug-tieto konsoliin, debug.log-tiedoston sijaan - - - - Send trace/debug info to debugger - Lähetä debug-tuloste kehittäjille - - - - Set maximum block size in bytes (default: 250000) - Aseta lohkon maksimikoko tavuissa (oletus: 250000) - - - - Set minimum block size in bytes (default: 0) - Asetan pienin lohkon koko tavuissa (vakioasetus: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Pienennä debug.log tiedosto käynnistyksen yhteydessä (vakioasetus: 1 kun ei -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Määritä yhteyden aikakataisu millisekunneissa (vakioasetus: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - Ei voitu kirjata tallennuspistettä, väärä checkpointkey? - - - - - Use UPnP to map the listening port (default: 0) - Käytä UPnP:tä kuunneltavan portin avaamiseen (vakioasetus: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Käytä UPnP:tä kuunneltavan portin avaamiseen (vakioasetus: 1 kun kuuntelemassa) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Käytä välityspalvelinta saavuttaaksesi tor:n piilotetut palvelut (oletus: sama kuin -proxy) - - - - Username for JSON-RPC connections - Käyttäjätunnus JSON-RPC-yhteyksille - - - - Verifying database integrity... - Tarkistetaan tietokannan eheyttä... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - VAROITUS: synkronoidun tallennuspisteen rikkomista havaittu, mutta ohitettu! - - - - Warning: Disk space is low! - Varoitus: Kiintolevytila on vähissä! - - - - Warning: This version is obsolete, upgrade required! - Varoitus: Tämä versio on vanhentunut, päivitys tarpeen! - - - - wallet.dat corrupt, salvage failed - wallet.dat on korruptoitunut, pelastusyritys epäonnistui - - - - Password for JSON-RPC connections - Salasana JSON-RPC-yhteyksille - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, sinun on asetettava rpcpassword asetustiedostoon: -%s -On suositeltavaa, että käytät seuraavaa arvottua salasanaa: -rpcuser=shadowcoinrpc -rpcpassword=%s -(Sinun ei tarvitse muistaa tätä salasanaa) -Käyttäjänimen ja salasanan EI TULE OLLA SAMOJA. -Jos tiedostoa ei ole olemassa, luo se asettaen samalla omistajan lukuoikeudet. -On myös suositeltavaa asettaa alertnotify jolloin olet tiedotettu ongelmista; esimerkiksi: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - Etsi vertaisiasi käyttäen Internet Relay Chatia (oletus: 1) {0)?} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Synkronoi kello muiden noodien kanssa. Poista käytöstä, jos järjestelmäsi aika on tarkka esim. päivittää itsensä NTP-palvelimelta. (oletus: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - Rahansiirtoja luodessa jätä huomioimatta syötteet joiden arvo on vähemmän kuin tämä (oletus: 0.01) - - - - Allow JSON-RPC connections from specified IP address - Salli JSON-RPC yhteydet tietystä ip-osoitteesta - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Lähetä käskyjä solmuun osoitteessa <ip> (oletus: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Suorita käsky kun paras lohko muuttuu (%s cmd on vaihdettu block hashin kanssa) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Suorita komento kun lompakon rahansiirrossa muutoksia (%s komennossa on korvattu TxID:llä) - - - - Require a confirmations for change (default: 0) - Vaadi vaihtorahalle vahvistus (oletus: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Vahvista, että rahansiirtoskriptit käyttävät sääntöjen mukaisia PUSH-toimijoita (oletus: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Suorita komento kun olennainen varoitus on saatu (%s komennossa korvattu viestillä) - - - - Upgrade wallet to latest format - Päivitä lompakko uusimpaan formaattiin - - - - Set key pool size to <n> (default: 100) - Aseta avainpoolin koko arvoon <n> (oletus: 100) - - - - Rescan the block chain for missing wallet transactions - Skannaa uudelleen lohkoketju lompakon puuttuvien rahasiirtojen vuoksi - - - - How many blocks to check at startup (default: 2500, 0 = all) - Kuinka monta lohkoa tarkistetaan käynnistyksen yhteydessä (oletus: 2500, 0 = kaikki) - - - - How thorough the block verification is (0-6, default: 1) - Kuinka perusteellisesti lohko vahvistetaan (0-6, oletus: 1) - - - - Imports blocks from external blk000?.dat file - Tuo lohkoja erillisestä blk000?.dat-tiedostosta - - - - Use OpenSSL (https) for JSON-RPC connections - Käytä OpenSSL:ää (https) JSON-RPC-yhteyksille - - - - Server certificate file (default: server.cert) - Palvelimen sertifikaatti-tiedosto (oletus: server.cert) - - - - Server private key (default: server.pem) - Palvelimen yksityisavain (oletus: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Hyväksytyt salaustyypit (oletus: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Virhe: Lompakko avattu vain osakkuutta varten, rahansiirtoja ei voida luoda. - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - VAROITUS: Epäkelpo tarkistuspiste löydetty! Ilmoitetut rahansiirrot eivät välttämättä pidä paikkaansa! Sinun täytyy päivittää asiakasohjelma, tai ilmoittaa kehittäjille ongelmasta. - - - - This help message - Tämä ohjeviesti - - - - Wallet %s resides outside data directory %s. - Lompakko %s on datahakemiston %s ulkopuolella. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Ei voida saavuttaa lukkoa datatiedostossa %s. ShadowCoin-asiakasohjelma on ehkä jo käynnissä. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Kytkeytyminen %s tällä tietokonella ei onnistu (kytkeytyminen palautti virheen %d, %s) - - - - Connect through socks proxy - Yhdistä SOCKS-välityspalvelimen lävitse - - - - Allow DNS lookups for -addnode, -seednode and -connect - Salli DNS kyselyt -addnode, -seednode ja -connect yhteydessä - - - - Loading addresses... - Ladataan osoitteita... - - - - Error loading blkindex.dat - Virhe ladattaessa blkindex.dat-tiedostoa - - - - Error loading wallet.dat: Wallet corrupted - Virhe ladattaessa wallet.dat-tiedostoa: Lompakko vioittunut - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Virhe ladattaessa wallet.dat-tiedostoa: Lompakko tarvitsee uudemman version ShadowCoin-asiakasohjelmasta - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - Lompakko on kirjoitettava uudelleen: käynnistä ShadowCoin-asiakasohjelma uudelleen päättääksesi toiminnon - - - - Error loading wallet.dat - Virhe ladattaessa wallet.dat-tiedostoa - - - - Invalid -proxy address: '%s' - Virheellinen proxy-osoite '%s' - - - - Unknown network specified in -onlynet: '%s' - Tuntematon verkko -onlynet parametrina: '%s' - - - - Unknown -socks proxy version requested: %i - Tuntematon -socks proxy versio pyydetty: %i - - - - Cannot resolve -bind address: '%s' - -bind osoitteen '%s' selvittäminen epäonnistui - - - - Cannot resolve -externalip address: '%s' - -externalip osoitteen '%s' selvittäminen epäonnistui - - - - Invalid amount for -paytxfee=<amount>: '%s' - -paytxfee=<amount>: '%s' on virheellinen - - - - Error: could not start node - Virhe: Ei voitu käynnistää noodia - - - - Sending... - Lähetetään... - - - - Invalid amount - Virheellinen määrä - - - - Insufficient funds - Lompakon saldo ei riitä - - - - Loading block index... - Ladataan lohkoindeksiä... - - - - Add a node to connect to and attempt to keep the connection open - Linää solmu mihin liittyä pitääksesi yhteyden auki - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Ei voitu liittää %s tällä tietokoneella. ShadowCoin-asiakasohjelma on jo ehkä päällä. - - - - Fee per KB to add to transactions you send - Rahansiirtopalkkio kilotavua kohden lähetettäviin rahansiirtoihisi - - - - Invalid amount for -mininput=<amount>: '%s' - Epäkelpo määrä parametrille -mininput=<amount>: '%s' - - - - Loading wallet... - Ladataan lompakkoa... - - - - Cannot downgrade wallet - Et voi päivittää lompakkoasi vanhempaan versioon - - - - Cannot initialize keypool - Ei voida alustaa avainallasta - - - - Cannot write default address - Oletusosoitetta ei voi kirjoittaa - - - - Rescanning... - Skannataan uudelleen... - - - - Done loading - Lataus on valmis - - - - To use the %s option - Käytä %s optiota - - - - Error - Virhe - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Sinun täytyy asettaa rpcpassword=<password> asetustiedostoon: -%s -Jos tiedostoa ei ole, niin luo se ainoastaan omistajan kirjoitusoikeuksin. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_fr.ts b/src/qt/locale/umbra_fr.ts deleted file mode 100644 index 7aecc2ab40..0000000000 --- a/src/qt/locale/umbra_fr.ts +++ /dev/null @@ -1,3418 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Au sujet de ShadowCoin - - - - <b>ShadowCoin</b> version - Version de <b>ShadowCoin</b> - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Copyright © 2009-2014 Les développeurs Bitcoin -Copyright © 2012-2014 Les développeurs NovaCoin -Copyright © 2014-2015 Les développeurs ShadowCoin - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Étiquette - - - - Address - Adresse - - - - pubkey - - - - - stealth - - - - - (no label) - (aucune étiquette) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Dialogue de phrase de passe - - - - Enter passphrase - Saisir la phrase de passe - - - - New passphrase - Nouvelle phrase de passe - - - - Repeat new passphrase - Répéter la phrase de passe - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Sert à désactiver les transactions sortantes si votre compte de système d'exploitation est compromis. Ne procure pas de réelle sécurité. - - - - For staking only - Pour "staking" seulement - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Saisir la nouvelle phrase de passe pour le portefeuille. <br/>Veuillez utiliser une phrase de passe de <b>10 caractères aléatoires ou plus</b>, ou de <b>huit mots ou plus</b>. - - - - Encrypt wallet - Chiffrer le portefeuille - - - - This operation needs your wallet passphrase to unlock the wallet. - Cette opération nécessite votre phrase de passe pour déverrouiller le portefeuille. - - - - Unlock wallet - Déverrouiller le portefeuille - - - - This operation needs your wallet passphrase to decrypt the wallet. - Cette opération nécessite votre phrase de passe pour déchiffrer le portefeuille. - - - - Decrypt wallet - Déchiffrer le portefeuille - - - - Change passphrase - Changer la phrase de passe - - - - Enter the old and new passphrase to the wallet. - Saisir l’ancienne phrase de passe pour le portefeuille ainsi que la nouvelle. - - - - Confirm wallet encryption - Confirmer le chiffrement du portefeuille - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Avertissement : Si vous chiffrez votre portefeuille et perdez votre passphrase, vous ne pourrez <b>plus accéder à vos ShadowCoins</b>! - - - - Are you sure you wish to encrypt your wallet? - Êtes-vous sûr de vouloir chiffrer votre portefeuille ? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANT : Toute sauvegarde précédente de votre fichier de portefeuille devrait être remplacée par le nouveau fichier de portefeuille chiffré. Pour des raisons de sécurité, les sauvegardes précédentes de votre fichier de portefeuille non chiffré deviendront inutilisables dès lors que vous commencerez à utiliser le nouveau portefeuille chiffré. - - - - - Warning: The Caps Lock key is on! - Attention : la touche Verr. Maj. est activée ! - - - - - Wallet encrypted - Portefeuille chiffré - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - L'application ShadowCoin va désormais se terminer afin de finaliser le processus de chiffrage. Merci de noter que le chiffrage du portefeuille ne garantit pas de se prémunir du vol via utilisation de malware, qui auraient pu infecter votre ordinateur. - - - - - - - Wallet encryption failed - Le chiffrement du portefeuille a échoué - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Le chiffrement du portefeuille a échoué en raison d'une erreur interne. Votre portefeuille n'a pas été chiffré. - - - - - The supplied passphrases do not match. - Les phrases de passe saisies ne correspondent pas. - - - - Wallet unlock failed - Le déverrouillage du portefeuille a échoué - - - - - - The passphrase entered for the wallet decryption was incorrect. - La phrase de passe saisie pour déchiffrer le portefeuille est incorrecte. - - - - Wallet decryption failed - Le déchiffrage du portefeuille a échoué - - - - Wallet passphrase was successfully changed. - La phrase de passe du portefeuille a été modifiée avec succès. - - - - ClientModel - - - Network Alert - Alerte réseau - - - - CoinControlDialog - - - Coin Control - Fonctions de contrôle des monnaies - - - - Quantity: - Quantité : - - - - Bytes: - Octets : - - - - Amount: - Montant : - - - - Priority: - Priorité : - - - - Fee: - Frais : - - - - Low Output: - Sortie faible: - - - - - no - non - - - - After Fee: - Après les frais : - - - - Change: - Monnaie : - - - - (un)select all - Tout (dé)sélectionner - - - - Tree mode - Mode arborescence - - - - List mode - Mode liste - - - - Amount - Montant - - - - Label - Étiquette - - - - Address - Adresse - - - - Date - Date - - - - Confirmations - Confirmations - - - - Confirmed - Confirmée - - - - Priority - Priorité - - - - Copy address - Copier l’adresse - - - - Copy label - Copier l’étiquette - - - - - Copy amount - Copier le montant - - - - Copy transaction ID - Copier l'ID de la transaction - - - - Copy quantity - Copier la quantité - - - - Copy fee - Copier les frais - - - - Copy after fee - Copier le montant après les frais - - - - Copy bytes - Copier les octets - - - - Copy priority - Copier la priorité - - - - Copy low output - Copier la sortie faible - - - - Copy change - Copier la monnaie - - - - highest - la plus élevée - - - - high - élevée - - - - medium-high - moyennement-élevée - - - - medium - moyenne - - - - low-medium - moyennement-basse - - - - low - basse - - - - lowest - la plus basse - - - - - DUST - DUST - - - - - yes - oui - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Cette étiquette passe au rouge, si la taille de la transaction est supérieure à 10000 bytes. - -Cela implique que des frais à hauteur d'au moins %1 par kb seront nécessaires. - -Ceux-ci Peuvent varier de +/- 1 Byte par entrée. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Les transactions avec une priorité haute ont plus de chances d'être traitées en un block. - -L'étiquette passe au rouge si votre priorité est plus basse que la "moyenne". - -Cela implique que des frais d'un minimum de %1 par kb sont requis - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Cette étiquette passe au rouge, Lorsqu'un destinataire reçoit un montant inférieur à %1. - -Cela implique que des frais à hauteur de %2 seront nécessaire - -Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent en tant que DUST. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Cette étiquette passe au rouge, lorsque la différence est inférieure à %1. - -Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - - - - - (no label) - (aucune étiquette) - - - - change from %1 (%2) - monnaie de %1 (%2) - - - - (change) - (monnaie) - - - - EditAddressDialog - - - Edit Address - Modifier l'adresse - - - - &Label - &Étiquette - - - - The label associated with this address book entry - L'étiquette associée à cette entrée du carnet d'adresse - - - - &Address - &Adresse - - - - The address associated with this address book entry. This can only be modified for sending addresses. - L'adresse associée à cette entrée du carnet d'adresse. Seules les adresses d'envoi peuvent être modifiées. - - - - &Stealth Address - - - - - New receiving address - Nouvelle adresse de réception - - - - New sending address - Nouvelle adresse d’envoi - - - - Edit receiving address - Modifier l’adresse de réception - - - - Edit sending address - Modifier l’adresse d'envoi - - - - The entered address "%1" is already in the address book. - L’adresse fournie « %1 » est déjà présente dans le carnet d'adresses. - - - - The entered address "%1" is not a valid ShadowCoin address. - L'adresse "%1" renseignée n'est pas une adresse ShadowCoin valide. - - - - Could not unlock wallet. - Impossible de déverrouiller le portefeuille. - - - - New key generation failed. - Échec de génération de la nouvelle clef. - - - - GUIUtil::HelpMessageBox - - - version - version - - - - - Shadow - - - - - Usage: - Utilisation: - - - - command-line options - Options de ligne de commande - - - - UI options - Options graphiques - - - - Set language, for example "de_DE" (default: system locale) - Définir la langue, par exemple « fr_FR » (par défaut: la langue du système) - - - - Start minimized - Démarrer en mode réduit - - - - Show splash screen on startup (default: 1) - Affichage de l'écran de démarrage (par défaut: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nom du client - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N.D. - - - - Client version - Version du client - - - - &Information - &Informations - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Version d'OpenSSL utilisée - - - - Using BerkeleyDB version - - - - - Startup time - Heure de démarrage - - - - Network - Réseau - - - - Name - - - - - Number of connections - Nombre de connexions - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Chaîne de blocs - - - - Current number of blocks - Nombre actuel de blocs - - - - Estimated total blocks - Nombre total de blocs estimé - - - - Last block time - Horodatage du dernier bloc - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Ouvrir - - - - Command-line options - Options de ligne de commande - - - - &Show - &Afficher - - - - &Console - &Console - - - - Build date - Date de compilation - - - - Debug log file - Journal de débogage - - - - Clear console - Nettoyer la console - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Utiliser les touches de curseur pour naviguer dans l'historique et <b>Ctrl-L</b> pour effacer l'écran. - - - - Type <b>help</b> for an overview of available commands. - Taper <b>help</b> pour afficher une vue générale des commandes disponibles. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Ouvert jusqu'à %1 - - - - Open for %n block(s) - Ouvert pour %n blocOuvert pour %n blocks - - - - conflicted - en conflit - - - - %1/offline - %1/hors ligne - - - - %1/unconfirmed - %1/non confirmée - - - - %1 confirmations - %1 confirmations - - - - Status - État - - - - , broadcast through %n node(s) - , diffusée à travers %n nœud, diffusée à travers %n nœuds - - - - Date - Date - - - - Source - Source - - - - Generated - Généré - - - - - - From - De - - - - - - - To - À - - - - - - - own address - votre propre adresse - - - - - label - étiquette - - - - - - - - Credit - Crédit - - - - matures in %n more block(s) - arrive à maturité dans %n bloc de plusarrive à maturité dans %n blocks supplémentaires - - - - not accepted - refusé - - - - - - - Debit - Débit - - - - Transaction fee - Frais de transaction - - - - Net amount - Montant net - - - - Message - Message - - - - Comment - Commentaire - - - - Transaction ID - ID de la transaction - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Informations de débogage - - - - Transaction - Transaction - - - - Inputs - Entrants - - - - Amount - Montant - - - - true - vrai - - - - false - faux - - - - , has not been successfully broadcast yet - , n’a pas encore été diffusée avec succès - - - - - unknown - inconnu - - - - TransactionDescDialog - - - Transaction details - Détails de la transaction - - - - This pane shows a detailed description of the transaction - Ce panneau affiche une description détaillée de la transaction - - - - TransactionTableModel - - - Date - Date - - - - Type - Type - - - - Address - Adresse - - - - Amount - Montant - - - - Open until %1 - Ouvert jusqu'à %1 - - - - Confirmed (%1 confirmations) - Confirmée (%1 confirmations) - - - - Open for %n more block(s) - Ouvert pour %n bloc de plusOuvert pour %n blocs de plus - - - - Narration - - - - - Offline - Hors ligne - - - - Unconfirmed - Non confirmé - - - - Confirming (%1 of %2 recommended confirmations) - En cours de confirmation (%1 sur %2 confirmations recommandées) - - - - Conflicted - En conflit - - - - Immature (%1 confirmations, will be available after %2) - Immature (%1 confirmations, sera disponible après %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Ce bloc n’a été reçu par aucun autre nœud et ne sera probablement pas accepté! - - - - Generated but not accepted - Généré mais pas accepté - - - - (n/a) - (n.d) - - - - Transaction status. Hover over this field to show number of confirmations. - État de la transaction. Laissez le pointeur de la souris sur ce champ pour voir le nombre de confirmations. - - - - Date and time that the transaction was received. - Date et heure de réception de la transaction. - - - - Type of transaction. - Type de transaction. - - - - Destination address of transaction. - L’adresse de destination de la transaction. - - - - Amount removed from or added to balance. - Montant ajouté ou enlevé au solde. - - - - WalletModel - - - - Sending... - Envoi... - - - - bitcoin-core - - - ShadowCoin version - Version ShadowCoin - - - - Usage: - Utilisation: - - - - Send command to -server or shadowcoind - Envoyer commande à -server ou shadowcoind - - - - List commands - Lister les commandes - - - - Get help for a command - Obtenir de l’aide pour une commande - - - - Options: - Options: - - - - Specify configuration file (default: shadowcoin.conf) - Spécifier le fichier de configuration (par défaut: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Spécifier le fichier pid (par défaut: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Spécifier le fichier de portefeuille (dans le répertoire de données) - - - - Specify data directory - Spécifier le répertoire de données - - - - Set database cache size in megabytes (default: 25) - Définir la taille du tampon de base de données en mégaoctets (par défaut : 25) - - - - Set database disk log size in megabytes (default: 100) - Définir la taille du journal de base de données en mégaoctets (par défaut : 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Écouter les connexions sur le <port> (par défault: 51737 ou testnet: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Garder au plus <n> connexions avec les pairs (par défaut : 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Se connecter à un nœud pour obtenir des adresses de pairs puis se déconnecter - - - - Specify your own public address - Spécifier votre propre adresse publique - - - - Bind to given address. Use [host]:port notation for IPv6 - Connexion à l'adresse fournie. Utiliser la notation [machine]:port pour les adresses IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Placer vos monnaies en staking, afin de soutenir le réseau et obtenir des intérêts (par défault: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Seuil de déconnexion des pairs de mauvaise qualité (par défaut : 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Délai en secondes de refus de reconnexion aux pairs de mauvaise qualité (par défaut : 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Une erreur est survenue lors du positionnement du port RPC %u pour écouter sur une adresse IPv4 : %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Détacher la base de donnée des blocks et adresses. Augmente le temps de fermeture (default: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Erreur: La transaction a été rejetée. Cela peut se produire si une quantité d'argent de votre portefeuille a déjà été dépensée, comme dans le cas où une copie du fichier wallet.dat aurait été utilisée afin d'effectuer des dépenses, à la place du fichier courant. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Erreur: Cette transaction requière des frais minimum de %s a cause de son montant, de sa complexité ou de l'utilisation de fonds récemment reçus. - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Écouter les connexions JSON-RPC sur le <port> (default: 51736 or testnet: 51996) - - - - Accept command line and JSON-RPC commands - Accepter les commandes de JSON-RPC et de la ligne de commande - - - - Error: Transaction creation failed - Erreur: La création de cette transaction à échouée - - - - Error: Wallet locked, unable to create transaction - Erreur: Portefeuille verrouillé, impossible d'effectuer cette transaction - - - - Importing blockchain data file. - Import en cours du fichier de chaîne de blocs - - - - Importing bootstrap blockchain data file. - Import en masse du fichier de chaîne bloc - - - - Run in the background as a daemon and accept commands - Fonctionner en arrière-plan en tant que démon et accepter les commandes - - - - Use the test network - Utiliser le réseau de test - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Accepter les connexions entrantes (par défaut : 1 si aucun -proxy ou -connect ) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Une erreur est survenue lors du réglage du port RPC %u pour écouter sur IPv6, retour à IPv4 : %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Erreur lors de l'initialisation de l'environnement de base de données %s! Afin de procéder à la récupération, une SAUVEGARDE DE CE REPERTOIRE est nécessaire, puis, supprimez le contenu entier de ce répertoire, à l'exception du fichier wallet.dat - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Fixer la taille maximale d'un bloc en octets (par défault: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Attention : -paytxfee est réglée sur un montant très élevé ! Il s'agit des frais de transaction que vous payerez si vous envoyez une transaction. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Avertissement: Veuillez vérifier la date et l'heure de votre ordinateur. ShadowCoin ne pourra pas fonctionner correctement si l'horloge est réglée de façon incorrecte - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Avertissement : une erreur est survenue lors de la lecture de wallet.dat ! Toutes les clefs ont été lues correctement mais les données de transaction ou les entrées du carnet d'adresses sont peut-être incorrectes ou manquantes. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Avertissement : wallet.dat corrompu, données récupérées ! Le fichier wallet.dat original a été enregistré en tant que wallet.{timestamp}.bak dans %s ; si votre solde ou transactions sont incorrects vous devriez effectuer une restauration depuis une sauvegarde. - - - - Attempt to recover private keys from a corrupt wallet.dat - Tenter de récupérer les clefs privées d'un wallet.dat corrompu - - - - Block creation options: - Options de création de bloc: - - - - Connect only to the specified node(s) - Ne se connecter qu'au(x) nœud(s) spécifié(s) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Découvrir sa propre adresse IP (par défaut: 1 lors de l'écoute et si aucun -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Échec de l'écoute sur un port quelconque. Utilisez -listen=0 si vous voulez ceci. - - - - Find peers using DNS lookup (default: 1) - Trouvez des peers utilisant DNS lookup (default: 1) - - - - Sync checkpoints policy (default: strict) - Politique de synchronisation des checkpoints (default: strict) - - - - Invalid -tor address: '%s' - Adresse -tor invalide: '%s' - - - - Invalid amount for -reservebalance=<amount> - Montant incorrect pour -reservebalance=<montant> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Tampon maximal de réception par « -connection » <n>*1 000 octets (par défaut : 5 000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Tampon maximal d'envoi par « -connection », <n>*1 000 octets (par défaut : 1 000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Se connecter uniquement aux nœuds du réseau <net> (IPv4, IPv6 ou Tor) - - - - Output extra debugging information. Implies all other -debug* options - Voir les autres informations de débogage. Implique toutes les autres options -debug* - - - - Output extra network debugging information - Voir les autres informations de débogage du réseau - - - - Prepend debug output with timestamp - Horodater les messages de debug - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Options SSL : (voir le Wiki de Bitcoin pour les instructions de configuration du SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - Sélectionner la version du proxy socks à utiliser (4-5, par défaut: 5) - - - - Send trace/debug info to console instead of debug.log file - Envoyer les informations de débogage/trace à la console au lieu du fichier debug.log - - - - Send trace/debug info to debugger - Envoyer les informations de débogage/trace à la console au lieu du fichier debug.log - - - - Set maximum block size in bytes (default: 250000) - Fixer la taille maximale d'un block en bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - Définir la taille minimale de bloc en octets (par défaut : 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Réduire le fichier debug.log lors du démarrage du client (par défaut : 1 lorsque -debug n'est pas présente) - - - - Specify connection timeout in milliseconds (default: 5000) - Spécifier le délai d'expiration de la connexion en millisecondes (par défaut: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - Impossible de "signer" le checkpoint, mauvaise clef de checkpoint? - - - - - Use UPnP to map the listening port (default: 0) - Utiliser l'UPnP pour rediriger le port d'écoute (par défaut: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Utiliser l'UPnP pour rediriger le port d'écoute (par défaut: 1 lors de l'écoute) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Utiliser un proxy pour atteindre les services cachés (par défaut: équivalent à -proxy) - - - - Username for JSON-RPC connections - Nom d'utilisateur pour les connexions JSON-RPC - - - - Verifying database integrity... - Vérification d'intégrité de la base de données... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - ATTENTION : violation du checkpoint de synchronisation, mais ignorée! - - - - Warning: Disk space is low! - Avertissement: Espace disque faible! - - - - Warning: This version is obsolete, upgrade required! - Avertissement : cette version est obsolète, une mise à niveau est nécessaire ! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrompu, la récupération a échoué - - - - Password for JSON-RPC connections - Mot de passe pour les connexions JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, vous devez définir un mot de passe rpc 'rpcpassword' au sein du fichier de configuration: - %s -Il est recommandé d'utiliser le mot de passe aléatoire suivant: -rpcuser=shadowcoinrpc -rpcpassword=%s -(il n'est pas nécessaire de retenir ce mot de passe) -Le nom d'utilisateur et le mot de passe doivent IMPERATIVEMENT être différents. -Si le fichier n'existe pas, il est nécessaire de le créer, avec les droit de lecture au propriétaire seulement. -Il est également recommandé d'utiliser l'option alertnotify afin d'être notifié des problèmes; -par exemple: alertnotify=echo %%s | mail -s "Alerte ShadowCoin" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - Trouvez des pairs utilisant DNS lookup (par défault: 1) {0)?} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Synchronisation de l'horloge avec d'autres noeuds. Désactiver si votre serveur est déjà synchronisé avec le protocole NTP (défaut: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - Lors de la création de transactions, ignorer les entrées dont la valeur sont inférieures (défaut: 0.01) - - - - Allow JSON-RPC connections from specified IP address - Autoriser les connexions JSON-RPC depuis l'adresse IP spécifiée - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Envoyer des commandes au nœud fonctionnant sur <ip> (par défaut : 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Exécuter la commande lorsque le meilleur bloc change (%s dans cmd est remplacé par le hachage du bloc) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Exécuter la commande lorsqu'une transaction du portefeuille change (%s dans la commande est remplacée par TxID) - - - - Require a confirmations for change (default: 0) - Nécessite a confirmations pour modification (par défaut: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Force les scripts de transaction à utiliser des opérateurs PUSH canoniques (défaut: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Exécute une commande lorsqu'une alerte correspondante est reçue (%s dans la commande est remplacé par message) - - - - Upgrade wallet to latest format - Mettre à niveau le portefeuille vers le format le plus récent - - - - Set key pool size to <n> (default: 100) - Régler la taille de la réserve de clefs sur <n> (par défaut : 100) - - - - Rescan the block chain for missing wallet transactions - Réanalyser la chaîne de blocs pour les transactions de portefeuille manquantes - - - - How many blocks to check at startup (default: 2500, 0 = all) - Nombre de blocs à vérifier lors du démarrage (par défaut: 2500, 0 = tous) - - - - How thorough the block verification is (0-6, default: 1) - Niveau d'approfondissement de la vérification des blocs (0-6, default: 1) - - - - Imports blocks from external blk000?.dat file - Importe les blocs d'un fichier externe blk000?.dat - - - - Use OpenSSL (https) for JSON-RPC connections - Utiliser OpenSSL (https) pour les connexions JSON-RPC - - - - Server certificate file (default: server.cert) - Fichier de certificat serveur (par défaut : server.cert) - - - - Server private key (default: server.pem) - Clef privée du serveur (par défaut : server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Algorithmes de chiffrements acceptés (par défaut: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Erreur: Portefeuille déverrouillé uniquement pour "staking" , impossible d'effectuer cette transaction - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - AVERTISSEMENT: point de contrôle invalide! Les transactions affichées peuvent être incorrectes! Il est peut-être nécessaire d'effectuer une mise à jour, ou d'avertir les développeurs du projet. - - - - This help message - Ce message d'aide - - - - Wallet %s resides outside data directory %s. - Le portefeuille %s est situé en dehors du répertoire de données %s - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Echec lors de la tentative de verrou des données du répertoire %s. L'application ShadowCoin est probablement déjà en cours d'exécution - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Impossible de se lier à %s sur cet ordinateur (bind a retourné l'erreur %d, %s) - - - - Connect through socks proxy - Se connecter à travers un proxy socks - - - - Allow DNS lookups for -addnode, -seednode and -connect - Autoriser les recherches DNS pour -addnode, -seednode et -connect - - - - Loading addresses... - Chargement des adresses… - - - - Error loading blkindex.dat - Erreur de chargement du fichier blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Erreur lors du chargement de wallet.dat: portefeuille corrompu - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Erreur de chargement du fichier wallet.dat: le portefeuille nécessite une version plus récente de l'application ShadowCoin - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - Le portefeuille nécessite d'être réédité : Merci de relancer l'application ShadowCoin - - - - Error loading wallet.dat - Erreur lors du chargement du fichier wallet.dat - - - - Invalid -proxy address: '%s' - Adresse -proxy invalide : « %s » - - - - Unknown network specified in -onlynet: '%s' - Réseau inconnu spécifié sur -onlynet : « %s » - - - - Unknown -socks proxy version requested: %i - Version inconnue de serveur mandataire -socks demandée : %i - - - - Cannot resolve -bind address: '%s' - Impossible de résoudre l'adresse -bind : « %s » - - - - Cannot resolve -externalip address: '%s' - Impossible de résoudre l'adresse -externalip : « %s » - - - - Invalid amount for -paytxfee=<amount>: '%s' - Montant invalide pour -paytxfee=<montant> : « %s » - - - - Error: could not start node - Erreur: Impossible de démarrer le noeud - - - - Sending... - Envoi... - - - - Invalid amount - Montant invalide - - - - Insufficient funds - Fonds insuffisants - - - - Loading block index... - Chargement de l’index des blocs… - - - - Add a node to connect to and attempt to keep the connection open - Ajouter un nœud auquel se connecter et tenter de garder la connexion ouverte - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Connexion au port %s impossible. L'application ShadowCoin est probablement déjà en cours d'exécution - - - - Fee per KB to add to transactions you send - Frais par KB à ajouter à vos transactions sortantes - - - - Invalid amount for -mininput=<amount>: '%s' - Montant invalide pour -mininput=<amount>: '%s' - - - - Loading wallet... - Chargement du portefeuille… - - - - Cannot downgrade wallet - Impossible de revenir à une version inférieure du portefeuille - - - - Cannot initialize keypool - Impossible d'initialiser la "keypool" - - - - Cannot write default address - Impossible d'écrire l'adresse par défaut - - - - Rescanning... - Nouvelle analyse… - - - - Done loading - Chargement terminé - - - - To use the %s option - Pour utiliser l'option %s - - - - Error - Erreur - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Vous devez ajouter la ligne rpcpassword=<mot-de-passe> au fichier de configuration : -%s -Si le fichier n'existe pas, créez-le avec les droits de lecture seule accordés au propriétaire. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_fr_CA.ts b/src/qt/locale/umbra_fr_CA.ts deleted file mode 100644 index 14f30af436..0000000000 --- a/src/qt/locale/umbra_fr_CA.ts +++ /dev/null @@ -1,3419 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Au sujet de ShadowCoin - - - - <b>ShadowCoin</b> version - Version de <b>ShadowCoin</b> - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Copyright © 2009-2014 Les développeurs Bitcoin -Copyright © 2012-2014 Les développeurs NovaCoin -Copyright © 2014-2015 Les développeurs ShadowCoin - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Étiquette - - - - Address - Adresse - - - - pubkey - - - - - stealth - - - - - (no label) - (aucune étiquette) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Dialogue de phrase de passe - - - - Enter passphrase - Saisir la phrase de passe - - - - New passphrase - Nouvelle phrase de passe - - - - Repeat new passphrase - Répéter la phrase de passe - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Sert à désactiver les transactions sortantes si votre compte de système d'exploitation est compromis. Ne procure pas de réelle sécurité. - - - - For staking only - Pour "staking" seulement - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Saisir la nouvelle phrase de passe pour le portefeuille. <br/>Veuillez utiliser une phrase de passe de <b>10 caractères aléatoires ou plus</b>, ou de <b>huit mots ou plus</b>. - - - - Encrypt wallet - Crypter le portefeuille - - - - This operation needs your wallet passphrase to unlock the wallet. - Cette opération nécessite votre phrase de passe pour déverrouiller le portefeuille. - - - - Unlock wallet - Déverrouiller le portefeuille - - - - This operation needs your wallet passphrase to decrypt the wallet. - Cette opération nécessite votre phrase de passe pour déchiffrer le portefeuille. - - - - Decrypt wallet - Déchiffrer le portefeuille - - - - Change passphrase - Changer la phrase de passe - - - - Enter the old and new passphrase to the wallet. - Saisir l’ancienne et la nouvelle phrase de passe du portefeuille - - - - Confirm wallet encryption - Confirmer le cryptage du portefeuille - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - ATTENTION : Si vous cryptez votre portefeuille et perdez votre passphrase, vous ne pourrez plus accéder à vos ShadowCoins - - - - Are you sure you wish to encrypt your wallet? - Êtes-vous sûr de vouloir crypter votre portefeuille ? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANT : Toute sauvegarde précédente de votre fichier de portefeuille devrait être remplacée par le nouveau fichier de portefeuille crypté. Pour des raisons de sécurité, les sauvegardes précédentes de votre fichier de portefeuille non crypté deviendront inutilisables dès lors que vous commencerez à utiliser le nouveau portefeuille crypté. - - - - - Warning: The Caps Lock key is on! - Attention : la touche Verr. Maj. est activée ! - - - - - Wallet encrypted - Portefeuille crypté - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - L'application ShadowCoin va désormais se terminer afin de finaliser le processus de cryptage. Merci de noter que le cryptage du portefeuille ne garantit pas de se prémunir du vol via l'utilisation de malware, qui auraient pu infecter votre ordinateur. - - - - - - - Wallet encryption failed - Le cryptage du portefeuille a échoué - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Le cryptage du portefeuille a échoué en raison d'une erreur interne. Votre portefeuille n'a pas été crypté. - - - - - The supplied passphrases do not match. - Les phrases de passe saisies ne correspondent pas. - - - - Wallet unlock failed - Le déverrouillage du portefeuille a échoué - - - - - - The passphrase entered for the wallet decryption was incorrect. - La phrase de passe saisie pour décrypter le portefeuille était incorrecte. - - - - Wallet decryption failed - Le décryptage du portefeuille a échoué - - - - Wallet passphrase was successfully changed. - La phrase de passe du portefeuille a été modifiée avec succès. - - - - ClientModel - - - Network Alert - Alerte réseau - - - - CoinControlDialog - - - Coin Control - Fonctions de contrôle des monnaies - - - - Quantity: - Quantité : - - - - Bytes: - Octets : - - - - Amount: - Montant : - - - - Priority: - Priorité : - - - - Fee: - Frais : - - - - Low Output: - Sortie faible : - - - - - no - non - - - - After Fee: - Après les frais : - - - - Change: - Monnaie : - - - - (un)select all - Tout (dé)sélectionner - - - - Tree mode - Mode arborescence - - - - List mode - Mode liste - - - - Amount - Montant - - - - Label - Intitulé - - - - Address - Adresse - - - - Date - Date - - - - Confirmations - Confirmations - - - - Confirmed - Confirmée - - - - Priority - Priorité - - - - Copy address - Copier l’adresse - - - - Copy label - Copier l’étiquette - - - - - Copy amount - Copier le montant - - - - Copy transaction ID - Copier l'ID de la transaction - - - - Copy quantity - Copier la quantité - - - - Copy fee - Copier les frais - - - - Copy after fee - Copier le montant après les frais - - - - Copy bytes - Copier les octets - - - - Copy priority - Copier la priorité - - - - Copy low output - Copier la sortie faible - - - - Copy change - Copier la monnaie - - - - highest - la plus élevée - - - - high - élevée - - - - medium-high - moyennement-élevée - - - - medium - moyenne - - - - low-medium - moyennement-basse - - - - low - basse - - - - lowest - la plus basse - - - - - DUST - DUST - - - - - yes - oui - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Cet intitulé passe au rouge, si la taille de la transaction est supérieure à 10000 bytes. - -Cela implique que des frais à hauteur d'au moins %1 par kb seront nécessaires. - -Ceux-ci Peuvent varier de +/- 1 Byte par entrée. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Les transactions avec une priorité haute ont plus de chances d'être traitées en un block. - - Rouge si votre priorité est plus petite que "moyenne". - -Cela veut dire que des frais d'un minimum de %1 par kb sont requis - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Ce label passe au rouge, Lorsqu'un destinataire reçoit un montant inférieur à %1. - - Cela implique que des frais à hauteur de %2 seront nécessaire - -Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent en tant que DUST. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Ce label passe au rouge, lorsque la différence est inférieure à %1. - - Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - - - - - (no label) - (aucune étiquette) - - - - change from %1 (%2) - monnaie de %1 (%2) - - - - (change) - (monnaie) - - - - EditAddressDialog - - - Edit Address - Modifier l'adresse - - - - &Label - &Étiquette - - - - The label associated with this address book entry - L'intitulé associé à cette entrée du carnet d'adresse - - - - &Address - &Adresse - - - - The address associated with this address book entry. This can only be modified for sending addresses. - L'intitulé associé à cette entrée du carnet d'adresse. Seules les adresses d'envoi peuvent être modifiées. - - - - &Stealth Address - - - - - New receiving address - Nouvelle adresse de réception - - - - New sending address - Nouvelle adresse d’envoi - - - - Edit receiving address - Modifier l’adresse de réception - - - - Edit sending address - Modifier l’adresse d'envoi - - - - The entered address "%1" is already in the address book. - L’adresse fournie « %1 » est déjà présente dans le carnet d'adresses. - - - - The entered address "%1" is not a valid ShadowCoin address. - L'adresse "%1" renseignée n'est pas une adresse ShadowCoin valide. - - - - Could not unlock wallet. - Impossible de déverrouiller le portefeuille. - - - - New key generation failed. - Échec de génération de la nouvelle clef. - - - - GUIUtil::HelpMessageBox - - - version - version - - - - - Shadow - - - - - Usage: - Utilisation: - - - - command-line options - Options de ligne de commande - - - - UI options - Options graphiques - - - - Set language, for example "de_DE" (default: system locale) - Définir la langue, par exemple « fr_FR » (par défaut : la langue du système) - - - - Start minimized - Démarrer en mode réduit - - - - Show splash screen on startup (default: 1) - Affichage de l'écran de démarrage (défaut: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nom du client - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N.D. - - - - Client version - Version du client - - - - &Information - &Informations - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Version d'OpenSSL utilisée - - - - Using BerkeleyDB version - - - - - Startup time - Heure de démarrage - - - - Network - Réseau - - - - Name - - - - - Number of connections - Nombre de connexions - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Chaîne de blocks - - - - Current number of blocks - Nombre actuel de blocks - - - - Estimated total blocks - Nombre total estimé de blocks - - - - Last block time - Horodatage du dernier block - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Ouvrir - - - - Command-line options - Options de ligne de commande - - - - &Show - &Afficher - - - - &Console - &Console - - - - Build date - Date de compilation - - - - Debug log file - Journal de débogage - - - - Clear console - Nettoyer la console - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Utiliser les touches de curseur pour naviguer dans l'historique et <b>Ctrl-L</b> pour effacer l'écran. - - - - Type <b>help</b> for an overview of available commands. - Taper <b>help</b> pour afficher une vue générale des commandes disponibles. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Ouvert jusqu'à %1 - - - - Open for %n block(s) - Ouvert pour %n blocOuvert pour %n blocks - - - - conflicted - en conflit - - - - %1/offline - %1/hors ligne - - - - %1/unconfirmed - %1/non confirmée - - - - %1 confirmations - %1 confirmations - - - - Status - État - - - - , broadcast through %n node(s) - , diffusée à travers %n nœud, diffusée à travers %n nœuds - - - - Date - Date - - - - Source - Source - - - - Generated - Généré - - - - - - From - De - - - - - - - To - À - - - - - - - own address - votre propre adresse - - - - - label - étiquette - - - - - - - - Credit - Crédit - - - - matures in %n more block(s) - arrive à maturité dans %n bloc de plusarrive à maturité dans %n blocks supplémentaires - - - - not accepted - refusé - - - - - - - Debit - Débit - - - - Transaction fee - Frais de transaction - - - - Net amount - Montant net - - - - Message - Message - - - - Comment - Commentaire - - - - Transaction ID - ID de la transaction - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Informations de débogage - - - - Transaction - Transaction - - - - Inputs - Entrants - - - - Amount - Montant - - - - true - vrai - - - - false - faux - - - - , has not been successfully broadcast yet - , n’a pas encore été diffusée avec succès - - - - - unknown - inconnu - - - - TransactionDescDialog - - - Transaction details - Détails de la transaction - - - - This pane shows a detailed description of the transaction - Ce panneau affiche une description détaillée de la transaction - - - - TransactionTableModel - - - Date - Date - - - - Type - Type - - - - Address - Adresse - - - - Amount - Montant - - - - Open until %1 - Ouvert jusqu'à %1 - - - - Confirmed (%1 confirmations) - Confirmée (%1 confirmations) - - - - Open for %n more block(s) - Ouvert pour %n bloc de plusOuvert pour %n blocs de plus - - - - Narration - - - - - Offline - Hors ligne - - - - Unconfirmed - Non confirmé - - - - Confirming (%1 of %2 recommended confirmations) - Confirmation (%1 sur %2 confirmations recommandées) - - - - Conflicted - En conflit - - - - Immature (%1 confirmations, will be available after %2) - Immature (%1 confirmations, sera disponible après %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Ce bloc n’a été reçu par aucun autre nœud et ne sera probablement pas accepté ! - - - - Generated but not accepted - Généré mais pas accepté - - - - (n/a) - (n.d) - - - - Transaction status. Hover over this field to show number of confirmations. - État de la transaction. Laissez le pointeur de la souris sur ce champ pour voir le nombre de confirmations. - - - - Date and time that the transaction was received. - Date et heure de réception de la transaction. - - - - Type of transaction. - Type de transaction. - - - - Destination address of transaction. - L’adresse de destination de la transaction. - - - - Amount removed from or added to balance. - Montant ajouté ou enlevé au solde. - - - - WalletModel - - - - Sending... - Envoi... - - - - bitcoin-core - - - ShadowCoin version - Version ShadowCoin - - - - Usage: - Utilisation : - - - - Send command to -server or shadowcoind - Envoyer commande à -server ou shadowcoind - - - - List commands - Lister les commandes - - - - Get help for a command - Obtenir de l’aide pour une commande - - - - Options: - Options : - - - - Specify configuration file (default: shadowcoin.conf) - Spécifier le fichier de configuration (defaut: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Spécifier le fichier pid (defaut: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - Spécifiez le fichier de portefeuille (dans le répertoire de données) - - - - Specify data directory - Spécifier le répertoire de données - - - - Set database cache size in megabytes (default: 25) - Définir la taille du tampon en mégaoctets (par défaut : 25) - - - - Set database disk log size in megabytes (default: 100) - Définir la taille du tampon en mégaoctets (par défaut : 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Écouter les connexions sur le <port> (default: 51737 or testnet: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Garder au plus <n> connexions avec les pairs (par défaut : 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Se connecter à un nœud pour obtenir des adresses de pairs puis se déconnecter - - - - Specify your own public address - Spécifier votre propre adresse publique - - - - Bind to given address. Use [host]:port notation for IPv6 - Connexion à l'adresse fournie. Utiliser la notation [machine]:port pour les adresses IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Stacker vos monnaies afin de soutenir le réseau et d'obtenir des intérêts (default: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Seuil de déconnexion des pairs de mauvaise qualité (par défaut : 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Délai en secondes de refus de reconnexion aux pairs de mauvaise qualité (par défaut : 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Une erreur est survenue lors du réglage du port RPC %u pour écouter sur IPv4 : %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Détacher la base de donnée des blocks et adresses. Augmente le temps de fermeture (default: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Erreur: La transaction a été rejetée. Cela peut se produire si une quantité d'argent de votre portefeuille a déjà été dépensée, comme dans le cas où une copie du fichier wallet.dat aurait été utilisée afin d'effectuer des dépenses, à la place du fichier courant. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Erreur: Cette transaction requière des frais minimum de %s a cause de son montant, de sa complexité ou de l'utilisation de fonds récemment reçus. - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Écouter les connexions JSON-RPC sur le <port> (default: 51736 or testnet: 51996) - - - - Accept command line and JSON-RPC commands - Accepter les commandes de JSON-RPC et de la ligne de commande - - - - Error: Transaction creation failed - Erreur: La création de cette transaction à échouée - - - - Error: Wallet locked, unable to create transaction - Erreur: Portefeuille verrouillé, impossible d'effectuer cette transaction - - - - Importing blockchain data file. - Importation du fichier blockchain - - - - Importing bootstrap blockchain data file. - Importation du fichier blockchain - - - - Run in the background as a daemon and accept commands - Fonctionner en arrière-plan en tant que démon et accepter les commandes - - - - Use the test network - Utiliser le réseau de test - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Accepter les connexions entrantes (par défaut : 1 si aucun -proxy ou -connect ) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Une erreur est survenue lors du réglage du port RPC %u pour écouter sur IPv6, retour à IPv4 : %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Erreur lors de l'initialisation de l'environnement de base de données %s! Afin de procéder à la récupération, une SAUVEGARDE DE CE REPERTOIRE est nécessaire, puis, supprimez le contenu entier de ce répertoire, à l'exception du fichier wallet.dat - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Fixer la taille maximale d'un block en bytes (default: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Attention : -paytxfee est réglée sur un montant très élevé ! Il s'agit des frais de transaction que vous payerez si vous envoyez une transaction. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Avertissement: Veuillez vérifier la date et l'heure de votre ordinateur. ShadowCoin ne pourra pas fonctionner correctement si l'horloge est réglée de façon incorrecte - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Avertissement : une erreur est survenue lors de la lecture de wallet.dat ! Toutes les clefs ont été lues correctement mais les données de transaction ou les entrées du carnet d'adresses sont peut-être incorrectes ou manquantes. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Avertissement : wallet.dat corrompu, données récupérées ! Le fichier wallet.dat original a été enregistré en tant que wallet.{timestamp}.bak dans %s ; si votre solde ou transactions sont incorrects vous devriez effectuer une restauration depuis une sauvegarde. - - - - Attempt to recover private keys from a corrupt wallet.dat - Tenter de récupérer les clefs privées d'un wallet.dat corrompu - - - - Block creation options: - Options de création de bloc : - - - - Connect only to the specified node(s) - Ne se connecter qu'au(x) nœud(s) spécifié(s) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Découvrir sa propre adresse IP (par défaut : 1 lors de l'écoute et si aucun -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Échec de l'écoute sur un port quelconque. Utilisez -listen=0 si vous voulez ceci. - - - - Find peers using DNS lookup (default: 1) - Trouvez des peers utilisant DNS lookup (default: 1) - - - - Sync checkpoints policy (default: strict) - Politique de synchronisation des checkpoints (default: strict) - - - - Invalid -tor address: '%s' - Adresse -tor invalide: '%s' - - - - Invalid amount for -reservebalance=<amount> - Montant incorrect pour -reservebalance=<montant> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Tampon maximal de réception par « -connection » <n>*1 000 octets (par défaut : 5 000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Tampon maximal d'envoi par « -connection », <n>*1 000 octets (par défaut : 1 000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Se connecter uniquement aux nœuds du réseau <net> (IPv4, IPv6 ou Tor) - - - - Output extra debugging information. Implies all other -debug* options - Voir les autres informations de débogage. Implique toutes les autres options -debug* - - - - Output extra network debugging information - Voir les autres informations de débogage du réseau - - - - Prepend debug output with timestamp - Horodater les messages de debug - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Options SSL : (voir le Wiki de Bitcoin pour les instructions de configuration du SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - Sélectionner la version du proxy socks à utiliser (4-5, par défaut: 5) - - - - Send trace/debug info to console instead of debug.log file - Envoyer les informations de débogage/trace à la console au lieu du fichier debug.log - - - - Send trace/debug info to debugger - Envoyer les informations de débogage/trace à la console au lieu du fichier debug.log - - - - Set maximum block size in bytes (default: 250000) - Fixer la taille maximale d'un block en bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - Définir la taille minimale de bloc en octets (par défaut : 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Réduire le fichier debug.log lors du démarrage du client (par défaut : 1 lorsque -debug n'est pas présent) - - - - Specify connection timeout in milliseconds (default: 5000) - Spécifier le délai d'expiration de la connexion en millisecondes (par défaut : 5 000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - Impossible de "signer" le checkpoint, mauvaise clef de checkpoint? - - - - - Use UPnP to map the listening port (default: 0) - Utiliser l'UPnP pour rediriger le port d'écoute (par défaut : 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Utiliser l'UPnP pour rediriger le port d'écoute (par défaut : 1 lors de l'écoute) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Utiliser un proxy pour atteindre les services cachés (défaut: équivalent à -proxy) - - - - Username for JSON-RPC connections - Nom d'utilisateur pour les connexions JSON-RPC - - - - Verifying database integrity... - Vérification d'intégrité de la base de données... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - ATTENTION : violation du checkpoint de synchronisation, mais ignorée! - - - - Warning: Disk space is low! - Avertissement: Espace disque faible! - - - - Warning: This version is obsolete, upgrade required! - Avertissement : cette version est obsolète, une mise à niveau est nécessaire ! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrompu, la récupération a échoué - - - - Password for JSON-RPC connections - Mot de passe pour les connexions JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, vous devez définir un mot de passe rpc 'rpcpassword' au sein du fichier de configuration: - %s -Il est recommandé d'utiliser le mot de passe aléatoire suivant: -rpcuser=shadowcoinrpc -rpcpassword=%s -(il n'est pas nécessaire de retenir ce mot de passe) -Le nom d'utilisateur et le mot de passe doivent IMPERATIVEMENT être différents. -Si le fichier n'existe pas, il est nécessaire de le créer, avec les droit de lecture au propriétaire seulement. -Il est également recommandé d'utiliser l'option alertnotify afin d'être notifié des problèmes; -par exemple: alertnotify=echo %%s | mail -s "Alerte ShadowCoin" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - Find peers using internet relay chat (default: 1) {0)?} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Synchronisation de l'horloge avec d'autres noeuds. Désactiver si votre serveur est déjà synchronisé avec le protocole NTP (défaut: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - Lors de la création de transactions, ignore les entrées dont la valeur sont inférieures (défaut: 0.01) - - - - Allow JSON-RPC connections from specified IP address - Autoriser les connexions JSON-RPC depuis l'adresse IP spécifiée - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Envoyer des commandes au nœud fonctionnant sur <ip> (par défaut : 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Exécuter la commande lorsque le meilleur bloc change (%s dans cmd est remplacé par le hachage du bloc) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Exécuter la commande lorsqu'une transaction de portefeuille change (%s dans la commande est remplacée par TxID) - - - - Require a confirmations for change (default: 0) - Nécessite a confirmations pour modification (défaut: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Force les scripts de transaction à utiliser des opérateurs PUSH canoniques (défaut: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Exécute une commande lorsqu'une alerte correspondante est reçue (%s dans la commande est remplacé par message) - - - - Upgrade wallet to latest format - Mettre à niveau le portefeuille vers le format le plus récent - - - - Set key pool size to <n> (default: 100) - Régler la taille de la réserve de clefs sur <n> (par défaut : 100) - - - - Rescan the block chain for missing wallet transactions - Réanalyser la chaîne de blocs pour les transactions de portefeuille manquantes - - - - How many blocks to check at startup (default: 2500, 0 = all) - Nombre de blocs à vérifier loes du démarrage (défaut: 2500, 0 = tous) - - - - How thorough the block verification is (0-6, default: 1) - Niveau d'approfondissement de la vérification des blocs (0-6, default: 1) - - - - Imports blocks from external blk000?.dat file - Importe les blocs d'un fichier externe blk000?.dat - - - - Use OpenSSL (https) for JSON-RPC connections - Utiliser OpenSSL (https) pour les connexions JSON-RPC - - - - Server certificate file (default: server.cert) - Fichier de certificat serveur (par défaut : server.cert) - - - - Server private key (default: server.pem) - Clef privée du serveur (par défaut : server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Algorithmes de chiffrements acceptés (défaut: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Erreur: Portefeuille déverrouillé uniquement pour "stacking" , impossible d'effectuer cette transaction - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - AVERTISSEMENT: point de contrôle invalide! Les transactions affichées peuvent être incorrectes! Il est peut-être nécessaire d'effectuer une mise à jour, ou d'avertir les développeurs du projet. - - - - This help message - Ce message d'aide - - - - Wallet %s resides outside data directory %s. - Le portefeuille %s réside en dehors répertoire de données %s - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Echec lors de la tentative de verrouillage des données du répertoire %s. L'application ShadowCoin est probablement déjà en cours d'exécution - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Impossible de se lier à %s sur cet ordinateur (bind a retourné l'erreur %d, %s) - - - - Connect through socks proxy - Se connecter à travers un proxy socks - - - - Allow DNS lookups for -addnode, -seednode and -connect - Autoriser les recherches DNS pour -addnode, -seednode et -connect - - - - Loading addresses... - Chargement des adresses… - - - - Error loading blkindex.dat - Erreur de chargement du fichier blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Erreur lors du chargement de wallet.dat : portefeuille corrompu - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Erreur de chargement du fichier wallet.dat: le portefeuille nécessite une version plus récente de l'application ShadowCoin - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - le portefeuille nécessite d'être réédité : Merci de relancer l'application ShadowCoin - - - - Error loading wallet.dat - Erreur lors du chargement de wallet.dat - - - - Invalid -proxy address: '%s' - Adresse -proxy invalide : « %s » - - - - Unknown network specified in -onlynet: '%s' - Réseau inconnu spécifié sur -onlynet : « %s » - - - - Unknown -socks proxy version requested: %i - Version inconnue de serveur mandataire -socks demandée : %i - - - - Cannot resolve -bind address: '%s' - Impossible de résoudre l'adresse -bind : « %s » - - - - Cannot resolve -externalip address: '%s' - Impossible de résoudre l'adresse -externalip : « %s » - - - - Invalid amount for -paytxfee=<amount>: '%s' - Montant invalide pour -paytxfee=<montant> : « %s » - - - - Error: could not start node - Erreur: Impossible de démarrer le noeud - - - - Sending... - Envoi... - - - - Invalid amount - Montant invalide - - - - Insufficient funds - Fonds insuffisants - - - - Loading block index... - Chargement de l’index des blocs… - - - - Add a node to connect to and attempt to keep the connection open - Ajouter un nœud auquel se connecter et tenter de garder la connexion ouverte - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Connexion au port %s impossible. L'application ShadowCoin est probablement déjà en cours d'exécution - - - - Fee per KB to add to transactions you send - Frais par KB à ajouter à vos transactions sortantes - - - - Invalid amount for -mininput=<amount>: '%s' - Montant invalide pour -mininput=<amount>: '%s' - - - - Loading wallet... - Chargement du portefeuille… - - - - Cannot downgrade wallet - Impossible de revenir à une version inférieure du portefeuille - - - - Cannot initialize keypool - Impossible d'initialiser la "keypool" - - - - Cannot write default address - Impossible d'écrire l'adresse par défaut - - - - Rescanning... - Nouvelle analyse… - - - - Done loading - Chargement terminé - - - - To use the %s option - Pour utiliser l'option %s - - - - Error - Erreur - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Vous devez ajouter la ligne rpcpassword=<mot-de-passe> au fichier de configuration : -%s -Si le fichier n'existe pas, créez-le avec les droits de lecture seule accordés au propriétaire. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_gl.ts b/src/qt/locale/umbra_gl.ts deleted file mode 100644 index 603a75407d..0000000000 --- a/src/qt/locale/umbra_gl.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Acerca de ShadowCoin - - - - <b>ShadowCoin</b> version - Versión <b>ShadowCoin</b> . - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiqueta - - - - Address - Dirección - - - - pubkey - - - - - stealth - - - - - (no label) - (sen etiqueta) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Diálogo de Contrasinal - - - - Enter passphrase - Introduce contrasinal - - - - New passphrase - Novo contrasinal - - - - Repeat new passphrase - Repite novo contrasinal - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - Para "staking" só - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Introduce o novo contrasinal ao moedeiro.<br/>Por favor empregue un contrasinal de <b>10 ou máis caracteres aleatorios</b>, ou <b>oito ou máis palabras</b>. - - - - Encrypt wallet - Encriptar moedeiro - - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operación precisa o contrasinal do teu moedeiro para desbloquear o moedeiro. - - - - Unlock wallet - Desbloquear moedeiro - - - - This operation needs your wallet passphrase to decrypt the wallet. - Esta operación precisa o contrasinal do teu moedeiro para desencriptar o moedeiro. - - - - Decrypt wallet - Desencriptar moedeiro - - - - Change passphrase - Cambiar contrasinal - - - - Enter the old and new passphrase to the wallet. - Introduce o vello e novo contrasinais no moedeiro. - - - - Confirm wallet encryption - Confirmar encriptación de moedeiro - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Coidado: Se enctriptas a tua carteira e perdes o contrasinal, <b>PERDERÁS TODAS AS TÚAS MOEDAS</b>! - - - - Are you sure you wish to encrypt your wallet? - Estás seguro de que desexas encriptar o teu moedeiro? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: Calquera copia de seguridade previa que fixeses do teu arquivo de moedeiro debería ser substituída polo recén xerado arquivo encriptado de moedeiro. Por razóns de seguridade, as copias de seguridade previas de un arquivo de moedeiro desencriptado tornaránse inútiles no momento no que comeces a emprega-lo novo, encriptado, moedeiro. - - - - - Warning: The Caps Lock key is on! - Precaución: A tecla de Bloqueo de Maiúsculas está activada! - - - - - Wallet encrypted - Moedeiro encriptado - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin pecharase agora para rematar o proceso de encriptación. Recorda que encriptar a túa carteira non te protexe na totalidade do roubo das tuas moedas por infeccións de malware no teu ordenador. - - - - - - - Wallet encryption failed - Encriptación de moedeiro fallida - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - A encriptación do moedeiro fallou por mor dun erro interno. O teu moedeiro non foi encriptado. - - - - - The supplied passphrases do not match. - Os contrasinais suministrados non coinciden. - - - - Wallet unlock failed - Desbloqueo de moedeiro fallido - - - - - - The passphrase entered for the wallet decryption was incorrect. - O contrasinal introducido para a desencriptación do moedeiro foi incorrecto. - - - - Wallet decryption failed - Desencriptación de moedeiro fallida - - - - Wallet passphrase was successfully changed. - Cambiouse con éxito o contrasinal do moedeiro. - - - - ClientModel - - - Network Alert - Alerta de Rede - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - Cantidade: - - - - Bytes: - Bytes: - - - - Amount: - Importe: - - - - Priority: - Prioridade: - - - - Fee: - Pago: - - - - Low Output: - - - - - - no - non - - - - After Fee: - - - - - Change: - Cambiar: - - - - (un)select all - (des)selecciona todo - - - - Tree mode - Modo árbore - - - - List mode - Modo lista - - - - Amount - Cantidade - - - - Label - - - - - Address - Dirección - - - - Date - Data - - - - Confirmations - Confirmacións - - - - Confirmed - Confirmado - - - - Priority - Prioridade - - - - Copy address - Copiar dirección - - - - Copy label - Copiar etiqueta - - - - - Copy amount - Copiar cantidade - - - - Copy transaction ID - Copiar ID de transacción - - - - Copy quantity - Copiar cantidade - - - - Copy fee - Copiar pago - - - - Copy after fee - Copiar despóis do pago - - - - Copy bytes - Copiar bytes - - - - Copy priority - Copiar prioridade - - - - Copy low output - - - - - Copy change - Copiar cambio - - - - highest - O máis alto - - - - high - alto - - - - medium-high - medio-alto - - - - medium - - - - - low-medium - medio-baixo - - - - low - baixo - - - - lowest - o máis baixo - - - - - DUST - - - - - - yes - Si - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (sen etiqueta) - - - - change from %1 (%2) - - - - - (change) - (cambio) - - - - EditAddressDialog - - - Edit Address - Modificar Dirección - - - - &Label - &Etiqueta - - - - The label associated with this address book entry - - - - - &Address - &Dirección - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nova dirección para recibir - - - - New sending address - Nova dirección para enviar - - - - Edit receiving address - Modificar dirección para recibir - - - - Edit sending address - Modificar dirección para enviar - - - - The entered address "%1" is already in the address book. - A dirección introducida "%1" xa está no libro de direccións. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Non se puido desbloquear o moedeiro. - - - - New key generation failed. - A xeración de nova clave fallou. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - Opcións UI - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - Comezar minimizado - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nome do cliente - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Versión do cliente - - - - &Information - &Información - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Usar versión OpenSSL - - - - Using BerkeleyDB version - - - - - Startup time - Tempo de arranque - - - - Network - Rede - - - - Name - - - - - Number of connections - Número de conexións - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Cadea de bloques - - - - Current number of blocks - Número actual de bloques - - - - Estimated total blocks - Bloques totais estimados - - - - Last block time - Hora do último bloque - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Abrir - - - - Command-line options - - - - - &Show - - - - - &Console - &Consola - - - - Build date - Data de construción - - - - Debug log file - Arquivo de log de depuración - - - - Clear console - Limpar consola - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Emprega as flechas arriba e abaixo para navegar polo historial, e <b>Ctrl-L</b> para limpar a pantalla. - - - - Type <b>help</b> for an overview of available commands. - Escribe <b>axuda</b> para unha vista xeral dos comandos dispoñibles. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Aberto ata %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/fóra de liña - - - - %1/unconfirmed - %1/sen confirmar - - - - %1 confirmations - %1 confirmacións - - - - Status - Estado - - - - , broadcast through %n node(s) - , propagado a % nodo, propagado a % nodos - - - - Date - Data - - - - Source - Orixe - - - - Generated - Xerado - - - - - - From - Dende - - - - - - - To - A - - - - - - - own address - dirección propia - - - - - label - etiqueta - - - - - - - - Credit - Crédito - - - - matures in %n more block(s) - madura nun bloque máismadura en %n bloques máis - - - - not accepted - non aceptado - - - - - - - Debit - Débito - - - - Transaction fee - Tarifa de transacción - - - - Net amount - Cantidade neta - - - - Message - Mensaxe - - - - Comment - Comentario - - - - Transaction ID - ID de Transacción - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Información de depuración - - - - Transaction - Transacción - - - - Inputs - Entradas - - - - Amount - Cantidade - - - - true - verdadeiro - - - - false - falso - - - - , has not been successfully broadcast yet - , non foi propagado con éxito todavía - - - - - unknown - descoñecido - - - - TransactionDescDialog - - - Transaction details - Detalles de transacción - - - - This pane shows a detailed description of the transaction - Este panel amosa unha descripción detallada da transacción - - - - TransactionTableModel - - - Date - Data - - - - Type - Tipo - - - - Address - Dirección - - - - Amount - Cantidade - - - - Open until %1 - Aberto ata %1 - - - - Confirmed (%1 confirmations) - Confirmado (%1 confirmacións) - - - - Open for %n more block(s) - Abrir para %n bloque máisAbrir para %n bloques máis - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Este bloque non foi recibido por ningún outro nodo e probablemente non será aceptado! - - - - Generated but not accepted - Xerado pero non aceptado - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Estado da transacción. Pasa por riba deste campo para amosar o número de confirmacións. - - - - Date and time that the transaction was received. - Data e hora na que foi recibida a transacción. - - - - Type of transaction. - Tipo de transacción. - - - - Destination address of transaction. - Dirección de destino da transacción. - - - - Amount removed from or added to balance. - Cantidade borrada ou engadida no balance. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Emprego: - - - - Send command to -server or shadowcoind - - - - - List commands - Listar comandos - - - - Get help for a command - Obter axuda para un comando - - - - Options: - Opcións: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - Especificar arquivo do moedeiro (dentro do directorio de datos) - - - - Specify data directory - Especificar directorio de datos - - - - Set database cache size in megabytes (default: 25) - Fixar tamaño da caché da base de datos en megabytes (por defecto: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Manter como moito <n> conexións con pares (por defecto: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Conectar a nodo para recuperar direccións de pares, e desconectar - - - - Specify your own public address - Especificar a túa propia dirección pública - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Umbral para desconectar pares con mal comportamento (por defecto: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Número de segundos para manter sen reconectar aos pares con mal comportamento (por defecto: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Ocorreu un erro mentres se establecía o porto RPC %u para escoitar sobre IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Aceptar liña de comandos e comandos JSON-RPC - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Executar no fondo como un demo e aceptar comandos - - - - Use the test network - Empregar a rede de proba - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Aceptar conexións de fóra (por defecto: 1 se non -proxy ou -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Ocorreu un erro mentres se establecía o porto RPC %u para escoitar sobre IPv6, voltando a IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Precaución: -paytxfee está posto moi algo! Esta é a tarifa de transacción que ti pagarás se envías unha transacción. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Precaución: erro lendo wallet.dat! Tódalas claves lidas correctamente, pero os datos de transacción ou as entradas do libro de direccións podrían estar ausentes ou incorrectos. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Precaución: wallet.dat corrupto, datos salvagardados! O wallet.dat orixinal foi gardado como wallet.{timestamp}.bak en %s; se o teu balance ou transaccións son incorrectas deberías restauralas dende unha copia de seguridade. - - - - Attempt to recover private keys from a corrupt wallet.dat - Tentar recuperar claves privadas dende un wallet.dat corrupto - - - - Block creation options: - Opcións de creación de bloque: - - - - Connect only to the specified node(s) - Conectar so ao(s) nodo(s) especificado(s) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Descobrir dirección IP propia (por defecto: 1 se á escoita e non -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Fallou escoitar en calquera porto. Emprega -listen=0 se queres esto. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Máximo buffer por-conexión para recibir, <n>*1000 bytes (por defecto: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Máximo buffer por-conexión para enviar, <n>*1000 bytes (por defecto: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Conectar so a nodos na rede <net> (IPv4, IPv6 ou Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Opcións SSL: (ver ńa Wiki Bitcoin as instrucción de configuración de SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Enviar traza/información de depuración á consola en lugar de ao arquivo debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Fixar tamaño mínimo de bloque en bytes (por defecto: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Recortar o arquivo debug.log ao arrancar o cliente (por defecto: 1 cando no-debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Especificar tempo límite da conexión en milisegundos (por defecto: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Usar UPnP para mapear o porto de escoita (por defecto: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Usar UPnP para mapear o porto de escoita (por defecto: 1 se á escoita) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Nome de usuario para conexións JSON-RPC - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Precaución: Esta versión é obsoleta, precísase unha actualización! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrupto, fallou o gardado - - - - Password for JSON-RPC connections - Contrasinal para conexións JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Permitir conexións JSON-RPC dende direccións IP especificadas - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Enviar comandos a nodo executando na <ip> (por defecto: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Executar comando cando o mellor bloque cambie (%s no comando é sustituído polo hash do bloque) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Executar comando cando unha transacción do moedeiro cambia (%s no comando é substituído por TxID) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Actualizar moedeiro ao formato máis recente - - - - Set key pool size to <n> (default: 100) - Fixar tamaño do pool de claves a <n> (por defecto: 100) - - - - Rescan the block chain for missing wallet transactions - Rescanear transaccións ausentes na cadea de bloques - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Empregar OpenSSL (https) para conexións JSON-RPC - - - - Server certificate file (default: server.cert) - Arquivo de certificado do servidor (por defecto: server.cert) - - - - Server private key (default: server.pem) - Clave privada do servidor (por defecto: server.perm) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Esta mensaxe de axuda - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Imposible enlazar con %s neste ordenador (enlace devolveu erro %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Permitir lookup de DNS para -addnote, -seednote e -connect - - - - Loading addresses... - Cargando direccións... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Erro cargando wallet.dat: Moedeiro corrupto - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Erro cargando wallet.dat - - - - Invalid -proxy address: '%s' - Dirección -proxy inválida: '%s' - - - - Unknown network specified in -onlynet: '%s' - Rede descoñecida especificada en -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Versión solicitada de proxy -socks descoñecida: %i - - - - Cannot resolve -bind address: '%s' - Non se pode resolver a dirección -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - Non se pode resolver dirección -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Cantidade inválida para -paytxfee=<cantidade>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Cantidade inválida - - - - Insufficient funds - Fondos insuficientes - - - - Loading block index... - Cargando índice de bloques... - - - - Add a node to connect to and attempt to keep the connection open - Engadir un nodo ao que conectarse e tentar manter a conexión aberta - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Cargando moedeiro... - - - - Cannot downgrade wallet - Non se pode desactualizar o moedeiro - - - - Cannot initialize keypool - - - - - Cannot write default address - Non se pode escribir a dirección por defecto - - - - Rescanning... - Rescaneando... - - - - Done loading - Carga completa - - - - To use the %s option - Empregar a opción %s - - - - Error - Erro - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Debes fixar rpcpassword=<contrasinal> no arquivo de configuración: -%s -Se o arquivo non existe, debes crealo con permisos de so lectura para o propietario. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_he.ts b/src/qt/locale/umbra_he.ts deleted file mode 100644 index 4e82d72be0..0000000000 --- a/src/qt/locale/umbra_he.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - תוית - - - - Address - כתובת - - - - pubkey - - - - - stealth - - - - - (no label) - (ללא תוית) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - שיח סיסמא - - - - Enter passphrase - הכנס סיסמה - - - - New passphrase - סיסמה חדשה - - - - Repeat new passphrase - חזור על הסיסמה החדשה - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - הכנס את הסיסמה החדשה לארנק. <br/>אנא השתמש בסיסמה המכילה <b>10 תוים אקראיים או יותר</b>, או <b>שמונה מילים או יותר</b>. - - - - Encrypt wallet - הצפן ארנק - - - - This operation needs your wallet passphrase to unlock the wallet. - הפעולה הזו דורשת את סיסמת הארנק שלך בשביל לפתוח את הארנק. - - - - Unlock wallet - פתיחת ארנק - - - - This operation needs your wallet passphrase to decrypt the wallet. - הפעולה הזו דורשת את סיסמת הארנק שלך בשביל לפענח את הארנק. - - - - Decrypt wallet - פענוח ארנק - - - - Change passphrase - שינוי סיסמה - - - - Enter the old and new passphrase to the wallet. - הכנס את הסיסמות הישנה והחדשה לארנק. - - - - Confirm wallet encryption - אשר הצפנת ארנק - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - האם אתה בטוח שברצונך להצפין את הארנק? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - חשוב! כל גיבוי קודם שעשית לארנק שלך יש להחליף עם קובץ הארנק המוצפן שזה עתה נוצר. מסיבות אבטחה, גיבויים קודמים של קובץ הארנק הלא-מוצפן יהפכו לחסרי שימוש ברגע שתתחיל להשתמש בארנק החדש המוצפן. - - - - - Warning: The Caps Lock key is on! - זהירות: מקש Caps Lock מופעל! - - - - - Wallet encrypted - הארנק הוצפן - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - הצפנת הארנק נכשלה - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - הצפנת הארנק נכשלה עקב שגיאה פנימית. הארנק שלך לא הוצפן. - - - - - The supplied passphrases do not match. - הסיסמות שניתנו אינן תואמות. - - - - Wallet unlock failed - פתיחת הארנק נכשלה - - - - - - The passphrase entered for the wallet decryption was incorrect. - הסיסמה שהוכנסה לפענוח הארנק שגויה. - - - - Wallet decryption failed - פענוח הארנק נכשל - - - - Wallet passphrase was successfully changed. - סיסמת הארנק שונתה בהצלחה. - - - - ClientModel - - - Network Alert - אזעקת רשת - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - כמות: - - - - Bytes: - בייטים: - - - - Amount: - כמות: - - - - Priority: - קדימות: - - - - Fee: - תשלום: - - - - Low Output: - - - - - - no - לא - - - - After Fee: - לאחר עמלה: - - - - Change: - שינוי: - - - - (un)select all - (מחק)(בחר) הכל - - - - Tree mode - מצב עץ - - - - List mode - מצר רשימה - - - - Amount - כמות - - - - Label - - - - - Address - כתובת - - - - Date - תאריך - - - - Confirmations - אישורים - - - - Confirmed - מאושר - - - - Priority - קדימות - - - - Copy address - העתק כתובת - - - - Copy label - העתק תוית - - - - - Copy amount - העתק כמות - - - - Copy transaction ID - העתק מזהה פעולה - - - - Copy quantity - העתק כמות - - - - Copy fee - העתק מחיר - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - העתק קדימות - - - - Copy low output - - - - - Copy change - - - - - highest - הכי גבוה - - - - high - גבוה - - - - medium-high - בנוני גבוה - - - - medium - בינוני - - - - low-medium - בינוני - נמוך - - - - low - נמוך - - - - lowest - הכי נמוך - - - - - DUST - - - - - - yes - כן - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (ללא תוית) - - - - change from %1 (%2) - עודף מ־%1 (%2) - - - - (change) - (עודף) - - - - EditAddressDialog - - - Edit Address - ערוך כתובת - - - - &Label - ת&וית - - - - The label associated with this address book entry - - - - - &Address - &כתובת - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - כתובת חדשה לקבלה - - - - New sending address - כתובת חדשה לשליחה - - - - Edit receiving address - ערוך כתובת לקבלה - - - - Edit sending address - ערוך כתובת לשליחה - - - - The entered address "%1" is already in the address book. - הכתובת שהכנסת "%1" כבר נמצאת בפנקס הכתובות. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - פתיחת הארנק נכשלה. - - - - New key generation failed. - יצירת מפתח חדש נכשלה. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - שם ממשק - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - גרסת ממשק - - - - &Information - מידע - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - משתמש ב-OpenSSL גרסה - - - - Using BerkeleyDB version - - - - - Startup time - זמן אתחול - - - - Network - רשת - - - - Name - - - - - Number of connections - מספר חיבורים - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - שרשרת הבלוקים - - - - Current number of blocks - מספר הבלוקים הנוכחי - - - - Estimated total blocks - מספר כולל משוער של בלוקים - - - - Last block time - זמן הבלוק האחרון - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - פתח - - - - Command-line options - - - - - &Show - - - - - &Console - לוח בקרה - - - - Build date - תאריך בניה - - - - Debug log file - קובץ יומן ניפוי - - - - Clear console - נקה לוח בקרה - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - השתמש בחיצים למעלה ולמטה כדי לנווט בהיסטוריה, ו- <b>Ctrl-L</b> כדי לנקות את המסך. - - - - Type <b>help</b> for an overview of available commands. - הקלד <b>help</b> בשביל סקירה של הפקודות הזמינות. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - פתוח עד %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/מנותק - - - - %1/unconfirmed - %1/ממתין לאישור - - - - %1 confirmations - %1 אישורים - - - - Status - מצב - - - - , broadcast through %n node(s) - , הופץ דרך צומת אחד, הופץ דרך %n צמתים - - - - Date - תאריך - - - - Source - מקור - - - - Generated - נוצר - - - - - - From - מאת - - - - - - - To - אל - - - - - - - own address - כתובת עצמית - - - - - label - תוית - - - - - - - - Credit - זיכוי - - - - matures in %n more block(s) - מבשיל בעוד בלוק אחדמבשיל בעוד %n בלוקים - - - - not accepted - לא התקבל - - - - - - - Debit - חיוב - - - - Transaction fee - עמלת פעולה - - - - Net amount - כמות נקיה - - - - Message - הודעה - - - - Comment - הערה - - - - Transaction ID - זיהוי פעולה - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - מידע ניפוי - - - - Transaction - פעולה - - - - Inputs - קלטים - - - - Amount - כמות - - - - true - אמת - - - - false - שקר - - - - , has not been successfully broadcast yet - , טרם שודר בהצלחה - - - - - unknown - לא ידוע - - - - TransactionDescDialog - - - Transaction details - פרטי הפעולה - - - - This pane shows a detailed description of the transaction - חלונית זו מציגה תיאור מפורט של הפעולה - - - - TransactionTableModel - - - Date - תאריך - - - - Type - סוג - - - - Address - כתובת - - - - Amount - כמות - - - - Open until %1 - פתוח עד %1 - - - - Confirmed (%1 confirmations) - מאושר (%1 אישורים) - - - - Open for %n more block(s) - פתח למשך בלוק %n יותרפתח למשך %n בלוקים נוספים - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - הבלוק הזה לא נקלט על ידי אף צומת אחר, וכנראה לא יתקבל! - - - - Generated but not accepted - נוצר אך לא התקבל - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - מצב הפעולה. השהה את הסמן מעל שדה זה כדי לראות את מספר האישורים. - - - - Date and time that the transaction was received. - התאריך והשעה בה הפעולה הזאת התקבלה. - - - - Type of transaction. - סוג הפעולה. - - - - Destination address of transaction. - כתובת היעד של הפעולה. - - - - Amount removed from or added to balance. - הכמות שהתווספה או הוסרה מהיתרה. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - שימוש: - - - - Send command to -server or shadowcoind - - - - - List commands - רשימת פקודות - - - - Get help for a command - קבל עזרה עבור פקודה - - - - Options: - אפשרויות: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - ציין תיקיית נתונים - - - - Set database cache size in megabytes (default: 25) - קבע את גודל המטמון של מסד הנתונים במגהבייט (ברירת מחדל: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - החזק לכל היותר <n> חיבורים לעמיתים (ברירת מחדל: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - התחבר לצומת כדי לדלות כתובות עמיתים, ואז התנתק - - - - Specify your own public address - ציין את הכתובת הפומבית שלך - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - סף להתנתקות מעמיתים הנוהגים שלא כהלכה (ברירת מחדל: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - מספר שניות למנוע מעמיתים הנוהגים שלא כהלכה מלהתחבר מחדש (ברירת מחדל: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - אירעה שגיאה בעת הגדרת פורט RPC %u להאזנה ב-IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - קבל פקודות משורת הפקודה ו- JSON-RPC - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - רוץ ברקע כדימון וקבל פקודות - - - - Use the test network - השתמש ברשת הבדיקה - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - קבל חיבורים מבחוץ (ברירת מחדל: 1 ללא -proxy או -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - אירעה שגיאה בעת הגדרת פורט RPC %u להאזנה ב-IPv6, נסוג ל-IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - אזהרה: -paytxfee נקבע לערך מאד גבוה! זוהי עמלת הפעולה שתשלם אם אתה שולח פעולה. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - אזהרה: שגיאה בקריאת wallet.dat! כל המתפחות נקראו באופן תקין, אך נתוני הפעולות או ספר הכתובות עלולים להיות חסרים או שגויים. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - אזהרה: קובץ wallet.dat מושחת, המידע חולץ! קובץ wallet.dat המקורח נשמר כ - wallet.{timestamp}.bak ב - %s; אם המאזן או הפעולות שגויים עליך לשחזר גיבוי. - - - - Attempt to recover private keys from a corrupt wallet.dat - נסה לשחזר מפתחות פרטיים מקובץ wallet.dat מושחת. - - - - Block creation options: - אפשרויות יצירת בלוק: - - - - Connect only to the specified node(s) - התחבר רק לצמתים המצוינים - - - - Discover own IP address (default: 1 when listening and no -externalip) - גלה את כתובת ה-IP העצמית (ברירת מחדל: 1 כשמאזינים וללא -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - האזנה נכשלה בכל פורט. השתמש ב- -listen=0 אם ברצונך בכך. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - חוצץ קבלה מירבי לכל חיבור, <n>*1000 בתים (ברירת מחדל: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - חוצץ שליחה מירבי לכל חיבור, <n>*1000 בתים (ברירת מחדל: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - התחבר רק לצמתים ברשת <net> (IPv4, IPv6 או Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - אפשרויות SSL: (ראה את הויקי של ביטקוין עבור הוראות הגדרת SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - שלח מידע דיבאג ועקבה לקונסולה במקום לקובץ debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - קבע את גודל הבלוק המינימלי בבתים (ברירת מחדל: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - כווץ את קובץ debug.log בהפעלת הקליינט (ברירת מחדל: 1 ללא -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - ציין הגבלת זמן לחיבור במילישניות (ברירת מחדל: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - השתמש ב-UPnP כדי למפות את הפורט להאזנה (ברירת מחדל: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - השתמש ב-UPnP כדי למפות את הפורט להאזנה (ברירת מחדל: 1 בעת האזנה) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - שם משתמש לחיבורי JSON-RPC - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - אזהרה: הגרסה הזאת מיושנת, יש צורך בשדרוג! - - - - wallet.dat corrupt, salvage failed - קובץ wallet.dat מושחת, החילוץ נכשל - - - - Password for JSON-RPC connections - סיסמה לחיבורי JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - אפשר חיבורי JSON-RPC מכתובת האינטרנט המצוינת - - - - Send commands to node running on <ip> (default: 127.0.0.1) - שלח פקודות לצומת ב-<ip> (ברירת מחדל: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - בצע פקודה זו כשהבלוק הטוב ביותר משתנה (%s בפקודה יוחלף בגיבוב הבלוק) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - בצע פקודה כאשר פעולת ארנק משתנה (%s ב cmd יוחלף ב TxID) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - שדרג את הארנק לפורמט העדכני - - - - Set key pool size to <n> (default: 100) - קבע את גודל המאגר ל -<n> (ברירת מחדל: 100) - - - - Rescan the block chain for missing wallet transactions - סרוק מחדש את שרשרת הבלוקים למציאת פעולות חסרות בארנק - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - השתמש ב-OpenSSL (https( עבור חיבורי JSON-RPC - - - - Server certificate file (default: server.cert) - קובץ תעודת שרת (ברירת מחדל: server.cert) - - - - Server private key (default: server.pem) - מפתח פרטי של השרת (ברירת מחדל: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - הודעת העזרה הזו - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - לא מסוגל לקשור ל-%s במחשב זה (הקשירה החזירה שגיאה %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - אפשר בדיקת DNS עבור -addnode, -seednode ו- -connect - - - - Loading addresses... - טוען כתובות... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - שגיאה בטעינת הקובץ wallet.dat: הארנק מושחת - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - שגיאה בטעינת הקובץ wallet.dat - - - - Invalid -proxy address: '%s' - כתובת -proxy לא תקינה: '%s' - - - - Unknown network specified in -onlynet: '%s' - רשת לא ידועה צוינה ב- -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - התבקשה גרסת פרוקסי -socks לא ידועה: %i - - - - Cannot resolve -bind address: '%s' - לא מסוגל לפתור כתובת -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - לא מסוגל לפתור כתובת -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - כמות לא תקינה עבור -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - כמות לא תקינה - - - - Insufficient funds - אין מספיק כספים - - - - Loading block index... - טוען את אינדקס הבלוקים... - - - - Add a node to connect to and attempt to keep the connection open - הוסף צומת להתחברות ונסה לשמור את החיבור פתוח - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - טוען ארנק... - - - - Cannot downgrade wallet - לא יכול להוריד דרגת הארנק - - - - Cannot initialize keypool - - - - - Cannot write default address - לא יכול לכתוב את כתובת ברירת המחדל - - - - Rescanning... - סורק מחדש... - - - - Done loading - טעינה הושלמה - - - - To use the %s option - להשתמש באפשרות %s - - - - Error - שגיאה - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - עליך לקבוע rpcpassword=yourpassword בקובץ ההגדרות: -%s -אם הקובץ אינו קיים, צור אותו עם הרשאות קריאה לבעלים בלבד. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_hi_IN.ts b/src/qt/locale/umbra_hi_IN.ts deleted file mode 100644 index d5dc94f136..0000000000 --- a/src/qt/locale/umbra_hi_IN.ts +++ /dev/null @@ -1,3390 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - लेबल - - - - Address - पता - - - - pubkey - - - - - stealth - - - - - (no label) - (कोई लेबल नही !) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - पहचान शब्द/अक्षर डालिए ! - - - - New passphrase - नया पहचान शब्द/अक्षर डालिए ! - - - - Repeat new passphrase - दोबारा नया पहचान शब्द/अक्षर डालिए ! - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - नया पहचान शब्द/अक्षर वॉलेट मे डालिए ! <br/> कृपा करके पहचान शब्द में <br> 10 से ज़्यादा अक्षॉरों का इस्तेमाल करे </b>,या <b>आठ या उससे से ज़्यादा शब्दो का इस्तेमाल करे</b> ! - - - - Encrypt wallet - एनक्रिप्ट वॉलेट ! - - - - This operation needs your wallet passphrase to unlock the wallet. - वॉलेट खोलने के आपका वॉलेट पहचान शब्द्‌/अक्षर चाईए ! - - - - Unlock wallet - वॉलेट खोलिए - - - - This operation needs your wallet passphrase to decrypt the wallet. - वॉलेट डीक्रिप्ट( विकोड) करने के लिए आपका वॉलेट पहचान शब्द्‌/अक्षर चाईए ! - - - - Decrypt wallet - डीक्रिप्ट वॉलेट - - - - Change passphrase - पहचान शब्द/अक्षर बदलिये ! - - - - Enter the old and new passphrase to the wallet. - कृपा करके पुराना एवं नया पहचान शब्द/अक्षर वॉलेट में डालिए ! - - - - Confirm wallet encryption - वॉलेट एनक्रिपशन को प्रमाणित कीजिए ! - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - वॉलेट एनक्रिप्ट हो गया ! - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - वॉलेट एनक्रिप्ट नही हुआ! - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - वॉलेट एनक्रिपशन नाकाम हो गया इंटर्नल एरर की वजह से! आपका वॉलेट एनक्रीपत नही हुआ है! - - - - - The supplied passphrases do not match. - आपके द्वारा डाले गये पहचान शब्द/अक्षर मिलते नही है ! - - - - Wallet unlock failed - वॉलेट का लॉक नही खुला ! - - - - - - The passphrase entered for the wallet decryption was incorrect. - वॉलेट डीक्रिप्ट करने के लिए जो पहचान शब्द/अक्षर डाले गये है वो सही नही है! - - - - Wallet decryption failed - वॉलेट का डीक्रिप्ट-ष्ण असफल ! - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - राशि : - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - राशि - - - - Label - - - - - Address - पता - - - - Date - taareek - - - - Confirmations - - - - - Confirmed - पक्का - - - - Priority - - - - - Copy address - पता कॉपी करे - - - - Copy label - लेबल कॉपी करे - - - - - Copy amount - कॉपी राशि - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (कोई लेबल नही !) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - पता एडिट करना - - - - &Label - &लेबल - - - - The label associated with this address book entry - - - - - &Address - &पता - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - नया स्वीकार्य पता - - - - New sending address - नया भेजने वाला पता - - - - Edit receiving address - एडिट स्वीकार्य पता - - - - Edit sending address - एडिट भेजने वाला पता - - - - The entered address "%1" is already in the address book. - डाला गया पता "%1" एड्रेस बुक में पहले से ही मोजूद है| - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - वॉलेट को unlock नहीं किया जा सकता| - - - - New key generation failed. - नयी कुंजी का निर्माण असफल रहा| - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - लागू नही - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - खुला है जबतक %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - %1/अपुष्ट - - - - %1 confirmations - %1 पुष्टियाँ - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - taareek - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - राशि - - - - true - सही - - - - false - ग़लत - - - - , has not been successfully broadcast yet - , अभी तक सफलतापूर्वक प्रसारित नहीं किया गया है - - - - - unknown - अज्ञात - - - - TransactionDescDialog - - - Transaction details - लेन-देन का विवरण - - - - This pane shows a detailed description of the transaction - ये खिड़की आपको लेन-देन का विस्तृत विवरण देगी ! - - - - TransactionTableModel - - - Date - taareek - - - - Type - टाइप - - - - Address - पता - - - - Amount - राशि - - - - Open until %1 - खुला है जबतक %1 - - - - Confirmed (%1 confirmations) - पक्के ( %1 पक्का करना) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - यह ब्लॉक किसी भी और नोड को मिला नही है ! शायद यह ब्लॉक कोई भी नोड स्वीकारे गा नही ! - - - - Generated but not accepted - जेनरेट किया गया किंतु स्वीकारा नही गया ! - - - - (n/a) - (लागू नहीं) - - - - Transaction status. Hover over this field to show number of confirmations. - ट्रांसेक्शन स्तिथि| पुष्टियों की संख्या जानने के लिए इस जगह पर माउस लायें| - - - - Date and time that the transaction was received. - तारीख तथा समय जब ये ट्रांसेक्शन प्राप्त हुई थी| - - - - Type of transaction. - ट्रांसेक्शन का प्रकार| - - - - Destination address of transaction. - ट्रांसेक्शन की मंजिल का पता| - - - - Amount removed from or added to balance. - अमाउंट बैलेंस से निकला या जमा किया गया | - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - खपत : - - - - Send command to -server or shadowcoind - - - - - List commands - commands की लिस्ट बनाएं - - - - Get help for a command - किसी command के लिए मदद लें - - - - Options: - विकल्प: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - डेटा डायरेक्टरी बताएं - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - बैकग्राउंड में डेमॉन बन कर रन करे तथा कमांड्स स्वीकार करें - - - - Use the test network - टेस्ट नेटवर्क का इस्तेमाल करे - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - पता पुस्तक आ रही है... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - राशि ग़लत है - - - - Insufficient funds - - - - - Loading block index... - ब्लॉक इंडेक्स आ रहा है... - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - वॉलेट आ रहा है... - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - रि-स्केनी-इंग... - - - - Done loading - लोड हो गया| - - - - To use the %s option - - - - - Error - भूल - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_hr.ts b/src/qt/locale/umbra_hr.ts deleted file mode 100644 index 72c4e6e261..0000000000 --- a/src/qt/locale/umbra_hr.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Oznaka - - - - Address - Adresa - - - - pubkey - - - - - stealth - - - - - (no label) - (bez oznake) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Unesite lozinku - - - - New passphrase - Nova lozinka - - - - Repeat new passphrase - Ponovite novu lozinku - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Unesite novi lozinku za novčanik. <br/> Molimo Vas da koristite zaporku od <b>10 ili više slučajnih znakova,</b> ili <b>osam ili više riječi.</b> - - - - Encrypt wallet - Šifriranje novčanika - - - - This operation needs your wallet passphrase to unlock the wallet. - Ova operacija treba lozinku vašeg novčanika kako bi se novčanik otključao. - - - - Unlock wallet - Otključaj novčanik - - - - This operation needs your wallet passphrase to decrypt the wallet. - Ova operacija treba lozinku vašeg novčanika kako bi se novčanik dešifrirao. - - - - Decrypt wallet - Dešifriranje novčanika. - - - - Change passphrase - Promjena lozinke - - - - Enter the old and new passphrase to the wallet. - Unesite staru i novu lozinku za novčanik. - - - - Confirm wallet encryption - Potvrdi šifriranje novčanika - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Jeste li sigurni da želite šifrirati svoj novčanik? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - Upozorenje: Tipka Caps Lock je uključena! - - - - - Wallet encrypted - Novčanik šifriran - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Šifriranje novčanika nije uspjelo - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Šifriranje novčanika nije uspjelo zbog interne pogreške. Vaš novčanik nije šifriran. - - - - - The supplied passphrases do not match. - Priložene lozinke se ne podudaraju. - - - - Wallet unlock failed - Otključavanje novčanika nije uspjelo - - - - - - The passphrase entered for the wallet decryption was incorrect. - Lozinka za dešifriranje novčanika nije točna. - - - - Wallet decryption failed - Dešifriranje novčanika nije uspjelo - - - - Wallet passphrase was successfully changed. - Lozinka novčanika je uspješno promijenjena. - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Iznos: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Iznos - - - - Label - - - - - Address - Adresa - - - - Date - Datum - - - - Confirmations - - - - - Confirmed - Potvrđeno - - - - Priority - - - - - Copy address - Kopirati adresu - - - - Copy label - Kopirati oznaku - - - - - Copy amount - Kopiraj iznos - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (bez oznake) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Izmjeni adresu - - - - &Label - &Oznaka - - - - The label associated with this address book entry - - - - - &Address - &Adresa - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nova adresa za primanje - - - - New sending address - Nova adresa za slanje - - - - Edit receiving address - Uredi adresu za primanje - - - - Edit sending address - Uredi adresu za slanje - - - - The entered address "%1" is already in the address book. - Upisana adresa "%1" je već u adresaru. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Ne mogu otključati novčanik. - - - - New key generation failed. - Stvaranje novog ključa nije uspjelo. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Ime klijenta - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Verzija klijenta - - - - &Information - &Informacija - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Koristim OpenSSL verziju - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - Mreža - - - - Name - - - - - Number of connections - Broj konekcija - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Lanac blokova - - - - Current number of blocks - Trenutni broj blokova - - - - Estimated total blocks - Procjenjeni ukupni broj blokova - - - - Last block time - Posljednje vrijeme bloka - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Otvori - - - - Command-line options - - - - - &Show - - - - - &Console - &Konzola - - - - Build date - - - - - Debug log file - - - - - Clear console - Očisti konzolu - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Otvoren do %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1 nije dostupan - - - - %1/unconfirmed - %1/nepotvrđeno - - - - %1 confirmations - %1 potvrda - - - - Status - Status - - - - , broadcast through %n node(s) - - - - - Date - Datum - - - - Source - Izvor - - - - Generated - Generiran - - - - - - From - Od - - - - - - - To - Za - - - - - - - own address - vlastita adresa - - - - - label - oznaka - - - - - - - - Credit - Uplaćeno - - - - matures in %n more block(s) - - - - - not accepted - Nije prihvaćeno - - - - - - - Debit - Zaduženje - - - - Transaction fee - Naknada za transakciju - - - - Net amount - Neto iznos - - - - Message - Poruka - - - - Comment - Komentar - - - - Transaction ID - ID transakcije - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - Transakcija - - - - Inputs - Unosi - - - - Amount - Iznos - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - , još nije bio uspješno emitiran - - - - - unknown - nepoznato - - - - TransactionDescDialog - - - Transaction details - Detalji transakcije - - - - This pane shows a detailed description of the transaction - Ova panela prikazuje detaljni opis transakcije - - - - TransactionTableModel - - - Date - Datum - - - - Type - Tip - - - - Address - Adresa - - - - Amount - Iznos - - - - Open until %1 - Otvoren do %1 - - - - Confirmed (%1 confirmations) - Potvrđen (%1 potvrda) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Generirano - Upozorenje: ovaj blok nije bio primljen od strane bilo kojeg drugog noda i vjerojatno neće biti prihvaćen! - - - - Generated but not accepted - Generirano, ali nije prihvaćeno - - - - (n/a) - (n/d) - - - - Transaction status. Hover over this field to show number of confirmations. - Status transakcije - - - - Date and time that the transaction was received. - Datum i vrijeme kad je transakcija primljena - - - - Type of transaction. - Vrsta transakcije. - - - - Destination address of transaction. - Odredište transakcije - - - - Amount removed from or added to balance. - Iznos odbijen od ili dodan k saldu. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Upotreba: - - - - Send command to -server or shadowcoind - - - - - List commands - Prikaži komande - - - - Get help for a command - Potraži pomoć za komandu - - - - Options: - Postavke: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Odredi direktorij za datoteke - - - - Set database cache size in megabytes (default: 25) - Postavi cache za bazu podataka u MB (zadano:25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Održavaj najviše <n> veza sa članovima (default: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Prag za odspajanje članova koji se čudno ponašaju (default: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Broj sekundi koliko se članovima koji se čudno ponašaju neće dopustiti da se opet spoje (default: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Prihvati komande iz tekst moda i JSON-RPC - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Izvršavaj u pozadini kao uslužnik i prihvaćaj komande - - - - Use the test network - Koristi test mrežu - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Upozorenje: -paytxfee je podešen na preveliki iznos. To je iznos koji ćete platiti za obradu transakcije. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - Opcije za kreiranje bloka: - - - - Connect only to the specified node(s) - Poveži se samo sa određenim nodom - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL postavke: (za detalje o podešavanju SSL opcija vidi Bitcoin Wiki) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Šalji trace/debug informacije na konzolu umjesto u debug.log datoteku - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Podesite minimalnu veličinu bloka u bajtovima (default: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - Odredi vremenski prozor za spajanje na mrežu u milisekundama (ugrađeni izbor: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Pokušaj koristiti UPnP da otvoriš port za uslugu (default: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Pokušaj koristiti UPnP da otvoriš port za uslugu (default: 1 when listening) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Korisničko ime za JSON-RPC veze - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - Lozinka za JSON-RPC veze - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Dozvoli JSON-RPC povezivanje s određene IP adrese - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Pošalji komande nodu na adresi <ip> (ugrađeni izbor: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Izvršite naredbu kada se najbolji blok promjeni (%s u cmd je zamjenjen sa block hash) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Nadogradite novčanik u posljednji format. - - - - Set key pool size to <n> (default: 100) - Podesi memorijski prostor za ključeve na <n> (ugrađeni izbor: 100) - - - - Rescan the block chain for missing wallet transactions - Ponovno pretraži lanac blokova za transakcije koje nedostaju - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Koristi OpenSSL (https) za JSON-RPC povezivanje - - - - Server certificate file (default: server.cert) - Uslužnikov SSL certifikat (ugrađeni izbor: server.cert) - - - - Server private key (default: server.pem) - Uslužnikov privatni ključ (ugrađeni izbor: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Ova poruka za pomoć - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Program ne može koristiti %s na ovom računalu (bind returned error %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Dozvoli DNS upite za dodavanje nodova i povezivanje - - - - Loading addresses... - Učitavanje adresa... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Greška kod učitavanja wallet.dat: Novčanik pokvaren - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Greška kod učitavanja wallet.dat - - - - Invalid -proxy address: '%s' - Nevaljala -proxy adresa: '%s' - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - Nevaljali iznos za opciju -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Nevaljali iznos za opciju - - - - Insufficient funds - Nedovoljna sredstva - - - - Loading block index... - Učitavanje indeksa blokova... - - - - Add a node to connect to and attempt to keep the connection open - Unesite nod s kojim se želite spojiti and attempt to keep the connection open - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Učitavanje novčanika... - - - - Cannot downgrade wallet - Nije moguće novčanik vratiti na prijašnju verziju. - - - - Cannot initialize keypool - - - - - Cannot write default address - Nije moguće upisati zadanu adresu. - - - - Rescanning... - Rescaniranje - - - - Done loading - Učitavanje gotovo - - - - To use the %s option - - - - - Error - Greška - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_hu.ts b/src/qt/locale/umbra_hu.ts deleted file mode 100644 index 2a2ba95c76..0000000000 --- a/src/qt/locale/umbra_hu.ts +++ /dev/null @@ -1,3408 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - A ShadowCoin-ról - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> verzió - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Címke - - - - Address - Cím - - - - pubkey - - - - - stealth - - - - - (no label) - (nincs címke) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Kulcsszó Párbeszédablak - - - - Enter passphrase - Add meg a jelszót - - - - New passphrase - Új jelszó - - - - Repeat new passphrase - Új jelszó ismét - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Triviálisan a sendmoney parancs letiltására szolgál, amennyiben az OS felhasználója kompromittálódik. Nem ad valós biztonságot. - - - - For staking only - Csak kamatoztatásra - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Írd be az új jelszót a tárcához.<br/>Használj <b>legalább 10 véletlenszerű karaktert</b>, vagy <b>legalább nyolc szót</b>. - - - - Encrypt wallet - Tárca kódolása - - - - This operation needs your wallet passphrase to unlock the wallet. - Ez a művelet a tárcád jelszavának megadását igényli annak megnyitásához. - - - - Unlock wallet - Tárca feloldása - - - - This operation needs your wallet passphrase to decrypt the wallet. - Ez a művelet a tárcád jelszavának megadását igényli annak dekódolásához. - - - - Decrypt wallet - Tárca dekódolása - - - - Change passphrase - Jelszó megváltoztatása - - - - Enter the old and new passphrase to the wallet. - Írd be a tárca régi és új jelszavát. - - - - Confirm wallet encryption - Biztosan kódolni akarod a tárcát? - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Figyelmeztetés: Ha kódolod a tárcád és elveszíted annak jelszavát, el fogod <b>VESZÍTENI AZ ÖSSZES ÉRMÉDET</b>! - - - - Are you sure you wish to encrypt your wallet? - Biztosan kódolni akarod a tárcát? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - FONTOS: A pénztárca-fájl korábbi mentéseit ezzel az új, titkosított pénztárca-fájllal kell helyettesíteni. Biztonsági okokból a pénztárca-fájl korábbi titkosítás nélküli mentései haszontalanná válnak amint elkezdi használni az új, titkosított pénztárcát. - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Tárca kódolva - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Tárca kódolása sikertelen. - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Tárca kódolása belső hiba miatt sikertelen. A tárcád nem lett kódolva. - - - - - The supplied passphrases do not match. - A megadott jelszavak nem egyeznek. - - - - Wallet unlock failed - Tárca megnyitása sikertelen - - - - - - The passphrase entered for the wallet decryption was incorrect. - Hibás jelszó. - - - - Wallet decryption failed - Dekódolás sikertelen. - - - - Wallet passphrase was successfully changed. - Jelszó megváltoztatva. - - - - ClientModel - - - Network Alert - Hálózati figyelmeztetés - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Összeg: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Összeg - - - - Label - - - - - Address - Cím - - - - Date - Dátum - - - - Confirmations - - - - - Confirmed - Megerősítve - - - - Priority - - - - - Copy address - Cím másolása - - - - Copy label - Címke másolása - - - - - Copy amount - Összeg másolása - - - - Copy transaction ID - Tranzakcióazonosító másolása - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (nincs címke) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Cím szerkesztése - - - - &Label - Cím&ke - - - - The label associated with this address book entry - - - - - &Address - &Cím - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Új fogadó cím - - - - New sending address - Új küldő cím - - - - Edit receiving address - Fogadó cím szerkesztése - - - - Edit sending address - Küldő cím szerkesztése - - - - The entered address "%1" is already in the address book. - A megadott "%1" cím már szerepel a címjegyzékben. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Tárca feloldása sikertelen - - - - New key generation failed. - Új kulcs generálása sikertelen - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Kliens néve - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - Nem elérhető - - - - Client version - Kliens verzió - - - - &Information - &Információ - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Használt OpenSSL verzió - - - - Using BerkeleyDB version - - - - - Startup time - Bekapcsolás ideje - - - - Network - Hálózat - - - - Name - - - - - Number of connections - Kapcsolatok száma - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - Be: - - - - - Out: - Ki: - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Blokklánc - - - - Current number of blocks - Aktuális blokkok száma - - - - Estimated total blocks - Becsült összes blokk - - - - Last block time - Utolsó blokk ideje - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Megnyitás - - - - Command-line options - - - - - &Show - - - - - &Console - &Konzol - - - - Build date - Fordítás dátuma - - - - Debug log file - Debug naplófájl - - - - Clear console - Konzol törlése - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Navigálhat a fel és le nyilakkal, és <b>Ctrl-L</b> -vel törölheti a képernyőt. - - - - Type <b>help</b> for an overview of available commands. - Írd be azt, hogy <b>help</b> az elérhető parancsok áttekintéséhez. - - - - via %1 - - - - - - never - soha - - - - Inbound - Bejövő - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Megnyitva %1-ig - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - %1/megerősítetlen - - - - %1 confirmations - %1 megerősítés - - - - Status - Állapot - - - - , broadcast through %n node(s) - - - - - Date - Dátum - - - - Source - - - - - Generated - Legenerálva - - - - - - From - Űrlap - - - - - - - To - Címzett - - - - - - - own address - saját cím - - - - - label - címke - - - - - - - - Credit - Jóváírás - - - - matures in %n more block(s) - - - - - not accepted - elutasítva - - - - - - - Debit - Terhelés - - - - Transaction fee - Tranzakciós díj - - - - Net amount - Nettó összeg - - - - Message - Üzenet - - - - Comment - Megjegyzés - - - - Transaction ID - Tranzakcióazonosító - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Debug információ - - - - Transaction - Tranzakció - - - - Inputs - Bemenetek - - - - Amount - Összeg - - - - true - igaz - - - - false - hamis - - - - , has not been successfully broadcast yet - , még nem sikerült elküldeni. - - - - - unknown - ismeretlen - - - - TransactionDescDialog - - - Transaction details - Tranzakció részletei - - - - This pane shows a detailed description of the transaction - Ez a mező a tranzakció részleteit mutatja - - - - TransactionTableModel - - - Date - Dátum - - - - Type - Típus - - - - Address - Cím - - - - Amount - Összeg - - - - Open until %1 - %1-ig megnyitva - - - - Confirmed (%1 confirmations) - Megerősítve (%1 megerősítés) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Ezt a blokkot egyetlen másik csomópont sem kapta meg, így valószínűleg nem lesz elfogadva! - - - - Generated but not accepted - Legenerálva, de még el nem fogadva. - - - - (n/a) - (nincs) - - - - Transaction status. Hover over this field to show number of confirmations. - Tranzakció állapota. Húzd ide a kurzort, hogy lásd a megerősítések számát. - - - - Date and time that the transaction was received. - Tranzakció fogadásának dátuma és időpontja. - - - - Type of transaction. - Tranzakció típusa. - - - - Destination address of transaction. - A tranzakció címzettjének címe. - - - - Amount removed from or added to balance. - Az egyenleghez jóváírt vagy ráterhelt összeg. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Használat: - - - - Send command to -server or shadowcoind - - - - - List commands - Parancsok kilistázása - - - - - Get help for a command - Segítség egy parancsról - - - - - Options: - Opciók - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Adatkönyvtár - - - - - Set database cache size in megabytes (default: 25) - Az adatbázis gyorsítótár mérete megabájtban (alapértelmezés: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Maximálisan <n> számú kapcsolat fenntartása a peerekkel (alapértelmezés: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Kapcsolódás egy csomóponthoz a peerek címeinek megszerzése miatt, majd szétkapcsolás - - - - Specify your own public address - Adja meg az Ön saját nyilvános címét - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Helytelenül viselkedő peerek leválasztási határértéke (alapértelmezés: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Helytelenül viselkedő peerek kizárási ideje másodpercben (alapértelmezés: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Parancssoros és JSON-RPC parancsok elfogadása - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Háttérben futtatás daemonként és parancsok elfogadása - - - - - Use the test network - Teszthálózat használata - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Figyelem: a -paytxfee nagyon magas. Ennyi tranzakciós díjat fogsz fizetni, ha elküldöd a tranzakciót. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - Csatlakozás csak a megadott csomóponthoz - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - Egyik hálózati porton sem sikerül hallgatni. Használja a -listen=0 kapcsolót, ha ezt szeretné. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL-opciók: (lásd a Bitcoin Wiki SSL-beállítási instrukcióit) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - trace/debug információ küldése a konzolra a debog.log fájl helyett - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - Csatlakozás időkerete milliszekundumban (alapértelmezett: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - UPnP-használat engedélyezése a figyelő port feltérképezésénél (default: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - UPnP-használat engedélyezése a figyelő port feltérképezésénél (default: 1 when listening) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Felhasználói név JSON-RPC csatlakozásokhoz - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - Jelszó JSON-RPC csatlakozásokhoz - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - JSON-RPC csatlakozások engedélyezése meghatározott IP-címről - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Parancsok küldése <ip> címen működő csomóponthoz (alapértelmezett: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Parancs, amit akkor hajt végre, amikor a legjobb blokk megváltozik (%s a cmd-ban lecserélődik a blokk hash-re) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Parancs, amit akkor hajt végre, amikor egy tárca-tranzakció megváltozik (%s a parancsban lecserélődik a blokk TxID-re) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - A Tárca frissítése a legfrissebb formátumra - - - - Set key pool size to <n> (default: 100) - Kulcskarika mérete <n> (alapértelmezett: 100) - - - - - Rescan the block chain for missing wallet transactions - Blokklánc újraszkennelése hiányzó tárca-tranzakciók után - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - OpenSSL (https) használata JSON-RPC csatalkozásokhoz - - - - - Server certificate file (default: server.cert) - Szervertanúsítvány-fájl (alapértelmezett: server.cert) - - - - - Server private key (default: server.pem) - Szerver titkos kulcsa (alapértelmezett: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Ez a súgó-üzenet - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - A %s nem elérhető ezen a gépen (bind returned error %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - DNS-kikeresés engedélyezése az addnode-nál és a connect-nél - - - - Loading addresses... - Címek betöltése... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Hiba a wallet.dat betöltése közben: meghibásodott tárca - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Hiba az wallet.dat betöltése közben - - - - Invalid -proxy address: '%s' - Érvénytelen -proxy cím: '%s' - - - - Unknown network specified in -onlynet: '%s' - Ismeretlen hálózat lett megadva -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Ismeretlen -socks proxy kérése: %i - - - - Cannot resolve -bind address: '%s' - Csatlakozási cím (-bind address) feloldása nem sikerült: '%s' - - - - Cannot resolve -externalip address: '%s' - Külső cím (-externalip address) feloldása nem sikerült: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Étvénytelen -paytxfee=<összeg> összeg: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Étvénytelen összeg - - - - Insufficient funds - Nincs elég bitcoinod. - - - - Loading block index... - Blokkindex betöltése... - - - - Add a node to connect to and attempt to keep the connection open - Elérendő csomópont megadása and attempt to keep the connection open - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Tárca betöltése... - - - - Cannot downgrade wallet - Nem sikerült a Tárca visszaállítása a korábbi verzióra - - - - Cannot initialize keypool - - - - - Cannot write default address - Nem sikerült az alapértelmezett címet írni. - - - - Rescanning... - Újraszkennelés... - - - - Done loading - Betöltés befejezve. - - - - To use the %s option - Használd a %s opciót - - - - Error - Hiba - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Be kell állítani rpcpassword=<password> a konfigurációs fájlban -%s -Ha a fájl nem létezik, hozd létre 'csak a felhasználó által olvasható' fájl engedéllyel - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_id_ID.ts b/src/qt/locale/umbra_id_ID.ts deleted file mode 100644 index 516867e40d..0000000000 --- a/src/qt/locale/umbra_id_ID.ts +++ /dev/null @@ -1,3393 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Tentang ShadowCoin - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> versi - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Copyright © 2009-2014 para pengembang Bitcoin -Copyright © 2012-2014 para pengembang NovaCoin -Copyright © 2014-2015 para pengembang ShadowCoin - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Label - - - - Address - Alamat - - - - pubkey - - - - - stealth - - - - - (no label) - (tidak ada label) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Dialog Kata kunci - - - - Enter passphrase - Masukkan kata kunci - - - - New passphrase - Kata kunci baru - - - - Repeat new passphrase - Ulangi kata kunci baru - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - Hanya untuk staking - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Masukkan kata kunci baru ke dompet.<br/>Mohon gunakan kata kunci dengan <b>10 karakter atau lebih dengan acak</b>, atau <b>delapan kata atau lebih</b>. - - - - Encrypt wallet - Meng-enkripsikan dompet - - - - This operation needs your wallet passphrase to unlock the wallet. - Operasi ini memerlukan kata kunci dompet Anda untuk membuka dompet ini. - - - - Unlock wallet - Buka dompet - - - - This operation needs your wallet passphrase to decrypt the wallet. - Operasi ini memerlukan kata kunci dompet Anda untuk mendekripsi dompet ini. - - - - Decrypt wallet - Men-dekripsikan dompet - - - - Change passphrase - Ubah kata kunci - - - - Enter the old and new passphrase to the wallet. - Masukkan kata kunci lama dan baru ke dompet ini. - - - - Confirm wallet encryption - Menkonfirmasi enkripsi dompet - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Apakah Anda yakin untuk mengenkripsi dompet Anda? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - Peringatan: tombol Caps Lock aktif! - - - - - Wallet encrypted - Dompet terenkripsi - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin akan ditutup untuk menyelesaikan proses enkripsi. Ingat bahwa dompet Anda tidak bisa di lindungi dengan enkripsi sepenuhny dari pencurian melalui infeksi malware di komputer Anda. - - - - - - - Wallet encryption failed - Enkripsi dompet gagal - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Enkripsi dompet gagal karena kesalahan internal. Dompet Anda tidak dienkripsi. - - - - - The supplied passphrases do not match. - Kata kunci yang dimasukkan tidak cocok. - - - - Wallet unlock failed - Gagal buka dompet - - - - - - The passphrase entered for the wallet decryption was incorrect. - Kata kunci yang dimasukkan untuk dekripsi dompet tidak cocok. - - - - Wallet decryption failed - Dekripsi dompet gagal - - - - Wallet passphrase was successfully changed. - Passphrase dompet telah berhasil diubah. - - - - ClientModel - - - Network Alert - Notifikasi Jaringan - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - Jumlah: - - - - Bytes: - Bytes: - - - - Amount: - Jumlah: - - - - Priority: - Prioritas: - - - - Fee: - Biaya: - - - - Low Output: - - - - - - no - tidak - - - - After Fee: - Setelah biaya: - - - - Change: - Perubahan: - - - - (un)select all - - - - - Tree mode - - - - - List mode - mode Daftar - - - - Amount - Jumlah - - - - Label - Label - - - - Address - Alamat - - - - Date - Tanggal - - - - Confirmations - - - - - Confirmed - Terkonfirmasi - - - - Priority - Prioritas - - - - Copy address - Salin alamat - - - - Copy label - Salin label - - - - - Copy amount - Salin jumlah - - - - Copy transaction ID - - - - - Copy quantity - Salikan jumlah - - - - Copy fee - Salinkan Biaya - - - - Copy after fee - Salinkan setelah biaya - - - - Copy bytes - Salinkan bytes - - - - Copy priority - Salinkan prioritas - - - - Copy low output - Salinkan output rendah - - - - Copy change - Salinkan perubahan - - - - highest - tertinggi - - - - high - tinggi - - - - medium-high - menengah-tinggi - - - - medium - menengah - - - - low-medium - rendah-menengah - - - - low - rendah - - - - lowest - terendah - - - - - DUST - DUST - - - - - yes - ya - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (tidak ada label) - - - - change from %1 (%2) - perubahan dari %1 (%2) - - - - (change) - (perubahan) - - - - EditAddressDialog - - - Edit Address - Ubah Alamat - - - - &Label - &Label - - - - The label associated with this address book entry - - - - - &Address - &Alamat - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Alamat menerima baru - - - - New sending address - Alamat mengirim baru - - - - Edit receiving address - Ubah alamat menerima - - - - Edit sending address - Ubah alamat mengirim - - - - The entered address "%1" is already in the address book. - Alamat yang dimasukkan "%1" sudah ada di dalam buku alamat. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Tidak dapat membuka dompet. - - - - New key generation failed. - Pembuatan kunci baru gagal. - - - - GUIUtil::HelpMessageBox - - - version - versi - - - - - Shadow - - - - - Usage: - Penggunaan: - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nama Klien - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - T/S - - - - Client version - Versi Klien - - - - &Information - &Informasi - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Menggunakan versi OpenSSL - - - - Using BerkeleyDB version - - - - - Startup time - Waktu nyala - - - - Network - Jaringan - - - - Name - - - - - Number of connections - Jumlah hubungan - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Rantai blok - - - - Current number of blocks - Jumlah blok terkini - - - - Estimated total blocks - Perkiraan blok total - - - - Last block time - Waktu blok terakhir - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Buka - - - - Command-line options - - - - - &Show - &Tunjukkan - - - - &Console - &Konsol - - - - Build date - Tanggal pembuatan - - - - Debug log file - - - - - Clear console - Bersihkan konsol - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Gunakan panah keatas dan kebawah untuk menampilkan sejarah, dan <b>Ctrl-L</b> untuk bersihkan layar. - - - - Type <b>help</b> for an overview of available commands. - Ketik <b>help</b> untuk menampilkan perintah tersedia. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Buka hingga %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - %1/tidak terkonfirmasi - - - - %1 confirmations - %1 konfirmasi - - - - Status - Status - - - - , broadcast through %n node(s) - - - - - Date - Tanggal - - - - Source - - - - - Generated - - - - - - - From - Dari - - - - - - - To - Untuk - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - Pesan: - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - Transaksi - - - - Inputs - - - - - Amount - Jumlah - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - , belum berhasil disiarkan - - - - - unknown - tidak diketahui - - - - TransactionDescDialog - - - Transaction details - Rincian transaksi - - - - This pane shows a detailed description of the transaction - Jendela ini menampilkan deskripsi rinci dari transaksi tersebut - - - - TransactionTableModel - - - Date - Tanggal - - - - Type - Jenis - - - - Address - Alamat - - - - Amount - Jumlah - - - - Open until %1 - Buka hingga %1 - - - - Confirmed (%1 confirmations) - Terkonfirmasi (%1 konfirmasi) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Blok ini tidak diterima oleh node lainnya dan kemungkinan tidak akan diterima! - - - - Generated but not accepted - Terbuat tetapi tidak diterima - - - - (n/a) - (t/s) - - - - Transaction status. Hover over this field to show number of confirmations. - Status transaksi. Arahkan ke bagian ini untuk menampilkan jumlah konfrimasi. - - - - Date and time that the transaction was received. - Tanggal dan waktu transaksi tersebut diterima. - - - - Type of transaction. - Jenis transaksi. - - - - Destination address of transaction. - Alamat tujuan dari transaksi. - - - - Amount removed from or added to balance. - Jumlah terbuang dari atau ditambahkan ke saldo. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Penggunaan: - - - - Send command to -server or shadowcoind - - - - - List commands - Daftar perintah - - - - Get help for a command - Dapatkan bantuan untuk perintah - - - - Options: - Pilihan: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Tentukan direktori data - - - - Set database cache size in megabytes (default: 25) - Atur ukuran tembolok dalam megabyte (standar: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Mengatur hubungan paling banyak <n> ke peer (standar: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Hubungkan ke node untuk menerima alamat peer, dan putuskan - - - - Specify your own public address - Tentukan alamat publik Anda sendiri - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Batas untuk memutuskan peer buruk (standar: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Jumlah kedua untuk menjaga peer buruk dari hubung-ulang (standar: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Menerima perintah baris perintah dan JSON-RPC - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Berjalan dibelakang sebagai daemin dan menerima perintah - - - - Use the test network - Gunakan jaringan uji - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Kirim info lacak/debug ke konsol sebaliknya dari berkas debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Nama pengguna untuk hubungan JSON-RPC - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - Kata sandi untuk hubungan JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Izinkan hubungan JSON-RPC dari alamat IP yang ditentukan - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Kirim perintah ke node berjalan pada <ip> (standar: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Menjalankan perintah ketika perubahan blok terbaik (%s dalam cmd digantikan oleh hash blok) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Perbarui dompet ke format terbaru - - - - Set key pool size to <n> (default: 100) - Kirim ukuran kolam kunci ke <n> (standar: 100) - - - - Rescan the block chain for missing wallet transactions - Pindai ulang rantai-blok untuk transaksi dompet yang hilang - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Gunakan OpenSSL (https) untuk hubungan JSON-RPC - - - - Server certificate file (default: server.cert) - Berkas sertifikat server (standar: server.cert) - - - - Server private key (default: server.pem) - Kunci pribadi server (standar: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Eror: Dompet hanya di-buka hanya untuk staking, transaksi gagal dilaksanakan - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Pesan bantuan ini - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Tidak dapat mengikat ke %s dengan komputer ini (ikatan gagal %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Izinkan peninjauan DNS untuk -addnote, -seednode dan -connect - - - - Loading addresses... - Memuat alamat... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Gagal memuat wallet.dat: Dompet rusak - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Gagal memuat wallet.dat - - - - Invalid -proxy address: '%s' - Alamat -proxy salah: '%s' - - - - Unknown network specified in -onlynet: '%s' - Jaringan tidak diketahui yang ditentukan dalam -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Diminta versi proxy -socks tidak diketahui: %i - - - - Cannot resolve -bind address: '%s' - Tidak dapat menyelesaikan alamat -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - Tidak dapat menyelesaikan alamat -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Jumlah salah untuk -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - Mengirim... - - - - Invalid amount - Jumlah salah - - - - Insufficient funds - Saldo tidak mencukupi - - - - Loading block index... - Memuat indeks blok... - - - - Add a node to connect to and attempt to keep the connection open - Tambahkan node untuk dihubungkan dan upaya untuk menjaga hubungan tetap terbuka - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Memuat dompet... - - - - Cannot downgrade wallet - Tidak dapat menurunkan versi dompet - - - - Cannot initialize keypool - initialisasi keypool gagal - - - - Cannot write default address - Tidak dapat menyimpan alamat standar - - - - Rescanning... - Memindai ulang... - - - - Done loading - Memuat selesai - - - - To use the %s option - Gunakan pilihan %s - - - - Error - Gagal - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Anda harus mengatur rpcpassword=<kata sandi> dalam berkas konfigurasi: -%s -Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pemilik. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_it.ts b/src/qt/locale/umbra_it.ts deleted file mode 100644 index 3aef95f89f..0000000000 --- a/src/qt/locale/umbra_it.ts +++ /dev/null @@ -1,3403 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etichetta - - - - Address - Indirizzo - - - - pubkey - - - - - stealth - - - - - (no label) - (nessuna etichetta) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Finestra passphrase - - - - Enter passphrase - Inserisci la passphrase - - - - New passphrase - Nuova passphrase - - - - Repeat new passphrase - Ripeti la passphrase - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Inserisci la passphrase per il portamonete.<br/>Per piacere usare unapassphrase di <b>10 o più caratteri casuali</b>, o <b>otto o più parole</b>. - - - - Encrypt wallet - Cifra il portamonete - - - - This operation needs your wallet passphrase to unlock the wallet. - Quest'operazione necessita della passphrase per sbloccare il portamonete. - - - - Unlock wallet - Sblocca il portamonete - - - - This operation needs your wallet passphrase to decrypt the wallet. - Quest'operazione necessita della passphrase per decifrare il portamonete, - - - - Decrypt wallet - Decifra il portamonete - - - - Change passphrase - Cambia la passphrase - - - - Enter the old and new passphrase to the wallet. - Inserisci la vecchia e la nuova passphrase per il portamonete. - - - - Confirm wallet encryption - Conferma la cifratura del portamonete - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Si è sicuri di voler cifrare il portamonete? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: qualsiasi backup del portafoglio effettuato precedentemente dovrebbe essere sostituito con il file del portafoglio criptato appena generato. Per ragioni di sicurezza, i backup precedenti del file del portafoglio non criptato diventeranno inservibili non appena si inizi ad usare il nuovo portafoglio criptato. - - - - - Warning: The Caps Lock key is on! - Attenzione: tasto Blocco maiuscole attivo. - - - - - Wallet encrypted - Portamonete cifrato - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Cifratura del portamonete fallita - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Cifratura del portamonete fallita a causa di un errore interno. Il portamonete non è stato cifrato. - - - - - The supplied passphrases do not match. - Le passphrase inserite non corrispondono. - - - - Wallet unlock failed - Sblocco del portamonete fallito - - - - - - The passphrase entered for the wallet decryption was incorrect. - La passphrase inserita per la decifrazione del portamonete è errata. - - - - Wallet decryption failed - Decifrazione del portamonete fallita - - - - Wallet passphrase was successfully changed. - Passphrase del portamonete modificata con successo. - - - - ClientModel - - - Network Alert - Avviso di rete - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - Quantità: - - - - Bytes: - Byte: - - - - Amount: - Importo: - - - - Priority: - Priorità: - - - - Fee: - Commissione: - - - - Low Output: - Low Output: - - - - - no - no - - - - After Fee: - Dopo Commissione: - - - - Change: - Resto: - - - - (un)select all - (de)seleziona tutto - - - - Tree mode - Modalità Albero - - - - List mode - Modalità Lista - - - - Amount - Importo - - - - Label - - - - - Address - Indirizzo - - - - Date - Data - - - - Confirmations - Conferme: - - - - Confirmed - Confermato - - - - Priority - Priorità - - - - Copy address - Copia l'indirizzo - - - - Copy label - Copia l'etichetta - - - - - Copy amount - Copia l'importo - - - - Copy transaction ID - Copia l'ID transazione - - - - Copy quantity - Copia quantità - - - - Copy fee - Copia commissione - - - - Copy after fee - Copia dopo commissione - - - - Copy bytes - Copia byte - - - - Copy priority - Copia priorità - - - - Copy low output - Copia low output - - - - Copy change - Copia resto - - - - highest - massima - - - - high - alta - - - - medium-high - medio-alta - - - - medium - media - - - - low-medium - medio-bassa - - - - low - bassa - - - - lowest - infima - - - - - DUST - - - - - - yes - si - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (nessuna etichetta) - - - - change from %1 (%2) - resto da %1 (%2) - - - - (change) - (resto) - - - - EditAddressDialog - - - Edit Address - Modifica l'indirizzo - - - - &Label - &Etichetta - - - - The label associated with this address book entry - - - - - &Address - &Indirizzo - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nuovo indirizzo di ricezione - - - - New sending address - Nuovo indirizzo d'invio - - - - Edit receiving address - Modifica indirizzo di ricezione - - - - Edit sending address - Modifica indirizzo d'invio - - - - The entered address "%1" is already in the address book. - L'indirizzo inserito "%1" è già in rubrica. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Impossibile sbloccare il portamonete. - - - - New key generation failed. - Generazione della nuova chiave non riuscita. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nome del client - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/D - - - - Client version - Versione client - - - - &Information - &Informazione - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Versione OpenSSL in uso - - - - Using BerkeleyDB version - - - - - Startup time - Tempo di avvio - - - - Network - Rete - - - - Name - - - - - Number of connections - Numero connessioni - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Block chain - - - - Current number of blocks - Numero attuale di blocchi - - - - Estimated total blocks - Numero totale stimato di blocchi - - - - Last block time - Ora dell blocco piu recente - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Apri - - - - Command-line options - - - - - &Show - - - - - &Console - &Console - - - - Build date - Data di creazione - - - - Debug log file - File log del Debug - - - - Clear console - Svuota console - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Usa le frecce direzionali per navigare la cronologia, and <b>Ctrl-L</b> per cancellarla. - - - - Type <b>help</b> for an overview of available commands. - Scrivi <b>help</b> per un riassunto dei comandi disponibili - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Aperto fino a %1 - - - - Open for %n block(s) - - - - - conflicted - in conflitto - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/non confermato - - - - %1 confirmations - %1 conferme - - - - Status - Stato - - - - , broadcast through %n node(s) - , trasmesso attraverso %n nodo, trasmesso attraverso %n nodi - - - - Date - Data - - - - Source - Sorgente - - - - Generated - Generato - - - - - - From - Da - - - - - - - To - A - - - - - - - own address - proprio indirizzo - - - - - label - etichetta - - - - - - - - Credit - Credito - - - - matures in %n more block(s) - matura in %n ulteriore bloccomatura in altri %n blocchi - - - - not accepted - non accettate - - - - - - - Debit - Debito - - - - Transaction fee - Commissione transazione - - - - Net amount - Importo netto - - - - Message - Messaggio - - - - Comment - Commento - - - - Transaction ID - ID della transazione - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Informazione di debug - - - - Transaction - Transazione - - - - Inputs - Input - - - - Amount - Importo - - - - true - vero - - - - false - falso - - - - , has not been successfully broadcast yet - , non è stato ancora trasmesso con successo - - - - - unknown - sconosciuto - - - - TransactionDescDialog - - - Transaction details - Dettagli sulla transazione - - - - This pane shows a detailed description of the transaction - Questo pannello mostra una descrizione dettagliata della transazione - - - - TransactionTableModel - - - Date - Data - - - - Type - Tipo - - - - Address - Indirizzo - - - - Amount - Importo - - - - Open until %1 - Aperto fino a %1 - - - - Confirmed (%1 confirmations) - Confermato (%1 conferme) - - - - Open for %n more block(s) - Aperto per %n altro bloccoAperto per altri %n blocchi - - - - Narration - - - - - Offline - Offline - - - - Unconfirmed - Non confermato: - - - - Confirming (%1 of %2 recommended confirmations) - In conferma (%1 di %2 conferme raccomandate) - - - - Conflicted - In conflitto - - - - Immature (%1 confirmations, will be available after %2) - Immaturo (%1 conferme, sarà disponibile fra %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Questo blocco non è stato ricevuto da altri nodi e probabilmente non sarà accettato! - - - - Generated but not accepted - Generati, ma non accettati - - - - (n/a) - (N / a) - - - - Transaction status. Hover over this field to show number of confirmations. - Stato della transazione. Passare con il mouse su questo campo per vedere il numero di conferme. - - - - Date and time that the transaction was received. - Data e ora in cui la transazione è stata ricevuta. - - - - Type of transaction. - Tipo di transazione. - - - - Destination address of transaction. - Indirizzo di destinazione della transazione. - - - - Amount removed from or added to balance. - Importo rimosso o aggiunto al saldo. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Utilizzo: - - - - Send command to -server or shadowcoind - - - - - List commands - Lista comandi - - - - - Get help for a command - Aiuto su un comando - - - - - Options: - Opzioni: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - Specifica il file portafoglio (nella cartella dati) - - - - Specify data directory - Specifica la cartella dati - - - - - Set database cache size in megabytes (default: 25) - Imposta la dimensione cache del database in megabyte (predefinita: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Mantieni al massimo <n> connessioni ai peer (predefinite: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Connessione ad un nodo per ricevere l'indirizzo del peer, e disconnessione - - - - Specify your own public address - Specifica il tuo indirizzo pubblico - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Soglia di disconnessione dei peer di cattiva qualità (predefinita: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Numero di secondi di sospensione che i peer di cattiva qualità devono trascorrere prima di riconnettersi (predefiniti: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Errore riscontrato durante l'impostazione della porta RPC %u per l'ascolto su IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Accetta da linea di comando e da comandi JSON-RPC - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Esegui in background come demone e accetta i comandi - - - - - Use the test network - Utilizza la rete di prova - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Accetta connessioni dall'esterno (predefinito: 1 se no -proxy o -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Errore riscontrato durante l'impostazione della porta RPC %u per l'ascolto su IPv6, tornando su IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Attenzione: -paytxfee è molto alta. Questa è la commissione che si paga quando si invia una transazione. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Attenzione: errore di lettura di wallet.dat! Tutte le chiave lette correttamente, ma i dati delle transazioni o le voci in rubrica potrebbero mancare o non essere corretti. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Attenzione: wallet.dat corrotto, dati salvati! Il wallet.dat originale salvato come wallet.{timestamp}.bak in %s; se il tuo bilancio o le transazioni non sono corrette dovresti ripristinare da un backup. - - - - Attempt to recover private keys from a corrupt wallet.dat - Tenta di recuperare le chiavi private da un wallet.dat corrotto - - - - Block creation options: - Opzioni creazione blocco: - - - - Connect only to the specified node(s) - Connetti solo al nodo specificato - - - - Discover own IP address (default: 1 when listening and no -externalip) - Scopri proprio indirizzo IP (predefinito: 1 se in ascolto e no -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Impossibile mettersi in ascolto su una porta. Usa -listen=0 se vuoi usare questa opzione. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Buffer di ricezione massimo per connessione, <n>*1000 byte (predefinito: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Buffer di invio massimo per connessione, <n>*1000 byte (predefinito: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Connetti solo a nodi nella rete <net> (IPv4, IPv6 o Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Opzioni SSL: (vedi il wiki di Bitcoin per le istruzioni di configurazione SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Invia le informazioni di trace/debug alla console invece che al file debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Imposta dimensione minima del blocco in bytes (predefinita: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Riduci il file debug.log all'avvio del client (predefinito: 1 se non impostato -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Specifica il timeout di connessione in millisecondi (predefinito: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Usa UPnP per mappare la porta in ascolto (predefinito: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Usa UPnP per mappare la porta in ascolto (predefinito: 1 when listening) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Nome utente per connessioni JSON-RPC - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Attenzione: questa versione è obsoleta, aggiornamento necessario! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrotto, salvataggio fallito - - - - Password for JSON-RPC connections - Password per connessioni JSON-RPC - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Consenti connessioni JSON-RPC dall'indirizzo IP specificato - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Inviare comandi al nodo in esecuzione su <ip> (predefinito: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Esegui il comando quando il miglior block cambia(%s nel cmd è sostituito dall'hash del blocco) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Esegui comando quando una transazione del portafoglio cambia (%s in cmd è sostituito da TxID) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Aggiorna il wallet all'ultimo formato - - - - Set key pool size to <n> (default: 100) - Impostare la quantità di chiavi di riserva a <n> (predefinita: 100) - - - - Rescan the block chain for missing wallet transactions - Ripeti analisi della catena dei blocchi per cercare le transazioni mancanti dal portamonete - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Utilizzare OpenSSL (https) per le connessioni JSON-RPC - - - - - Server certificate file (default: server.cert) - File certificato del server (predefinito: server.cert) - - - - Server private key (default: server.pem) - Chiave privata del server (predefinito: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Questo messaggio di aiuto - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Impossibile collegarsi alla %s su questo computer (bind returned error %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Consenti ricerche DNS per aggiungere nodi e collegare - - - - - Loading addresses... - Caricamento indirizzi... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Errore caricamento wallet.dat: Wallet corrotto - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Errore caricamento wallet.dat - - - - Invalid -proxy address: '%s' - Indirizzo -proxy non valido: '%s' - - - - Unknown network specified in -onlynet: '%s' - Rete sconosciuta specificata in -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Versione -socks proxy sconosciuta richiesta: %i - - - - Cannot resolve -bind address: '%s' - Impossibile risolvere -bind address: '%s' - - - - Cannot resolve -externalip address: '%s' - Impossibile risolvere indirizzo -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Importo non valido per -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Importo non valido - - - - Insufficient funds - Fondi insufficienti - - - - Loading block index... - Caricamento dell'indice del blocco... - - - - Add a node to connect to and attempt to keep the connection open - Elérendő csomópont megadása and attempt to keep the connection open - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Caricamento portamonete... - - - - Cannot downgrade wallet - Non è possibile retrocedere il wallet - - - - Cannot initialize keypool - - - - - Cannot write default address - Non è possibile scrivere l'indirizzo predefinito - - - - Rescanning... - Ripetere la scansione... - - - - Done loading - Caricamento completato - - - - To use the %s option - Per usare la opzione %s - - - - Error - Errore - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Devi settare rpcpassword=<password> nel file di configurazione: %s Se il file non esiste, crealo con i permessi di amministratore - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_ja.ts b/src/qt/locale/umbra_ja.ts deleted file mode 100644 index 8c3661fcc6..0000000000 --- a/src/qt/locale/umbra_ja.ts +++ /dev/null @@ -1,3424 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - シャドーコインについて - - - - <b>ShadowCoin</b> version - <b>シャドーコイン</b>バージョン - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - コピーライト © 2009-2014 The Bitcoin developers -コピーライト © 2012-2014 The NovaCoin developers -コピーライト © 2014-2015 The BlackCoin developers - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - -これは実験ソフト. - -MIT/X11 ソフト免許の分散型, COPYING ファイルを一緒に見て <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - - -この製品には、OpenSSL Toolkitで使用するためにOpenSSL Projectによって開発されたソフトウェアが含ま (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) 暗号化 (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - AddressTableModel - - - Label - ラベル - - - - Address - アドレス - - - - pubkey - パブリックキー - - - - stealth - ステルス - - - - (no label) - (ラベル無し) - - - - Stealth Address - ステルスアドレス - - - - n/a - 該当無し - - - - AskPassphraseDialog - - - Passphrase Dialog - パスフレーズ ダイアログ - - - - Enter passphrase - パスフレーズを入力 - - - - New passphrase - 新しいパスフレーズ - - - - Repeat new passphrase - 新しいパスフレーズをもう一度 - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - ユーザアカウントはハッキングされたばい、瑣末のsendmoney無効にする。機密保護には効果はない。 - - - - For staking only - 賭けるのみ - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - ウォレットの新しいパスフレーズを入力してください。<br/><b>8個以上の単語か10個以上のランダムな文字</b>を使ってください。 - - - - Encrypt wallet - ウォレットを暗号化する - - - - This operation needs your wallet passphrase to unlock the wallet. - この操作はウォレットをアンロックするためにパスフレーズが必要です。 - - - - Unlock wallet - ウォレットをアンロックする - - - - This operation needs your wallet passphrase to decrypt the wallet. - この操作はウォレットの暗号化解除のためにパスフレーズが必要です。 - - - - Decrypt wallet - ウォレットの暗号化を解除する - - - - Change passphrase - パスフレーズの変更 - - - - Enter the old and new passphrase to the wallet. - 新旧両方のパスフレーズを入力してください。 - - - - Confirm wallet encryption - ウォレットの暗号化を確認する - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - ご注意:暗号化したウォレットのパスワードを忘れたばい、b>すべてのコインを失う</b>! - - - - Are you sure you wish to encrypt your wallet? - ウォレットを暗号化、よろしいですか? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - 重要: 過去のウォレット ファイルのバックアップは、暗号化された新しいウォレット ファイルに取り替える必要があります。セキュリティ上の理由により、暗号化された新しいウォレットを使い始めると、暗号化されていないウォレット ファイルのバックアップはすぐに使えなくなります。 - - - - - Warning: The Caps Lock key is on! - 警告: Caps Lock キーがオンになっています! - - - - - Wallet encrypted - ウォレットは暗号化されました - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ただいま、暗号化手順を完成するため、ブラックコインQTは閉じます。尚、ウォレットを暗号化をされたにしても、PCのウイルスから盗難防止の報償できないことを、ご理解をお願い足します。 - - - - - - - Wallet encryption failed - ウォレットの暗号化に失敗しました - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - 内部エラーによりウォレットの暗号化が失敗しました。ウォレットは暗号化されませんでした。 - - - - - The supplied passphrases do not match. - パスフレーズが同じではありません。 - - - - Wallet unlock failed - ウォレットのアンロックに失敗しました - - - - - - The passphrase entered for the wallet decryption was incorrect. - ウォレットの暗号化解除のパスフレーズが正しくありません。 - - - - Wallet decryption failed - ウォレットの暗号化解除に失敗しました - - - - Wallet passphrase was successfully changed. - ウォレットのパスフレーズの変更が成功しました。 - - - - ClientModel - - - Network Alert - ネットワーク警告 - - - - CoinControlDialog - - - Coin Control - コインのコントロール - - - - Quantity: - 数量: - - - - Bytes: - バイト - - - - Amount: - 総額: - - - - Priority: - 優先: - - - - Fee: - 料金: - - - - Low Output: - アウトプット低い: - - - - - no - いいえ - - - - After Fee: - 料金の後 - - - - Change: - お釣り: - - - - (un)select all - すべてを選択か選択を解除 - - - - Tree mode - 木モード - - - - List mode - リストモード - - - - Amount - 総額 - - - - Label - レベル - - - - Address - アドレス - - - - Date - 日付 - - - - Confirmations - 検証済みの数 - - - - Confirmed - 検証済 - - - - Priority - 優先 - - - - Copy address - アドレスをコピー - - - - Copy label - ラベルをコピー - - - - - Copy amount - 総額のコピー - - - - Copy transaction ID - 処理のIDをコピー - - - - Copy quantity - 数量をコピー - - - - Copy fee - 料金をコピー - - - - Copy after fee - 料金の後をコピー - - - - Copy bytes - バイトをコピー - - - - Copy priority - 優先をコピー - - - - Copy low output - アウトプット低いをコピー - - - - Copy change - お釣りをコピー - - - - highest - 最高 - - - - high - 高い - - - - medium-high - 中高 - - - - medium - - - - - low-medium - 中低 - - - - low - 低い - - - - lowest - 最低 - - - - - DUST - ほこり - - - - - yes - はい - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - このラベルが赤くなったら、処理の大きさは10000バイトより大きいです。 - -少なくとも%1 KBあたりの料金は必要となります。 - -入力データによって、料金の+/-1 バイトが可能です。 - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - 高い優先ありの処理の方はブロックに書き込み可能性が高い。 - -このラベルは優先の設定は中より低いです。 - -少なくとも%1 KBあたりの料金は必要となります。 - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - 任意の受信者は%1より少ない額をもらったばい、このラベルは赤くなる。 - -少なくとも%2の料金は必要となります。 - -最小なリレー料金 x 0.546より下の額は、ほこりになります。 - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - このラベルが赤くなたら、お釣りは%1より少ない。 - -少なくとも%2の料金は必要となります。 - - - - - (no label) - (ラベル無し) - - - - change from %1 (%2) - %1 (%2)からお釣り - - - - (change) - (お釣り) - - - - EditAddressDialog - - - Edit Address - アドレスの編集 - - - - &Label - ラベル(&L) - - - - The label associated with this address book entry - このアドレス帳の入力のラベル - - - - &Address - アドレス帳 (&A) - - - - The address associated with this address book entry. This can only be modified for sending addresses. - このアドレス帳の入力のアドレス。通信アドレスした変更ができない。 - - - - &Stealth Address - ステルスアドレス - - - - New receiving address - 新しい受信アドレス - - - - New sending address - 新しい送信アドレス - - - - Edit receiving address - 受信アドレスを編集 - - - - Edit sending address - 送信アドレスを編集 - - - - The entered address "%1" is already in the address book. - 入力されたアドレス "%1" は既にアドレス帳にあります。 - - - - The entered address "%1" is not a valid ShadowCoin address. - 入力されたアドレス "%1" 、有効なブラックコインアドレスではない。 - - - - Could not unlock wallet. - ウォレットをアンロックできませんでした。 - - - - New key generation failed. - 新しいキーの生成に失敗しました。 - - - - GUIUtil::HelpMessageBox - - - version - バージョン - - - - - Shadow - シャドー - - - - Usage: - 使用法 - - - - command-line options - コマンドラインのオプション - - - - UI options - UIのオプション - - - - Set language, for example "de_DE" (default: system locale) - 言語の設定、例: "de_DE" (デフォルト:システムのロケール) - - - - Start minimized - 最小化でスタート - - - - Show splash screen on startup (default: 1) - スタートでスプラッシュスクリーンを表示(デフォルト:1) - - - - MessageModel - - - Type - タイプ - - - - Sent Date Time - 送信時間 - - - - Received Date Time - 受信日時 - - - - Label - ラベル - - - - To Address - 送信アドレス - - - - From Address - 受信アドレス - - - - Message - メッセージ - - - - Send Secure Message - セキュアなメッセージを送信 - - - - Send failed: %1. - 送信を失敗しました:%1 - - - - - (no label) - ラベル無し - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - アドレス・ホストネーム - - - - User Agent - ユーザーエージエント - - - - Ping Time - Pingの時間 - - - - QObject - - - %1 d - %1 日 - - - - %1 h - %1 時 - - - - %1 m - %1 分 - - - - - %1 s - %1 秒 - - - - None - 無し - - - - N/A - 該当無し - - - - %1 ms - - - - - RPCConsole - - - Client name - クライアント名 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - クライアントのバージョン - - - - &Information - 情報 (&I) - - - - Shadow - Debug window - シャドー ディバッグウインドー - - - - Shadow Core - シャドーコアー - - - - Using OpenSSL version - 使用中の OpenSSL のバージョン - - - - Using BerkeleyDB version - BerkeleyDB バージョンを使う - - - - Startup time - 起動した日時 - - - - Network - ネットワーク - - - - Name - 名前 - - - - Number of connections - 接続数 - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - 可能なシャドーコマンドラインオプションのリストを取得するにはシャドーヘルプメッセージを表示します。 - - - - &Network Traffic - &ネットワークトラフィック - - - - &Clear - &クリア - - - - Totals - 会計 - - - - - In: - 内: - - - - - Out: - 外: - - - - &Peers - &ピアーズ - - - - - - Select a peer to view detailed information. - 詳細情報を表示するためにピアーを選択します。 - - - - Peer ID - ピアーID - - - - Direction - - - - - Version - バージョン - - - - User Agent - ユーザーエージエント - - - - Services - サービス - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - ブロック チェーン - - - - Current number of blocks - 現在のブロック数 - - - - Estimated total blocks - 推定総ブロック数 - - - - Last block time - 最終ブロックの日時 - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - 開く (&O) - - - - Command-line options - コマンドラインのオプション - - - - &Show - (&S)表示 - - - - &Console - コンソール (&C) - - - - Build date - ビルドの日付 - - - - Debug log file - デバッグ用ログファイル - - - - Clear console - コンソールをクリア - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - 上下の矢印で履歴をたどれます。 <b>Ctrl-L</b> でスクリーンを消去できます。 - - - - Type <b>help</b> for an overview of available commands. - 使用可能なコマンドを見るには <b>help</b> と入力します。 - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - ステークしません - - - - Received with - - - - - Received from - - - - - Sent to - 送り先 - - - - Payment to yourself - 自身のお支払い - - - - Mined - マインされました - - - - Received shadow - シャドーの受信 - - - - Sent shadow - シャドーの送信 - - - - Other - その他 - - - - TrafficGraphWidget - - - KB/s - KB/s - - - - TransactionDesc - - - Open until %1 - ユニット %1 を開く - - - - Open for %n block(s) - %n ブロックに開いている - - - - conflicted - 相違 - - - - %1/offline - %1/オフライン - - - - %1/unconfirmed - %1/未検証 - - - - %1 confirmations - %1 確認 - - - - Status - ステータス - - - - , broadcast through %n node(s) - %n ノードにブロードキャスト - - - - Date - 日付 - - - - Source - ソース - - - - Generated - 生成された - - - - - - From - 送信 - - - - - - - To - 受信 - - - - - - - own address - 自分のアドレス - - - - - label - ラベル - - - - - - - - Credit - クレジット - - - - matures in %n more block(s) - %n 以上のブロックが満期 - - - - not accepted - 承認されなかった - - - - - - - Debit - 引き落とし額 - - - - Transaction fee - 処理の手数料 - - - - Net amount - 正味金額 - - - - Message - メッセージ - - - - Comment - コメント - - - - Transaction ID - 処理のID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - デバッグ情報 - - - - Transaction - 処理 - - - - Inputs - 入力 - - - - Amount - 総額 - - - - true - 正しい - - - - false - 正しくない - - - - , has not been successfully broadcast yet - まだブロードキャストが成功していません - - - - - unknown - 未確認 - - - - TransactionDescDialog - - - Transaction details - 処理の詳細 - - - - This pane shows a detailed description of the transaction - ここでは処理の詳細を表示しています - - - - TransactionTableModel - - - Date - 日付 - - - - Type - タイプ - - - - Address - Helbidea - - - - Amount - 総額 - - - - Open until %1 - ユニット %1 を開く - - - - Confirmed (%1 confirmations) - 検証されました (%1 検証済み) - - - - Open for %n more block(s) - %n 以上のブロックを開く - - - - Narration - - - - - Offline - オフライン - - - - Unconfirmed - 未検証 - - - - Confirming (%1 of %2 recommended confirmations) - 検証最中 (%1 / %2 の進めている検証済み) - - - - Conflicted - 相違 - - - - Immature (%1 confirmations, will be available after %2) - 未熟 (%1 検証,%2の後可用ができる) - - - - This block was not received by any other nodes and will probably not be accepted! - このブロックは他のどのノードによっても受け取られないで、多分受け入れられないでしょう! - - - - Generated but not accepted - 生成されましたが承認されませんでした - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - 処理の状況。この欄の上にカーソルを置くと検証の数を表示します。 - - - - Date and time that the transaction was received. - 処理を受信した日時。 - - - - Type of transaction. - 処理の種類。 - - - - Destination address of transaction. - 処理の宛先アドレス。 - - - - Amount removed from or added to balance. - 残高に追加または削除された総額。 - - - - WalletModel - - - - Sending... - 通信中... - - - - bitcoin-core - - - ShadowCoin version - ブラックコインバージョン - - - - Usage: - 使用法: - - - - Send command to -server or shadowcoind - -server か shadowcoindへコマンドを送る。 - - - - List commands - コマンド一覧 - - - - Get help for a command - コマンドのヘルプ - - - - Options: - オプション: - - - - Specify configuration file (default: shadowcoin.conf) - 設定ファイルを特定する (デファルト: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - pid ファイルを特定する (デフォルト: shadowcoind.pid) - - - - Specify wallet file (within data directory) - ウォレットのファイルを指定 (データ・ディレクトリの中に) - - - - Specify data directory - データ ディレクトリの指定 - - - - Set database cache size in megabytes (default: 25) - データベースのキャッシュサイズをメガバイトで設定 (初期値: 25) - - - - Set database disk log size in megabytes (default: 100) - メガバイトでのデータベースのログザイズの大きさの設定(デファルト:100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - <port> で 接続をリスン (デフォルト: 51737かtestnet は 51997) - - - - Maintain at most <n> connections to peers (default: 125) - ピアの最大接続数 (初期値: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - ピア アドレスを取得するためにノードに接続し、そして切断します - - - - Specify your own public address - あなた自身のパブリックなアドレスを指定 - - - - Bind to given address. Use [host]:port notation for IPv6 - アドレスに結ぶ。IPv6のばい、[host]:port 表記法を使ってください。 - - - - Stake your coins to support network and gain reward (default: 1) - 褒奨金をもらうためと、ブラックコインネットワークをサッポートするために、コインを賭ける(デファルト:1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - 不正なピアを切断するためのしきい値 (初期値: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - 不正なピアを再接続するまでの秒数 (初期値: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - IPv4 でリスンする RPC ポート %u の設定中にエラーが発生しました: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - ブロックとアドレスのデータベースを切り離す。この設定はシャットダウンの時間を伸ばさせます。(デファルト:0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - エラー:処理は拒否されました。ウォレットのコインをすでに費やした可能性で、wallet.datのコピーで費やしたが、現行のwallet.datとはアップデートされていない。 - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - エラー:額,複雑,最近もらった資金、どれかの理由で処理は少なくとも %sの料金が必要です。 - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - <port> で JSON-RPC 接続をリスン (デフォルト: 51736かtestnet は 51996) - - - - Accept command line and JSON-RPC commands - コマンドラインと JSON-RPC コマンドを許可 - - - - Error: Transaction creation failed - エラー:処理を失敗しました。 - - - - Error: Wallet locked, unable to create transaction - エラー:ウォレットはロックされたために、処理を作られなかった。 - - - - Importing blockchain data file. - ブロックチェインのファイルを読み込んでいる。 - - - - Importing bootstrap blockchain data file. - ブートストラップなブロックチェインのファイルを読み込んでいる。 - - - - Run in the background as a daemon and accept commands - デーモンとしてバックグランドで実行しコマンドを許可 - - - - Use the test network - テストのためのネットワークを使用 - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - 外部からの接続を許可 (初期値: -proxy または -connect を使用していない場合は1) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - IPv6 でリスンする RPC ポート %u の設定中にエラーが発生したので IPv4 に切り替えます: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - データベース%sを初期化するにエラーになりました。直すためにディレクトリをバックアップして、そしてwallet.dat意外のファイルを取り除いてください。 - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - バイトで、最優先、低料金の処理の最大サイズの設定(デファルト:27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - 警告: -paytxfee が非常に高く設定されています! これは処理を送信する場合に支払う取引手数料です。 - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. -  警告:コンピュータの日付と時間を調べてください。時間ずらしかったばい、ブラックコイン QTは正しく行動しない。 - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - 警告: wallet.dat の読み込みエラー! すべてのキーは正しく読み取れますが、処理のデータやアドレス帳のエントリが失われたか、正しくない可能性があります。 - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - 警告: wallet.dat のデータはの汚染で、でデータを復旧しました! オリジナルの wallet.dat は wallet.{timestamp}.bak として %s に保存されました; もしもあなたの残高や処理が正しくないばい、バックアップから復元してください。 - - - - Attempt to recover private keys from a corrupt wallet.dat - 壊れた wallet.dat から秘密鍵を復旧することを試す - - - - Block creation options: - ブロック作成オプション: - - - - Connect only to the specified node(s) - 指定したノードだけに接続 - - - - Discover own IP address (default: 1 when listening and no -externalip) - 自分の IP アドレスを発見 (初期値: リスン中と -externalip を使用していない場合は1) - - - - Failed to listen on any port. Use -listen=0 if you want this. - ポートのリスンに失敗しました。必要であれば -listen=0 を使用してください。 - - - - Find peers using DNS lookup (default: 1) - DNSルックアップでピーアを探す(デファルト:1) - - - - Sync checkpoints policy (default: strict) - 同期チェックポイント方針(デファルト:厳しい) - - - - Invalid -tor address: '%s' - 無効なTORアドレス: '%s' - - - - Invalid amount for -reservebalance=<amount> - -reservebalance=<amount>の額は無効です - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - 接続毎の最大受信バッファ <n>*1000 バイト (初期値: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - 接続毎の最大送信バッファ <n>*1000 バイト (初期値: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - <net> (IPv4, IPv6, Tor) ネットワーク内のノードだけに接続する - - - - Output extra debugging information. Implies all other -debug* options - 余分なデバッグ情報を出力する。この設定はすべてのdebug* の設定を有効にする。 - - - - Output extra network debugging information - 余分なネットワークのデバッグ情報を出力する - - - - Prepend debug output with timestamp - デバッグのアウトプットはタイムスタンプで先頭に追加する - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL オプション: (SSLのセットアップ手順は Bitcoin Wiki をご覧下さい) - - - - Select the version of socks proxy to use (4-5, default: 5) - SOCKSプロクシーのバージョンを選択する (4-5、 デファルト: 5) - - - - Send trace/debug info to console instead of debug.log file - トレース/デバッグ情報を debug.log ファイルの代わりにコンソールへ送る - - - - Send trace/debug info to debugger - デバッガへ追跡とデバッグ情報を送る。 - - - - Set maximum block size in bytes (default: 250000) - 最大ブロックサイズをバイトで設定 (初期値: 250000) - - - - Set minimum block size in bytes (default: 0) - 最小ブロックサイズをバイトで設定 (初期値: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - クライアント起動時に debug.log ファイルを縮小 (初期値: -debug オプションを指定しない場合は1) - - - - Specify connection timeout in milliseconds (default: 5000) - 接続のタイムアウトをミリセコンドで指定 (初期値: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - チェックポイントを署名できません。checkpointkeyは違いますか。 - - - - - Use UPnP to map the listening port (default: 0) - リスン ポートの割当に UPnP を使用 (初期値: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - リスン ポートの割当に UPnP を使用 (初期値: リスン中は1) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - プロクシーでTORヒドゥンサービス(TOR Hidden Services)を接続する(デファルト:-proxyと同じ) - - - - Username for JSON-RPC connections - JSON-RPC 接続のユーザー名 - - - - Verifying database integrity... - データベースの保全性を確認最中... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - 警告:シンクロナイズドチェックポイント違反を検出したが、チェックポイントを飛ばした。 - - - - Warning: Disk space is low! - 警告:ディスクの空き領域は少ない! - - - - Warning: This version is obsolete, upgrade required! - 警告: このバージョンは古いのでアップグレードが必要です! - - - - wallet.dat corrupt, salvage failed - wallet.dat が壊れ、復旧に失敗しました - - - - Password for JSON-RPC connections - JSON-RPC 接続のパスワード - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, 設定ファイル:%sでrpcpasswordのパスワードを入力しなければならい - -このランダムパスワードのおすすめです: -rpcuser=shadowcoinrpc -rpcpassword=%s -(このパサワードを覚えなくても大丈夫です) -ユーザ名とパスワードは同じであってはなりません。 -ファイルは存在しないばいは、所有者が読み取り可能な専用のファイルを作成してください。 -問題のことを知らせるために、alertnotifyの設定を有効にしたほうがいいです。 -例:alertnotify=echo %%s | mail -s "ブラックコイン警告" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - インターネットリレーチャット(IRC)でピアアを探す。(デファルト:1 {0}?) - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - 他のノードと時刻の同期する。確な時刻のコンピューターのばい、無効する。例:NTP同期設定有効ある(デファルト:1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - 処理を作ると、この額より少ない数字を無視する (デファルト:0.01) - - - - Allow JSON-RPC connections from specified IP address - 指定した IP アドレスからの JSON-RPC 接続を許可 - - - - Send commands to node running on <ip> (default: 127.0.0.1) - <ip> (初期値: 127.0.0.1) で実行中のノードにコマンドを送信 - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - 最良のブロックに変更する際にコマンドを実行 (cmd の %s はブロック ハッシュに置換される) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - ウォレットの処理を変更する際にコマンドを実行 (cmd の %s は TxID に置換される) - - - - Require a confirmations for change (default: 0) - 変更するために、確認を必要とする (デファルト:0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - 処理のスクリプトコマンドで標準的なPUSHオペレータを施行する(デファルト:1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - 関連した警告をもらったら、コマンドを実行する (cmdの中で%sにメッセージを交換される) - - - - Upgrade wallet to latest format - ウォレットを最新のフォーマットにアップグレード - - - - Set key pool size to <n> (default: 100) - key pool のサイズを <n> (初期値: 100) にセット - - - - Rescan the block chain for missing wallet transactions - 失ったウォレットの処理のブロック チェーンを再スキャン - - - - How many blocks to check at startup (default: 2500, 0 = all) - スタートのときに、いくつのブロックを調べます (デファルト:2500、 0 = すべて ) - - - - How thorough the block verification is (0-6, default: 1) - ブロック検証の徹底の程度 (0-6 、デファルト:1) - - - - Imports blocks from external blk000?.dat file - 外部 blk000?.dat ファイルからブロックを読み込む。 - - - - Use OpenSSL (https) for JSON-RPC connections - JSON-RPC 接続に OpenSSL (https) を使用 - - - - Server certificate file (default: server.cert) - サーバ証明書ファイル (初期値: server.cert) - - - - Server private key (default: server.pem) - サーバの秘密鍵 (初期値: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - 許容可能な暗号 (デフォルト: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - エラー:アンロックされたウォレットは賭けるためだけで、処理を作られない。 - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - 警告:無効なチェックポイントを見つかりました!表示された処理は正しくない可能性がある!アップグレードするか、デベロッパーに報告する必要があります。 - - - - This help message - このヘルプ メッセージ - - - - Wallet %s resides outside data directory %s. - %sウォレットはディレクトリ%sの外にあります。 - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - %sディレクトリにをロックオンできない。ブラックコインQTは、もう発行してるでしょう。 - - - - ShadowCoin - ブラックコイン - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - このコンピュータの %s にバインドすることができません (バインドが返したエラーは %d, %s) - - - - Connect through socks proxy - SOCKSプロキシで接続する - - - - Allow DNS lookups for -addnode, -seednode and -connect - -addnode, -seednode と -connect で DNS ルックアップを許可する - - - - Loading addresses... - アドレスを読み込んでいます... - - - - Error loading blkindex.dat - blkindex.dat 読み込みエラー - - - - Error loading wallet.dat: Wallet corrupted - wallet.dat 読み込みエラー: ウォレットが壊れました - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - wallet.dat 読み込みエラー:  ブラックコインQTの最新バージョンが必要です - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - ウォレットのデータをリライトしなければならい:ブラックコインQTをリスタートしてください - - - - Error loading wallet.dat - wallet.dat 読み込みエラー - - - - Invalid -proxy address: '%s' - 無効な -proxy アドレス: '%s' - - - - Unknown network specified in -onlynet: '%s' - -onlynet で指定された '%s' は未知のネットワークです - - - - Unknown -socks proxy version requested: %i - -socks で指定された %i は未知のバージョンです - - - - Cannot resolve -bind address: '%s' - -bind のアドレス '%s' を解決できません - - - - Cannot resolve -externalip address: '%s' - -externalip のアドレス '%s' を解決できません - - - - Invalid amount for -paytxfee=<amount>: '%s' - -paytxfee=<amount> の額 '%s' が無効です - - - - Error: could not start node - エラー:ノードの開始ができなった - - - - Sending... - 通信中... - - - - Invalid amount - 無効な総額 - - - - Insufficient funds - 残高不足 - - - - Loading block index... - ブロック インデックスを読み込んでいます... - - - - Add a node to connect to and attempt to keep the connection open - 接続するノードを追加し接続を持続するように試します - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - このコンピューターで%sに結ぶことができなかった。ブラックコインQTは、もう発行してるでしょう。 - - - - Fee per KB to add to transactions you send - 送る処理を足して、KBあたりの料金 - - - - Invalid amount for -mininput=<amount>: '%s' - -mininput=<amount>: '%s'の額は無効です - - - - Loading wallet... - ウォレットを読み込んでいます... - - - - Cannot downgrade wallet - ウォレットのダウングレードはできません - - - - Cannot initialize keypool - キースペースをイニシャライズをする - - - - Cannot write default address - 初期値のアドレスを書き込むことができません - - - - Rescanning... - 再スキャン中... - - - - Done loading - 読み込み完了 - - - - To use the %s option - %s オプションを使うには - - - - Error - エラー - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - rpcpassword=<password> を設定ファイルでセットしてください: -%s -ファイルが無い場合は、オーナーだけが読み取れる権限でファイルを作成してください。 - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_ka.ts b/src/qt/locale/umbra_ka.ts deleted file mode 100644 index c62920aad3..0000000000 --- a/src/qt/locale/umbra_ka.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - ნიშნული - - - - Address - მისამართი - - - - pubkey - - - - - stealth - - - - - (no label) - (არ არის ნიშნული) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - ფრაზა-პაროლის დიალოგი - - - - Enter passphrase - შეიყვანეთ ფრაზა-პაროლი - - - - New passphrase - ახალი ფრაზა-პაროლი - - - - Repeat new passphrase - გაიმეორეთ ახალი ფრაზა-პაროლი - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - შეიყვანეთ საფულის ახალი ფრაზა-პაროლი.<br/>ფრაზა-პაროლი შეადგინეთ <b>არანაკლებ 10 შემთხვევითი სიმბოლოსაგან</b>, ან <b>რვა და მეტი სიტყვისაგან</b>. - - - - Encrypt wallet - საფულის დაშიფრვა - - - - This operation needs your wallet passphrase to unlock the wallet. - ეს ოპერაცია მოითხოვს თქვენი საფულის ფრაზა-პაროლს საფულის განსაბლოკად. - - - - Unlock wallet - საფულის განბლოკვა - - - - This operation needs your wallet passphrase to decrypt the wallet. - ეს ოპერაცია მოითხოვს თქვენი საფულის ფრაზა-პაროლს საფულის გასაშიფრად. - - - - Decrypt wallet - საფულის გაშიფრვა - - - - Change passphrase - ფრაზა-პაროლის შეცვლა - - - - Enter the old and new passphrase to the wallet. - შეიყვანეთ საფულის ძველი და ახალი ფრაზა-პაროლი. - - - - Confirm wallet encryption - დაადასტურეთ საფულის დაშიფრვა - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - დარწმუნებული ხართ, რომ გინდათ საფულის დაშიფრვა? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - მნიშვნელოვანია: თქვენი საფულის ყველა ადრინდელი არქივი შეიცვლება ახლადგენერირებული დაშიფრული საფულის ფაილით. უსაფრთხოების მოსაზრებებით დაუშიფრავი საფულის ძველი არქივები ძალას დაკარგავს, როგორც კი დაიწყებთ ახალი, დაშიფრული საფულის გამოყენებას. - - - - - Warning: The Caps Lock key is on! - ყურადღება: ჩართულია Caps Lock რეჟიმი! - - - - - Wallet encrypted - საფულე დაშიფრულია - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - ვერ მოხერხდა საფულის დაშიფრვა - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - საფულის დაშიფრვა ვერ მოხერხდა სისტემაში შეცდომის გამო. თქვენი საფულე არ არის დაშფრული. - - - - - The supplied passphrases do not match. - ფრაზა-პაროლები არ ემთხვევა ერთმანეთს. - - - - Wallet unlock failed - საფულის განბლოკვა ვერ მოხერხდა - - - - - - The passphrase entered for the wallet decryption was incorrect. - საფულის განშიფრვის ფრაზა-პაროლი არაწორია - - - - Wallet decryption failed - საფულის განშიფრვა ვერ მოხერხდა - - - - Wallet passphrase was successfully changed. - საფულის ფრაზა-პაროლი შეცვლილია. - - - - ClientModel - - - Network Alert - ქსელური განგაში - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - რაოდენობა: - - - - Bytes: - ბაიტები: - - - - Amount: - თანხა: - - - - Priority: - პრიორიტეტი: - - - - Fee: - საკომისიო: - - - - Low Output: - ქვედა ზღვარი: - - - - - no - არა - - - - After Fee: - დამატებითი საკომისიო: - - - - Change: - ხურდა: - - - - (un)select all - ყველას მონიშვნა/(მოხსნა) - - - - Tree mode - განტოტვილი - - - - List mode - სია - - - - Amount - რაოდენობა - - - - Label - - - - - Address - მისამართი - - - - Date - თარიღი - - - - Confirmations - დადასტურება - - - - Confirmed - დადასტურებულია - - - - Priority - პრიორიტეტი - - - - Copy address - მისამართის კოპირება - - - - Copy label - ნიშნულის კოპირება - - - - - Copy amount - თანხის კოპირება - - - - Copy transaction ID - ტრანსაქციის ID-ს კოპირება - - - - Copy quantity - რაოდენობის კოპირება - - - - Copy fee - საკომისიოს კოპირება - - - - Copy after fee - დამატებითი საკომისიოს კოპირება - - - - Copy bytes - ბაიტების კოპირება - - - - Copy priority - პრიორიტეტის კოპირება - - - - Copy low output - ქვედა ზღვრის კოპირება - - - - Copy change - ხურდის კოპირება - - - - highest - უმაღლესი - - - - high - მაღალი - - - - medium-high - საშუალოზე მაღალი - - - - medium - საშუალო - - - - low-medium - საშუალოზე დაბალი - - - - low - დაბალი - - - - lowest - უდაბლესი - - - - - DUST - - - - - - yes - კი - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (არ არის ნიშნული) - - - - change from %1 (%2) - ხურდა %1-დან (%2) - - - - (change) - (ხურდა) - - - - EditAddressDialog - - - Edit Address - მისამართის შეცვლა - - - - &Label - ნიშნუ&ლი - - - - The label associated with this address book entry - - - - - &Address - მის&ამართი - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - ახალი მიღების მისამართი - - - - New sending address - ახალი გაგზავნის მისამართი - - - - Edit receiving address - მიღების მისამართის შეცვლა - - - - Edit sending address - გაგზავნის მისამართის შეცვლა - - - - The entered address "%1" is already in the address book. - მისამართი "%1" უკვე არის მისამართების წიგნში. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - საფულის განბლოკვა ვერ მოხერხდა. - - - - New key generation failed. - ახალი გასაღების გენერირება ვერ მოხერხდა - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - კლიენტი - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - მიუწვდ. - - - - Client version - კლიენტის ვერსია - - - - &Information - &ინფორმაცია - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - OpenSSL-ის ვერსია - - - - Using BerkeleyDB version - - - - - Startup time - სტარტის დრო - - - - Network - ქსელი - - - - Name - - - - - Number of connections - შეერთებების რაოდენობა - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - ბლოკთა ჯაჭვი - - - - Current number of blocks - ბლოკების მიმდინარე რაოდენობა - - - - Estimated total blocks - ბლოკების სავარაუდო რაოდენობა - - - - Last block time - ბოლო ბლოკის დრო - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &შექმნა - - - - Command-line options - - - - - &Show - - - - - &Console - &კონსოლი - - - - Build date - შექმნის დრო - - - - Debug log file - დახვეწის ლოგ-ფაილი - - - - Clear console - კონსოლის გასუფთავება - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - კლავიშები "ზევით" და "ქვევით" - ისტორიაში მოძრაობა, <b>Ctrl-L</b> - ეკრანის გასუფთავება. - - - - Type <b>help</b> for an overview of available commands. - აკრიფეთ <b>help</b> ფაშვებული ბრძანებების სანახავად. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - ღია იქნება სანამ %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/გათიშულია - - - - %1/unconfirmed - %1/დაუდასტურებელია - - - - %1 confirmations - %1 დადასტურებულია - - - - Status - სტატუსი - - - - , broadcast through %n node(s) - - - - - Date - თარიღი - - - - Source - წყარო - - - - Generated - გენერირებულია - - - - - - From - გამგზავნი - - - - - - - To - მიმღები - - - - - - - own address - საკუთარი მისამართი - - - - - label - ნიშნული - - - - - - - - Credit - კრედიტი - - - - matures in %n more block(s) - - - - - not accepted - უარყოფილია - - - - - - - Debit - დებიტი - - - - Transaction fee - ტრანსაქციის საფასური - საკომისიო - - - - Net amount - სუფთა თანხა - - - - Message - მესიჯი - - - - Comment - შენიშვნა - - - - Transaction ID - ტრანსაქციის ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - დახვეწის ინფორმაცია - - - - Transaction - ტრანსაქცია - - - - Inputs - ხარჯები - - - - Amount - თანხა - - - - true - ჭეშმარიტი - - - - false - მცდარი - - - - , has not been successfully broadcast yet - , დაგზავნა არ არის წარმატებით დასრულებული - - - - - unknown - უცნობია - - - - TransactionDescDialog - - - Transaction details - ტრანსაქციის დეტალები - - - - This pane shows a detailed description of the transaction - ტრანსაქციის დაწვრილებითი აღწერილობა - - - - TransactionTableModel - - - Date - თარიღი - - - - Type - ტიპი - - - - Address - მისამართი - - - - Amount - რაოდენობა - - - - Open until %1 - ღია იქნება სანამ %1 - - - - Confirmed (%1 confirmations) - დადასტურებულია (%1დასტური) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - არ არის მომწიფებული (%1 დასტური, საჭიროა სულ %2) - - - - This block was not received by any other nodes and will probably not be accepted! - ეს ბლოკი არ არის მიღებული არცერთი კვანძის მიერ და სავარაუდოდ უარყოფილია! - - - - Generated but not accepted - გენერირებულია, მაგრამ უარყოფილია - - - - (n/a) - (მიუწვდ.) - - - - Transaction status. Hover over this field to show number of confirmations. - ტრანსაქციის სტატუსი. ველზე კურსორის შეყვანისას გამოჩნდება დასტურების რაოდენობა. - - - - Date and time that the transaction was received. - ტრანსაქციის მიღების თარიღი და დრო. - - - - Type of transaction. - ტრანსაქციის ტიპი. - - - - Destination address of transaction. - ტრანსაქიის დანიშნულების მისამართი. - - - - Amount removed from or added to balance. - ბალანსიდან მოხსნილი ან დამატებული თანხა. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - გამოყენება: - - - - Send command to -server or shadowcoind - - - - - List commands - ბრძანებები - - - - Get help for a command - ბრძანების აღწერილობა - - - - Options: - ოპციები: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - მიუთითეთ საფულის ფაილი (კატალოგში) - - - - Specify data directory - მიუთითეთ მონაცემთა კატალოგი - - - - Set database cache size in megabytes (default: 25) - მონაცემთა ბაზის ქეშის ზომა მეგაბაიტებში (ნაგულისხმევია 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - არაუმეტეს <n> შეერთებისა პირებზე (ნაგულისხმევი: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - მიერთება კვანძთან, პირების მისამართების მიღება და გათიშვა - - - - Specify your own public address - მიუთითეთ თქვენი საჯარო მისამართი - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - არასწორად მოქმედი პირების გათიშვის ზღვარი (ნაგულისხმევი:100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - არასწორად მოქმედი პირების ბლოკირების დრო წამებში (ნაგულისხმევი: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - შეცდომა %u RPC-პორტის მიყურადების ჩართვისას IPv4 მისამართზე: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - საკომანდო სტრიქონისა და JSON-RPC-კომამდების ნებართვა - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - რეზიდენტულად გაშვება და კომანდების მიღება - - - - Use the test network - სატესტო ქსელის გამოყენება - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - გარედან შეერთებების დაშვება (ნაგულისხმევი: 1 თუ არ გამოიყენება -proxy ან -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - შეცდომა %u RPC-პორტის მიყურადების ჩართვისას IPv6 მისამართზე, ვბრუნდებით IPv4-ზე : %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - ყურადღება: ძალიან მაღალია -paytxfee - საკომისო, რომელსაც თქვენ გადაიხდით ამ ტრანსაქციის გაგზავნის საფასურად. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - ყურადღება: არ იკითხება wallet.dat! ყველა გასაღები წაკითხულია, მაგრამ გამორჩენილი ან არასწორია ტრანსაქციის თარიღი ან ჩანაწერები მისამართების წიგნში. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - ყურადღება: wallet.dat დაზიანებულია! ორიგინალური wallet.dat შენახულია როგორც wallet.{timestamp}.bak %s-ში; თუ შეამჩნიეთ უზუსტობა ნაშთში ან ტრანსაქციებში, აღადგინეთ არქივიდან. - - - - Attempt to recover private keys from a corrupt wallet.dat - პირადი გასაღებების აღდგენის მცდელობა wallet.dat-იდან - - - - Block creation options: - ბლოკის შექმნის ოპციები: - - - - Connect only to the specified node(s) - შეერთება მხოლოდ მითითებულ კვანძ(ებ)თან - - - - Discover own IP address (default: 1 when listening and no -externalip) - საკუთარი IP-მისამართის განსაზღვრა (ნაგულისხმევი: 1 თუ ჩართულია მიყურადება და არ გამოიყენება -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - ვერ ხერხდება პორტების მიყურადება. თუ გსურთ, გამოიყენეთ -listen=0. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - მიღების ბუფერის მაქსიმალური ზომა შეერთებაზე, <n>*1000 ბაიტი (ნაგულისხმევი: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - გაგზავნის ბუფერის მაქსიმალური ზომა შეერთებაზე, <n>*1000 ბაიტი (ნაგულისხმევი: 5000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - შეერთება მხოლოდ <net> ქსელის კვანძებთან (IPv4, IPv6 ან Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL ოპციები: (იხილე Bitcoin Wiki-ში SSL-ს მოწყობის ინსტრუქციები) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - ტრასირების/დახვეწის ინფოს გაგზავნა კონსოლზე debug.log ფაილის ნაცვლად - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - დააყენეთ ბლოკის მინიმალური ზომა ბაიტებში (ნაგულისხმევი: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - debug.log ფაილის შეკუმშვა გაშვებისას (ნაგულისხმევია: 1 როცა არ აყენია -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - მიუთითეთ შეერთების ტაიმაუტი მილიწამებში (ნაგულისხმევი: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - გამოიყენეთ UPnP მისაყურადებელი პორტის გადასამისამართებლად (ნაგულისხმევი: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - გამოიყენეთ UPnP მისაყურადებელი პორტის გადასამისამართებლად (ნაგულისხმევი: 1 როცა ჩართულია მიყურადება) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - მომხმარებლის სახელი JSON-RPC-შეერთებისათვის - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - ყურადღება: ვერსია მოძველებულია, საჭიროა განახლება! - - - - wallet.dat corrupt, salvage failed - wallet.dat დაზიანებულია, აღდგენა ვერ მოხერხდა - - - - Password for JSON-RPC connections - პაროლი JSON-RPC-შეერთებისათვის - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - JSON-RPC-შეერთების ნებართვა მითითებული IP მისამართიდან - - - - Send commands to node running on <ip> (default: 127.0.0.1) - კომანდის გაგზავნა კვანძისათვის, რომელიც გაშვებულია მისამართზე <ip> (ნაგულისხმევი: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - კომანდის შესრულება უკეთესი ბლოკის გამოჩენისას (%s კომანდაში ჩანაცვლდება ბლოკის ჰეშით) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - კომანდის შესრულება საფულის ტრანსაქციის ცვლილებისას (%s კომანდაში ჩანაცვლდება TxID-ით) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - საფულის ფორმატის განახლება - - - - Set key pool size to <n> (default: 100) - გასაღების პულის ზომა იქნება <n> (ნაგულისხმევი: 100) - - - - Rescan the block chain for missing wallet transactions - ბლოკების ჯაჭვის გადამოწმება საფულეში გამორჩენილ ტრანსაქციებზე - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - OpenSSL-ის (https) გამოყენება JSON-RPC-შეერთებებისათვის - - - - Server certificate file (default: server.cert) - სერვერის სერტიფიკატის ფაილი (ნაგულისხმევი: server.cert) - - - - Server private key (default: server.pem) - სერვერის პირადი გასაღები (ნაგულისხმევი: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - ეს ტექსტი - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - ვერ ხერხდება მიბმა %s-თან ამ კომპიუტერზე (მიღებულია შეცდომა %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - DNS-ძებნის დაშვება -addnode, -seednode და -connect-სათვის - - - - Loading addresses... - მისამართების ჩატვირთვა... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - არ იტვირთება wallet.dat: საფულე დაზიანებულია - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - არ იტვირთება wallet.dat - - - - Invalid -proxy address: '%s' - არასწორია მისამართი -proxy: '%s' - - - - Unknown network specified in -onlynet: '%s' - -onlynet-ში მითითებულია უცნობი ქსელი: '%s' - - - - Unknown -socks proxy version requested: %i - მოთხოვნილია -socks პროქსის უცნობი ვერსია: %i - - - - Cannot resolve -bind address: '%s' - ვერ ხერხდება -bind მისამართის გარკვევა: '%s' - - - - Cannot resolve -externalip address: '%s' - ვერ ხერხდება -externalip მისამართის გარკვევა: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - დაუშვებელი მნიშვნელობა -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - დაუშვებელი თანხა - - - - Insufficient funds - არ არის საკმარისი თანხა - - - - Loading block index... - ბლოკების ინდექსის ჩატვირთვა... - - - - Add a node to connect to and attempt to keep the connection open - მისაერთებელი კვანძის დამატება და მიერთების შეძლებისდაგვარად შენარჩუნება - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - საფულის ჩატვირთვა... - - - - Cannot downgrade wallet - საფულის ძველ ვერსიაზე გადაყვანა შეუძლებელია - - - - Cannot initialize keypool - - - - - Cannot write default address - ვერ ხერხდება ნაგულისხმევი მისამართის ჩაწერა - - - - Rescanning... - სკანირება... - - - - Done loading - ჩატვირთვა დასრულებულია - - - - To use the %s option - %s ოპციის გამოსაყენებლად - - - - Error - შეცდომა - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - უნდა დააყენოთ rpcpassword=<password> საკონფიგურაციო ფაილში: -%s -თუ ეს ფაილი არ არსებობს, შექმენით იგი უფლებებით owner-readable-only. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_kk_KZ.ts b/src/qt/locale/umbra_kk_KZ.ts deleted file mode 100644 index 9a669fbcb9..0000000000 --- a/src/qt/locale/umbra_kk_KZ.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - таңба - - - - Address - Адрес - - - - pubkey - - - - - stealth - - - - - (no label) - (таңбасыз) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Құпия сөзді енгізу - - - - New passphrase - Жаңа құпия сөзі - - - - Repeat new passphrase - Жаңа құпия сөзді қайта енгізу - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Әмиянға жаңа қүпия сөзді енгізіңіз.<br/><b>10 немесе одан әрі кездейсоқ белгілерді</b>, әлде <b>сегіз немесе одан әрі сөздерді</b>құпия сөзіңізде пайдалану өтінеміз. - - - - Encrypt wallet - Әмиянді шифрлау - - - - This operation needs your wallet passphrase to unlock the wallet. - Бұл операциясы бойынша сіздің әмиянізді қоршаудан шығару үшін әмиянның құпия сөзі керек - - - - Unlock wallet - Әмиянізді қоршаудан шығару - - - - This operation needs your wallet passphrase to decrypt the wallet. - Бұл операциясы бойынша сіздің әмиянізді шифрлап тастау үшін әмиянның құпия сөзі керек - - - - Decrypt wallet - Әмиянізді шифрлап тастау - - - - Change passphrase - Құпия сөзді өзгерту - - - - Enter the old and new passphrase to the wallet. - - - - - Confirm wallet encryption - - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - Адрес - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (таңбасыз) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - Адрес - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_ko_KR.ts b/src/qt/locale/umbra_ko_KR.ts deleted file mode 100644 index b3e6c22e3a..0000000000 --- a/src/qt/locale/umbra_ko_KR.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - - - - - Address - 주소 - - - - pubkey - - - - - stealth - - - - - (no label) - (표 없음) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - 암호문 대화상자 - - - - Enter passphrase - 암호 입력하기 - - - - New passphrase - 새로운 암호 - - - - Repeat new passphrase - 새 암호 반복 - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - 새로운 암호를 지갑에 입력. 8자보다 많은 단어를 입력하거나 10 자보다 많은 여러 종류를 암호에 사용하세요. - - - - Encrypt wallet - 지갑 암호화 - - - - This operation needs your wallet passphrase to unlock the wallet. - 이 작업은 지갑을 열기위해 사용자의 지갑의 암호가 필요합니다. - - - - Unlock wallet - 지갑 열기 - - - - This operation needs your wallet passphrase to decrypt the wallet. - 이 작업은 지갑을 해독하기 위해 사용자의 지갑 암호가 필요합니다. - - - - Decrypt wallet - 지갑 해독 - - - - Change passphrase - 암호 변경 - - - - Enter the old and new passphrase to the wallet. - 지갑의 예전 암호와 새로운 암호를 입력 - - - - Confirm wallet encryption - 지갑의 암호화를 확정 - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - 지갑 암호화를 허용하시겠습니까? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - 경고: 캡스록 키가 켜져있습니다! - - - - - Wallet encrypted - 지갑 암호화 완료 - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - 지갑 암호화 실패 - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - 지갑 암호화는 내부 에러로 인해 실패했습니다. 당신의 지갑은 암호화 되지 않았습니다. - - - - - The supplied passphrases do not match. - 지정한 암호가 일치하지 않습니다. - - - - Wallet unlock failed - 지갑 열기를 실패하였습니다. - - - - - - The passphrase entered for the wallet decryption was incorrect. - 지갑 해독을 위한 암호가 틀렸습니다. - - - - Wallet decryption failed - 지갑 해독에 실패하였습니다. - - - - Wallet passphrase was successfully changed. - 지갑 비밀번호가 성공적으로 변경되었습니다 - - - - ClientModel - - - Network Alert - 네트워크 경고 - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - 수량: - - - - Bytes: - Bytes: - - - - Amount: - 거래량 - - - - Priority: - 우선도: - - - - Fee: - 수수료: - - - - Low Output: - - - - - - no - 아니요 - - - - After Fee: - 수수료 이후: - - - - Change: - - - - - (un)select all - - - - - Tree mode - 트리 모드 - - - - List mode - 리스트 모드 - - - - Amount - 거래량 - - - - Label - - - - - Address - 주소 - - - - Date - 날짜 - - - - Confirmations - 확인 - - - - Confirmed - 확인됨 - - - - Priority - 우선도 - - - - Copy address - 주소 복사하기 - - - - Copy label - 라벨 복사하기 - - - - - Copy amount - 거래액 복사 - - - - Copy transaction ID - 송금 ID 복사 - - - - Copy quantity - 수량 복사 - - - - Copy fee - 수수료 복사 - - - - Copy after fee - 수수료 이후 복사 - - - - Copy bytes - bytes를 복사 - - - - Copy priority - 우선도 복사 - - - - Copy low output - - - - - Copy change - - - - - highest - 최상 - - - - high - - - - - medium-high - 중상 - - - - medium - - - - - low-medium - 중하 - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (표 없슴) - - - - change from %1 (%2) - ~로부터 변경 %1 (%2) - - - - (change) - - - - - EditAddressDialog - - - Edit Address - 주소 편집 - - - - &Label - &표 - - - - The label associated with this address book entry - - - - - &Address - &주소 - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - 새로 받는 주소 - - - - New sending address - 새로 보내는 주소 - - - - Edit receiving address - 받는 주소 편집 - - - - Edit sending address - 보내는 주소 편집 - - - - The entered address "%1" is already in the address book. - 입력된 주소는"%1" 이미 주소록에 있습니다. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - 지갑을 열 수 없습니다. - - - - New key generation failed. - 새로운 키 생성이 실패하였습니다 - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - 클라이언트 이름 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - 없음 - - - - Client version - 클라이언트 버전 - - - - &Information - 정보& - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - 오픈SSL 버전을 사용합니다 - - - - Using BerkeleyDB version - - - - - Startup time - 시작 시간 - - - - Network - 네트워크 - - - - Name - - - - - Number of connections - 연결 수 - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - 블럭 체인 - - - - Current number of blocks - 현재 블럭 수 - - - - Estimated total blocks - 예상 전체 블럭 - - - - Last block time - 최종 블럭 시각 - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - 열기(&O) - - - - Command-line options - - - - - &Show - - - - - &Console - 콘솔(&C) - - - - Build date - 빌드 날짜 - - - - Debug log file - 로그 파일 디버그 - - - - Clear console - 콘솔 초기화 - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - 기록을 찾아보려면 위 아래 화살표 키를, 화면을 지우려면 <b>Ctrl-L</b>키를 사용하십시오. - - - - Type <b>help</b> for an overview of available commands. - 사용할 수 있는 명령을 둘러보려면 <b>help</b>를 입력하십시오. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - %1 까지 열림 - - - - Open for %n block(s) - - - - - conflicted - 충돌 - - - - %1/offline - %1/오프라인 - - - - %1/unconfirmed - %1/미확인 - - - - %1 confirmations - %1 확인됨 - - - - Status - 상태 - - - - , broadcast through %n node(s) - - - - - Date - 날짜 - - - - Source - 소스 - - - - Generated - 생성하다 - - - - - - From - 으로부터 - - - - - - - To - 에게 - - - - - - - own address - 자신의 주소 - - - - - label - 라벨 - - - - - - - - Credit - 예금 - - - - matures in %n more block(s) - - - - - not accepted - 허용되지 않는다 - - - - - - - Debit - 차변 - - - - Transaction fee - 송금 수수료 - - - - Net amount - 총액 - - - - Message - 메시지 - - - - Comment - 설명 - - - - Transaction ID - 송금 ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - 디버깅 정보 - - - - Transaction - 송금 - - - - Inputs - 입력 - - - - Amount - 거래량 - - - - true - - - - - false - 거짓 - - - - , has not been successfully broadcast yet - . 아직 성공적으로 통보하지 않음 - - - - - unknown - 알수없음 - - - - TransactionDescDialog - - - Transaction details - 거래 세부 내역 - - - - This pane shows a detailed description of the transaction - 이 창은 거래의 세부내역을 보여줍니다 - - - - TransactionTableModel - - - Date - 날짜 - - - - Type - 형식 - - - - Address - 주소 - - - - Amount - 수량 - - - - Open until %1 - %1 까지 열림 - - - - Confirmed (%1 confirmations) - 확인됨(%1 확인됨) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - 오프라인 - - - - Unconfirmed - 미확인 - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - 충돌 - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - 이 블럭은 다른 노드로부터 받지 않아 허용되지 않을 것임. - - - - Generated but not accepted - 생성되었으나 거절됨 - - - - (n/a) - (없음) - - - - Transaction status. Hover over this field to show number of confirmations. - 거래상황. 마우스를 올리면 승인횟수가 표시됩니다. - - - - Date and time that the transaction was received. - 거래가 이루어진 날짜와 시각. - - - - Type of transaction. - 거래의 종류. - - - - Destination address of transaction. - 거래가 도달할 주소 - - - - Amount removed from or added to balance. - 변경된 잔고. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - 사용법: - - - - Send command to -server or shadowcoind - - - - - List commands - 커맨드 목록 - - - - Get help for a command - 커맨드 도움말 - - - - Options: - 옵션: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - 데이터 폴더 안에 지갑 파일을 선택하세요. - - - - Specify data directory - 데이터 폴더 지정 - - - - Set database cache size in megabytes (default: 25) - 데이터베이스 캐시 크기를 메가바이트로 지정(기본값:25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - 가장 잘 연결되는 사용자를 유지합니다(기본값: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - 피어 주소를 받기 위해 노드에 연결하고, 받은 후에 연결을 끊습니다 - - - - Specify your own public address - 공인 주소를 지정하십시오 - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - 이상행동 네트워크 참여자의 연결을 차단시키기 위한 한계치 (기본값: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - 이상행동을 하는 네트워크 참여자들을 다시 연결시키는데 걸리는 시간 (기본값: 86400초) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - IPv4 감청을 위한 RPC 포트 %u번을 설정중 오류가 발생했습니다: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - 명령줄과 JSON-RPC 명령 수락 - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - 데몬으로 백그라운드에서 실행하고 명령을 허용 - - - - Use the test network - 테스트 네트워크 사용 - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - 외부 접속을 승인합니다 - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - 경고: -paytxfee값이 너무 큽니다! 이 값은 송금할때 지불할 송금 수수료입니다. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - 손상된 wallet.dat에서 개인키 복원을 시도합니다 - - - - Block creation options: - 블록 생성 옵션: - - - - Connect only to the specified node(s) - 지정된 노드에만 연결하기 - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL 옵션: (SSL 설정 절차를 보혀면 비트코인 위키를 참조하십시오) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - 추적오류 정보를 degug.log 자료로 보내는 대신 콘솔로 보내기 - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - 바이트 단위의 최소 블록 크기 설정(기본값: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - 클라이언트 시작시 debug.log 파일 비우기(기본값: 디버그 안할때 1) - - - - Specify connection timeout in milliseconds (default: 5000) - 밀리초 단위로 연결 제한시간을 설정하십시오(기본값: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - JSON-RPC 연결에 사용할 사용자 이름 - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - 경고: 이 버전이 오래되어 업그레이드가 필요합니다! - - - - wallet.dat corrupt, salvage failed - wallet.dat 파일이 손상되었고 복구가 실패하였습니다. - - - - Password for JSON-RPC connections - JSON-RPC 연결에 사용할 암호 - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - 지정한 IP 주소의 JSON-RPC 연결 허용 - - - - Send commands to node running on <ip> (default: 127.0.0.1) - 실행 중인 노드로 명령 전송 <ip> (기본값: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - 최고의 블럭이 변하면 명령을 실행(cmd 에 있는 %s 는 블럭 해시에 의해 대체되어 짐) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - 지갑을 최근 형식으로 개선하시오 - - - - Set key pool size to <n> (default: 100) - 키 풀 크기 설정 <n>(기본값: 100) - - - - Rescan the block chain for missing wallet transactions - 누락된 지갑 송금에 대한 블록 체인 다시 검색 - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - JSON-RPC 연결에 OpenSSL(https) 사용 - - - - Server certificate file (default: server.cert) - 서버 인증 파일 (기본값: server.cert) - - - - Server private key (default: server.pem) - 서버 개인 키(기본값: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - 도움말 메시지입니다 - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - 이 컴퓨터의 %s에 바인딩할 수 없습니다 (바인딩 과정에 %d 오류 발생, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - -addnode, -seednode, -connect 옵션에 대해 DNS 탐색 허용 - - - - Loading addresses... - 주소를 불러오는 중... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - wallet.dat 불러오기 에러: 지갑 오류 - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - wallet.dat 불러오기 에러 - - - - Invalid -proxy address: '%s' - 잘못된 -proxy 주소입니다: '%s' - - - - Unknown network specified in -onlynet: '%s' - -onlynet에 지정한 네트워크를 알 수 없습니다: '%s' - - - - Unknown -socks proxy version requested: %i - 요청한 -socks 프록히 버전을 알 수 없습니다: %i - - - - Cannot resolve -bind address: '%s' - -bind 주소를 확인할 수 없습니다: '%s' - - - - Cannot resolve -externalip address: '%s' - -externalip 주소를 확인할 수 없습니다: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - -paytxfee=<amount>에 대한 양이 잘못되었습니다: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - 효력없는 금액 - - - - Insufficient funds - 자금 부족 - - - - Loading block index... - 블럭 인덱스를 불러오는 중... - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - 지갑을 불러오는 중... - - - - Cannot downgrade wallet - 지갑을 다운그레이드 할 수 없습니다 - - - - Cannot initialize keypool - - - - - Cannot write default address - 기본 계좌에 기록할 수 없습니다 - - - - Rescanning... - 재검색 중... - - - - Done loading - 로딩 완료 - - - - To use the %s option - %s 옵션을 사용하려면 - - - - Error - 오류 - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - 설정 파일에 rpcpassword=<암호>를 설정해야 합니다: -%s -파일이 없으면 소유자 읽기 전용 파일 권한으로 만들어야 합니다. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_ky.ts b/src/qt/locale/umbra_ky.ts deleted file mode 100644 index 0c7eb92f47..0000000000 --- a/src/qt/locale/umbra_ky.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - - - - - Address - Дарек - - - - pubkey - - - - - stealth - - - - - (no label) - (аты жок) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - - - - - New passphrase - - - - - Repeat new passphrase - - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - - Encrypt wallet - - - - - This operation needs your wallet passphrase to unlock the wallet. - - - - - Unlock wallet - - - - - This operation needs your wallet passphrase to decrypt the wallet. - - - - - Decrypt wallet - - - - - Change passphrase - - - - - Enter the old and new passphrase to the wallet. - - - - - Confirm wallet encryption - - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - Дарек - - - - Date - Дата - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (аты жок) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - &Дарек - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Ачуу - - - - Command-line options - - - - - &Show - - - - - &Console - &Консоль - - - - Build date - - - - - Debug log file - - - - - Clear console - Консолду тазалоо - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/тармакта эмес - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - Дата - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - Билдирүү - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - Дата - - - - Type - - - - - Address - Дарек - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - Ката - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_la.ts b/src/qt/locale/umbra_la.ts deleted file mode 100644 index 45a54af402..0000000000 --- a/src/qt/locale/umbra_la.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Titulus - - - - Address - Inscriptio - - - - pubkey - - - - - stealth - - - - - (no label) - (nullus titulus) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Dialogus Tesserae - - - - Enter passphrase - Insere tesseram - - - - New passphrase - Nova tessera - - - - Repeat new passphrase - Itera novam tesseram - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Insero novam tesseram cassidili.<br/>Sodes tessera <b>10 pluriumve fortuitarum litterarum</b> utere aut <b>octo pluriumve verborum</b>. - - - - Encrypt wallet - Cifra cassidile - - - - This operation needs your wallet passphrase to unlock the wallet. - Huic operationi necesse est tessera cassidili tuo ut cassidile reseret. - - - - Unlock wallet - Resera cassidile - - - - This operation needs your wallet passphrase to decrypt the wallet. - Huic operationi necesse est tessera cassidili tuo ut cassidile decifret. - - - - Decrypt wallet - Decifra cassidile - - - - Change passphrase - Muta tesseram - - - - Enter the old and new passphrase to the wallet. - Insero veterem novamque tesseram cassidili. - - - - Confirm wallet encryption - Confirma cifrationem cassidilis - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Certusne es te velle tuum cassidile cifrare? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - GRAVE: Oportet ulla prioria conservata quae fecisti de plica tui cassidilis reponi a nove generata cifrata plica cassidilis. Propter securitatem, prioria conservata de plica non cifrata cassidilis inutilia fiet simul atque incipis uti novo cifrato cassidili. - - - - - Warning: The Caps Lock key is on! - Monitio: Litterae ut capitales seratae sunt! - - - - - Wallet encrypted - Cassidile cifratum - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Cassidile cifrare abortum est - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Cassidile cifrare abortum est propter internum errorem. Tuum cassidile cifratum non est. - - - - - The supplied passphrases do not match. - Tesserae datae non eaedem sunt. - - - - Wallet unlock failed - Cassidile reserare abortum est. - - - - - - The passphrase entered for the wallet decryption was incorrect. - Tessera inserta pro cassidilis decifrando prava erat. - - - - Wallet decryption failed - Cassidile decifrare abortum est. - - - - Wallet passphrase was successfully changed. - Tessera cassidilis successa est in mutando. - - - - ClientModel - - - Network Alert - Monitio Retis - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Quantitas: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Quantitas - - - - Label - - - - - Address - Inscriptio - - - - Date - Dies - - - - Confirmations - - - - - Confirmed - Confirmatum - - - - Priority - - - - - Copy address - Copia inscriptionem - - - - Copy label - Copia titulum - - - - - Copy amount - Copia quantitatem - - - - Copy transaction ID - Copia transactionis ID - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (nullus titulus) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Muta Inscriptionem - - - - &Label - &Titulus - - - - The label associated with this address book entry - - - - - &Address - &Inscriptio - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nova inscriptio accipiendi - - - - New sending address - Nova inscriptio mittendi - - - - Edit receiving address - Muta inscriptionem accipiendi - - - - Edit sending address - Muta inscriptionem mittendi - - - - The entered address "%1" is already in the address book. - Inserta inscriptio "%1" iam in libro inscriptionum est. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Non potuisse cassidile reserare - - - - New key generation failed. - Generare novam clavem abortum est. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nomen clientis - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Versio clientis - - - - &Information - &Informatio - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Utens OpenSSL versione - - - - Using BerkeleyDB version - - - - - Startup time - Tempus initiandi - - - - Network - Rete - - - - Name - - - - - Number of connections - Numerus conexionum - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Catena frustorum - - - - Current number of blocks - Numerus frustorum iam nunc - - - - Estimated total blocks - Aestimatus totalis numerus frustorum - - - - Last block time - Hora postremi frusti - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Aperi - - - - Command-line options - - - - - &Show - - - - - &Console - &Terminale - - - - Build date - Dies aedificandi - - - - Debug log file - Debug catalogi plica - - - - Clear console - Vacuefac terminale - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Utere sagittis sursum deorsumque ut per historiam naviges, et <b>Ctrl+L</b> ut scrinium vacuefacias. - - - - Type <b>help</b> for an overview of available commands. - Scribe <b>help</b> pro summario possibilium mandatorum. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Apertum donec %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/non conecto - - - - %1/unconfirmed - %1/non confirmata - - - - %1 confirmations - %1 confirmationes - - - - Status - Status - - - - , broadcast through %n node(s) - , disseminatum per %n nodo, disseminata per %n nodis - - - - Date - Dies - - - - Source - Fons - - - - Generated - Generatum - - - - - - From - Ab - - - - - - - To - Ad - - - - - - - own address - inscriptio propria - - - - - label - titulus - - - - - - - - Credit - Creditum - - - - matures in %n more block(s) - maturum erit in %n plure frustomaturum erit in %n pluribus frustis - - - - not accepted - non acceptum - - - - - - - Debit - Debitum - - - - Transaction fee - Transactionis merces - - - - Net amount - Cuncta quantitas - - - - Message - Nuntius - - - - Comment - Annotatio - - - - Transaction ID - ID transactionis - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Informatio de debug - - - - Transaction - Transactio - - - - Inputs - Lectenda - - - - Amount - Quantitas - - - - true - verum - - - - false - falsum - - - - , has not been successfully broadcast yet - , nondum prospere disseminatum est - - - - - unknown - ignotum - - - - TransactionDescDialog - - - Transaction details - Particularia transactionis - - - - This pane shows a detailed description of the transaction - Haec tabula monstrat descriptionem verbosam transactionis - - - - TransactionTableModel - - - Date - Dies - - - - Type - Typus - - - - Address - Inscriptio - - - - Amount - Quantitas - - - - Open until %1 - Apertum donec %1 - - - - Confirmed (%1 confirmations) - Confirmatum (%1 confirmationes) - - - - Open for %n more block(s) - Aperi pro %n plure frustoAperi pro %n pluribus frustis - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Hoc frustum non acceptum est ab ulla alia nodis et probabiliter non acceptum erit! - - - - Generated but not accepted - Generatum sed non acceptum - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Status transactionis. Supervola cum mure ut monstretur numerus confirmationum. - - - - Date and time that the transaction was received. - Dies et tempus quando transactio accepta est. - - - - Type of transaction. - Typus transactionis. - - - - Destination address of transaction. - Inscriptio destinationis transactionis. - - - - Amount removed from or added to balance. - Quantitas remota ex pendendo aut addita ei. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Usus: - - - - Send command to -server or shadowcoind - - - - - List commands - Enumera mandata - - - - Get help for a command - Accipe auxilium pro mandato - - - - Options: - Optiones: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Specifica indicem datorum - - - - Set database cache size in megabytes (default: 25) - Constitue magnitudinem databasis cache in megabytes (praedefinitum: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Manutene non plures quam <n> conexiones ad paria (praedefinitum: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Conecta ad nodum acceptare inscriptiones parium, et disconecte - - - - Specify your own public address - Specifica tuam propriam publicam inscriptionem - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Limen pro disconectendo paria improba (praedefinitum: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Numerum secundorum prohibere ne paria improba reconectant (praedefinitum: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Error erat dum initians portam RPC %u pro auscultando in IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Accipe terminalis et JSON-RPC mandata. - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Operare infere sicut daemon et mandata accipe - - - - Use the test network - Utere rete experimentale - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Accipe conexiones externas (praedefinitum: 1 nisi -proxy neque -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Error erat dum initians portam RPC %u pro auscultando in IPv6, labens retrorsum ad IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Monitio: -paytxfee constitutum valde magnum! Hoc est merces transactionis solves si mittis transactionem. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Monitio: error legendo wallet.dat! Omnes claves recte lectae, sed data transactionum vel libri inscriptionum fortasse desint vel prava sint. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Monitio: wallet.data corrupta, data salvata! Originalis wallet.dat salvata ut wallet.{timestamp}.bak in %s; si pendendum tuum vel transactiones pravae sunt, oportet ab conservato restituere. - - - - Attempt to recover private keys from a corrupt wallet.dat - Conare recipere claves privatas de corrupto wallet.dat - - - - Block creation options: - Optiones creandi frustorum: - - - - Connect only to the specified node(s) - Conecte sole ad nodos specificatos (vel nodum specificatum) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Discooperi propriam inscriptionem IP (praedefinitum: 1 quando auscultans et nullum -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Non potuisse auscultare in ulla porta. Utere -listen=0 si hoc vis. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maxima magnitudo memoriae pro datis accipendis singulis conexionibus, <n>*1000 octetis/bytes (praedefinitum: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maxima magnitudo memoriae pro datis mittendis singulis conexionibus, <n>*1000 octetis/bytes (praedefinitum: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Tantum conecte ad nodos in rete <net> (IPv4, IPv6 aut Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Optiones SSL: (vide vici de Bitcoin pro instructionibus SSL configurationis) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Mitte informationem vestigii/debug ad terminale potius quam plicam debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Constitue minimam magnitudinem frusti in octetis/bytes (praedefinitum: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Diminue plicam debug.log ad initium clientis (praedefinitum: 1 nisi -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Specifica tempumfati conexionis in millisecundis (praedefinitum: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Utere UPnP designare portam auscultandi (praedefinitum: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Utere UPnP designare portam auscultandi (praedefinitum: 1 quando auscultans) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Nomen utentis pro conexionibus JSON-RPC - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Monitio: Haec versio obsoleta est, progressio postulata! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrupta, salvare abortum est - - - - Password for JSON-RPC connections - Tessera pro conexionibus JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Permitte conexionibus JSON-RPC ex inscriptione specificata - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Mitte mandata nodo operanti in <ip> (praedefinitum: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Pelle mandatum quando optissimum frustum mutat (%s in mandato substituitur ab hash frusti) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Facere mandatum quotiescumque cassidilis transactio mutet (%s in mandato sbstituitur ab TxID) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Progredere cassidile ad formam recentissimam - - - - Set key pool size to <n> (default: 100) - Constitue magnitudinem stagni clavium ad <n> (praedefinitum: 100) - - - - Rescan the block chain for missing wallet transactions - Iterum perlege catenam frustorum propter absentes cassidilis transactiones - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Utere OpenSSL (https) pro conexionibus JSON-RPC - - - - Server certificate file (default: server.cert) - Plica certificationis daemonis moderantis (praedefinitum: server.cert) - - - - Server private key (default: server.pem) - Clavis privata daemonis moderans (praedefinitum: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Hic nuntius auxilii - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Non posse conglutinare ad %s in hoc computatro (conglutinare redidit errorem %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Permitte quaerenda DNS pro -addnode, -seednode, et -connect - - - - Loading addresses... - Legens inscriptiones... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Error legendi wallet.dat: Cassidile corruptum - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Error legendi wallet.dat - - - - Invalid -proxy address: '%s' - Inscriptio -proxy non valida: '%s' - - - - Unknown network specified in -onlynet: '%s' - Ignotum rete specificatum in -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Ignota -socks vicarii versio postulata: %i - - - - Cannot resolve -bind address: '%s' - Non posse resolvere -bind inscriptonem: '%s' - - - - Cannot resolve -externalip address: '%s' - Non posse resolvere -externalip inscriptionem: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Quantitas non valida pro -paytxfee=<quantitas>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Quantitas non valida - - - - Insufficient funds - Inopia nummorum - - - - Loading block index... - Legens indicem frustorum... - - - - Add a node to connect to and attempt to keep the connection open - Adice nodum cui conectere et conare sustinere conexionem apertam - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Legens cassidile... - - - - Cannot downgrade wallet - Non posse cassidile regredi - - - - Cannot initialize keypool - - - - - Cannot write default address - Non posse scribere praedefinitam inscriptionem - - - - Rescanning... - Iterum perlegens... - - - - Done loading - Completo lengendi - - - - To use the %s option - Ut utaris optione %s - - - - Error - Error - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Necesse est te rpcpassword=<tesseram> constituere in plica configurationum: -%s -Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam legere sinatur. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_lt.ts b/src/qt/locale/umbra_lt.ts deleted file mode 100644 index 44655a9a96..0000000000 --- a/src/qt/locale/umbra_lt.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Žymė - - - - Address - Adresas - - - - pubkey - - - - - stealth - - - - - (no label) - (nėra žymės) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Slaptafrazės dialogas - - - - Enter passphrase - Įvesti slaptafrazę - - - - New passphrase - Nauja slaptafrazė - - - - Repeat new passphrase - Pakartokite naują slaptafrazę - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Įveskite naują piniginės slaptafrazę.<br/>Prašome naudoti slaptafrazę iš <b> 10 ar daugiau atsitiktinių simbolių</b> arba <b>aštuonių ar daugiau žodžių</b>. - - - - Encrypt wallet - Užšifruoti piniginę - - - - This operation needs your wallet passphrase to unlock the wallet. - Ši operacija reikalauja jūsų piniginės slaptafrazės jai atrakinti. - - - - Unlock wallet - Atrakinti piniginę - - - - This operation needs your wallet passphrase to decrypt the wallet. - Ši operacija reikalauja jūsų piniginės slaptafrazės jai iššifruoti. - - - - Decrypt wallet - Iššifruoti piniginę - - - - Change passphrase - Pakeisti slaptafrazę - - - - Enter the old and new passphrase to the wallet. - Įveskite seną ir naują piniginės slaptafrazes. - - - - Confirm wallet encryption - Patvirtinkite piniginės užšifravimą - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Ar tikrai norite šifruoti savo piniginę? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - Įspėjimas: įjungtas Caps Lock klavišas! - - - - - Wallet encrypted - Piniginė užšifruota - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Nepavyko užšifruoti piniginę - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Dėl vidinės klaidos nepavyko užšifruoti piniginę.Piniginė neužšifruota. - - - - - The supplied passphrases do not match. - Įvestos slaptafrazės nesutampa. - - - - Wallet unlock failed - Nepavyko atrakinti piniginę - - - - - - The passphrase entered for the wallet decryption was incorrect. - Neteisingai įvestas slaptažodis piniginės iššifravimui. - - - - Wallet decryption failed - Nepavyko iššifruoti piniginės - - - - Wallet passphrase was successfully changed. - Piniginės slaptažodis sėkmingai pakeistas. - - - - ClientModel - - - Network Alert - Tinklo įspėjimas - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Suma: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Suma - - - - Label - - - - - Address - Adresas - - - - Date - Data - - - - Confirmations - - - - - Confirmed - Patvirtintas - - - - Priority - - - - - Copy address - Kopijuoti adresą - - - - Copy label - Kopijuoti žymę - - - - - Copy amount - Kopijuoti sumą - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (nėra žymės) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Keisti adresą - - - - &Label - Ž&ymė - - - - The label associated with this address book entry - - - - - &Address - &Adresas - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Naujas gavimo adresas - - - - New sending address - Naujas siuntimo adresas - - - - Edit receiving address - Keisti gavimo adresą - - - - Edit sending address - Keisti siuntimo adresą - - - - The entered address "%1" is already in the address book. - Įvestas adresas „%1“ jau yra adresų knygelėje. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Nepavyko atrakinti piniginės. - - - - New key generation failed. - Naujo rakto generavimas nepavyko. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Kliento pavadinimas - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - nėra - - - - Client version - Kliento versija - - - - &Information - &Informacija - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Naudojama OpenSSL versija - - - - Using BerkeleyDB version - - - - - Startup time - Paleidimo laikas - - - - Network - Tinklas - - - - Name - - - - - Number of connections - Prisijungimų kiekis - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Blokų grandinė - - - - Current number of blocks - Dabartinis blokų skaičius - - - - Estimated total blocks - - - - - Last block time - Paskutinio bloko laikas - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Atverti - - - - Command-line options - - - - - &Show - - - - - &Console - &Konsolė - - - - Build date - Kompiliavimo data - - - - Debug log file - Derinimo žurnalo failas - - - - Clear console - Išvalyti konsolę - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Atidaryta iki %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/neprisijungęs - - - - %1/unconfirmed - %1/nepatvirtintas - - - - %1 confirmations - %1 patvirtinimų - - - - Status - Būsena - - - - , broadcast through %n node(s) - - - - - Date - Data - - - - Source - Šaltinis - - - - Generated - Sugeneruotas - - - - - - From - Nuo - - - - - - - To - Kam - - - - - - - own address - savo adresas - - - - - label - žymė - - - - - - - - Credit - Kreditas - - - - matures in %n more block(s) - - - - - not accepted - nepriimta - - - - - - - Debit - Debitas - - - - Transaction fee - Sandorio mokestis - - - - Net amount - Neto suma - - - - Message - Žinutė - - - - Comment - Komentaras - - - - Transaction ID - Sandorio ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Derinimo informacija - - - - Transaction - Sandoris - - - - Inputs - - - - - Amount - Suma - - - - true - tiesa - - - - false - netiesa - - - - , has not been successfully broadcast yet - , transliavimas dar nebuvo sėkmingas - - - - - unknown - nežinomas - - - - TransactionDescDialog - - - Transaction details - Sandorio detelės - - - - This pane shows a detailed description of the transaction - Šis langas sandorio detalų aprašymą - - - - TransactionTableModel - - - Date - Data - - - - Type - Tipas - - - - Address - Adresas - - - - Amount - Suma - - - - Open until %1 - Atidaryta iki %1 - - - - Confirmed (%1 confirmations) - Patvirtinta (%1 patvirtinimai) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Šis blokas negautas nė vienu iš mazgų ir matomai nepriimtas - - - - Generated but not accepted - Išgauta bet nepriimta - - - - (n/a) - nepasiekiama - - - - Transaction status. Hover over this field to show number of confirmations. - Sandorio būklė. Užvedus pelės žymeklį ant šios srities matysite patvirtinimų skaičių. - - - - Date and time that the transaction was received. - Sandorio gavimo data ir laikas - - - - Type of transaction. - Sandorio tipas. - - - - Destination address of transaction. - Sandorio paskirties adresas - - - - Amount removed from or added to balance. - Suma pridėta ar išskaičiuota iš balanso - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Naudojimas: - - - - Send command to -server or shadowcoind - - - - - List commands - Komandų sąrašas - - - - Get help for a command - Suteikti pagalba komandai - - - - Options: - Parinktys: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Nustatyti duomenų aplanką - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Palaikyti ne daugiau <n> jungčių kolegoms (pagal nutylėjimą: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Atjungimo dėl netinkamo kolegų elgesio riba (pagal nutylėjimą: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Sekundžių kiekis eikiamas palaikyti ryšį dėl lygiarangių nestabilumo (pagal nutylėjimą: 86.400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Priimti komandinę eilutę ir JSON-RPC komandas - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Dirbti fone kaip šešėlyje ir priimti komandas - - - - Use the test network - Naudoti testavimo tinklą - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Įspėjimas: -paytxfee yra nustatytas per didelis. Tai sandorio mokestis, kurį turėsite mokėti, jei siųsite sandorį. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - Prisijungti tik prie nurodyto mazgo - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maksimalus buferis priėmimo sujungimui <n>*1000 bitų (pagal nutylėjimą: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maksimalus buferis siuntimo sujungimui <n>*1000 bitų (pagal nutylėjimą: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL opcijos (žr.e Bitcoin Wiki for SSL setup instructions) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Siųsti atsekimo/derinimo info į konsolę vietoj debug.log failo - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - Nustatyti sujungimo trukmę milisekundėmis (pagal nutylėjimą: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Bandymas naudoti UPnP struktūra klausymosi prievadui (default: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Bandymas naudoti UPnP struktūra klausymosi prievadui (default: 1 when listening) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Vartotojo vardas JSON-RPC jungimuisi - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - Slaptažodis JSON-RPC sujungimams - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Leisti JSON-RPC tik iš nurodytų IP adresų - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Siųsti komandą mazgui dirbančiam <ip> (pagal nutylėjimą: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Atnaujinti piniginę į naujausią formatą - - - - Set key pool size to <n> (default: 100) - Nustatyti rakto apimties dydį <n> (pagal nutylėjimą: 100) - - - - Rescan the block chain for missing wallet transactions - Ieškoti prarastų piniginės sandorių blokų grandinėje - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Naudoti OpenSSL (https) jungimuisi JSON-RPC - - - - Server certificate file (default: server.cert) - Serverio sertifikato failas (pagal nutylėjimą: server.cert) - - - - Server private key (default: server.pem) - Serverio privatus raktas (pagal nutylėjimą: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Pagelbos žinutė - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Nepavyko susieti šiame kompiuteryje prievado %s (bind returned error %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Leisti DNS paiešką sujungimui ir mazgo pridėjimui - - - - Loading addresses... - Užkraunami adresai... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - wallet.dat pakrovimo klaida, wallet.dat sugadintas - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - wallet.dat pakrovimo klaida - - - - Invalid -proxy address: '%s' - Neteisingas proxy adresas: '%s' - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - Neteisinga suma -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Neteisinga suma - - - - Insufficient funds - Nepakanka lėšų - - - - Loading block index... - Įkeliamas blokų indeksas... - - - - Add a node to connect to and attempt to keep the connection open - Pridėti mazgą prie sujungti su and attempt to keep the connection open - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Užkraunama piniginė... - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - Peržiūra - - - - Done loading - Įkėlimas baigtas - - - - To use the %s option - - - - - Error - Klaida - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_lv_LV.ts b/src/qt/locale/umbra_lv_LV.ts deleted file mode 100644 index ba6b28a297..0000000000 --- a/src/qt/locale/umbra_lv_LV.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Nosaukums - - - - Address - Adrese - - - - pubkey - - - - - stealth - - - - - (no label) - (bez nosaukuma) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Paroles dialogs - - - - Enter passphrase - Ierakstiet paroli - - - - New passphrase - Jauna parole - - - - Repeat new passphrase - Jaunā parole vēlreiz - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Ierakstiet maciņa jauno paroli.<br/>Lūdzu izmantojiet <b>10 vai vairāk nejauši izvēlētas zīmes</b>, vai <b>astoņus un vairāk vārdus</b>. - - - - Encrypt wallet - Šifrēt maciņu - - - - This operation needs your wallet passphrase to unlock the wallet. - Lai veikto šo darbību, maciņš jāatslēdz ar paroli. - - - - Unlock wallet - Atslēgt maciņu - - - - This operation needs your wallet passphrase to decrypt the wallet. - Šai darbībai maciņš jāatšifrē ar maciņa paroli. - - - - Decrypt wallet - Atšifrēt maciņu - - - - Change passphrase - Mainīt paroli - - - - Enter the old and new passphrase to the wallet. - Ierakstiet maciņa veco un jauno paroli. - - - - Confirm wallet encryption - Apstiprināt maciņa šifrēšanu - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Maciņš nošifrēts - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Maciņa šifrēšana neizdevās - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Maciņa šifrēšana neizdevās programmas kļūdas dēļ. Jūsu maciņš netika šifrēts. - - - - - The supplied passphrases do not match. - Ievadītās paroles nav vienādas. - - - - Wallet unlock failed - Maciņu atšifrēt neizdevās - - - - - - The passphrase entered for the wallet decryption was incorrect. - Maciņa atšifrēšanai ievadītā parole nav pareiza. - - - - Wallet decryption failed - Maciņu neizdevās atšifrēt - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - Tīkla brīdinājums - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Daudzums: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Daudzums - - - - Label - - - - - Address - Adrese - - - - Date - Datums - - - - Confirmations - - - - - Confirmed - Apstiprināts - - - - Priority - - - - - Copy address - Kopēt adresi - - - - Copy label - Kopēt nosaukumu - - - - - Copy amount - Kopēt daudzumu - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (bez nosaukuma) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Mainīt adrese - - - - &Label - &Nosaukums - - - - The label associated with this address book entry - - - - - &Address - &Adrese - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Jauna saņemšanas adrese - - - - New sending address - Jauna nosūtīšanas adrese - - - - Edit receiving address - Mainīt saņemšanas adresi - - - - Edit sending address - Mainīt nosūtīšanas adresi - - - - The entered address "%1" is already in the address book. - Nupat ierakstītā adrese "%1" jau atrodas adrešu grāmatā. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Nav iespējams atslēgt maciņu. - - - - New key generation failed. - Neizdevās ģenerēt jaunu atslēgu. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Klienta vārds - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Klienta versija - - - - &Information - &Informācija - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - Sākuma laiks - - - - Network - Tīkls - - - - Name - - - - - Number of connections - Savienojumu skaits - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Bloku virkne - - - - Current number of blocks - Pašreizējais bloku skaits - - - - Estimated total blocks - Bloku skaita novērtējums - - - - Last block time - Pēdējā bloka laiks - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Atvērt - - - - Command-line options - - - - - &Show - - - - - &Console - &Konsole - - - - Build date - Kompilācijas datums - - - - Debug log file - - - - - Clear console - Notīrīt konsoli - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Izmantojiet bultiņas uz augšu un leju, lai pārvietotos pa vēsturi, un <b>Ctrl-L</b> ekrāna notīrīšanai. - - - - Type <b>help</b> for an overview of available commands. - Ierakstiet <b>help</b> lai iegūtu pieejamo komandu sarakstu. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Atvērts līdz %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - %1/neapstiprinātas - - - - %1 confirmations - %1 apstiprinājumu - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - Datums - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - Daudzums - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - , vēl nav veiksmīgi izziņots - - - - - unknown - nav zināms - - - - TransactionDescDialog - - - Transaction details - Transakcijas detaļas - - - - This pane shows a detailed description of the transaction - Šis panelis parāda transakcijas detaļas - - - - TransactionTableModel - - - Date - Datums - - - - Type - Tips - - - - Address - Adrese - - - - Amount - Daudzums - - - - Open until %1 - Atvērts līdz %1 - - - - Confirmed (%1 confirmations) - Apstiprināts (%1 apstiprinājumu) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Neviens cits mezgls šo bloku nav saņēmis un droši vien netiks akceptēts! - - - - Generated but not accepted - Ģenerēts, taču nav akceptēts - - - - (n/a) - (nav pieejams) - - - - Transaction status. Hover over this field to show number of confirmations. - Transakcijas statuss. Turiet peli virs šī lauka, lai redzētu apstiprinājumu skaitu. - - - - Date and time that the transaction was received. - Transakcijas saņemšanas datums un laiks. - - - - Type of transaction. - Transakcijas tips. - - - - Destination address of transaction. - Transakcijas mērķa adrese. - - - - Amount removed from or added to balance. - Bilancei pievienotais vai atņemtais daudzums. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Lietojums: - - - - Send command to -server or shadowcoind - - - - - List commands - Komandu saraksts - - - - Get help for a command - Palīdzība par komandu - - - - Options: - Iespējas: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Norādiet datu direktoriju - - - - Set database cache size in megabytes (default: 25) - Uzstādiet datu bāzes bufera izmēru megabaitos (pēc noklusēšanas: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Uzturēt līdz <n> savienojumiem ar citiem mezgliem(pēc noklusēšanas: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Pievienoties mezglam, lai iegūtu citu mezglu adreses, un atvienoties - - - - Specify your own public address - Norādiet savu publisko adresi - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Slieksnis pārkāpējmezglu atvienošanai (pēc noklusēšanas: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Sekundes, cik ilgi atturēt pārkāpējmezglus no atkārtotas pievienošanās (pēc noklusēšanas: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Pieņemt komandrindas un JSON-RPC komandas - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Darbināt fonā kā servisu un pieņemt komandas - - - - Use the test network - Izmantot testa tīklu - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Debug/trace informāciju izvadīt konsolē, nevis debug.log failā - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - JSON-RPC savienojumu lietotājvārds - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - JSON-RPC savienojumu parole - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Atļaut JSON-RPC savienojumus no norādītās IP adreses - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Nosūtīt komandas mezglam, kas darbojas adresē <ip> (pēc noklusēšanas: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Izpildīt komandu, kad labāk atbilstošais bloks izmainās (%s cmd aizvieto ar bloka hešu) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Atjaunot maciņa formātu uz jaunāko - - - - Set key pool size to <n> (default: 100) - Uzstādīt atslēgu bufera izmēru uz <n> (pēc noklusēšanas: 100) - - - - Rescan the block chain for missing wallet transactions - Atkārtoti skanēt bloku virkni, meklējot trūkstošās maciņa transakcijas - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - JSON-RPC savienojumiem izmantot OpenSSL (https) - - - - Server certificate file (default: server.cert) - Servera sertifikāta fails (pēc noklusēšanas: server.cert) - - - - Server private key (default: server.pem) - Servera privātā atslēga (pēc noklusēšanas: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Šis palīdzības paziņojums - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Nevar pievienoties pie %s šajā datorā (pievienošanās atgrieza kļūdu %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Atļaut DNS uzmeklēšanu priekš -addnode, -seednode un -connect - - - - Loading addresses... - Ielādē adreses... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Nevar ielādēt wallet.dat: maciņš bojāts - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Kļūda ielādējot wallet.dat - - - - Invalid -proxy address: '%s' - Nederīga -proxy adrese: '%s' - - - - Unknown network specified in -onlynet: '%s' - -onlynet komandā norādīts nepazīstams tīkls: '%s' - - - - Unknown -socks proxy version requested: %i - Pieprasīta nezināma -socks proxy versija: %i - - - - Cannot resolve -bind address: '%s' - Nevar uzmeklēt -bind adresi: '%s' - - - - Cannot resolve -externalip address: '%s' - Nevar atrisināt -externalip adresi: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Nederīgs daudzums priekš -paytxfree=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Nederīgs daudzums - - - - Insufficient funds - Nepietiek bitkoinu - - - - Loading block index... - Ielādē bloku indeksu... - - - - Add a node to connect to and attempt to keep the connection open - Pievienot mezglu, kam pievienoties un turēt savienojumu atvērtu - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Ielādē maciņu... - - - - Cannot downgrade wallet - Nevar maciņa formātu padarīt vecāku - - - - Cannot initialize keypool - - - - - Cannot write default address - Nevar ierakstīt adresi pēc noklusēšanas - - - - Rescanning... - Skanēju no jauna... - - - - Done loading - Ielāde pabeigta - - - - To use the %s option - Izmantot opciju %s - - - - Error - Kļūda - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Konfigurācijas failā jāuzstāda rpcpassword=<password>: -%s -Ja fails neeksistē, izveidojiet to ar atļauju lasīšanai tikai īpašniekam. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_ms_MY.ts b/src/qt/locale/umbra_ms_MY.ts deleted file mode 100644 index 39a9c5d66d..0000000000 --- a/src/qt/locale/umbra_ms_MY.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - - - - - Address - Alamat - - - - pubkey - - - - - stealth - - - - - (no label) - - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Kata laluan - - - - New passphrase - Kata laluan baru - - - - Repeat new passphrase - Ulang kata laluan baru - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - - Encrypt wallet - - - - - This operation needs your wallet passphrase to unlock the wallet. - - - - - Unlock wallet - - - - - This operation needs your wallet passphrase to decrypt the wallet. - - - - - Decrypt wallet - - - - - Change passphrase - - - - - Enter the old and new passphrase to the wallet. - - - - - Confirm wallet encryption - - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - Alamat - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Alamat - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - Alamat - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - Alamat - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_nb.ts b/src/qt/locale/umbra_nb.ts deleted file mode 100644 index 6c872c96df..0000000000 --- a/src/qt/locale/umbra_nb.ts +++ /dev/null @@ -1,3393 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Om ShadowCoin - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> versjon - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Merkelapp - - - - Address - Adresse - - - - pubkey - - - - - stealth - - - - - (no label) - (ingen merkelapp) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Dialog for Adgangsfrase - - - - Enter passphrase - Angi adgangsfrase - - - - New passphrase - Ny adgangsfrase - - - - Repeat new passphrase - Gjenta ny adgangsfrase - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Skriv inn den nye adgangsfrasen for lommeboken.<br/>Vennligst bruk en adgangsfrase med <b>10 eller flere tilfeldige tegn</b>, eller <b>åtte eller flere ord</b>. - - - - Encrypt wallet - Krypter lommebok - - - - This operation needs your wallet passphrase to unlock the wallet. - Denne operasjonen krever adgangsfrasen til lommeboken for å låse den opp. - - - - Unlock wallet - Lås opp lommebok - - - - This operation needs your wallet passphrase to decrypt the wallet. - Denne operasjonen krever adgangsfrasen til lommeboken for å dekryptere den. - - - - Decrypt wallet - Dekrypter lommebok - - - - Change passphrase - Endre adgangsfrase - - - - Enter the old and new passphrase to the wallet. - Skriv inn gammel og ny adgangsfrase for lommeboken. - - - - Confirm wallet encryption - Bekreft kryptering av lommebok - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Er du sikker på at du vil kryptere lommeboken? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - VIKTIG: Tidligere sikkerhetskopier av din lommebok-fil, bør erstattes med den nylig genererte, krypterte filen, da de blir ugyldiggjort av sikkerhetshensyn så snart du begynner å bruke den nye krypterte lommeboken. - - - - - Warning: The Caps Lock key is on! - Advarsel: Caps Lock er på ! - - - - - Wallet encrypted - Lommebok kryptert - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Kryptering av lommebok feilet - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Kryptering av lommebok feilet på grunn av en intern feil. Din lommebok ble ikke kryptert. - - - - - The supplied passphrases do not match. - De angitte adgangsfrasene er ulike. - - - - Wallet unlock failed - Opplåsing av lommebok feilet - - - - - - The passphrase entered for the wallet decryption was incorrect. - Adgangsfrasen angitt for dekryptering av lommeboken var feil. - - - - Wallet decryption failed - Dekryptering av lommebok feilet - - - - Wallet passphrase was successfully changed. - Adgangsfrase for lommebok endret. - - - - ClientModel - - - Network Alert - Nettverksvarsel - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - Mengde: - - - - Bytes: - Bytes: - - - - Amount: - Beløp: - - - - Priority: - Prioritet: - - - - Fee: - Avgift: - - - - Low Output: - Lav Utdata: - - - - - no - nei - - - - After Fee: - Etter Avgift: - - - - Change: - Endring: - - - - (un)select all - Fjern alt valgt - - - - Tree mode - Tre modus - - - - List mode - Liste modus - - - - Amount - Beløp - - - - Label - Merkelapp - - - - Address - Adresse - - - - Date - Dato - - - - Confirmations - Bekreftelser - - - - Confirmed - Bekreftet - - - - Priority - Prioritet - - - - Copy address - Kopier adresse - - - - Copy label - Kopier merkelapp - - - - - Copy amount - Kopiér beløp - - - - Copy transaction ID - Kopier transaksjons-ID - - - - Copy quantity - Kopier mengde - - - - Copy fee - Kopier gebyr - - - - Copy after fee - Kopier etter gebyr - - - - Copy bytes - Kopier bytes - - - - Copy priority - Kopier prioritet - - - - Copy low output - - - - - Copy change - Kopier veksel - - - - highest - høyest - - - - high - høy - - - - medium-high - medium-høy - - - - medium - medium - - - - low-medium - lav-medium - - - - low - lav - - - - lowest - lavest - - - - - DUST - - - - - - yes - ja - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Denne merkelappen blir rød, viss endringen er mindre enn %1 - -Dette betyr at det trengs en avgift på minimum %2. - - - - - (no label) - (ingen merkelapp) - - - - change from %1 (%2) - endring fra %1 (%2) - - - - (change) - (endring) - - - - EditAddressDialog - - - Edit Address - Rediger adresse - - - - &Label - &Merkelapp - - - - The label associated with this address book entry - Navnet assosiert med denne adressen - - - - &Address - &Adresse - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Ny mottaksadresse - - - - New sending address - Ny utsendingsadresse - - - - Edit receiving address - Rediger mottaksadresse - - - - Edit sending address - Rediger utsendingsadresse - - - - The entered address "%1" is already in the address book. - Den oppgitte adressen "%1" er allerede i adresseboken. - - - - The entered address "%1" is not a valid ShadowCoin address. - Den angitte adressen "%1" er ikke en gyldig ShadowCoin adresse. - - - - Could not unlock wallet. - Kunne ikke låse opp lommeboken. - - - - New key generation failed. - Generering av ny nøkkel feilet. - - - - GUIUtil::HelpMessageBox - - - version - versjon - - - - - Shadow - - - - - Usage: - Bruk: - - - - command-line options - ledetekst valg - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - Velg språk, for eksempel "de_DE" (default: system locale) - - - - Start minimized - Start Minimert - - - - Show splash screen on startup (default: 1) - Vis velkomstbilde ved oppstart (default: 1) - - - - MessageModel - - - Type - Type - - - - Sent Date Time - Sendt Dato Tid - - - - Received Date Time - Mottatt Dato Tid - - - - Label - Merkelapp - - - - To Address - Til adresse - - - - From Address - Fra adresse - - - - Message - Beskjed - - - - Send Secure Message - Send sikker beskjed - - - - Send failed: %1. - Sending feilet: %1. - - - - - (no label) - (ingen merkelapp) - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - Adresse/Vertsnavn - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Klientnavn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - - Client version - Klientversjon - - - - &Information - &Informasjon - - - - Shadow - Debug window - - - - - Shadow Core - Shadow Core - - - - Using OpenSSL version - Bruker OpenSSL versjon - - - - Using BerkeleyDB version - Bruker BerkeleyDB versjon - - - - Startup time - Oppstartstidspunkt - - - - Network - Nettverk - - - - Name - Navn - - - - Number of connections - Antall tilkoblinger - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - &Nettverkstrafikk - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Blokkjeden - - - - Current number of blocks - Nåværende antall blokker - - - - Estimated total blocks - Estimert totalt antall blokker - - - - Last block time - Tidspunkt for siste blokk - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Åpne - - - - Command-line options - - - - - &Show - &Vis - - - - &Console - &Konsoll - - - - Build date - Byggedato - - - - Debug log file - Loggfil for feilsøk - - - - Clear console - Tøm konsoll - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Bruk opp og ned pil for å navigere historikken, og <b>Ctrl-L</b> for å tømme skjermen. - - - - Type <b>help</b> for an overview of available commands. - Skriv <b>help</b> for en oversikt over kommandoer. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Åpen til %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/frakoblet - - - - %1/unconfirmed - %1/ubekreftet - - - - %1 confirmations - %1 bekreftelser - - - - Status - Status - - - - , broadcast through %n node(s) - , kringkast gjennom %n node, kringkast gjennom %n noder - - - - Date - Dato - - - - Source - Kilde - - - - Generated - Generert - - - - - - From - Fra - - - - - - - To - Til - - - - - - - own address - egen adresse - - - - - label - merkelapp - - - - - - - - Credit - Kredit - - - - matures in %n more block(s) - blir moden om %n blokkblir moden om %n blokker - - - - not accepted - ikke akseptert - - - - - - - Debit - Debet - - - - Transaction fee - Transaksjonsgebyr - - - - Net amount - Nettobeløp - - - - Message - Melding - - - - Comment - Kommentar - - - - Transaction ID - Transaksjons-ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Informasjon for feilsøk - - - - Transaction - Transaksjon - - - - Inputs - Inndata - - - - Amount - Beløp - - - - true - sann - - - - false - usann - - - - , has not been successfully broadcast yet - , har ikke blitt kringkastet uten problemer enda. - - - - - unknown - ukjent - - - - TransactionDescDialog - - - Transaction details - Transaksjonsdetaljer - - - - This pane shows a detailed description of the transaction - Her vises en detaljert beskrivelse av transaksjonen - - - - TransactionTableModel - - - Date - Dato - - - - Type - Type - - - - Address - Adresse - - - - Amount - Beløp - - - - Open until %1 - Åpen til %1 - - - - Confirmed (%1 confirmations) - Bekreftet (%1 bekreftelser) - - - - Open for %n more block(s) - Åpen for %n blokk tilÅpen for %n blokker til - - - - Narration - - - - - Offline - - - - - Unconfirmed - Ubekreftet - - - - Confirming (%1 of %2 recommended confirmations) - Bekrefter (%1 av %2 anbefalte bekreftelser) - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Denne blokken har ikke blitt mottatt av noen andre noder og vil sannsynligvis ikke bli akseptert! - - - - Generated but not accepted - Generert men ikke akseptert - - - - (n/a) - - - - - - Transaction status. Hover over this field to show number of confirmations. - Transaksjonsstatus. Hold muspekeren over dette feltet for å se antall bekreftelser. - - - - Date and time that the transaction was received. - Dato og tid for da transaksjonen ble mottat. - - - - Type of transaction. - Type transaksjon. - - - - Destination address of transaction. - Mottaksadresse for transaksjonen - - - - Amount removed from or added to balance. - Beløp fjernet eller lagt til saldo. - - - - WalletModel - - - - Sending... - Sender... - - - - bitcoin-core - - - ShadowCoin version - ShadowCoin versjon - - - - Usage: - Bruk: - - - - Send command to -server or shadowcoind - - - - - List commands - List opp kommandoer - - - - Get help for a command - Vis hjelpetekst for en kommando - - - - Options: - Innstillinger: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - Angi lommebok fil (inne i data mappe) - - - - Specify data directory - Angi mappe for datafiler - - - - Set database cache size in megabytes (default: 25) - Sett størrelse på mellomlager for database i megabytes (standardverdi: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Hold maks <n> koblinger åpne til andre noder (standardverdi: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Koble til node for å hente adresser til andre noder, koble så fra igjen - - - - Specify your own public address - Angi din egen offentlige adresse - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Grenseverdi for å koble fra noder med dårlig oppførsel (standardverdi: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Antall sekunder noder med dårlig oppførsel hindres fra å koble til på nytt (standardverdi: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - En feil oppstod ved opprettelse av RPC port %u for lytting: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Ta imot kommandolinje- og JSON-RPC-kommandoer - - - - Error: Transaction creation failed - Feil: Opprettelse av transaksjonen mislyktes - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Kjør i bakgrunnen som daemon og ta imot kommandoer - - - - Use the test network - Bruk testnettverket - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Ta imot tilkoblinger fra utsiden (standardverdi: 1 hvis uten -proxy eller -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - En feil oppstod under oppsettet av RPC port %u for IPv6, tilbakestilles til IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Advarsel: -paytxfee er satt veldig høyt! Dette er transaksjonsgebyret du betaler når du sender transaksjoner. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Advarsel: Feil ved lesing av wallet.dat! Alle taster lest riktig, men transaksjon dataene eller adresse innlegg er kanskje manglende eller feil. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Advarsel: wallet.dat korrupt, data reddet! Original wallet.dat lagret som wallet.{timestamp}.bak i %s; hvis din saldo eller dine transaksjoner ikke er korrekte bør du gjenopprette fra en backup. - - - - Attempt to recover private keys from a corrupt wallet.dat - Forsøk å berge private nøkler fra en korrupt wallet.dat - - - - Block creation options: - Valg for opprettelse av blokker: - - - - Connect only to the specified node(s) - Koble kun til angitt(e) node(r) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Oppdag egen IP-adresse (standardverdi: 1 ved lytting og uten -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Kunne ikke lytte på noen port. Bruk -listen=0 hvis det er dette du vil. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maks mottaksbuffer per forbindelse, <n>*1000 bytes (standardverdi: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maks sendebuffer per forbindelse, <n>*1000 bytes (standardverdi: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Koble kun til noder i nettverket <nett> (IPv4, IPv6 eller Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL valg: (se Bitcoin Wiki for instruksjoner for oppsett av SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Send spor/debug informasjon til konsollet istedenfor debug.log filen - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Sett minimum blokkstørrelse i bytes (standardverdi: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Krymp debug.log filen når klienten starter (standardverdi: 1 hvis uten -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Angi tidsavbrudd for forbindelse i millisekunder (standardverdi: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Bruk UPnP for lytteport (standardverdi: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Bruk UPnP for lytteport (standardverdi: 1 ved lytting) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Brukernavn for JSON-RPC forbindelser - - - - Verifying database integrity... - Verifiserer databasens integritet... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - Advarsel: Lite lagringsplass! - - - - Warning: This version is obsolete, upgrade required! - Advarsel: Denne versjonen er foreldet, oppgradering kreves! - - - - wallet.dat corrupt, salvage failed - wallet.dat korrupt, bergning feilet - - - - Password for JSON-RPC connections - Passord for JSON-RPC forbindelser - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Tillat JSON-RPC tilkoblinger fra angitt IP-adresse - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Send kommandoer til node på <ip> (standardverdi: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Eksekvér kommando når beste blokk endrer seg (%s i kommandoen erstattes med blokkens hash) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Kjør kommando når en lommeboktransaksjon endres (%s i cmd er erstattet med TxID) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Oppgradér lommebok til nyeste format - - - - Set key pool size to <n> (default: 100) - Angi størrelse på nøkkel-lager til <n> (standardverdi: 100) - - - - Rescan the block chain for missing wallet transactions - Se gjennom blokk-kjeden etter manglende lommeboktransaksjoner - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Bruk OpenSSL (https) for JSON-RPC forbindelser - - - - Server certificate file (default: server.cert) - Servers sertifikat (standardverdi: server.cert) - - - - Server private key (default: server.pem) - Servers private nøkkel (standardverdi: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Denne hjelpemeldingen - - - - Wallet %s resides outside data directory %s. - Lommeboken %s holder til utenfor data mappen %s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Kan ikke binde til %s på denne datamaskinen (bind returnerte feil %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Tillat DNS oppslag for -addnode, -seednode og -connect - - - - Loading addresses... - Laster adresser... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Feil ved lasting av wallet.dat: Lommeboken er skadet - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Feil ved lasting av wallet.dat - - - - Invalid -proxy address: '%s' - Ugyldig -proxy adresse: '%s' - - - - Unknown network specified in -onlynet: '%s' - Ukjent nettverk angitt i -onlynet '%s' - - - - Unknown -socks proxy version requested: %i - Ukjent -socks proxy versjon angitt: %i - - - - Cannot resolve -bind address: '%s' - Kunne ikke slå opp -bind adresse: '%s' - - - - Cannot resolve -externalip address: '%s' - Kunne ikke slå opp -externalip adresse: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Ugyldig beløp for -paytxfee=<beløp>: '%s' - - - - Error: could not start node - - - - - Sending... - Sender... - - - - Invalid amount - Ugyldig beløp - - - - Insufficient funds - Utilstrekkelige midler - - - - Loading block index... - Laster blokkindeks... - - - - Add a node to connect to and attempt to keep the connection open - Legg til node for tilkobling og hold forbindelsen åpen - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - Gebyr per KB som skal legges til transaksjoner du sender - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Laster lommebok... - - - - Cannot downgrade wallet - Kan ikke nedgradere lommebok - - - - Cannot initialize keypool - - - - - Cannot write default address - Kan ikke skrive standardadresse - - - - Rescanning... - Leser gjennom... - - - - Done loading - Ferdig med lasting - - - - To use the %s option - For å bruke %s opsjonen - - - - Error - Feil - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Du må sette rpcpassword=<passord> i konfigurasjonsfilen: -%s -Hvis filen ikke finnes, opprett den med leserettighet kun for eier av filen. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_nl.ts b/src/qt/locale/umbra_nl.ts deleted file mode 100644 index 54a558ef07..0000000000 --- a/src/qt/locale/umbra_nl.ts +++ /dev/null @@ -1,3430 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Over ShadowCoin - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> versie - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Copyright © 2009-2014 De Bitcoin ontwikkelaars -Copyright © 2012-2014 De NovaCoin ontwikkelaars -Copyright © 2014-2016 De ShadowCash ontwikkelaars - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Label - - - - Address - Adres - - - - pubkey - pubsleutel - - - - stealth - onzichtbaar - - - - (no label) - (geen label) - - - - Stealth Address - Onzichtbaar Adres - - - - n/a - (nvt) - - - - AskPassphraseDialog - - - Passphrase Dialog - Wachtwoordscherm - - - - Enter passphrase - Voer wachtwoord in - - - - New passphrase - Nieuw wachtwoord - - - - Repeat new passphrase - Herhaal wachtwoord - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Bedoeld om het command 'sendmoney' uit te schakelen indien het OS niet meer veilig is. Geeft geen echte beveiliging. - - - - For staking only - Alleen voor staking - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Vul een nieuw wachtwoord in voor uw portemonnee. <br/> Gebruik een wachtwoord van <b>10 of meer verschillende karakters</b>, of <b> acht of meer woorden</b> . - - - - Encrypt wallet - Versleutel portemonnee - - - - This operation needs your wallet passphrase to unlock the wallet. - Deze operatie vereist uw portemonneewachtwoord om de portemonnee te openen. - - - - Unlock wallet - Open portemonnee - - - - This operation needs your wallet passphrase to decrypt the wallet. - Deze operatie vereist uw portemonneewachtwoord om de portemonnee te ontsleutelen - - - - Decrypt wallet - Ontsleutel portemonnee - - - - Change passphrase - Wijzig wachtwoord - - - - Enter the old and new passphrase to the wallet. - Vul uw oude en nieuwe portemonneewachtwoord in. - - - - Confirm wallet encryption - Bevestig versleuteling van de portemonnee - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Waarschuwing: Als je je portemonnee versleuteld en je verliest je wachtwoord zul je <b>AL JE MUNTEN VERLIEZEN</b>! - - - - Are you sure you wish to encrypt your wallet? - Weet u zeker dat u uw portemonnee wilt versleutelen? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - BELANGRIJK: Elke eerder gemaakte backup van uw portemonneebestand dient u te vervangen door het nieuw gegenereerde, versleutelde portemonneebestand. Om veiligheidsredenen zullen eerdere backups van het niet-versleutelde portemonneebestand onbruikbaar worden zodra u uw nieuwe, versleutelde, portemonnee begint te gebruiken. - - - - - Warning: The Caps Lock key is on! - Waarschuwing: De Caps-Lock-toets staat aan! - - - - - Wallet encrypted - Portemonnee versleuteld - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin zal nu sluiten om het versleutel proces te voltooien. Onthou dat het versleutelen van je portemonnee je niet volledig beschermt tegen diefstal van munten door malware op je computer. - - - - - - - Wallet encryption failed - Portemonneeversleuteling mislukt - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Portemonneeversleuteling mislukt door een interne fout. Uw portemonnee is niet versleuteld. - - - - - The supplied passphrases do not match. - De opgegeven wachtwoorden komen niet overeen - - - - Wallet unlock failed - Portemonnee openen mislukt - - - - - - The passphrase entered for the wallet decryption was incorrect. - Het opgegeven wachtwoord voor de portemonnee-ontsleuteling is niet correct. - - - - Wallet decryption failed - Portemonnee-ontsleuteling mislukt - - - - Wallet passphrase was successfully changed. - Portemonneewachtwoord is met succes gewijzigd. - - - - ClientModel - - - Network Alert - Netwerkwaarschuwing - - - - CoinControlDialog - - - Coin Control - Coin controle opties - - - - Quantity: - Kwantiteit - - - - Bytes: - Bytes: - - - - Amount: - Bedrag: - - - - Priority: - Prioriteit: - - - - Fee: - Vergoeding: - - - - Low Output: - Lage uitvoer: - - - - - no - nee - - - - After Fee: - Na vergoeding: - - - - Change: - Wijzigen: - - - - (un)select all - (de)selecteer alles - - - - Tree mode - Boom modus - - - - List mode - Lijst modus - - - - Amount - Bedrag - - - - Label - Label - - - - Address - Adres - - - - Date - Datum - - - - Confirmations - Bevestigingen - - - - Confirmed - Bevestigd - - - - Priority - Prioriteit - - - - Copy address - Kopieer adres - - - - Copy label - Kopieer label - - - - - Copy amount - Kopieer bedrag - - - - Copy transaction ID - Kopieer transactie-ID - - - - Copy quantity - Kopieer aantal - - - - Copy fee - Kopieer vergoeding - - - - Copy after fee - Kopieer na vergoeding - - - - Copy bytes - Kopieer bytes - - - - Copy priority - Kopieer prioriteit - - - - Copy low output - Kopieer lage uitvoer - - - - Copy change - Kopieer wijzig - - - - highest - hoogste - - - - high - hoog - - - - medium-high - gemiddeld hoog - - - - medium - gemiddeld - - - - low-medium - laag gemiddeld - - - - low - laag - - - - lowest - laagste - - - - - DUST - STOF - - - - - yes - ja - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Dit label wordt rood, als de transactie grootte groter is dan 10000 bytes.<br> - -Dit betekend een fee van minimaal %1 per kb is noodzakelijk.<br> - -Kan varieren van +/- 1 Byte per invulling - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Transacties met hogere prioriteit komen sneller in een blok - -Dit label wordt rood, als de prioriteit kleiner is dan "normaal". - -Dit betekend een fee van minimaal %1 per kb is noodzakelijk. - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Dit label wordt rood, als elke ontvanger ontvangt een bedrag dat kleiner is dan 1%. - -Dit betekent dat een vergoeding van ten minste 2% is vereist. - -Bedragen onder 0.546 keer het minimum vergoeding worden weergegeven als DUST. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Dit label wordt rood, als de verandering kleiner is dan %1. - -Dit betekend dat een fee van %2 is vereist. - - - - - (no label) - (geen label) - - - - change from %1 (%2) - wijzig van %1 (%2) - - - - (change) - (wijzig) - - - - EditAddressDialog - - - Edit Address - Bewerk Adres - - - - &Label - &Label - - - - The label associated with this address book entry - Het label geassocieerd met deze notitie in het adresboek - - - - &Address - &Adres - - - - The address associated with this address book entry. This can only be modified for sending addresses. - Het adres geassocieerd met deze notitie in het adresboek. Dit kan enkel aangepast worden bij verzend-adressen. - - - - &Stealth Address - Onzichtbaar Adres - - - - New receiving address - Nieuw ontvangstadres - - - - New sending address - Nieuw adres om naar te verzenden - - - - Edit receiving address - Bewerk ontvangstadres - - - - Edit sending address - Bewerk adres om naar te verzenden - - - - The entered address "%1" is already in the address book. - Het opgegeven adres "%1" bestaat al in uw adresboek. - - - - The entered address "%1" is not a valid ShadowCoin address. - Het ingevoerde adres "%1" is geen geldig ShadowCoin adres. - - - - Could not unlock wallet. - Kon de portemonnee niet openen. - - - - New key generation failed. - Genereren nieuwe sleutel mislukt. - - - - GUIUtil::HelpMessageBox - - - version - versie - - - - - Shadow - Shadow - - - - Usage: - Gebruik: - - - - command-line options - Commandoregel-opties - - - - UI options - Gebruikerinterface-opties - - - - Set language, for example "de_DE" (default: system locale) - Stel taal in, bijvoorbeeld "de_DE" (standaard: systeeminstellingen) - - - - Start minimized - Geminimaliseerd starten - - - - Show splash screen on startup (default: 1) - Laat laadscherm zien bij het opstarten. (standaard: 1) - - - - MessageModel - - - Type - Type - - - - Sent Date Time - Verzonden tijd - - - - Received Date Time - Ontvangen Tijd - - - - Label - Label - - - - To Address - Van adres - - - - From Address - Naar adres - - - - Message - Bericht - - - - Send Secure Message - Verstuur Beveiligd Bericht - - - - Send failed: %1. - Versturen mislukt: %1. - - - - - (no label) - (geen label) - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - Kan shadow niet starten: click-om-te-betalen handler - - - - PeerTableModel - - - Address/Hostname - Adres/Hostnaam - - - - User Agent - Gebruiker Agent - - - - Ping Time - Ping tijd - - - - QObject - - - %1 d - %1 d - - - - %1 h - %1 h - - - - %1 m - %1 m - - - - - %1 s - %1 s - - - - None - Geen - - - - N/A - N.v.t. - - - - %1 ms - %1 ms - - - - RPCConsole - - - Client name - Clientnaam - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N.v.t. - - - - Client version - Clientversie - - - - &Information - &Informatie - - - - Shadow - Debug window - Shadow - Debug scherm - - - - Shadow Core - Shadow Core - - - - Using OpenSSL version - Gebruikt OpenSSL versie - - - - Using BerkeleyDB version - Gebruikt BerkeleyDB versie - - - - Startup time - Opstarttijd - - - - Network - Netwerk - - - - Name - Naam - - - - Number of connections - Aantal connecties - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - &Netwerkverkeer - - - - &Clear - &Opschonen - - - - Totals - Totalen - - - - - In: - In: - - - - - Out: - Uit: - - - - &Peers - &Peers - - - - - - Select a peer to view detailed information. - Selecteer een peer om gedetailleerde info te zien. - - - - Peer ID - Peer ID - - - - Direction - Directie - - - - Version - Versie - - - - User Agent - Gebruiker Agent - - - - Services - Diensten - - - - Starting Height - Start Hoogte - - - - Sync Height - Sync Hoogte - - - - Ban Score - Ban Score - - - - Connection Time - Connectie Tijd - - - - Last Send - Laatst Verzonden - - - - Last Receive - Laatst Ontvangen - - - - Bytes Sent - Bytes verstuurd - - - - Bytes Received - Bytes ontvangen - - - - Ping Time - Ping tijd - - - - Time Offset - Tijd compenseren - - - - Block chain - Blokketen - - - - Current number of blocks - Huidig aantal blokken - - - - Estimated total blocks - Geschat totaal aantal blokken - - - - Last block time - Tijd laatste blok - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - Open de Shadow debog log bestand van de huidige data directory. Dit kan enkele minuten duren voor grote log bestanden. - - - - &Open - &Open - - - - Command-line options - Commandoregel-opties - - - - &Show - &Show - - - - &Console - &Console - - - - Build date - Bouwdatum - - - - Debug log file - Debug-logbestand - - - - Clear console - Maak console leeg - - - - Welcome to the Shadow Core RPC console. - Welkom bij het Shadow Kern RPC paneel. - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Gebruik de pijltjestoetsen om door de geschiedenis te navigeren, en <b>Ctrl-L</b> om het scherm leeg te maken. - - - - Type <b>help</b> for an overview of available commands. - Typ <b>help</b> voor een overzicht van de beschikbare commando's. - - - - via %1 - via %1 - - - - - never - nooit - - - - Inbound - Inkomend - - - - Outbound - Uitgaand - - - - Unknown - Onbekend - - - - - Fetching... - Ophalen... - - - - ShadowBridge - - - Incoming Message - Inkomend Bericht - - - - default - standaard - - - - <b>%1</b> to %2 (%3) - <b> %1 </b> to %2 (%3) - - - - <b>%1</b> to SHADOW %2 (%3) - <b>%1</b> aan SHADOW %2 (%3) - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - <b>%1</b> SHADOW, kring grootte %2 aan SHADOW %3 (%4) - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - <b>%1</b> SHADOW, kring grootte %2 aan SDC %3 (%4) - - - - - - - Error: - Fout: - - - - Unknown txn type detected %1. - Onbekende txn type gedetecteerd %1. - - - - Input types must match for all recipients. - Invoer types moet matchen voor alle ontvangers. - - - - Ring sizes must match for all recipients. - Kring grootte moet matchen voor alle ontvangers. - - - - Ring size outside range [%1, %2]. - Kring grootte buiten bereik [%1, %2}. - - - - - Confirm send coins - Bevestig versturen munten - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - Weet je zeker dat je dit wil versturen? -Kring grootte van één is niet geheim en tast het netwerk aan. - - - - - and - en - - - - Are you sure you want to send %1? - Weet je zeker dat je %1 wilt verzenden? - - - - - - - - - - - - - - - - - - - Send Coins - Verstuur munten - - - - The change address is not valid, please recheck. - Het ingevoerde adres "%1" is geen geldig ShadowCoin adres. - - - - - The recipient address is not valid, please recheck. - Het ontvangstadres is niet geldig, controleer uw invoer. - - - - The amount to pay must be larger than 0. - Het ingevoerde bedrag moet groter zijn dan 0. - - - - The amount exceeds your balance. - Bedrag is hoger dan uw huidige saldo - - - - The total exceeds your balance when the %1 transaction fee is included. - Totaal overschrijdt uw huidige saldo wanneer de %1 transactiekosten worden meegerekend - - - - - Duplicate address found, can only send to each address once per send operation. - Dubbel adres gevonden, u kunt slechts eenmaal naar een bepaald adres verzenden per transactie - - - - Error: Transaction creation failed. - Fout: Creëren van transactie mislukt. - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Fout: De transactie was geweigerd, Dit kan gebeuren als sommige munten in je portemonnee al gebruikt zijn, door het gebruik van een kopie van wallet.dat en de munten in de kopie zijn niet gemarkeerd als gebruikt. - - - - Error: Narration is too long. - Fout: Narratief is te lang. - - - - Error: Ring Size Error. - Fout: Kring Grootte Fout. - - - - Error: Input Type Error. - Fout: Invoer Type Fout. - - - - Error: Must be in full mode to send anon. - Fout: Alleen in volledige node modus kan anoniem. - - - - Error: Invalid Stealth Address. - Fout: Verkeerd Onzichtbaar Adres - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - Totaal overschrijdt uw huidige saldo wanneer de %1 transactiekosten worden meegerekend - - - - Error generating transaction. - Fout generen transactie. - - - - Error generating transaction: %1 - Fout generen transactie: %1 - - - - - - - - Send Message - Verstuur Bericht - - - - The message can't be empty. - Het bericht kan niet leeg zijn. - - - - Error: Message creation failed. - Fout: Bericht creëer fout. - - - - Error: The message was rejected. - Fout: Bericht was geweigerd. - - - - Sanity Error! - Toerekenbaarheid Fout! - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - Overzicht - - - - Wallet - Portemonnee - - - - Send - Verstuur - - - - Receive - Ontvang - - - - Transactions - Transacties - - - - Address Book - Adresboek - - - - Chat - Gesprek - - - - Notifications - Notificaties - - - - Options - Opties - - - - Wallet Management - Portemonnee Management - - - - Add New Wallet - Voeg nieuwe portemonnee toe - - - - Import Wallet - Importeer portemonnee - - - - Advanced - Geavanceerd - - - - Backup - Backup - - - - Backup Wallet - Backup Portemonnee - - - - Encrypt Wallet - Versleutel portemonnee - - - - Change Passphrase - Wijzig wachtwoord - - - - (Un)lock Wallet - Ont- of vergrendel portemonnee - - - - Tools - Gereedschap - - - - Chain Data - Blokketen gegevens - - - - Block Explorer - Blok ontdekker - - - - Sign Message - Onderteken Bericht - - - - Verify Message - Verifieer Bericht - - - - Debug - Debug - - - - About Shadow - Over Shadow - - - - About QT - Over &Qt - - - - QR code - QR code - - - - Address: - Adres: - - - - Label: - Label: - - - - Narration: - Narratief: - - - - Amount: - Bedrag: - - - - Add new receive address - Nieuw ontvangstadres toevoegen - - - - Add Address - Adres toevoegen - - - - Add a new contact - Nieuw contact toevoegen - - - - Address Lookup - Adres opzoeken - - - - Address Type - Adres type - - - - Normal - Normaal - - - - Stealth - onzichtbaar - - - - Group - Groep - - - - BIP32 - BIP32 - - - - Label - Label - - - - Address - Adres - - - - Public Key - Publieke Sleutel - - - - Transaction Hash - Transactie Hash - - - - Recent Transactions - Recente Transacties - - - - Market - Markt - - - - Advanced Options - Geavanceerde opties - - - - Coin Control - Coin controle opties - - - - Make payment - Betalen - - - - Balance transfer - Saldo overdracht - - - - Select Inputs - Selecteer Inputs - - - - Automatically selected - Automatisch geselecteerd - - - - Quantity: - Kwantiteit - - - - Fee: - Vergoeding: - - - - After Fee: - Na vergoeding: - - - - Bytes: - Bytes: - - - - Priority: - Prioriteit: - - - - LowOutput: - LageOutput: - - - - Change: - Wijzigen: - - - - Custom change address - Aangepast nieuw Adres - - - - From account - Van account - - - - PUBLIC - PUBLIEK - - - - PRIVATE - PRIVÉ - - - - Balance: - Saldo: - - - - Ring Size: - Kring Grootte: - - - - To account - Naar Account - - - - Pay to - Betaal aan - - - - (no label) - (geen label) - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - Tor connectie offline - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - Niet staking, omdat portemonnee beveiligd is - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - Verstuur naar publiek of besloten - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - Het adres om saldo naar te sturen - - - - The label for this address - Het label van dit adres. - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - Datum en tijd waarop deze transactie is ontvangen. - - - - Transaction status. Hover over this field to show number of confirmations. - Transactiestatus. Houd de muiscursor boven dit veld om het aantal bevestigingen te laten zien. - - - - Type of transaction. - Type transactie. - - - - Destination address of transaction. - Ontvangend adres van transactie. - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - Voer wachtwoord in - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - Is dit een bip44 pad? - - - - ID - ID - - - - Created - Gemaakt - - - - Active Account - Actief Account - - - - Default - standaard - - - - Path - Pad - - - - Active - Actief - - - - Master - Meester - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - Umbra - - - - Client - Client - - - - E&xit - &Afsluiten - - - - Quit application - Programma afsluiten - - - - &About ShadowCoin - &Over ShadowCoin - - - - Show information about ShadowCoin - Toon informatie over ShadowCoin - - - - About &Qt - Over &Qt - - - - Show information about Qt - Toon informatie over Qt - - - - &Options... - &Opties... - - - - Modify configuration options for ShadowCoin - Verander configuratie opties voor ShadowCoin - - - - &Show / Hide - &Toon / Verberg - - - - &Encrypt Wallet... - &Versleutel Portemonnee... - - - - Encrypt or decrypt wallet - Versleutel of ontsleutel de portemonnee - - - - &Backup Wallet... - &Backup Portemonnee... - - - - Backup wallet to another location - Backup portemonnee naar een andere locatie - - - - &Change Passphrase... - &Wijzig Wachtwoord - - - - Change the passphrase used for wallet encryption - Wijzig het wachtwoord voor uw portemonneversleuteling - - - - &Unlock Wallet... - Ontgrendel portemonnee... - - - - Unlock wallet - Open portemonnee - - - - &Lock Wallet - &Sluit portemonnee - - - - Lock wallet - Sluit portemonnee - - - - &Debug window - &Debug scherm - - - - Open debugging and diagnostic console - Open debugging en diagnostische console - - - - &File - &Bestand - - - - &Settings - &Instellingen - - - - &Help - &Hulp - - - - Wallet - Portemonnee - - - - - [testnet] - [testnetwerk] - - - - - Umbra client - Umbra client - - - - %n active connection(s) to ShadowCoin network - %n actieve verbindingen met Shadowcoin netwerk%n actieve verbindingen met Shadowcoin netwerk - - - - block - blok - - - - header - koptekst - - - - blocks - blokken - - - - headers - kopteksten - - - - - Synchronizing with network... - Synchroniseren met netwerk... - - - - Downloading filtered blocks... - Downloaden gefilterd blokken... - - - - ~%1 filtered block(s) remaining (%2% done). - ~%1 gefilterd blok(ken) overgebleven(%2% gedaan). - - - - Importing blocks... - Importeren blokken... - - - - ~%n block(s) remaining - ~%n blok overgebleven~%n blok(ken) overgebleven - - - - - Imported - Geïmporteerd - - - - - Downloaded - Gedownload - - - - %1 of %2 %3 of transaction history (%4% done). - %1 of %2 %3 van transactie geschiedenis (%4% gedaan). - - - - %1 blocks of transaction history. - %1 blokken van transactie geschiedenis. - - - - %n second(s) ago - %n seconden geleden %n seconden geleden - - - - %n minute(s) ago - %n minuut geleden%n minuten geleden - - - - %n hour(s) ago - %n uur geleden%n uren geleden - - - - %n day(s) ago - %n dag geleden%n dagen geleden - - - - Up to date - Actueel - - - - Catching up... - Aan het bijwerken... - - - - Last received %1 was generated %2. - Laatst ontvangen %1 was gegenereerd %2. - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - De grootte van deze transactie overschrijdt de limiet. U kan deze transactie laten uitvoeren voor een meerkost van %1, dewelke doorgestuurd wordt naar de nodes die uw transactie verwerken, alsook ter ondersteuning van het netwerk. Wil u deze meerkost betalen? - - - - Confirm transaction fee - Bevestig transactie kosten - - - - Sent transaction - Verzend transactie - - - - Incoming transaction - Binnenkomende transactie - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Datum: %1 -Bedrag: %2 -Type: %3 -Adres: %4 - - - - - - Incoming Message - Inkomend Bericht - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - Datum: %1 -Van Adres:%2 -Naar Adres: %3 -Bericht: %4 - - - - - - - URI handling - URI-behandeling - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - URI kan niet ontleedt worden! Mogelijke oorzaken zijn een ongeldig ShadowCoin adres of incorrecte URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - Backup Portemonnee - - - - Wallet Data (*.dat) - Portemonnee bestanden (*.dat) - - - - Backup Failed - Backup mislukt - - - - There was an error trying to save the wallet data to the new location. - Er was een fout opgetreden bij het opslaan van de wallet data naar de nieuwe locatie. - - - - Lock Wallet - Sluit portemonnee - - - - Error: Wallet must first be encrypted to be locked. - Fout: Portemonnee moet eerst worden versleuteld voor het beveiligen. - - - - %n second(s) - %n seconden %n seconden - - - - %n minute(s) - %n minuut%n minuten - - - - %n hour(s) - %n uur%n uren - - - - %n day(s) - %n dag%n dagen - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - Staking. -U gewicht is %1. -Netwerk gewicht is %2 -Verwachten tijd tot beloning is %3 - - - - Not staking because wallet is in thin mode - Niet staking omdat portemonnee zit in licht modes - - - - Not staking, staking is disabled - Niet staking, omdat inzetten is uitgezet. - - - - Not staking because wallet is locked - Niet staking, omdat portemonnee beveiligd is - - - - Not staking because wallet is offline - Niet staking, omdat portemonnee offline is - - - - Not staking because wallet is syncing - Niet staking, omdat portemonnee aan het synchroniseren is. - - - - Not staking because you don't have mature coins - Niet staking, omdat je geen mature munten hebt - - - - Not staking - Niet aan het staken. - - - - Received with - Ontvangen met - - - - Received from - Ontvangen van - - - - Sent to - Verzend aan - - - - Payment to yourself - Betaling aan uzelf - - - - Mined - Gedolven - - - - Received shadow - Ontvangen Shadow - - - - Sent shadow - Verstuurde Shadow - - - - Other - Anders - - - - TrafficGraphWidget - - - KB/s - KB/s - - - - TransactionDesc - - - Open until %1 - Openen totdat %1 - - - - Open for %n block(s) - Open voor nog %n blokOpen voor nog %n blokken - - - - conflicted - conflicted - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/onbevestigd - - - - %1 confirmations - %1 bevestigingen - - - - Status - Status - - - - , broadcast through %n node(s) - , uitgezonden naar %n node, uitgezonden naar %n nodes - - - - Date - Datum - - - - Source - Bron - - - - Generated - Gegenereerd - - - - - - From - Van - - - - - - - To - Aan - - - - - - - own address - eigen adres - - - - - label - label - - - - - - - - Credit - Credit - - - - matures in %n more block(s) - komt tot wasdom na %n nieuw blokkomt tot wasdom na %n nieuwe blokken - - - - not accepted - niet geaccepteerd - - - - - - - Debit - Debet - - - - Transaction fee - Transactiekosten - - - - Net amount - Netto bedrag - - - - Message - Bericht - - - - Comment - Opmerking - - - - Transaction ID - Transactie-ID: - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Gegenereerd munten moeten 510 blokken maturen voordat ze kunnen worden besteed. Wanneer je een blok genereerd, het naar het netwerk is verzonden en toegevoegd aan de blokketen, zal de status veranderen naar "niet geaccepteerd"and kan het niet uitgegeven worden. Dit kan soms gebeuren als een ander knooppunt genereert een blok binnen een paar seconden na jou. {120 ?} - - - - Debug information - Debug-informatie - - - - Transaction - Transactie - - - - Inputs - Inputs - - - - Amount - Bedrag - - - - true - waar - - - - false - onwaar - - - - , has not been successfully broadcast yet - , is nog niet met succes uitgezonden - - - - - unknown - onbekend - - - - TransactionDescDialog - - - Transaction details - Transactiedetails - - - - This pane shows a detailed description of the transaction - Dit venster laat een uitgebreide beschrijving van de transactie zien - - - - TransactionTableModel - - - Date - Datum - - - - Type - Type - - - - Address - Adres - - - - Amount - Bedrag - - - - Open until %1 - Open tot %1 - - - - Confirmed (%1 confirmations) - Bevestigd (%1 bevestigingen) - - - - Open for %n more block(s) - Open voor nog %n blokOpen voor nog %n blokken - - - - Narration - Narratief - - - - Offline - Offline - - - - Unconfirmed - Onbevestigd: - - - - Confirming (%1 of %2 recommended confirmations) - Bevestigen.. (%1 van de %2 bevestigingen) - - - - Conflicted - Conflicted - - - - Immature (%1 confirmations, will be available after %2) - Immature (%1 bevestiging, word beschikbaar na %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Dit blok is niet ontvangen bij andere nodes en zal waarschijnlijk niet worden geaccepteerd! - - - - Generated but not accepted - Gegenereerd maar niet geaccepteerd - - - - (n/a) - (nvt) - - - - Transaction status. Hover over this field to show number of confirmations. - Transactiestatus. Houd de muiscursor boven dit veld om het aantal bevestigingen te laten zien. - - - - Date and time that the transaction was received. - Datum en tijd waarop deze transactie is ontvangen. - - - - Type of transaction. - Type transactie. - - - - Destination address of transaction. - Ontvangend adres van transactie. - - - - Amount removed from or added to balance. - Bedrag verwijderd van of toegevoegd aan saldo - - - - WalletModel - - - - Sending... - Versturen... - - - - bitcoin-core - - - ShadowCoin version - ShadowCoin versie - - - - Usage: - Gebruik: - - - - Send command to -server or shadowcoind - Verstuur commando naar -server of shadowcoind - - - - List commands - Lijst van commando's - - - - Get help for a command - Toon hulp voor een commando - - - - Options: - Opties: - - - - Specify configuration file (default: shadowcoin.conf) - Selecteer configuratie bestand (standaard: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Selecteer pid bestand (standaard: shadowcoin.conf) - - - - Specify wallet file (within data directory) - Specificeer het portemonnee bestand (vanuit de gegevensmap) - - - - Specify data directory - Stel datamap in - - - - Set database cache size in megabytes (default: 25) - Stel databankcachegrootte in in megabytes (standaard: 25) - - - - Set database disk log size in megabytes (default: 100) - Stel database cache grootte in in megabytes (standaard: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Luister voor verbindingen op <poort> (standaard: 51737 of testnet: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Onderhoud maximaal <n> verbindingen naar peers (standaard: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Verbind naar een node om adressen van anderen op te halen, en verbreek vervolgens de verbinding - - - - Specify your own public address - Specificeer uw eigen publieke adres - - - - Bind to given address. Use [host]:port notation for IPv6 - Koppel aan gegeven adres. Gebruik [host]:poort notatie voor IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Stake je munten om netwerk te supporten en krijg hiervoor beloning (standaard: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Drempel om verbinding te verbreken naar zich misdragende peers (standaard: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Aantal seconden dat zich misdragende peers niet opnieuw mogen verbinden (standaard: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Er is een fout opgetreden tijdens het instellen van de inkomende RPC-poort %u op IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Ontkoppel blok en adressenbestanden. Verhoogt shutdown tijd (standaard: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Fout: De transactie was geweigerd, Dit kan gebeuren als sommige munten in je portemonnee al gebruikt zijn, door het gebruik van een kopie van wallet.dat en de munten in de kopie zijn niet gemarkeerd als gebruikt. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Fout: Deze transactie vereist een transactie vergoeding van ten minste %s vanwege de hoeveelheid, complexiteit, of het gebruik van recent ontvangen gelden - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Wacht op JSON-RPC-connecties op <poort> (standaard: 51736 of testnet: 51996) - - - - Accept command line and JSON-RPC commands - Aanvaard commandoregel- en JSON-RPC-commando's - - - - Error: Transaction creation failed - Fout: Creëren van transactie mislukt. - - - - Error: Wallet locked, unable to create transaction - Fout: Portemonnee is op slot, niet mogelijk een transactie te creëren. - - - - Importing blockchain data file. - Importeren van blokketen data bestand. - - - - Importing bootstrap blockchain data file. - Importeren van blokketen data bestand. - - - - Run in the background as a daemon and accept commands - Draai in de achtergrond als daemon en aanvaard commando's - - - - Use the test network - Gebruik het testnetwerk - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Accepteer verbindingen van buitenaf (standaard: 1 als geen -proxy of -connect is opgegeven) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Er is een fout opgetreden tijdens het instellen van de inkomende RPC-poort %u op IPv6, terugval naar IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Fout bij het ​​initialiseren van de database omgeving %s! Om te herstellen, BACKUP die directory, verwijder dan alles van behalve het wallet.dat. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Stel maximale grootte van high-priority/low-fee transacties in bytes (standaard: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Waarschuwing: -paytxfee is zeer hoog ingesteld. Dit zijn de transactiekosten die u betaalt bij het versturen van een transactie. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Waarschuwing: Controleer of de datum en tijd van de computer juist zijn! Als uw klok verkeerd is ShadowCoin zal niet goed werken. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Waarschuwing: Fout bij het lezen van wallet.dat! Alle sleutels zijn in goede orde uitgelezen, maar transactiedata of adresboeklemma's zouden kunnen ontbreken of fouten bevatten. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Waarschuwing: wallet.dat is corrupt, data is veiliggesteld! Originele wallet.dat is opgeslagen als wallet.{tijdstip}.bak in %s; als uw balans of transacties incorrect zijn dient u een backup terug te zetten. - - - - Attempt to recover private keys from a corrupt wallet.dat - Poog de geheime sleutels uit een corrupt wallet.dat bestand terug te halen - - - - Block creation options: - Blokcreatie-opties: - - - - Connect only to the specified node(s) - Verbind alleen naar de gespecificeerde node(s) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Ontdek eigen IP-adres (standaard: 1 als er wordt geluisterd en geen -externalip is opgegeven) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Mislukt om op welke poort dan ook te luisteren. Gebruik -listen=0 as u dit wilt. - - - - Find peers using DNS lookup (default: 1) - Zoek peers doormiddel van DNS lookup (standaard: 1) - - - - Sync checkpoints policy (default: strict) - Sync checkpoints beleid (standaard: strikt) - - - - Invalid -tor address: '%s' - Ongeldig-tor adres: '%s' - - - - Invalid amount for -reservebalance=<amount> - Ongeldig bedrag voor -reservebalance = <bedrag> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connectie ontvangstbuffer, <n>*1000 bytes (standaard: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maximum per-connectie zendbuffer, <n>*1000 bytes (standaard: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Verbind alleen naar nodes in netwerk <net> (IPv4, IPv6 of Tor) - - - - Output extra debugging information. Implies all other -debug* options - Geef extra debugging informatie weer. Impliceert alle andere debug * opties - - - - Output extra network debugging information - Geef extra netwerk debug informatie weer - - - - Prepend debug output with timestamp - Voeg een tijdstempel toe aan debug output - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL-opties: (zie de Bitcoin wiki voor SSL-instructies) - - - - Select the version of socks proxy to use (4-5, default: 5) - Selecteer de versie van socks proxy (4-5, default: 5) - - - - Send trace/debug info to console instead of debug.log file - Stuur trace/debug-info naar de console in plaats van het debug.log bestand - - - - Send trace/debug info to debugger - Stuur trace/debug info naar de debugger - - - - Set maximum block size in bytes (default: 250000) - Stel maximale block grootte in bytes in (standaard: 250000) - - - - Set minimum block size in bytes (default: 0) - Stel minimum blokgrootte in in bytes (standaard: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Verklein debug.log-bestand bij het opstarten van de client (standaard: 1 als geen -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Specificeer de time-outtijd in milliseconden (standaard: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - Kan checkpoint niet ondertekenen, verkeerde checkpoint sleutel? - - - - - Use UPnP to map the listening port (default: 0) - Gebruik UPnP om de luisterende poort te mappen (standaard: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Gebruik UPnP om de luisterende poort te mappen (standaard: 1 als er wordt geluisterd) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Gebruik proxy tor verborgen diensten (standaard: zelfde als -proxy) - - - - Username for JSON-RPC connections - Gebruikersnaam voor JSON-RPC-verbindingen - - - - Verifying database integrity... - Database integriteit wordt geverifieërd - - - - WARNING: syncronized checkpoint violation detected, but skipped! - WAARSCHUWING: gesynchroniseerd checkpoint overtreding is geconstateerd, maar overgeslagen! - - - - Warning: Disk space is low! - Waarschuwing: Hardeschijf raakt vol! - - - - Warning: This version is obsolete, upgrade required! - Waarschuwing: Deze versie is verouderd, een upgrade is vereist! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrupt, veiligstellen mislukt - - - - Password for JSON-RPC connections - Wachtwoord voor JSON-RPC-verbindingen - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, u moet een rpcpassword instellen in het configuratiebestand: -%s -Het wordt aanbevolen de volgende willekeurig wachtwoord gebruiken: -rpcuser = shadowcoinrpc -rpcpassword = %s -(je hoeft niet dit wachtwoord te onthouden) -De gebruikersnaam en het wachtwoord MAG NIET hetzelfde zijn. -Als het bestand niet bestaat, maakt u met leesbare-alleen-eigenaar bestandsbeheermachtigingen. -Het wordt ook aanbevolen om alertnotify instellen zodat u een melding van problemen; -bijvoorbeeld: alertnotify = echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - Find peers using internet relay chat (default: 0) - Zoek peers door gebruik van Internet Relay Chat (standaard: 1) {? 0)} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Synchroniseer tijd met andere connecties. Uitschakelen als de tijd op uw systeem nauwkeurig is bijv. synchroniseren met NTP (standaard: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - Bij het maken van transacties, negeer ingangen met waarde minder dan dit (standaard: 0,01) - - - - Allow JSON-RPC connections from specified IP address - Sta JSON-RPC verbindingen van opgegeven IP-adres toe - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Verstuur commando's naar proces dat op <ip> draait (standaard: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Voer commando uit zodra het beste blok verandert (%s in cmd wordt vervangen door blockhash) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Voer opdracht uit zodra een portemonneetransactie verandert (%s in cmd wordt vervangen door TxID) - - - - Require a confirmations for change (default: 0) - Vereist een bevestiging voor verandering (standaard: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Dwing transactie scripts gebruik van canonieke PUSH operatoren (standaard: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Voer opdracht uit zodra een relevante waarschuwing wordt ontvangen (%s in cmd wordt vervangen door bericht) - - - - Upgrade wallet to latest format - Vernieuw portemonnee naar nieuwste versie - - - - Set key pool size to <n> (default: 100) - Stel sleutelpoelgrootte in op <n> (standaard: 100) - - - - Rescan the block chain for missing wallet transactions - Doorzoek de blokketen op ontbrekende portemonnee-transacties - - - - How many blocks to check at startup (default: 2500, 0 = all) - Hoeveel blokken controleren bij opstarten (standaard: 2500, 0= alles) - - - - How thorough the block verification is (0-6, default: 1) - Hoe grondig het blokverificatie is (0-6, standaard: 1) - - - - Imports blocks from external blk000?.dat file - Importeer blokken van extern blk000?.dat bestand - - - - Use OpenSSL (https) for JSON-RPC connections - Gebruik OpenSSL (https) voor JSON-RPC-verbindingen - - - - Server certificate file (default: server.cert) - Certificaat-bestand voor server (standaard: server.cert) - - - - Server private key (default: server.pem) - Geheime sleutel voor server (standaard: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Aanvaardbare cijfers (standaard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Fout: Portemonnee ontgrendeld voor alleen staking, niet in staat om de transactie te maken. - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - WAARSCHUWING: Ongeldig controlepunt gevonden! Weergegeven transacties kunnen niet kloppen! Het is mogelijk dat je moet upgraden, of developers moet waarschuwen. - - - - This help message - Dit helpbericht - - - - Wallet %s resides outside data directory %s. - Portemonnee %s bevindt zich buiten de datamap %s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Kan een slot op data directory %s niet verkrijgen. ShadowCoin wordt waarschijnlijk al uitgevoerd. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Niet in staat om aan %s te binden op deze computer (bind gaf error %d, %s) - - - - Connect through socks proxy - Verbind door socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Sta DNS-naslag toe voor -addnode, -seednode en -connect - - - - Loading addresses... - Adressen aan het laden... - - - - Error loading blkindex.dat - Fout bij laden van blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Fout bij laden wallet.dat: Portemonnee corrupt - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Fout bij laden van wallet.dat: Portemonnee vereist een nieuwere versie van ShadowCoin - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - Portemonnee moet herschreven worden: herstart ShadowCoin om te voltooien - - - - Error loading wallet.dat - Fout bij laden wallet.dat - - - - Invalid -proxy address: '%s' - Ongeldig -proxy adres: '%s' - - - - Unknown network specified in -onlynet: '%s' - Onbekend netwerk gespecificeerd in -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Onbekende -socks proxyversie aangegeven: %i - - - - Cannot resolve -bind address: '%s' - Kan -bind adres niet herleiden: '%s' - - - - Cannot resolve -externalip address: '%s' - Kan -externlip adres niet herleiden: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Ongeldig bedrag voor -paytxfee=<bedrag>: '%s' - - - - Error: could not start node - Fout: kan geen verbinding maken met node - - - - Sending... - Versturen... - - - - Invalid amount - Ongeldig bedrag - - - - Insufficient funds - Ontoereikend saldo - - - - Loading block index... - Blokindex aan het laden... - - - - Add a node to connect to and attempt to keep the connection open - Voeg een node om naar te verbinden toe en probeer de verbinding open te houden - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Niet mogelijk om %s op deze computer. ShadowCoin is waarschijnlijk al geopened. - - - - Fee per KB to add to transactions you send - Vergoeding per KB toe te voegen aan de transacties die u verzendt - - - - Invalid amount for -mininput=<amount>: '%s' - Ongeldig bedrag voor -mininput = <bedrag>: '%s' - - - - Loading wallet... - Portemonnee aan het laden... - - - - Cannot downgrade wallet - Kan portemonnee niet downgraden - - - - Cannot initialize keypool - Kan keypool niet initialiseren - - - - Cannot write default address - Kan standaardadres niet schrijven - - - - Rescanning... - Blokketen aan het doorzoeken... - - - - Done loading - Klaar met laden - - - - To use the %s option - Om de %s optie te gebruiken - - - - Error - Fout - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - U dient rpcpassword=<wachtwoord> in te stellen in het configuratiebestand: -%s -Als het bestand niet bestaat, maak het dan aan, met een alleen-lezen permissie. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_pam.ts b/src/qt/locale/umbra_pam.ts deleted file mode 100644 index e31dc496f5..0000000000 --- a/src/qt/locale/umbra_pam.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Label - - - - Address - Address - - - - pubkey - - - - - stealth - - - - - (no label) - (alang label) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Dialogo ning Passphrase - - - - Enter passphrase - Mamalub kang passphrase - - - - New passphrase - Panibayung passphrase - - - - Repeat new passphrase - Pasibayuan ya ing bayung passphrase - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Palub ye ing bayung passphrase king wallet.<br/>Maliari pu sanang gumamit kayung passphrase a maki</b> 10 or dakal pang miyayaliuang characters</b>, o ualu o dakal pang salita</b> - - - - Encrypt wallet - I-encrypt ye ing wallet - - - - This operation needs your wallet passphrase to unlock the wallet. - Ing operasyun a ini kailangan ne ing kekayung wallet passphrase, ban a-unlock ya ing wallet - - - - Unlock wallet - Unlock ya ing wallet - - - - This operation needs your wallet passphrase to decrypt the wallet. - Ing operasyun a ini kailangan ne ing kekang wallet passphrase ban a-decrypt ne ing wallet. - - - - Decrypt wallet - I-decrypt ya ing wallet - - - - Change passphrase - Alilan ya ing passphrase - - - - Enter the old and new passphrase to the wallet. - Palub ye ing luma ampo ing bayung passphrase king wallet. - - - - Confirm wallet encryption - Kumpirman ya ing wallet encryption - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Siguradu na kang buri meng i-encrypt ing kekang wallet? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - Mayalaga: Reng milabas a backups a gewa mu gamit ing wallet file mu dapat lamung mialilan bayung gawang encrypted wallet file. Para keng seguridad , reng milabas a backups dareng ali maka encrypt a wallet file ma-ala nala istung inumpisan mu nalang gamitan reng bayu, at me encrypt a wallet. - - - - - Warning: The Caps Lock key is on! - Kapabaluan: Makabuklat ya ing Caps Lock key! - - - - - Wallet encrypted - Me-encrypt ne ing wallet - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Memali ya ing pamag-encrypt king wallet - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Memali ya ing encryption uli na ning ausan dang internal error. E ya me-encrypt ing wallet yu. - - - - - The supplied passphrases do not match. - E la mitutugma ring mibieng passphrase - - - - Wallet unlock failed - Memali ya ing pamag-unlock king wallet - - - - - - The passphrase entered for the wallet decryption was incorrect. - E ya istu ing passphrase a pepalub da para king wallet decryption - - - - Wallet decryption failed - Me-mali ya ing pamag-decrypt king wallet - - - - Wallet passphrase was successfully changed. - Mi-alilan ne ing passphrase na ning wallet. - - - - ClientModel - - - Network Alert - Alertu ning Network - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Alaga - - - - Label - - - - - Address - Address - - - - Date - Kaaldauan - - - - Confirmations - - - - - Confirmed - Me-kumpirma - - - - Priority - - - - - Copy address - Kopyan ing address - - - - Copy label - Kopyan ing label - - - - - Copy amount - Kopyan ing alaga - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (alang label) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Alilan ing Address - - - - &Label - &Label - - - - The label associated with this address book entry - - - - - &Address - &Address - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Bayung address king pamagtanggap - - - - New sending address - Bayung address king pamagpadala - - - - Edit receiving address - Alilan ya ing address king pamagpadala - - - - Edit sending address - Alilan ya ing address king pamagpadala - - - - The entered address "%1" is already in the address book. - Ing pepalub yung address "%1" ati na yu king aklat dareng address - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Ali ya bisang mag-unlock ing wallet - - - - New key generation failed. - Memali ya ing pamangaua king key - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Lagyu ning kliente - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Bersion ning Cliente - - - - &Information - &Impormasion - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Gagamit bersion na ning OpenSSL - - - - Using BerkeleyDB version - - - - - Startup time - Oras ning umpisa - - - - Network - Network - - - - Name - - - - - Number of connections - Bilang dareng koneksion - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Block chain - - - - Current number of blocks - Kasalungsungan bilang dareng blocks - - - - Estimated total blocks - Estima kareng kabuuan dareng blocks - - - - Last block time - Tatauling oras na ning block - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Ibuklat - - - - Command-line options - - - - - &Show - - - - - &Console - &Console - - - - Build date - Kaaldauan ning pamaglalang - - - - Debug log file - Debug log file - - - - Clear console - I-Clear ing console - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Gamitan me ing patas at pababang arrow para alibut me ing kasalesayan, at <b>Ctrl-L</b> ban I-clear ya ing screen. - - - - Type <b>help</b> for an overview of available commands. - I-type ing <b>help</b> ban akit la reng ati at magsilbing commands. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Makabuklat anggang %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/ali me-kumpirma - - - - %1 confirmations - %1 kumpirmasion - - - - Status - Kabilian - - - - , broadcast through %n node(s) - - - - - Date - Kaaldauan - - - - Source - Pikuanan - - - - Generated - Megawa - - - - - - From - Menibat - - - - - - - To - Para kang - - - - - - - own address - sariling address - - - - - label - label - - - - - - - - Credit - Credit - - - - matures in %n more block(s) - - - - - not accepted - ali metanggap - - - - - - - Debit - Debit - - - - Transaction fee - Bayad king Transaksion - - - - Net amount - Alaga dareng eganagana - - - - Message - Mensayi - - - - Comment - Komentu - - - - Transaction ID - ID ning Transaksion - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Impormasion ning Debug - - - - Transaction - Transaksion - - - - Inputs - - - - - Amount - Alaga - - - - true - tutu - - - - false - e tutu - - - - , has not been successfully broadcast yet - , eya matagumpeng mibalita - - - - - unknown - e miya balu - - - - TransactionDescDialog - - - Transaction details - Detalye ning Transaksion - - - - This pane shows a detailed description of the transaction - Ining pane a ini magpakit yang detalyadung description ning transaksion - - - - TransactionTableModel - - - Date - Kaaldauan - - - - Type - Klase - - - - Address - Address - - - - Amount - Alaga - - - - Open until %1 - Makabuklat anggang %1 - - - - Confirmed (%1 confirmations) - Me-kumpirma(%1 kumpirmasion) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Ing block a ini ali de atanggap deng aliwa pang nodes ania ali ya magsilbing tanggapan - - - - Generated but not accepted - Me-generate ya oneng ali ya metanggap - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Status ning Transaksion: Itapat me babo na ning field a ini ban ipakit dala reng bilang dareng me-kumpirma na - - - - Date and time that the transaction was received. - Aldo at oras nung kapilan me tanggap ya ing transaksion - - - - Type of transaction. - Klase ning transaksion - - - - Destination address of transaction. - Kepuntalan a address ning transaksion - - - - Amount removed from or added to balance. - Alagang milako o miragdag king balanse. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Pamanggamit: - - - - Send command to -server or shadowcoind - - - - - List commands - Listahan dareng commands - - - - Get help for a command - Maniauad saup para kareng command - - - - Options: - Pipamilian: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Pilinan ing data directory - - - - Set database cache size in megabytes (default: 25) - Ilage ya ing dagul o lati na ing database cache king megabytes (default: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Mag-maintain peka <n> koneksion keng peers (default: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Kumunekta king note ban ayakua mula reng peer address, at mako king panga konekta - - - - Specify your own public address - Sabyan me ing kekang pampublikong address - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Threshold for disconnecting misbehaving peers (default: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Atin kamalian a milyari kabang ayusan ya ing RPC port %u para keng pamakiramdam king IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Tumanggap command line at JSON-RPC commands - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Gumana king gulut bilang daemon at tumanggap commands - - - - Use the test network - Gamitan ing test network - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Tumanggap koneksion menibat king kilwal (default: 1 if no -proxy or -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Kapabaluan: Sobra ya katas ing makalage king -paytxfee. Ini ing maging bayad mu para king bayad na ning transaksion istung pepadala me ing transaksion a ini. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - Pipamilian king pamag-gawang block: - - - - Connect only to the specified node(s) - Kumunekta mu king mepiling node(s) - - - - Discover own IP address (default: 1 when listening and no -externalip) - I-discover ing sariling IP address (default: 1 istung makiramdam at -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Memali ya ing pamakiramdam kareng gang nanung port. Gamita me ini -listen=0 nung buri me ini. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Pipamilian ning SSL: (lawen ye ing Bitcoin Wiki para king SSL setup instructions) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Magpadalang trace/debug info okeng console kesa keng debug.log file - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Ilage ing pekaditak a dagul na ning block king bytes (default: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Username para king JSON-RPC koneksion - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Kapabaluan: Ing bersioin a ini laus ne, kailangan nang mag-upgrade! - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - Password para king JSON-RPC koneksion - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Payagan ya i JSON-RPC koneksion para king metung a IP address - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Magpadalang command king node a gagana king <ip>(default: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - I-execute ing command istung mialilan ya ing best block (%s in cmd is replaced by block hash) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - I-upgrade ing wallet king pekabayung porma - - - - Set key pool size to <n> (default: 100) - I-set ing key pool size king <n>(default: 100) - - - - Rescan the block chain for missing wallet transactions - I-scan pasibayu ing block chain para kareng mauaualang transaksion - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Gumamit OpenSSL(https) para king JSON-RPC koneksion - - - - Server certificate file (default: server.cert) - Server certificate file (default: server.cert) - - - - Server private key (default: server.pem) - Server private key (default: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Ining saup a mensayi - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Ali ya magsilbing mag-bind keng %s kening kompyuter a ini (bind returned error %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Payagan ing pamaglawe DNS para king -addnode, -seednode and -connect - - - - Loading addresses... - Lo-load da ne ing address... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Me-mali ya ing pamag-load king wallet.dat: Me-corrupt ya ing wallet - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Me-mali ya ing pamag-load king wallet.dat - - - - Invalid -proxy address: '%s' - Ali katanggap-tanggap a -proxy addresss: '%s' - - - - Unknown network specified in -onlynet: '%s' - E kilalang network ing mepili king -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - E kilalang -socks proxy version requested: %i - - - - Cannot resolve -bind address: '%s' - Eya me-resolve ing -bind address: '%s' - - - - Cannot resolve -externalip address: '%s' - Eya me-resolve ing -externalip address: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Eya maliari ing alaga keng -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Ing alaga e ya katanggap-tanggap - - - - Insufficient funds - Kulang a pondo - - - - Loading block index... - Lo-load dane ing block index... - - - - Add a node to connect to and attempt to keep the connection open - Magdagdag a node ban kumunekta at subuknan apanatili yang makabuklat ing koneksion - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Lo-load dane ing wallet... - - - - Cannot downgrade wallet - Ali ya magsilbing i-downgrade ing wallet - - - - Cannot initialize keypool - - - - - Cannot write default address - Eya misulat ing default address - - - - Rescanning... - I-scan deng pasibayu... - - - - Done loading - Yari ne ing pamag-load - - - - To use the %s option - Para agamit ing %s a pimamilian - - - - Error - Mali - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Dapat meng ilage ing rpcpassword=<password> king configuration file: -%s -Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_pl.ts b/src/qt/locale/umbra_pl.ts deleted file mode 100644 index d92b7d8f06..0000000000 --- a/src/qt/locale/umbra_pl.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - O ShadowCoin - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> wersja - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etykieta - - - - Address - Adres - - - - pubkey - - - - - stealth - - - - - (no label) - (bez etykiety) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Okienko Hasła - - - - Enter passphrase - Wpisz hasło - - - - New passphrase - Nowe hasło - - - - Repeat new passphrase - Powtórz nowe hasło - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Wprowadź nowe hasło dla portfela.<br/>Proszę użyć hasła składającego się z <b>10 lub więcej losowych znaków</b> lub <b>ośmiu lub więcej słów</b>. - - - - Encrypt wallet - Zaszyfruj portfel - - - - This operation needs your wallet passphrase to unlock the wallet. - Ta operacja wymaga hasła do portfela ażeby odblokować portfel. - - - - Unlock wallet - Odblokuj portfel - - - - This operation needs your wallet passphrase to decrypt the wallet. - Ta operacja wymaga hasła do portfela ażeby odszyfrować portfel. - - - - Decrypt wallet - Odszyfruj portfel - - - - Change passphrase - Zmień hasło - - - - Enter the old and new passphrase to the wallet. - Podaj stare i nowe hasło do portfela. - - - - Confirm wallet encryption - Potwierdź szyfrowanie portfela - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Uwaga: Jeśli zaszyfrujesz swój portfel i zgubisz hasło, wtedy<b>UTRACISZ SWOJE MONETY!</b>! - - - - Are you sure you wish to encrypt your wallet? - Jesteś pewien, że chcesz zaszyfrować swój portfel? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - WAŻNE: Wszystkie wykonane wcześniej kopie pliku portfela powinny być zamienione na nowe, szyfrowane pliki. Z powodów bezpieczeństwa, poprzednie kopie nieszyfrowanych plików portfela staną się bezużyteczne jak tylko zaczniesz korzystać z nowego, szyfrowanego portfela. - - - - - Warning: The Caps Lock key is on! - Uwaga: Klawisz Caps Lock jest włączony - - - - - Wallet encrypted - Portfel zaszyfrowany - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Szyfrowanie portfela nie powiodło się - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Szyfrowanie portfela nie powiodło się z powodu wewnętrznego błędu. Twój portfel nie został zaszyfrowany. - - - - - The supplied passphrases do not match. - Podane hasła nie są takie same. - - - - Wallet unlock failed - Odblokowanie portfela nie powiodło się - - - - - - The passphrase entered for the wallet decryption was incorrect. - Wprowadzone hasło do odszyfrowania portfela jest niepoprawne. - - - - Wallet decryption failed - Odszyfrowanie portfela nie powiodło się - - - - Wallet passphrase was successfully changed. - Hasło portfela zostało pomyślnie zmienione. - - - - ClientModel - - - Network Alert - Sieć Alert - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - Ilość: - - - - Bytes: - Bajtów: - - - - Amount: - Kwota: - - - - Priority: - Priorytet: - - - - Fee: - Opłata: - - - - Low Output: - - - - - - no - nie - - - - After Fee: - Po opłacie: - - - - Change: - Reszta: - - - - (un)select all - Zaznacz/Odznacz wszystko - - - - Tree mode - Widok drzewa - - - - List mode - Widok listy - - - - Amount - Kwota - - - - Label - - - - - Address - Adres - - - - Date - Data - - - - Confirmations - Potwierdzenia - - - - Confirmed - Potwierdzony - - - - Priority - Priorytet - - - - Copy address - Kopiuj adres - - - - Copy label - Kopiuj etykietę - - - - - Copy amount - Kopiuj kwotę - - - - Copy transaction ID - Skopiuj ID transakcji - - - - Copy quantity - Skopiuj ilość - - - - Copy fee - Skopiuj opłatę - - - - Copy after fee - Skopiuj ilość po opłacie - - - - Copy bytes - Skopiuj ilość bajtów - - - - Copy priority - Skopiuj priorytet - - - - Copy low output - - - - - Copy change - Skopiuj resztę - - - - highest - najwyższa - - - - high - wysoka - - - - medium-high - średnio wysoki - - - - medium - średnia - - - - low-medium - średnio niski - - - - low - niski - - - - lowest - najniższy - - - - - DUST - - - - - - yes - tak - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (bez etykiety) - - - - change from %1 (%2) - reszta z %1 (%2) - - - - (change) - (reszta) - - - - EditAddressDialog - - - Edit Address - Edytuj adres - - - - &Label - &Etykieta - - - - The label associated with this address book entry - - - - - &Address - &Adres - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Nowy adres odbiorczy - - - - New sending address - Nowy adres wysyłania - - - - Edit receiving address - Edytuj adres odbioru - - - - Edit sending address - Edytuj adres wysyłania - - - - The entered address "%1" is already in the address book. - Wprowadzony adres "%1" już istnieje w książce adresowej. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Nie można było odblokować portfela. - - - - New key generation failed. - Tworzenie nowego klucza nie powiodło się. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nazwa klienta - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - NIEDOSTĘPNE - - - - Client version - Wersja klienta - - - - &Information - &Informacje - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Używana wersja OpenSSL - - - - Using BerkeleyDB version - - - - - Startup time - Czas uruchomienia - - - - Network - Sieć - - - - Name - - - - - Number of connections - Liczba połączeń - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Ciąg bloków - - - - Current number of blocks - Aktualna liczba bloków - - - - Estimated total blocks - Szacowana ilość bloków - - - - Last block time - Czas ostatniego bloku - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Otwórz - - - - Command-line options - - - - - &Show - - - - - &Console - &Konsola - - - - Build date - Data kompilacji - - - - Debug log file - Plik logowania debugowania - - - - Clear console - Wyczyść konsolę - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Użyj strzałek do przewijania historii i <b>Ctrl-L</b> aby wyczyścić ekran - - - - Type <b>help</b> for an overview of available commands. - Wpisz <b>help</b> aby uzyskać listę dostępnych komend - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Otwórz do %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/niezatwierdzone - - - - %1 confirmations - %1 potwierdzeń - - - - Status - Status - - - - , broadcast through %n node(s) - , emitowany przez %n węzeł, emitowany przez %n węzły, emitowany przez %n węzłów - - - - Date - Data - - - - Source - Źródło - - - - Generated - Wygenerowano - - - - - - From - Od - - - - - - - To - Do - - - - - - - own address - własny adres - - - - - label - etykieta - - - - - - - - Credit - Przypisy - - - - matures in %n more block(s) - potwierdzona przy %n bloku więcejpotwierdzona przy %n blokach więcejpotwierdzona przy %n blokach więcej - - - - not accepted - niezaakceptowane - - - - - - - Debit - Debet - - - - Transaction fee - Prowizja transakcji - - - - Net amount - Kwota netto - - - - Message - Wiadomość - - - - Comment - Komentarz - - - - Transaction ID - ID transakcji - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Informacje debugowania - - - - Transaction - Transakcja - - - - Inputs - Wejścia - - - - Amount - Kwota - - - - true - prawda - - - - false - fałsz - - - - , has not been successfully broadcast yet - , nie został jeszcze pomyślnie wyemitowany - - - - - unknown - nieznany - - - - TransactionDescDialog - - - Transaction details - Szczegóły transakcji - - - - This pane shows a detailed description of the transaction - Ten panel pokazuje szczegółowy opis transakcji - - - - TransactionTableModel - - - Date - Data - - - - Type - Typ - - - - Address - Adres - - - - Amount - Kwota - - - - Open until %1 - Otwórz do %1 - - - - Confirmed (%1 confirmations) - Zatwierdzony (%1 potwierdzeń) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - Niepotwierdzone: - - - - Confirming (%1 of %2 recommended confirmations) - Potwierdzanie (%1 z %2 rekomendowanych potwierdzeń) - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Ten blok nie został odebrany przez jakikolwiek inny węzeł i prawdopodobnie nie zostanie zaakceptowany! - - - - Generated but not accepted - Wygenerowano ale nie zaakceptowano - - - - (n/a) - (brak) - - - - Transaction status. Hover over this field to show number of confirmations. - Status transakcji. Najedź na pole, aby zobaczyć liczbę potwierdzeń. - - - - Date and time that the transaction was received. - Data i czas odebrania transakcji. - - - - Type of transaction. - Rodzaj transakcji. - - - - Destination address of transaction. - Adres docelowy transakcji. - - - - Amount removed from or added to balance. - Kwota usunięta z lub dodana do konta. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Użycie: - - - - Send command to -server or shadowcoind - - - - - List commands - Lista poleceń - - - - Get help for a command - Uzyskaj pomoc do polecenia - - - - Options: - Opcje: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - Określ plik portfela (w obrębie folderu danych) - - - - Specify data directory - Wskaż folder danych - - - - Set database cache size in megabytes (default: 25) - Ustaw rozmiar w megabajtach cache-u bazy danych (domyślnie: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Utrzymuj maksymalnie <n> połączeń z peerami (domyślnie: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Podłącz się do węzła aby otrzymać adresy peerów i rozłącz - - - - Specify your own public address - Podaj swój publiczny adres - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Próg po którym nastąpi rozłączenie nietrzymających się zasad peerów (domyślnie: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Czas w sekundach, przez jaki nietrzymający się zasad peerzy nie będą mogli ponownie się podłączyć (domyślnie: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Wystąpił błąd podczas ustawiania portu RPC %u w tryb nasłuchu: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Akceptuj linię poleceń oraz polecenia JSON-RPC - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Uruchom w tle jako daemon i przyjmuj polecenia - - - - Use the test network - Użyj sieci testowej - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Akceptuj połączenia z zewnątrz (domyślnie: 1 jeśli nie ustawiono -proxy lub -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Wystąpił błąd podczas ustawiania portu RPC %u w tryb nasłuchu dla IPv6, korzystam z IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Ostrzeżenie: -paytxfee jest bardzo duży. To jest prowizja za transakcje, którą płacisz, gdy wysyłasz monety. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Ostrzeżenie: błąd odczytu wallet.dat! Wszystkie klucze zostały odczytane, ale może brakować pewnych danych transakcji lub wpisów w książce adresowej lub mogą one być nieprawidłowe. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Ostrzeżenie: Odtworzono dane z uszkodzonego pliku wallet.dat! Oryginalny wallet.dat został zapisany jako wallet.{timestamp}.bak w %s; jeśli twoje saldo lub transakcje są niepoprawne powinieneś odtworzyć kopię zapasową. - - - - Attempt to recover private keys from a corrupt wallet.dat - Próbuj odzyskać klucze prywatne z uszkodzonego wallet.dat - - - - Block creation options: - Opcje tworzenia bloku: - - - - Connect only to the specified node(s) - Łącz tylko do wskazanego węzła - - - - Discover own IP address (default: 1 when listening and no -externalip) - Odkryj własny adres IP (domyślnie: 1 kiedy w trybie nasłuchu i brak -externalip ) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Próba otwarcia jakiegokolwiek portu nie powiodła się. Użyj -listen=0 jeśli tego chcesz. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maksymalny bufor odbioru na połączenie, <n>*1000 bajtów (domyślnie: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maksymalny bufor wysyłu na połączenie, <n>*1000 bajtów (domyślnie: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Łącz z węzłami tylko w sieci <net> (IPv4, IPv6 lub Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Opcje SSL: (odwiedź Bitcoin Wiki w celu uzyskania instrukcji) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Wyślij informację/raport do konsoli zamiast do pliku debug.log. - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Ustaw minimalny rozmiar bloku w bajtach (domyślnie: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Zmniejsz plik debug.log przy starcie programu (domyślnie: 1 jeśli nie użyto -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Wskaż czas oczekiwania bezczynności połączenia w milisekundach (domyślnie: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Używaj UPnP do mapowania portu nasłuchu (domyślnie: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Używaj UPnP do mapowania portu nasłuchu (domyślnie: 1 gdy nasłuchuje) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Nazwa użytkownika dla połączeń JSON-RPC - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Uwaga: Ta wersja jest przestarzała, aktualizacja wymagana! - - - - wallet.dat corrupt, salvage failed - wallet.dat uszkodzony, odtworzenie się nie powiodło - - - - Password for JSON-RPC connections - Hasło do połączeń JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Przyjmuj połączenia JSON-RPC ze wskazanego adresu IP - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Wysyłaj polecenia do węzła działającego na <ip> (domyślnie: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Wykonaj polecenie kiedy najlepszy blok ulegnie zmianie (%s w komendzie zastanie zastąpione przez hash bloku) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Wykonaj polecenie, kiedy transakcja portfela ulegnie zmianie (%s w poleceniu zostanie zastąpione przez TxID) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Zaktualizuj portfel do najnowszego formatu. - - - - Set key pool size to <n> (default: 100) - Ustaw rozmiar puli kluczy na <n> (domyślnie: 100) - - - - Rescan the block chain for missing wallet transactions - Przeskanuj blok łańcuchów żeby znaleźć zaginione transakcje portfela - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Użyj OpenSSL (https) do połączeń JSON-RPC - - - - Server certificate file (default: server.cert) - Plik certyfikatu serwera (domyślnie: server.cert) - - - - Server private key (default: server.pem) - Klucz prywatny serwera (domyślnie: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Ta wiadomość pomocy - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Nie można przywiązać %s na tym komputerze (bind returned error %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Zezwól -addnode, -seednode i -connect na łączenie się z serwerem DNS - - - - Loading addresses... - Wczytywanie adresów... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Błąd ładowania wallet.dat: Uszkodzony portfel - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Błąd ładowania wallet.dat - - - - Invalid -proxy address: '%s' - Nieprawidłowy adres -proxy: '%s' - - - - Unknown network specified in -onlynet: '%s' - Nieznana sieć w -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Nieznana wersja proxy w -socks: %i - - - - Cannot resolve -bind address: '%s' - Nie można uzyskać adresu -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - Nie można uzyskać adresu -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Nieprawidłowa kwota dla -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Nieprawidłowa kwota - - - - Insufficient funds - Niewystarczające środki - - - - Loading block index... - Ładowanie indeksu bloku... - - - - Add a node to connect to and attempt to keep the connection open - Dodaj węzeł do łączenia się and attempt to keep the connection open - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Wczytywanie portfela... - - - - Cannot downgrade wallet - Nie można dezaktualizować portfela - - - - Cannot initialize keypool - - - - - Cannot write default address - Nie można zapisać domyślnego adresu - - - - Rescanning... - Ponowne skanowanie... - - - - Done loading - Wczytywanie zakończone - - - - To use the %s option - Aby użyć opcji %s - - - - Error - Błąd - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Musisz ustawić rpcpassword=<hasło> w pliku configuracyjnym: -%s -Jeżeli plik nie istnieje, utwórz go z uprawnieniami właściciela-tylko-do-odczytu. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_pt_BR.ts b/src/qt/locale/umbra_pt_BR.ts deleted file mode 100644 index 8f0e5816fa..0000000000 --- a/src/qt/locale/umbra_pt_BR.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Sobre o ShadowCoin - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> versao - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Rótulo - - - - Address - Endereço - - - - pubkey - - - - - stealth - - - - - (no label) - (Sem rótulo) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Janela da Frase de Segurança - - - - Enter passphrase - Digite a frase de segurança - - - - New passphrase - Nova frase de segurança - - - - Repeat new passphrase - Repita a nova frase de segurança - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Serve para desativar o envio de dinheiro trivial quando conta do SO for comprometida. Não oferece segurança real. - - - - For staking only - Apenas para participação - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Digite a nova frase de seguraça da sua carteira. <br/> Por favor, use uma frase de <b>10 ou mais caracteres aleatórios,</b> ou <b>oito ou mais palavras.</b> - - - - Encrypt wallet - Criptografar carteira - - - - This operation needs your wallet passphrase to unlock the wallet. - Esta operação precisa de sua frase de segurança para desbloquear a carteira. - - - - Unlock wallet - Desbloquear carteira - - - - This operation needs your wallet passphrase to decrypt the wallet. - Esta operação precisa de sua frase de segurança para descriptografar a carteira. - - - - Decrypt wallet - Descriptografar carteira - - - - Change passphrase - Alterar frase de segurança - - - - Enter the old and new passphrase to the wallet. - Digite a frase de segurança antiga e nova para a carteira. - - - - Confirm wallet encryption - Confirmar criptografia da carteira - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Aviso: Se você criptografar sua carteira e perder sua senha, você vai <b>PERDER TODAS AS SUAS MOEDAS</ b>! - - - - Are you sure you wish to encrypt your wallet? - Tem certeza de que deseja criptografar sua carteira? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: Qualquer backup prévio que você tenha feito do seu arquivo wallet deve ser substituído pelo novo e encriptado arquivo wallet gerado. Por razões de segurança, qualquer backup do arquivo wallet não criptografado se tornará inútil assim que você começar a usar uma nova carteira criptografada. - - - - - Warning: The Caps Lock key is on! - Cuidado: A tecla Caps Lock está ligada! - - - - - Wallet encrypted - Carteira criptografada - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin vai fechar agora para concluir o processo de criptografia. Lembre-se que a criptografia de sua carteira não pode proteger totalmente suas moedas de serem roubados por malwares infectem seu computador. - - - - - - - Wallet encryption failed - A criptografia da carteira falhou - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - A criptografia da carteira falhou devido a um erro interno. Sua carteira não estava criptografada. - - - - - The supplied passphrases do not match. - A frase de segurança fornecida não confere. - - - - Wallet unlock failed - A abertura da carteira falhou - - - - - - The passphrase entered for the wallet decryption was incorrect. - A frase de segurança digitada para a descriptografia da carteira estava incorreta. - - - - Wallet decryption failed - A descriptografia da carteira falhou - - - - Wallet passphrase was successfully changed. - A frase de segurança da carteira foi alterada com êxito. - - - - ClientModel - - - Network Alert - Alerta da Rede - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - Quantidade: - - - - Bytes: - Bytes: - - - - Amount: - Quantia: - - - - Priority: - Prioridade: - - - - Fee: - Taxa: - - - - Low Output: - Rendimento baixo: - - - - - no - não - - - - After Fee: - Depois da taxa: - - - - Change: - trocar - - - - (un)select all - (de)selecionar tudo - - - - Tree mode - Modo árvore - - - - List mode - Modo lista - - - - Amount - Quantidade - - - - Label - - - - - Address - Endereço - - - - Date - Data - - - - Confirmations - Confirmações - - - - Confirmed - Confirmado - - - - Priority - Prioridade - - - - Copy address - Copiar endereço - - - - Copy label - Copiar etiqueta - - - - - Copy amount - Copiar quantia - - - - Copy transaction ID - Copiar ID da transação - - - - Copy quantity - Copiar quantidade - - - - Copy fee - Copiar taxa - - - - Copy after fee - Copia pós-taxa - - - - Copy bytes - Copiar bytes - - - - Copy priority - Copia prioridade - - - - Copy low output - Copia saída de pouco valor - - - - Copy change - Copia alteração - - - - highest - mais alta possível - - - - high - alta - - - - medium-high - média-alta - - - - medium - média - - - - low-medium - média-baixa - - - - low - baixa - - - - lowest - a mais baixa possível - - - - - DUST - - - - - - yes - sim - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (Sem rótulo) - - - - change from %1 (%2) - troco de %1 (%2) - - - - (change) - (troco) - - - - EditAddressDialog - - - Edit Address - Editar Endereço - - - - &Label - &Etiqueta - - - - The label associated with this address book entry - - - - - &Address - &Endereço - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Novo endereço de recebimento - - - - New sending address - Novo endereço de envio - - - - Edit receiving address - Editar endereço de recebimento - - - - Edit sending address - Editar endereço de envio - - - - The entered address "%1" is already in the address book. - O endereço digitado "%1" já se encontra no catálogo de endereços. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Não foi possível destravar a carteira. - - - - New key generation failed. - A geração de nova chave falhou. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nome do cliente - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Versão do cliente - - - - &Information - &Informação - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Usando OpenSSL versão - - - - Using BerkeleyDB version - - - - - Startup time - Horário de inicialização - - - - Network - Rede - - - - Name - - - - - Number of connections - Número de conexões - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Corrente de blocos - - - - Current number of blocks - Quantidade atual de blocos - - - - Estimated total blocks - Total estimado de blocos - - - - Last block time - Horário do último bloco - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Abrir - - - - Command-line options - - - - - &Show - - - - - &Console - &Console - - - - Build date - Data do 'build' - - - - Debug log file - Arquivo de log de Depuração - - - - Clear console - Limpar console - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Use as setas para cima e para baixo para navegar pelo histórico, e <b>Ctrl-L</b> para limpar a tela. - - - - Type <b>help</b> for an overview of available commands. - Digite <b>help</b> para uma visão geral dos comandos disponíveis. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Aberto até %1 - - - - Open for %n block(s) - - - - - conflicted - em conflito - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/não confirmadas - - - - %1 confirmations - %1 confirmações - - - - Status - Status - - - - , broadcast through %n node(s) - , difundir atráves de %n nó, difundir atráves de %n nós - - - - Date - Data - - - - Source - Fonte - - - - Generated - Gerados - - - - - - From - De - - - - - - - To - Para - - - - - - - own address - seu próprio endereço - - - - - label - etiqueta - - - - - - - - Credit - Crédito - - - - matures in %n more block(s) - matura em mais %n blocomatura em mais %n blocos - - - - not accepted - não aceito - - - - - - - Debit - Débito - - - - Transaction fee - Taxa de transação - - - - Net amount - Valor líquido - - - - Message - Mensagem - - - - Comment - Comentário - - - - Transaction ID - ID da transação - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Informação de depuração - - - - Transaction - Transação - - - - Inputs - Entradas - - - - Amount - Quantidade - - - - true - verdadeiro - - - - false - falso - - - - , has not been successfully broadcast yet - , ainda não foi propagada na rede com sucesso. - - - - - unknown - desconhecido - - - - TransactionDescDialog - - - Transaction details - Detalhes da transação - - - - This pane shows a detailed description of the transaction - Este painel mostra uma descrição detalhada da transação - - - - TransactionTableModel - - - Date - Data - - - - Type - Tipo - - - - Address - Endereço - - - - Amount - Quantidade - - - - Open until %1 - Aberto até %1 - - - - Confirmed (%1 confirmations) - Confirmado (%1 confirmações) - - - - Open for %n more block(s) - Abrir para mais %n blocoAbrir para mais %n blocos - - - - Narration - - - - - Offline - Offline - - - - Unconfirmed - Não confirmado - - - - Confirming (%1 of %2 recommended confirmations) - Confirmando (%1 de %2 confirmações recomendadas) - - - - Conflicted - Conflitou - - - - Immature (%1 confirmations, will be available after %2) - Recém-criado (%1 confirmações, disponível somente após %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Este bloco não foi recebido por nenhum outro participante da rede e provavelmente não será aceito! - - - - Generated but not accepted - Gerado mas não aceito - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Status da transação. Passe o mouse sobre este campo para mostrar o número de confirmações. - - - - Date and time that the transaction was received. - Data e hora em que a transação foi recebida. - - - - Type of transaction. - Tipo de transação. - - - - Destination address of transaction. - Endereço de destino da transação. - - - - Amount removed from or added to balance. - Quantidade debitada ou creditada ao saldo. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Uso: - - - - Send command to -server or shadowcoind - - - - - List commands - Lista de comandos - - - - Get help for a command - Obtenha ajuda sobre um comando - - - - Options: - Opções: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - Especifique o arquivo da carteira (dentro do diretório de dados) - - - - Specify data directory - Especificar diretório de dados - - - - Set database cache size in megabytes (default: 25) - Definir o tamanho do cache do banco de dados em megabytes (padrão: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Manter no máximo <n> conexões aos peers (padrão: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Conectar a um nó para receber endereços de participantes, e desconectar. - - - - Specify your own public address - Especificar seu próprio endereço público - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Limite para desconectar peers mal comportados (padrão: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Número de segundos para impedir que peers mal comportados reconectem (padrão: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Um erro ocorreu ao configurar a porta RPC %u para escuta em IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Aceitar linha de comando e comandos JSON-RPC - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Rodar em segundo plano como serviço e aceitar comandos - - - - Use the test network - Usar rede de teste - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Aceitar conexões externas (padrão: 1 se opções -proxy ou -connect não estiverem presentes) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Um erro ocorreu ao configurar a porta RPC %u para escuta em IPv6, voltando ao IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Cuidado: valor de -paytxfee escolhido é muito alto! Este é o valor da taxa de transação que você irá pagar se enviar a transação. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Cuidado: erro ao ler arquivo wallet.dat! Todas as chaves foram lidas corretamente, mas dados transações e do catálogo de endereços podem estar faltando ou estar incorretas. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Aviso: wallet.dat corrompido, dados recuperados! Arquivo wallet.dat original salvo como wallet.{timestamp}.bak em %s; se seu saldo ou transações estiverem incorretos, você deve restauras o backup. - - - - Attempt to recover private keys from a corrupt wallet.dat - Tentar recuperar chaves privadas de um arquivo wallet.dat corrompido - - - - Block creation options: - Opções de criação de blocos: - - - - Connect only to the specified node(s) - Conectar apenas a nó(s) específico(s) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Descobrir os próprios endereços IP (padrão: 1 quando no modo listening e opção -externalip não estiver presente) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Falha ao escutar em qualquer porta. Use -listen=0 se você quiser isso. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Buffer máximo de recebimento por conexão, <n>*1000 bytes (padrão: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Buffer máximo de envio por conexão, <n>*1000 bytes (padrão: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Apenas conectar em nós na rede <net> (IPv4, IPv6, ou Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Opções SSL: (veja a Wiki do Bitcoin para instruções de configuração SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Mandar informação de trace/debug para o console em vez de para o arquivo debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Determinar tamanho mínimo de bloco em bytes (padrão: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Encolher arquivo debug.log ao iniciar o cliente (padrão 1 se opção -debug não estiver presente) - - - - Specify connection timeout in milliseconds (default: 5000) - Especifique o tempo limite (timeout) da conexão em milissegundos (padrão: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Usar UPnP para mapear porta de escuta (padrão: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Usar UPnP para mapear porta de escuta (padrão: 1 quando estiver escutando) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Nome de usuário para conexões JSON-RPC - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Cuidado: Esta versão está obsoleta, atualização exigida! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrompido, recuperação falhou - - - - Password for JSON-RPC connections - Senha para conexões JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Permitir conexões JSON-RPC de endereços IP específicos - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Enviar comando para nó rodando em <ip> (pardão: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Executar comando quando o melhor bloco mudar (%s no comando será substituído pelo hash do bloco) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Executar comando quando uma transação da carteira mudar (%s no comando será substituído por TxID) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Atualizar carteira para o formato mais recente - - - - Set key pool size to <n> (default: 100) - Determinar tamanho do pool de endereços para <n> (padrão: 100) - - - - Rescan the block chain for missing wallet transactions - Re-escanear blocos procurando por transações perdidas da carteira - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Usar OpenSSL (https) para conexões JSON-RPC - - - - Server certificate file (default: server.cert) - Arquivo de certificado do servidor (padrão: server.cert) - - - - Server private key (default: server.pem) - Chave privada do servidor (padrão: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Esta mensagem de ajuda - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Impossível vincular a %s neste computador (bind retornou erro %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Permitir consultas DNS para -addnode, -seednode e -connect - - - - Loading addresses... - Carregando endereços... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Erro ao carregar wallet.dat: Carteira corrompida - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Erro ao carregar wallet.dat - - - - Invalid -proxy address: '%s' - Endereço -proxy inválido: '%s' - - - - Unknown network specified in -onlynet: '%s' - Rede desconhecida especificada em -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Versão desconhecida do proxy -socks requisitada: %i - - - - Cannot resolve -bind address: '%s' - Impossível encontrar o endereço -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - Impossível encontrar endereço -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Quantidade inválida para -paytxfee=<quantidade>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Quantidade inválida - - - - Insufficient funds - Saldo insuficiente - - - - Loading block index... - Carregando índice de blocos... - - - - Add a node to connect to and attempt to keep the connection open - Adicionar um nó com o qual se conectar e tentar manter a conexão ativa - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Carregando carteira... - - - - Cannot downgrade wallet - Não é possível fazer downgrade da carteira - - - - Cannot initialize keypool - - - - - Cannot write default address - Não foi possível escrever no endereço padrão - - - - Rescanning... - Re-escaneando... - - - - Done loading - Carregamento terminado - - - - To use the %s option - Para usar a opção %s - - - - Error - Erro - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Você precisa especificar rpcpassword=<senha> no arquivo de configurações:⏎ -%s⏎ -Se o arquivo não existir, crie um com permissão de leitura apenas pelo dono - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_pt_PT.ts b/src/qt/locale/umbra_pt_PT.ts deleted file mode 100644 index 0cedec6692..0000000000 --- a/src/qt/locale/umbra_pt_PT.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Rótulo - - - - Address - Endereço - - - - pubkey - - - - - stealth - - - - - (no label) - (sem rótulo) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Diálogo de Frase-Passe - - - - Enter passphrase - Escreva a frase de segurança - - - - New passphrase - Nova frase de segurança - - - - Repeat new passphrase - Repita a nova frase de segurança - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Escreva a nova frase de seguraça da sua carteira. <br/> Por favor, use uma frase de <b>10 ou mais caracteres aleatórios,</b> ou <b>oito ou mais palavras</b>. - - - - Encrypt wallet - Encriptar carteira - - - - This operation needs your wallet passphrase to unlock the wallet. - A sua frase de segurança é necessária para desbloquear a carteira. - - - - Unlock wallet - Desbloquear carteira - - - - This operation needs your wallet passphrase to decrypt the wallet. - A sua frase de segurança é necessária para desencriptar a carteira. - - - - Decrypt wallet - Desencriptar carteira - - - - Change passphrase - Alterar frase de segurança - - - - Enter the old and new passphrase to the wallet. - Escreva a frase de segurança antiga seguida da nova para a carteira. - - - - Confirm wallet encryption - Confirmar encriptação da carteira - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Tem a certeza que deseja encriptar a carteira? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANTE: Qualquer cópia de segurança anterior da carteira deverá ser substituída com o novo, actualmente encriptado, ficheiro de carteira. Por razões de segurança, cópias de segurança não encriptadas efectuadas anteriormente do ficheiro da carteira tornar-se-ão inúteis assim que começar a usar a nova carteira encriptada. - - - - - Warning: The Caps Lock key is on! - Atenção: A tecla Caps Lock está activa! - - - - - Wallet encrypted - Carteira encriptada - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - A encriptação da carteira falhou - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - A encriptação da carteira falhou devido a um erro interno. A carteira não foi encriptada. - - - - - The supplied passphrases do not match. - As frases de segurança fornecidas não coincidem. - - - - Wallet unlock failed - O desbloqueio da carteira falhou - - - - - - The passphrase entered for the wallet decryption was incorrect. - A frase de segurança introduzida para a desencriptação da carteira estava incorreta. - - - - Wallet decryption failed - A desencriptação da carteira falhou - - - - Wallet passphrase was successfully changed. - A frase de segurança da carteira foi alterada com êxito. - - - - ClientModel - - - Network Alert - Alerta da Rede - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - Quantidade: - - - - Bytes: - Bytes: - - - - Amount: - Quantia: - - - - Priority: - Prioridade: - - - - Fee: - Taxa: - - - - Low Output: - Saída Baixa: - - - - - no - não - - - - After Fee: - Depois de taxas: - - - - Change: - Troco: - - - - (un)select all - (des)seleccionar todos - - - - Tree mode - Modo de árvore - - - - List mode - Modo lista - - - - Amount - Quantia - - - - Label - - - - - Address - Endereço - - - - Date - Data - - - - Confirmations - Confirmados - - - - Confirmed - Confirmada - - - - Priority - Prioridade - - - - Copy address - Copiar endereço - - - - Copy label - Copiar rótulo - - - - - Copy amount - Copiar quantia - - - - Copy transaction ID - Copiar ID da Transação - - - - Copy quantity - Copiar quantidade - - - - Copy fee - Taxa de cópia - - - - Copy after fee - Taxa depois de cópia - - - - Copy bytes - Copiar bytes - - - - Copy priority - Prioridade de Cópia - - - - Copy low output - Copiar output baixo - - - - Copy change - Copiar alteração - - - - highest - o maior - - - - high - alto - - - - medium-high - médio-alto - - - - medium - médio - - - - low-medium - baixo-médio - - - - low - baixo - - - - lowest - O mais baixo - - - - - DUST - - - - - - yes - sim - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (Sem rótulo) - - - - change from %1 (%2) - Alteração de %1 (%2) - - - - (change) - (Alteração) - - - - EditAddressDialog - - - Edit Address - Editar Endereço - - - - &Label - &Rótulo - - - - The label associated with this address book entry - - - - - &Address - E&ndereço - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Novo endereço de entrada - - - - New sending address - Novo endereço de saída - - - - Edit receiving address - Editar endereço de entrada - - - - Edit sending address - Editar endereço de saída - - - - The entered address "%1" is already in the address book. - O endereço introduzido "%1" já se encontra no livro de endereços. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Impossível desbloquear carteira. - - - - New key generation failed. - Falha ao gerar nova chave. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nome do Cliente - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/D - - - - Client version - Versão do Cliente - - - - &Information - &Informação - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Usando versão OpenSSL - - - - Using BerkeleyDB version - - - - - Startup time - Tempo de início - - - - Network - Rede - - - - Name - - - - - Number of connections - Número de ligações - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Cadeia de blocos - - - - Current number of blocks - Número actual de blocos - - - - Estimated total blocks - Total estimado de blocos - - - - Last block time - Tempo do último bloco - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Abrir - - - - Command-line options - - - - - &Show - - - - - &Console - &Consola - - - - Build date - Data de construção - - - - Debug log file - Ficheiro de registo de depuração - - - - Clear console - Limpar consola - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Use as setas para cima e para baixo para navegar no histórico e <b>Ctrl-L</b> para limpar o ecrã. - - - - Type <b>help</b> for an overview of available commands. - Digite <b>help</b> para visualizar os comandos disponíveis. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Aberto até %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/desligado - - - - %1/unconfirmed - %1/não confirmada - - - - %1 confirmations - %1 confirmações - - - - Status - Estado - - - - , broadcast through %n node(s) - , transmitida através de %n nó, transmitida através de %n nós - - - - Date - Data - - - - Source - Origem - - - - Generated - Gerado - - - - - - From - De - - - - - - - To - Para - - - - - - - own address - endereço próprio - - - - - label - rótulo - - - - - - - - Credit - Crédito - - - - matures in %n more block(s) - matura daqui por %n blocomatura daqui por %n blocos - - - - not accepted - não aceite - - - - - - - Debit - Débito - - - - Transaction fee - Taxa de transação - - - - Net amount - Valor líquido - - - - Message - Mensagem - - - - Comment - Comentário - - - - Transaction ID - ID da Transação - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Informação de depuração - - - - Transaction - Transação - - - - Inputs - Entradas - - - - Amount - Quantia - - - - true - verdadeiro - - - - false - falso - - - - , has not been successfully broadcast yet - , ainda não foi transmitida com sucesso - - - - - unknown - desconhecido - - - - TransactionDescDialog - - - Transaction details - Detalhes da transação - - - - This pane shows a detailed description of the transaction - Esta janela mostra uma descrição detalhada da transação - - - - TransactionTableModel - - - Date - Data - - - - Type - Tipo - - - - Address - Endereço - - - - Amount - Quantia - - - - Open until %1 - Aberto até %1 - - - - Confirmed (%1 confirmations) - Confirmada (%1 confirmações) - - - - Open for %n more block(s) - Aberta por mais %n blocoAberta por mais %n blocos - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Este bloco não foi recebido por outros nós e provavelmente não será aceite pela rede! - - - - Generated but not accepted - Gerado mas não aceite - - - - (n/a) - (n/d) - - - - Transaction status. Hover over this field to show number of confirmations. - Estado da transação. Pairar por cima deste campo para mostrar o número de confirmações. - - - - Date and time that the transaction was received. - Data e hora a que esta transação foi recebida. - - - - Type of transaction. - Tipo de transação. - - - - Destination address of transaction. - Endereço de destino da transação. - - - - Amount removed from or added to balance. - Quantia retirada ou adicionada ao saldo. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Utilização: - - - - Send command to -server or shadowcoind - - - - - List commands - Listar comandos - - - - Get help for a command - Obter ajuda para um comando - - - - Options: - Opções: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - Especifique ficheiro de carteira (dentro da pasta de dados) - - - - Specify data directory - Especificar pasta de dados - - - - Set database cache size in megabytes (default: 25) - Definir o tamanho da cache de base de dados em megabytes (por defeito: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Manter no máximo <n> ligações a outros nós da rede (por defeito: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Ligar a um nó para recuperar endereços de pares, e desligar - - - - Specify your own public address - Especifique o seu endereço público - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Tolerância para desligar nós mal-formados (por defeito: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Número de segundos a impedir que nós mal-formados se liguem de novo (por defeito: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Ocorreu um erro ao definir a porta %u do serviço RPC a escutar em IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Aceitar comandos da consola e JSON-RPC - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Correr o processo como um daemon e aceitar comandos - - - - Use the test network - Utilizar a rede de testes - testnet - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Aceitar ligações externas (padrão: 1 sem -proxy ou -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Ocorreu um erro ao definir a porta %u do serviço RPC a escutar em IPv6, a usar IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Atenção: -paytxfee está definida com um valor muito alto! Esta é a taxa que irá pagar se enviar uma transação. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Atenção: erro ao ler wallet.dat! Todas as chaves foram lidas correctamente, mas dados de transação ou do livro de endereços podem estar em falta ou incorrectos. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Atenção: wallet.dat corrupto, dados recuperados! wallet.dat original salvo como wallet.{timestamp}.bak em %s; se o seu saldo ou transações estiverem incorrectos deverá recuperar de uma cópia de segurança. - - - - Attempt to recover private keys from a corrupt wallet.dat - Tentar recuperar chaves privadas de um wallet.dat corrupto - - - - Block creation options: - Opções de criação de bloco: - - - - Connect only to the specified node(s) - Apenas ligar ao(s) nó(s) especificado(s) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Descobrir endereço IP próprio (padrão: 1 ao escutar e sem -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Falhou a escutar em qualquer porta. Use -listen=0 se quer isto. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Armazenamento intermédio de recepção por ligação, <n>*1000 bytes (por defeito: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Armazenamento intermédio de envio por ligação, <n>*1000 bytes (por defeito: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Apenas ligar a nós na rede <net> (IPv4, IPv6 ou Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Opções SSL: (ver a Wiki Bitcoin para instruções de configuração SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Enviar informação de rastreio/depuração para a consola e não para o ficheiro debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Definir tamanho minímo de um bloco em bytes (por defeito: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Encolher ficheiro debug.log ao iniciar o cliente (por defeito: 1 sem -debug definido) - - - - Specify connection timeout in milliseconds (default: 5000) - Especificar tempo de espera da ligação em millisegundos (por defeito: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Usar UPnP para mapear a porta de escuta (padrão: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Usar UPnP para mapear a porta de escuta (padrão: 1 ao escutar) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Nome de utilizador para ligações JSON-RPC - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Atenção: Esta versão está obsoleta, é necessário actualizar! - - - - wallet.dat corrupt, salvage failed - wallet.dat corrupta, recuperação falhou - - - - Password for JSON-RPC connections - Palavra-passe para ligações JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Permitir ligações JSON-RPC do endereço IP especificado - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Enviar comandos para o nó a correr em <ip> (por defeito: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Executar comando quando mudar o melhor bloco (no comando, %s é substituído pela hash do bloco) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Executar comando quando uma das transações na carteira mudar (no comando, %s é substituído pelo ID da Transação) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Atualize a carteira para o formato mais recente - - - - Set key pool size to <n> (default: 100) - Definir o tamanho da memória de chaves para <n> (por defeito: 100) - - - - Rescan the block chain for missing wallet transactions - Reexaminar a cadeia de blocos para transações em falta na carteira - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Usar OpenSSL (https) para ligações JSON-RPC - - - - Server certificate file (default: server.cert) - Ficheiro de certificado do servidor (por defeito: server.cert) - - - - Server private key (default: server.pem) - Chave privada do servidor (por defeito: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Esta mensagem de ajuda - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Incapaz de vincular a %s neste computador (vínculo retornou erro %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Permitir procuras DNS para -addnode, -seednode e -connect - - - - Loading addresses... - Carregar endereços... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Erro ao carregar wallet.dat: Carteira danificada - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Erro ao carregar wallet.dat - - - - Invalid -proxy address: '%s' - Endereço -proxy inválido: '%s' - - - - Unknown network specified in -onlynet: '%s' - Rede desconhecida especificada em -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Versão desconhecida de proxy -socks requisitada: %i - - - - Cannot resolve -bind address: '%s' - Não conseguiu resolver endereço -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - Não conseguiu resolver endereço -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Quantia inválida para -paytxfee=<amount>: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Quantia inválida - - - - Insufficient funds - Fundos insuficientes - - - - Loading block index... - Carregar índice de blocos... - - - - Add a node to connect to and attempt to keep the connection open - Adicione um nó ao qual se ligar e tentar manter a ligação aberta - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Carregar carteira... - - - - Cannot downgrade wallet - Impossível mudar a carteira para uma versão anterior - - - - Cannot initialize keypool - - - - - Cannot write default address - Impossível escrever endereço por defeito - - - - Rescanning... - Reexaminando... - - - - Done loading - Carregamento completo - - - - To use the %s option - Para usar a opção %s - - - - Error - Erro - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Deverá definir rpcpassword=<password> no ficheiro de configuração: -%s -Se o ficheiro não existir, crie-o com permissões de leitura apenas para o dono. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_ro_RO.ts b/src/qt/locale/umbra_ro_RO.ts deleted file mode 100644 index abcd36b575..0000000000 --- a/src/qt/locale/umbra_ro_RO.ts +++ /dev/null @@ -1,3417 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Despre ShadowCoin - - - - <b>ShadowCoin</b> version - Versiune <b>ShadowCoin</b> - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etichetă - - - - Address - Adresă - - - - pubkey - - - - - stealth - - - - - (no label) - (fără etichetă) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Dialogul pentru fraza de acces - - - - Enter passphrase - Introdu fraza de acces - - - - New passphrase - Frază de acces nouă - - - - Repeat new passphrase - Repetă noua frază de acces - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Servește pentru a dezactiva sendmoneyl atunci când sistemul de operare este compromis. Nu oferă nicio garanție reală. - - - - For staking only - Doar pentru staking - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Introdu noua parolă a portofelului electronic.<br/>Te rog folosește <b>minim 10 caractere aleatoare</b>, sau <b>minim 8 cuvinte</b>. - - - - Encrypt wallet - Criptează portofelul - - - - This operation needs your wallet passphrase to unlock the wallet. - Această acțiune necesită fraza ta de acces pentru deblocarea portofelului. - - - - Unlock wallet - Deblochează portofelul - - - - This operation needs your wallet passphrase to decrypt the wallet. - Această acțiune necesită fraza ta de acces pentru decriptarea portofelului. - - - - Decrypt wallet - Decriptează portofelul. - - - - Change passphrase - Schimbă fraza de acces - - - - Enter the old and new passphrase to the wallet. - Introdu vechea și noua parolă pentru portofel. - - - - Confirm wallet encryption - Confirmă criptarea portofelului - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Atentie: Daca encriptezi portofelul si iti uiti parola, <b>VEI PIERDE TOATA MONEDELE</b>! - - - - Are you sure you wish to encrypt your wallet? - Sunteţi sigur că doriţi să criptaţi portofelul electronic? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - IMPORTANT: Orice copie de siguranta facuta in prealabil portofelului dumneavoastra ar trebui inlocuita cu cea generata cel mai recent fisier criptat al portofelului. Pentru siguranta, copiile de siguranta vechi ale portofelului ne-criptat vor deveni inutile de indata ce veti incepe folosirea noului fisier criptat al portofelului. - - - - - Warning: The Caps Lock key is on! - Atentie! Caps Lock este pornit - - - - - Wallet encrypted - Portofel criptat - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin se va inchide pentru a termina procesul de encriptie. Amintiți-vă, criptarea portofelul dumneavoastră nu poate proteja pe deplin monedele dvs. de a fi furate de infectarea cu malware a computerului. - - - - - - - Wallet encryption failed - Criptarea portofelului a eșuat - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Criptarea portofelului a eșuat din cauza unei erori interne. Portofelul tău nu a fost criptat. - - - - - The supplied passphrases do not match. - Frazele de acces introduse nu se potrivesc. - - - - Wallet unlock failed - Deblocarea portofelului a eșuat - - - - - - The passphrase entered for the wallet decryption was incorrect. - Fraza de acces introdusă pentru decriptarea portofelului a fost incorectă. - - - - Wallet decryption failed - Decriptarea portofelului a eșuat - - - - Wallet passphrase was successfully changed. - Parola portofelului electronic a fost schimbată. - - - - ClientModel - - - Network Alert - Alertă rețea - - - - CoinControlDialog - - - Coin Control - Controlează moneda - - - - Quantity: - Cantitate: - - - - Bytes: - Octeţi: - - - - Amount: - Sumă: - - - - Priority: - Prioritate: - - - - Fee: - Taxa: - - - - Low Output: - Ieşire minimă: - - - - - no - nu - - - - After Fee: - După taxe: - - - - Change: - Schimb: - - - - (un)select all - (de)selectaţi tot - - - - Tree mode - Modul arborescent - - - - List mode - Modul lista - - - - Amount - Sumă - - - - Label - Etichetă - - - - Address - Adresă - - - - Date - Data - - - - Confirmations - Confirmări - - - - Confirmed - Confirmat - - - - Priority - Prioritate - - - - Copy address - Copiază adresa - - - - Copy label - Copiază eticheta - - - - - Copy amount - Copiază suma - - - - Copy transaction ID - Copiază ID tranzacție - - - - Copy quantity - Copiaţi quantitea - - - - Copy fee - Copiaţi taxele - - - - Copy after fee - Copiaţi după taxe - - - - Copy bytes - Copiaţi octeţi - - - - Copy priority - Copiaţi prioritatea - - - - Copy low output - Copiaţi ieşire minimă: - - - - Copy change - Copiaţi schimb - - - - highest - cel mai mare - - - - high - mare - - - - medium-high - marime medie - - - - medium - mediu - - - - low-medium - mediu-scazut - - - - low - scazut - - - - lowest - cel mai scazut - - - - - DUST - DUST - - - - - yes - da - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Aceasta eticheta se inroseste daca marimea tranzactiei este mai mare de 10000 bytes. - -Acest lucru inseamna ca este nevoie de o taxa de cel putin %1 pe kb - -Poate varia +/- 1 Byte pe imput. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Tranzacțiile cu prioritate mai mare ajunge mult mai probabil într-un bloc - -Aceasta eticheta se inroseste daca prioritatea este mai mica decat "medium" - -Acest lucru inseamna ca este necesar un comision cel putin de %1 pe kB - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Aceasta eticheta se inroseste daca oricare din contacte primeste o suma mai mica decat %1. - -Acest lucru inseamna ca un comision de cel putin %2 este necesar. - -Sume mai mici decat 0.546 ori minimul comisionului de relay sunt afisate ca DUST - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Această eticheta se înroseste dacă schimbul este mai mic de %1. - -Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - - - - - (no label) - (fără etichetă) - - - - change from %1 (%2) - schimbă la %1(%2) - - - - (change) - (schimb) - - - - EditAddressDialog - - - Edit Address - Editează adresa - - - - &Label - &Etichetă - - - - The label associated with this address book entry - Eticheta asociată cu această intrare în agendă - - - - &Address - &Adresă - - - - The address associated with this address book entry. This can only be modified for sending addresses. - Adresa asociată cu această intrare în agendă. Acest lucru poate fi modificat numai pentru adresele de trimitere. - - - - &Stealth Address - - - - - New receiving address - Noua adresă de primire - - - - New sending address - Noua adresă de trimitere - - - - Edit receiving address - Editează adresa de primire - - - - Edit sending address - Editează adresa de trimitere - - - - The entered address "%1" is already in the address book. - Adresa introdusă "%1" se află deja în lista de adrese. - - - - The entered address "%1" is not a valid ShadowCoin address. - Adresa introdusă "%1" nu este o adresă ShadowCoin validă - - - - Could not unlock wallet. - Portofelul nu a putut fi deblocat. - - - - New key generation failed. - Generarea noii chei a eșuat. - - - - GUIUtil::HelpMessageBox - - - version - versiune - - - - - Shadow - - - - - Usage: - Utilizare: - - - - command-line options - Optiuni linie de comanda - - - - UI options - Setări UI - - - - Set language, for example "de_DE" (default: system locale) - Setează limba, de exemplu: "de_DE" (inițial: setare locală) - - - - Start minimized - Pornește miniaturizat - - - - Show splash screen on startup (default: 1) - Afișează ecran splash la pornire (implicit: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Nume client - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - N/A - - - - Client version - Versiune client - - - - &Information - &Informație - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Foloseste versiunea OpenSSL - - - - Using BerkeleyDB version - - - - - Startup time - Durata pornirii - - - - Network - Rețea - - - - Name - - - - - Number of connections - Numărul de conexiuni - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Lanț de blocuri - - - - Current number of blocks - Numărul curent de blocuri - - - - Estimated total blocks - Blocurile totale estimate - - - - Last block time - Data ultimului bloc - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Deschide - - - - Command-line options - Optiuni linii de comandă - - - - &Show - &Arată - - - - &Console - &Consolă - - - - Build date - Construit la data - - - - Debug log file - Loguri debug - - - - Clear console - Curăță consola - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Foloseste sagetile sus si jos pentru a naviga in istoric si <b>Ctrl-L</b> pentru a curata. - - - - Type <b>help</b> for an overview of available commands. - Scrie <b>help</b> pentru a vedea comenzile disponibile - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Deschis până la %1 - - - - Open for %n block(s) - Deschde pentru încă %1 blocDeschde pentru încă %1 blocuriDeschde pentru încă %1 blocuri - - - - conflicted - conflictual - - - - %1/offline - %1/deconectat - - - - %1/unconfirmed - %1/neconfirmat - - - - %1 confirmations - %1 confirmări - - - - Status - Stare - - - - , broadcast through %n node(s) - , distribuit prin %n nod, distribuit prin %n noduri, distribuit prin %n de noduri - - - - Date - Data - - - - Source - Sursa - - - - Generated - Generat - - - - - - From - De la - - - - - - - To - Către - - - - - - - own address - Adresa posedata - - - - - label - etichetă - - - - - - - - Credit - Credit - - - - matures in %n more block(s) - se maturizează în încă %n blocse maturizează în încă %n blocurise maturizează în încă %n de blocuri - - - - not accepted - nu este acceptat - - - - - - - Debit - Debit - - - - Transaction fee - Comisionul tranzacţiei - - - - Net amount - Suma netă - - - - Message - Mesaj - - - - Comment - Comentarii - - - - Transaction ID - ID-ul tranzactiei - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Informatii pentru debug - - - - Transaction - Tranzacţie - - - - Inputs - Intrari - - - - Amount - Sumă - - - - true - Adevarat! - - - - false - Fals! - - - - , has not been successfully broadcast yet - , nu s-a propagat încă - - - - - unknown - necunoscut - - - - TransactionDescDialog - - - Transaction details - Detaliile tranzacției - - - - This pane shows a detailed description of the transaction - Acest panou afișează o descriere detaliată a tranzacției - - - - TransactionTableModel - - - Date - Data - - - - Type - Tipul - - - - Address - Adresa - - - - Amount - Cantitate - - - - Open until %1 - Deschis până la %1 - - - - Confirmed (%1 confirmations) - Confirmat (%1 confirmări) - - - - Open for %n more block(s) - Deschis pentru încă %1 blocDeschis pentru încă %1 blocuriDeschis pentru încă %1 de blocuri - - - - Narration - - - - - Offline - Deconectat - - - - Unconfirmed - Neconfirmat - - - - Confirming (%1 of %2 recommended confirmations) - Confirmare (%1 dintre %2 confirmări recomandate) - - - - Conflicted - Conflictual - - - - Immature (%1 confirmations, will be available after %2) - Nematurate(%1 confirmari, vor fi valabile dupa %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Acest bloc nu a fost recepționat de niciun alt nod și probabil nu va fi acceptat! - - - - Generated but not accepted - Generat dar neacceptat - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Starea tranzacției. Treci cu mausul peste acest câmp pentru afișarea numărului de confirmări. - - - - Date and time that the transaction was received. - Data și ora la care a fost recepționată tranzacția. - - - - Type of transaction. - Tipul tranzacției. - - - - Destination address of transaction. - Adresa de destinație a tranzacției. - - - - Amount removed from or added to balance. - Suma extrasă sau adăugată la sold. - - - - WalletModel - - - - Sending... - Se trimite... - - - - bitcoin-core - - - ShadowCoin version - Versiune ShadowCoin - - - - Usage: - Uz: - - - - Send command to -server or shadowcoind - Trimite comanda catre server sau shadowcoind - - - - List commands - Listă de comenzi - - - - Get help for a command - Ajutor pentru o comandă - - - - Options: - Setări: - - - - Specify configuration file (default: shadowcoin.conf) - Specifica fisier de configurare(implicit: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Speficica fisier pid(implicit: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Specifică fișierul wallet (în dosarul de date) - - - - Specify data directory - Specifică dosarul de date - - - - Set database cache size in megabytes (default: 25) - Setează mărimea cache a bazei de date în megabiți (implicit: 25) - - - - Set database disk log size in megabytes (default: 100) - Setează mărimea cache a bazei de date în megabiți (implicit: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Ascultă pentru conectări pe <port> (implicit: 51737 sau testnet: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Menține cel mult <n> conexiuni cu partenerii (implicit: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Conectează-te la nod pentru a obține adresele partenerilor, și apoi deconectează-te - - - - Specify your own public address - Specifică adresa ta publică - - - - Bind to given address. Use [host]:port notation for IPv6 - Leaga la o adresa data. Utilizeaza notatie [host]:port pt IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Pune monedele in modul stake pentru a ajuta reteaua si a castiva bonusuri(implicit: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Prag pentru deconectarea partenerilor care nu funcționează corect (implicit: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Numărul de secunde pentru a preveni reconectarea partenerilor care nu funcționează corect (implicit: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - A intervenit o eroare in timp ce se seta portul RPC %u pentru ascultare pe IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Detaseaza bloc si baza de date de adrese. Creste timpul de inchidere(implicit:0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Eroare: tranzacția a fost respinsă. Acest lucru s-ar putea întâmpla în cazul în care unele dintre monedele din portofel au fost deja cheltuite, cum si cum ați utilizat o copie a wallet.dat și monedele au fost cheltuite în copie dar nu au fost marcate ca și cheltuite aici. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Eroare: Această tranzacție necesită un comision de tranzacție de cel puțin %s din cauza valorii sale, complexitate, sau utilizarea de fonduri recent primite - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Ascultă pentru conexiuni JSON-RPC pe <port> (implicit:51736 sau testnet: 51996) - - - - Accept command line and JSON-RPC commands - Se acceptă comenzi din linia de comandă și comenzi JSON-RPC - - - - Error: Transaction creation failed - Eroare: crearea tranzacției a eșuat. - - - - Error: Wallet locked, unable to create transaction - Eroare: portofel blocat, tranzactia nu s-a creat - - - - Importing blockchain data file. - Se importa fisierul blockchain - - - - Importing bootstrap blockchain data file. - Se importa fisierul bootstrap blockchain - - - - Run in the background as a daemon and accept commands - Rulează în fundal ca un demon și acceptă comenzi - - - - Use the test network - Utilizează rețeaua de test - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Acceptă conexiuni din afară (implicit: 1 dacă nu se folosește -proxy sau -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - A intervenit o eroare in timp ce se seta portul RPC %u pentru ascultare pe IPv6, reintoarcere la IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Eroare la inițializarea mediu de baze de date %s! Pentru a recupera, SALVATI ACEL DIRECTORr, apoi scoateți totul din el, cu excepția wallet.dat. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Setati valoarea maxima a prioritate mare/taxa scazuta in bytes(implicit: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Atentie: setarea -paytxfee este foarte ridicata! Aceasta este taxa tranzactiei pe care o vei plati daca trimiti o tranzactie. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Atentie: Va rugam verificati ca timpul si data calculatorului sunt corete. Daca timpul este gresit ShadowCoin nu va functiona corect. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Atentie: eroare la citirea fisierului wallet.dat! Toate cheile sunt citite corect, dar datele tranzactiei sau anumite intrari din agenda sunt incorecte sau lipsesc. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Atentie: fisierul wallet.dat este corupt, date salvate! Fisierul original wallet.dat a fost salvat ca wallet.{timestamp}.bak in %s; daca balansul sau tranzactiile sunt incorecte ar trebui sa restaurati dintr-o copie de siguranta. - - - - Attempt to recover private keys from a corrupt wallet.dat - Încearcă recuperarea cheilor private dintr-un wallet.dat corupt - - - - Block creation options: - Optiuni creare block - - - - Connect only to the specified node(s) - Conecteaza-te doar la nod(urile) specifice - - - - Discover own IP address (default: 1 when listening and no -externalip) - Descopera propria ta adresa IP (intial: 1) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Am esuat ascultarea pe orice port. Folositi -listen=0 daca vreti asta. - - - - Find peers using DNS lookup (default: 1) - Gaseste peers folosind cautare DNS(implicit: 1) - - - - Sync checkpoints policy (default: strict) - Sincronizeaza politica checkpoint(implicit: strict) - - - - Invalid -tor address: '%s' - Adresa -tor invalida: '%s' - - - - Invalid amount for -reservebalance=<amount> - Suma invalida pentru -reservebalance=<amount> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Tampon maxim pentru recepție per conexiune, <n>*1000 baiți (implicit: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Tampon maxim pentru transmitere per conexiune, <n>*1000 baiți (implicit: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Efectuează conexiuni doar către nodurile din rețeaua <net> (IPv4, IPv6 sau Tor) - - - - Output extra debugging information. Implies all other -debug* options - Extra informatii despre depanare. Implica toate optiunile -debug* - - - - Output extra network debugging information - Extra informatii despre depanare retea. - - - - Prepend debug output with timestamp - Ataseaza output depanare cu log de timp - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Optiuni SSl (vezi Bitcoin wiki pentru intructiunile de instalare) - - - - Select the version of socks proxy to use (4-5, default: 5) - Selectati versiunea de proxy socks(4-5, implicit: 5) - - - - Send trace/debug info to console instead of debug.log file - Trimite informațiile trace/debug la consolă în locul fișierului debug.log - - - - Send trace/debug info to debugger - Trimite informațiile trace/debug la consolă - - - - Set maximum block size in bytes (default: 250000) - Setează mărimea maxima a blocului în bytes (implicit: 250000) - - - - Set minimum block size in bytes (default: 0) - Setează mărimea minimă a blocului în baiți (implicit: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Micsorati fisierul debug.log la inceperea clientului (implicit: 1 cand nu -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Specifică intervalul maxim de conectare în milisecunde (implicit: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - În imposibilitatea de a semna checkpoint-ul, checkpointkey greșit? - - - - - Use UPnP to map the listening port (default: 0) - Foloseste UPnP pentru a vedea porturile (initial: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Foloseste UPnP pentru a vedea porturile (initial: 1 cand listezi) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Utilizati proxy pentru a ajunge la serviciile tor (implicit: la fel ca proxy) - - - - Username for JSON-RPC connections - Utilizator pentru conexiunile JSON-RPC - - - - Verifying database integrity... - Se verifica integritatea bazei de date... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - ATENTIONARE: s-a detectat o violare a checkpoint-ului sincronizat, dar s-a ignorat! - - - - Warning: Disk space is low! - Avertisment: spațiul pe disc este scăzut! - - - - Warning: This version is obsolete, upgrade required! - Atenție: această versiune este depășită, este necesară actualizarea! - - - - wallet.dat corrupt, salvage failed - wallet.dat corupt, recuperare eșuată - - - - Password for JSON-RPC connections - Parola pentru conexiunile JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, trebuie să configurați o parolă rpc în fișierul de configurare: %s -Este recomandat să folosiți următoarea parolă generată aleator: rpcuser=shadowcoinrpc -rpcpassword=%s -(nu trebuie să țineți minte această parolă) -Username-ul și parola NU TREBUIE să fie aceleași. -Dacă fișierul nu există, creați-l cu drepturi de citire doar de către deținător. -Este deasemenea recomandat să setați alertnotify pentru a fi notificat de probleme; -de exemplu: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - Gaseste noduri fosoling irc (implicit: 1) {0)?} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Sincronizează timp cu alte noduri. Dezactivează daca timpul de pe sistemul dumneavoastră este precis ex: sincronizare cu NTP (implicit: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - Când creați tranzacții, ignorați intrări cu valori mai mici decât aceasta (implicit: 0,01) - - - - Allow JSON-RPC connections from specified IP address - Permite conexiuni JSON-RPC de la adresa IP specificată - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Trimite comenzi la nodul care rulează la <ip> (implicit: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Execută comanda când cel mai bun bloc se modifică (%s în cmd este înlocuit cu hash-ul blocului) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Executati comanda cand o tranzactie a portofelului se schimba (%s in cmd este inlocuit de TxID) - - - - Require a confirmations for change (default: 0) - Necesita confirmari pentru schimbare (implicit: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Enforseaza tranzactiile script sa foloseasca operatori canonici PUSH(implicit: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Execută o comandă când o alerta relevantâ este primitâ(%s in cmd este înlocuit de mesaj) - - - - Upgrade wallet to latest format - Actualizează portofelul la ultimul format - - - - Set key pool size to <n> (default: 100) - Setează mărimea bazinului de chei la <n> (implicit: 100) - - - - Rescan the block chain for missing wallet transactions - Rescanează lanțul de bloc pentru tranzacțiile portofel lipsă - - - - How many blocks to check at startup (default: 2500, 0 = all) - Câte block-uri se verifică la initializare (implicit: 2500, 0 = toate) - - - - How thorough the block verification is (0-6, default: 1) - Cat de temeinica sa fie verificarea blocurilor( 0-6, implicit: 1) - - - - Imports blocks from external blk000?.dat file - Importă blocuri dintr-un fișier extern blk000?.dat - - - - Use OpenSSL (https) for JSON-RPC connections - Folosește OpenSSL (https) pentru conexiunile JSON-RPC - - - - Server certificate file (default: server.cert) - Certificatul serverului (implicit: server.cert) - - - - Server private key (default: server.pem) - Cheia privată a serverului (implicit: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Cifruri acceptabile (implicit: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Eroare: portofel blocat doar pentru staking, tranzactia nu s-a creat. - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - ATENTIONARE: checkpoint invalid! Trazatiile afisate pot fi incorecte! Posibil să aveți nevoie să faceți upgrade, sau să notificati dezvoltatorii. - - - - This help message - Acest mesaj de ajutor - - - - Wallet %s resides outside data directory %s. - Portofelul %s este in afara directorului %s - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Nu se poate obtine un lock pe directorul de date &s. ShadowCoin probabil ruleaza deja. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Nu se poate folosi %s pe acest calculator (eroarea returnată este %d, %s) - - - - Connect through socks proxy - Conectează-te printr-un proxy socks - - - - Allow DNS lookups for -addnode, -seednode and -connect - Permite căutări DNS pentru -addnode, -seednode și -connect - - - - Loading addresses... - Încarc adrese... - - - - Error loading blkindex.dat - Eroare la încărcarea blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Eroare la încărcarea wallet.dat: Portofel corupt - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Eroare la încărcarea wallet.dat: Portofelul necesita o versiune mai noua de ShadowCoin - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - A fost nevoie de rescrierea portofelului: restartați ShadowCoin pentru a finaliza - - - - Error loading wallet.dat - Eroare la încărcarea wallet.dat - - - - Invalid -proxy address: '%s' - Adresa -proxy nevalidă: '%s' - - - - Unknown network specified in -onlynet: '%s' - Rețeaua specificată în -onlynet este necunoscută: '%s' - - - - Unknown -socks proxy version requested: %i - S-a cerut o versiune necunoscută de proxy -socks: %i - - - - Cannot resolve -bind address: '%s' - Nu se poate rezolva adresa -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - Nu se poate rezolva adresa -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Suma nevalidă pentru -paytxfee=<amount>: '%s' - - - - Error: could not start node - Eroare: nodul nu a putut fi pornit - - - - Sending... - Se trimite... - - - - Invalid amount - Sumă nevalidă - - - - Insufficient funds - Fonduri insuficiente - - - - Loading block index... - Încarc indice bloc... - - - - Add a node to connect to and attempt to keep the connection open - Adaugă un nod la care te poți conecta pentru a menține conexiunea deschisă - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Imposibil de conectat %s pe acest computer. Cel mai probabil ShadowCoin ruleaza - - - - Fee per KB to add to transactions you send - Comision pe kB de adaugat la tranzactiile pe care le trimiti - - - - Invalid amount for -mininput=<amount>: '%s' - Suma invalida pentru -mininput=<amount>: '%s' - - - - Loading wallet... - Încarc portofel... - - - - Cannot downgrade wallet - Nu se poate retrograda portofelul - - - - Cannot initialize keypool - Nu se poate initializa keypool - - - - Cannot write default address - Nu se poate scrie adresa implicită - - - - Rescanning... - Rescanez... - - - - Done loading - Încărcare terminată - - - - To use the %s option - Pentru a folosi opțiunea %s - - - - Error - Eroare - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Trebuie sa setezi rpcpassword=<password> în fișierul de configurare:⏎ -%s⏎ -Dacă fișierul nu există, creează-l cu permisiuni de citire doar de către proprietar. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_ru.ts b/src/qt/locale/umbra_ru.ts deleted file mode 100644 index 413a71004d..0000000000 --- a/src/qt/locale/umbra_ru.ts +++ /dev/null @@ -1,3395 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - О ShadowCoin - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> версия - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Все права защищены © 2009-2014 Разработчики Bitcoin -Все права защищены © 2012-2014 Разработчики NovaCoin -Все права защищены © 2014-2015 Разработчики ShadowCoin - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Метка - - - - Address - Адрес - - - - pubkey - - - - - stealth - - - - - (no label) - [нет метки] - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Диалог ввода пароля - - - - Enter passphrase - Введите пароль - - - - New passphrase - Новый пароль - - - - Repeat new passphrase - Повторите новый пароль - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Служит для предотвращения тривиальной отправки монет, если ваша система скомпрометирована. Не предоставляет реальной безопасности. - - - - For staking only - Только для участия в доле - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Введите новый пароль для бумажника. <br/> Пожалуйста, используйте фразы из <b>10 или более случайных символов,</b> или <b>восьми и более слов.</b> - - - - Encrypt wallet - Зашифровать бумажник - - - - This operation needs your wallet passphrase to unlock the wallet. - Для выполнения операции требуется пароль вашего бумажника. - - - - Unlock wallet - Разблокировать бумажник - - - - This operation needs your wallet passphrase to decrypt the wallet. - Для выполнения операции требуется пароль вашего бумажника. - - - - Decrypt wallet - Расшифровать бумажник - - - - Change passphrase - Сменить пароль - - - - Enter the old and new passphrase to the wallet. - Введите старый и новый пароль для бумажника. - - - - Confirm wallet encryption - Подтвердите шифрование бумажника - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Внимание: если вы зашифруете бумажник и потеряете пароль, вы <b>ПОТЕРЯЕТЕ ВСЕ ВАШИ МОНЕТЫ</b>! - - - - Are you sure you wish to encrypt your wallet? - Вы уверены, что хотите зашифровать ваш бумажник? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - ВАЖНО: все предыдущие резервные копии вашего кошелька должны быть заменены новым зашифрованным файлом. В целях безопасности предыдущие резервные копии нешифрованного кошелька станут бесполезны, как только вы начнёте использовать новый шифрованный кошелёк. - - - - - Warning: The Caps Lock key is on! - Внимание: Caps Lock включен! - - - - - Wallet encrypted - Бумажник зашифрован - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Сейчас программа закроется для завершения процесса шифрования. Помните, что шифрование вашего бумажника не может полностью защитить ваши монеты от кражи с помощью инфицирования вашего компьютера вредоносным ПО. - - - - - - - Wallet encryption failed - Не удалось зашифровать бумажник - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Шифрование бумажника не удалось из-за внутренней ошибки. Ваш бумажник не был зашифрован. - - - - - The supplied passphrases do not match. - Введённые пароли не совпадают. - - - - Wallet unlock failed - Разблокировка бумажника не удалась - - - - - - The passphrase entered for the wallet decryption was incorrect. - Указанный пароль не подходит. - - - - Wallet decryption failed - Расшифрование бумажника не удалось - - - - Wallet passphrase was successfully changed. - Пароль бумажника успешно изменён. - - - - ClientModel - - - Network Alert - Сетевая Тревога - - - - CoinControlDialog - - - Coin Control - Выбор входов - - - - Quantity: - Количество: - - - - Bytes: - Размер: - - - - Amount: - Сумма: - - - - Priority: - Приоритет: - - - - Fee: - Комиссия: - - - - Low Output: - Мелкие входы: - - - - - no - нет - - - - After Fee: - С комиссией: - - - - Change: - Сдача: - - - - (un)select all - Выбрать все - - - - Tree mode - Дерево - - - - List mode - Список - - - - Amount - Сумма - - - - Label - Метка - - - - Address - Адрес - - - - Date - Дата - - - - Confirmations - Подтверждения - - - - Confirmed - Подтверждено - - - - Priority - Приоритет - - - - Copy address - Копировать адрес - - - - Copy label - Копировать метку - - - - - Copy amount - Копировать сумму - - - - Copy transaction ID - Скопировать ID транзакции - - - - Copy quantity - Копировать количество - - - - Copy fee - Копировать комиссию - - - - Copy after fee - Копировать с комиссией - - - - Copy bytes - Копировать объем - - - - Copy priority - Копировать приоритет - - - - Copy low output - - - - - Copy change - Копировать сдачу - - - - highest - наивысший - - - - high - высокий - - - - medium-high - выше среднего - - - - medium - средний - - - - low-medium - ниже среднего - - - - low - низкий - - - - lowest - наименьший - - - - - DUST - - - - - - yes - да - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (нет метки) - - - - change from %1 (%2) - - - - - (change) - (сдача) - - - - EditAddressDialog - - - Edit Address - Изменить адрес - - - - &Label - &Метка - - - - The label associated with this address book entry - Метка, связанная с данной записью - - - - &Address - &Адрес - - - - The address associated with this address book entry. This can only be modified for sending addresses. - Адрес, связанный с данной записью. - - - - &Stealth Address - - - - - New receiving address - Новый адрес для получения - - - - New sending address - Новый адрес для отправки - - - - Edit receiving address - Изменение адреса для получения - - - - Edit sending address - Изменение адреса для отправки - - - - The entered address "%1" is already in the address book. - Введённый адрес «%1» уже находится в адресной книге. - - - - The entered address "%1" is not a valid ShadowCoin address. - Введённый адрес "%1" не является правильным ShadowCoin-адресом. - - - - Could not unlock wallet. - Не удается разблокировать бумажник. - - - - New key generation failed. - Генерация нового ключа не удалась. - - - - GUIUtil::HelpMessageBox - - - version - версия - - - - - Shadow - - - - - Usage: - Использование: - - - - command-line options - параметры командной строки - - - - UI options - Опции интерфейса - - - - Set language, for example "de_DE" (default: system locale) - Выберите язык, например "de_DE" (по умолчанию: как в системе) - - - - Start minimized - Запускать свёрнутым - - - - Show splash screen on startup (default: 1) - Показывать сплэш при запуске (по умолчанию: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Имя клиента - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - Н/Д - - - - Client version - Версия клиента - - - - &Information - &Информация - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Используется версия OpenSSL - - - - Using BerkeleyDB version - - - - - Startup time - Время запуска - - - - Network - Сеть - - - - Name - - - - - Number of connections - Число подключений - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Цепь блоков - - - - Current number of blocks - Текущее число блоков - - - - Estimated total blocks - Расчётное число блоков - - - - Last block time - Время последнего блока - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Открыть - - - - Command-line options - Параметры командной строки - - - - &Show - &Показать - - - - &Console - Консоль - - - - Build date - Дата сборки - - - - Debug log file - Отладочный лог-файл - - - - Clear console - Очистить консоль - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Используйте стрелки вверх и вниз для просмотра истории и <b>Ctrl-L</b> для очистки экрана. - - - - Type <b>help</b> for an overview of available commands. - Напишите <b>help</b> для просмотра доступных команд. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Открыто до %1 - - - - Open for %n block(s) - - - - - conflicted - конфликт - - - - %1/offline - %1/оффлайн - - - - %1/unconfirmed - %1/не подтверждено - - - - %1 confirmations - %1 подтверждений - - - - Status - Статус - - - - , broadcast through %n node(s) - - - - - Date - Дата - - - - Source - Источник - - - - Generated - Сгенерировано - - - - - - From - От - - - - - - - To - Для - - - - - - - own address - свой адрес - - - - - label - метка - - - - - - - - Credit - Кредит - - - - matures in %n more block(s) - - - - - not accepted - не принято - - - - - - - Debit - Дебет - - - - Transaction fee - Комиссия - - - - Net amount - Чистая сумма - - - - Message - Сообщение - - - - Comment - Комментарий - - - - Transaction ID - ID транзакции - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Отладочная информация - - - - Transaction - Транзакция - - - - Inputs - Входы - - - - Amount - Количество - - - - true - истина - - - - false - ложь - - - - , has not been successfully broadcast yet - , ещё не было успешно разослано - - - - - unknown - неизвестно - - - - TransactionDescDialog - - - Transaction details - Детали транзакции - - - - This pane shows a detailed description of the transaction - Данный диалог показывает детализированную статистику по выбранной транзакции - - - - TransactionTableModel - - - Date - Дата - - - - Type - Тип - - - - Address - Адрес - - - - Amount - Количество - - - - Open until %1 - Открыто до %1 - - - - Confirmed (%1 confirmations) - Подтверждено (%1 подтверждений) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - Оффлайн - - - - Unconfirmed - Не подтверждено - - - - Confirming (%1 of %2 recommended confirmations) - Подтверждается (%1 из %2 рекомендованных подтверждений) - - - - Conflicted - Конфликт - - - - Immature (%1 confirmations, will be available after %2) - Незрелые (%1 подтверждений, будут доступны после %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Этот блок не был получен другими узлами и, возможно, не будет принят! - - - - Generated but not accepted - Сгенерировано, но не принято - - - - (n/a) - [не доступно] - - - - Transaction status. Hover over this field to show number of confirmations. - Статус транзакции. Подведите курсор к нужному полю для того, чтобы увидеть количество подтверждений. - - - - Date and time that the transaction was received. - Дата и время, когда транзакция была получена. - - - - Type of transaction. - Тип транзакции. - - - - Destination address of transaction. - Адрес назначения транзакции. - - - - Amount removed from or added to balance. - Сумма, добавленная, или снятая с баланса. - - - - WalletModel - - - - Sending... - Отправка.... - - - - bitcoin-core - - - ShadowCoin version - Версия - - - - Usage: - Использование: - - - - Send command to -server or shadowcoind - Отправить команду на -server или shadowcoind - - - - List commands - Список команд - - - - - Get help for a command - Получить помощь по команде - - - - Options: - Опции: - - - - Specify configuration file (default: shadowcoin.conf) - Указать конфигурационный файл (по умолчанию: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Указать pid-файл (по умолчанию: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Указать файл кошелька (в пределах DATA директории) - - - - Specify data directory - Укажите каталог данных - - - - Set database cache size in megabytes (default: 25) - Установить размер кэша базы данных в мегабайтах (по умолчанию: 25) - - - - Set database disk log size in megabytes (default: 100) - Установить размер лога базы данных в мегабайтах (по умолчанию: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Принимать входящие подключения на <port> (по умолчанию: 51737 или 51997 в тестовой сети) - - - - Maintain at most <n> connections to peers (default: 125) - Поддерживать не более <n> подключений к узлам (по умолчанию: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Подключиться к узлу, чтобы получить список адресов других участников и отключиться - - - - Specify your own public address - Укажите ваш собственный публичный адрес - - - - Bind to given address. Use [host]:port notation for IPv6 - Привязаться (bind) к указанному адресу. Используйте запись вида [хост]:порт для IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Порог для отключения неправильно ведущих себя узлов (по умолчанию: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Число секунд блокирования неправильно ведущих себя узлов (по умолчанию: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Произошла ошибка при открытии RPC-порта %u для прослушивания на IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Отключить базы данных блоков и адресов. Увеличивает время завершения работы (по умолчанию: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Ошибка: В транзакции отказано. Такое может произойти, если некоторые монеты уже были потрачены, например, если Вы используете одну копию файла wallet.dat, а монеты были потрачены из другой копии, но не были отмечены как потраченные в этой. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Ошибка: эта транзакция требует комиссию в размере как минимум %s из-за её объёма, сложности или использования недавно полученных средств - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Прослушивать подключения JSON-RPC на <порту> (по умолчанию: 51736 или для testnet: 51996) - - - - Accept command line and JSON-RPC commands - Принимать командную строку и команды JSON-RPC - - - - Error: Transaction creation failed - Ошибка: Создание транзакции не удалось - - - - Error: Wallet locked, unable to create transaction - Ошибка: бумажник заблокирован, невозможно создать транзакцию - - - - Importing blockchain data file. - Импортируется файл цепи блоков. - - - - Importing bootstrap blockchain data file. - Импортируется bootstrap-файл цепи блоков. - - - - Run in the background as a daemon and accept commands - Запускаться в фоне как демон и принимать команды - - - - Use the test network - Использовать тестовую сеть - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Принимать подключения извне (по умолчанию: 1, если не используется -proxy или -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Произошла ошибка при открытии на прослушивание IPv6 RCP-порта %u, возвращаемся к IPv4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Ошибка инициализации окружения БД %s! Для восстановления СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ этой директории, затем удалите из нее все, кроме wallet.dat. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Максимальный размер высокоприоритетных/низкокомиссионных транзакций в байтах (по умолчанию: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Внимание: установлено очень большое значение -paytxfee. Это комиссия, которую вы заплатите при проведении транзакции. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Внимание: убедитесь, что дата и время на Вашем компьютере выставлены верно. Если Ваши часы идут неправильно, ShadowCoin будет работать некорректно. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Внимание: ошибка чтения wallet.dat! Все ключи восстановлены, но записи в адресной книге и истории транзакций могут быть некорректными. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Внимание: wallet.dat был поврежден, данные восстановлены! Оригинальный wallet.dat сохранен как wallet.{timestamp}.bak в %s;, если ваши транзакции или баланс отображаются неправильно, следует восстановить его из данной копии. - - - - Attempt to recover private keys from a corrupt wallet.dat - Попытка восстановления ключей из поврежденного wallet.dat - - - - Block creation options: - Параметры создания блоков: - - - - Connect only to the specified node(s) - Подключаться только к указанному узлу(ам) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Определить свой IP (по умолчанию: 1 при прослушивании и если не используется -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Не удалось начать прослушивание на порту. Используйте -listen=0 если вас это устраивает. - - - - Find peers using DNS lookup (default: 1) - Искать узлы с помощью DNS (по умолчанию: 1) - - - - Sync checkpoints policy (default: strict) - Политика синхронизированных меток (по умолчанию: strict) - - - - Invalid -tor address: '%s' - Неверный адрес -tor: '%s' - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Максимальный размер буфера приёма на соединение, <n>*1000 байт (по умолчанию: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Максимальный размер буфера отправки на соединение, <n>*1000 байт (по умолчанию: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Подключаться только к узлам из сети <net> (IPv4, IPv6 или Tor) - - - - Output extra debugging information. Implies all other -debug* options - Выводить больше отладочной информации. Включает все остальные опции -debug* - - - - Output extra network debugging information - Выводить дополнительную сетевую отладочную информацию - - - - Prepend debug output with timestamp - Дописывать отметки времени к отладочному выводу - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - -Параметры SSL: (см. Bitcoin Wiki для инструкций по настройке SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - Выберите версию SOCKS-прокси (4-5, по умолчанию: 5) - - - - Send trace/debug info to console instead of debug.log file - Выводить информацию трассировки/отладки на консоль вместо файла debug.log - - - - Send trace/debug info to debugger - Отправлять информацию трассировки/отладки в отладчик - - - - Set maximum block size in bytes (default: 250000) - Максимальный размер блока в байтах (по умолчанию: 250000) - - - - Set minimum block size in bytes (default: 0) - Минимальный размер блока в байтах (по умолчанию: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Сжимать файл debug.log при запуске клиента (по умолчанию: 1, если нет -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Таймаут соединения в миллисекундах (по умолчанию: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Использовать UPnP для проброса порта (по умолчанию: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Использовать UPnP для проброса порта (по умолчанию: 1, если используется прослушивание) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Использовать прокси для скрытых сервисов (по умолчанию: тот же, что и в -proxy) - - - - Username for JSON-RPC connections - Имя для подключений JSON-RPC - - - - Verifying database integrity... - Проверка целостности базы данных... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - Внимание: мало места на диске! - - - - Warning: This version is obsolete, upgrade required! - Внимание: эта версия устарела, требуется обновление! - - - - wallet.dat corrupt, salvage failed - wallet.dat поврежден, восстановление не удалось - - - - Password for JSON-RPC connections - Пароль для подключений JSON-RPC - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Разрешить подключения JSON-RPC с указанного IP - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Посылать команды узлу, запущенному на <ip> (по умолчанию: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Выполнить команду, когда появляется новый блок (%s в команде заменяется на хэш блока) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Выполнить команду, когда получена новая транзакция (%s в команде заменяется на ID транзакции) - - - - Require a confirmations for change (default: 0) - Требовать подтверждения для сдачи (по умолчанию: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Обновить бумажник до последнего формата - - - - Set key pool size to <n> (default: 100) - Установить размер запаса ключей в <n> (по умолчанию: 100) - - - - Rescan the block chain for missing wallet transactions - Перепроверить цепь блоков на предмет отсутствующих в бумажнике транзакций - - - - How many blocks to check at startup (default: 2500, 0 = all) - Сколько блоков проверять при запуске (по умолчанию: 2500, 0 = все) - - - - How thorough the block verification is (0-6, default: 1) - Насколько тщательно проверять блоки (0-6, по умолчанию: 1) - - - - Imports blocks from external blk000?.dat file - Импортировать блоки из внешнего файла blk000?.dat - - - - Use OpenSSL (https) for JSON-RPC connections - Использовать OpenSSL (https) для подключений JSON-RPC - - - - Server certificate file (default: server.cert) - Файл серверного сертификата (по умолчанию: server.cert) - - - - Server private key (default: server.pem) - Приватный ключ сервера (по умолчанию: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Разрешённые алгоритмы (по умолчанию: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Эта справка - - - - Wallet %s resides outside data directory %s. - Кошелек %s находится вне рабочей директории %s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Невозможно установить блокировку на рабочую директорию %s. Возможно, бумажник уже запущен. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Невозможно привязаться к %s на этом компьютере (bind вернул ошибку %d, %s) - - - - Connect through socks proxy - Подключаться через socks прокси - - - - Allow DNS lookups for -addnode, -seednode and -connect - Разрешить поиск в DNS для -addnode, -seednode и -connect - - - - Loading addresses... - Загрузка адресов... - - - - Error loading blkindex.dat - Ошибка чтения blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Ошибка загрузки wallet.dat: Бумажник поврежден - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Ошибка загрузки wallet.dat: бумажник требует более новую версию ShadowCoin - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - Необходимо перезаписать бумажник, перезапустите ShadowCoin для завершения операции - - - - Error loading wallet.dat - Ошибка при загрузке wallet.dat - - - - Invalid -proxy address: '%s' - Неверный адрес -proxy: '%s' - - - - Unknown network specified in -onlynet: '%s' - В параметре -onlynet указана неизвестная сеть: '%s' - - - - Unknown -socks proxy version requested: %i - В параметре -socks запрошена неизвестная версия: %i - - - - Cannot resolve -bind address: '%s' - Не удаётся разрешить адрес в параметре -bind: '%s' - - - - Cannot resolve -externalip address: '%s' - Не удаётся разрешить адрес в параметре -externalip: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Неверное количество в параметре -paytxfee=<кол-во>: '%s' - - - - Error: could not start node - Ошибка: не удалось запустить узел - - - - Sending... - Отправка... - - - - Invalid amount - Неверное количество - - - - Insufficient funds - Недостаточно монет - - - - Loading block index... - Загрузка индекса блоков... - - - - Add a node to connect to and attempt to keep the connection open - Добавить узел для подключения и пытаться поддерживать соединение открытым - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Невозможно привязаться к %s на этом компьютере. Возможно, ShadowCoin уже работает. - - - - Fee per KB to add to transactions you send - Комиссия на килобайт, добавляемая к вашим транзакциям - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Загрузка бумажника... - - - - Cannot downgrade wallet - Не удаётся понизить версию бумажника - - - - Cannot initialize keypool - Не удаётся инициализировать массив ключей - - - - Cannot write default address - Не удаётся записать адрес по умолчанию - - - - Rescanning... - Сканирование... - - - - Done loading - Загрузка завершена - - - - To use the %s option - Чтобы использовать опцию %s - - - - Error - Ошибка - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Вы должны установить rpcpassword=<password> в конфигурационном файле: -%s -Если файл не существует, создайте его и установите права доступа только для владельца. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_sah.ts b/src/qt/locale/umbra_sah.ts deleted file mode 100644 index 57a64595cc..0000000000 --- a/src/qt/locale/umbra_sah.ts +++ /dev/null @@ -1,3419 +0,0 @@ - - - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - - - - - Address - - - - - pubkey - - - - - stealth - - - - - (no label) - - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - - - - - New passphrase - - - - - Repeat new passphrase - - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - - Encrypt wallet - - - - - This operation needs your wallet passphrase to unlock the wallet. - - - - - Unlock wallet - - - - - This operation needs your wallet passphrase to decrypt the wallet. - - - - - Decrypt wallet - - - - - Change passphrase - - - - - Enter the old and new passphrase to the wallet. - - - - - Confirm wallet encryption - - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - - - %n minute(s) ago - - - - - - - %n hour(s) ago - - - - - - - %n day(s) ago - - - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - - - %n minute(s) - - - - - - - %n hour(s) - - - - - - - %n day(s) - - - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - diff --git a/src/qt/locale/umbra_sk.ts b/src/qt/locale/umbra_sk.ts deleted file mode 100644 index 55aa96d987..0000000000 --- a/src/qt/locale/umbra_sk.ts +++ /dev/null @@ -1,3418 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - O ShadowCoin - - - - <b>ShadowCoin</b> version - verzia <b>ShadowCoinu</b> - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Popis - - - - Address - Adresa - - - - pubkey - - - - - stealth - - - - - (no label) - (bez popisu) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Dialóg hesla - - - - Enter passphrase - Zadajte heslo - - - - New passphrase - Nové heslo - - - - Repeat new passphrase - Zopakujte nové heslo - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Slúži na vypnutie trivial sendmoney keď je ohrozený OS účet. Neposkytuje žiadnu skutočnú istotu. - - - - For staking only - Len pre stávkovanie - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Zadajte nové heslo k peňaženke.<br/>Prosím použite heslo s dĺžkou aspon <b>10 a viac náhodných znakov</b>, alebo <b>8 a viac slov</b>. - - - - Encrypt wallet - Zašifrovať peňaženku - - - - This operation needs your wallet passphrase to unlock the wallet. - Táto operácia potrebuje heslo k vašej peňaženke aby ju mohla odomknúť. - - - - Unlock wallet - Odomknúť peňaženku - - - - This operation needs your wallet passphrase to decrypt the wallet. - Táto operácia potrebuje heslo k vašej peňaženke na dešifrovanie peňaženky. - - - - Decrypt wallet - Dešifrovať peňaženku - - - - Change passphrase - Zmena hesla - - - - Enter the old and new passphrase to the wallet. - Zadajte staré a nové heslo k peňaženke. - - - - Confirm wallet encryption - Potvrďte zašifrovanie peňaženky - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Upozornenie: Ak zašifrujete vašu peňaženku a stratíte prístupové heslo, potom <b>prídete o všetky svoje MINCE</b>! - - - - Are you sure you wish to encrypt your wallet? - Ste si istí, že si želáte zašifrovať peňaženku? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - DÔLEŽITÉ: Všetky predchádzajúce zálohy vašej peňaženky, ktoré ste vykonali by mali byť nahradené novo vytvorenou, zašifrovanou peňaženkou. Z bezpečnostných dôvodov bude predchádzajúca záloha nezašifrovanej peňaženky k ničomu, akonáhle začnete používať novú, zašifrovanú peňaženku. - - - - - Warning: The Caps Lock key is on! - Upozornenie: Máte zapnutý Caps Lock! - - - - - Wallet encrypted - Peňaženka zašifrovaná - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin sa teraz zavrie aby dokončil proces zašifrovania. Nezabudnite, že zašifrovanie vašej peňaženky nemôže plne chrániť vaše mince pred krádežou malwarom napadnutím vašeho počítača. - - - - - - - Wallet encryption failed - Šifrovanie peňaženky zlyhalo - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Šifrovanie peňaženky zlyhalo kôli internej chybe. Vaša peňaženka nebola zašifrovaná. - - - - - The supplied passphrases do not match. - Zadané heslá nesúhlasia. - - - - Wallet unlock failed - Odomykanie peňaženky zlyhalo - - - - - - The passphrase entered for the wallet decryption was incorrect. - Zadané heslo pre dešifrovanie peňaženky bolo nesprávne. - - - - Wallet decryption failed - Zlyhalo šifrovanie peňaženky. - - - - Wallet passphrase was successfully changed. - Heslo k peňaženke bolo úspešne zmenené. - - - - ClientModel - - - Network Alert - Výstraha siete - - - - CoinControlDialog - - - Coin Control - Kontrola mincí - - - - Quantity: - Množstvo: - - - - Bytes: - Bajty: - - - - Amount: - Suma: - - - - Priority: - Priorita: - - - - Fee: - Poplatok: - - - - Low Output: - Nízky výstup: - - - - - no - nie - - - - After Fee: - Po poplatku: - - - - Change: - Zmena: - - - - (un)select all - (ne)označiť všetko - - - - Tree mode - Stromový režim - - - - List mode - Zoznamový režim - - - - Amount - Suma - - - - Label - Menovka - - - - Address - Adresa - - - - Date - Dátum - - - - Confirmations - Potvrdenia - - - - Confirmed - Potvrdené - - - - Priority - Priorita - - - - Copy address - Kopírovať adresu - - - - Copy label - Kopírovať popis - - - - - Copy amount - Kopírovať sumu - - - - Copy transaction ID - Kopírovať ID transakcie - - - - Copy quantity - Kopírovať množstvo - - - - Copy fee - Kopírovať poplatok - - - - Copy after fee - Kopírovať po poplatku - - - - Copy bytes - Kopírovať bajty - - - - Copy priority - Kopírovať prioritu - - - - Copy low output - Kopírovať nízky výstup - - - - Copy change - Kopírovať zmenu - - - - highest - najvyššie - - - - high - vysoké - - - - medium-high - stredne vysoké - - - - medium - stredné - - - - low-medium - stredne nízke - - - - low - nízke - - - - lowest - najnižšie - - - - - DUST - PRACH - - - - - yes - áno - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Tento popis sčervená, v prípade, že veľkosť transakcie je väčšia ako 10000 bajtov. - - To znamená, že je potrebný poplatok vo výške najmenej %1 za kb. - -Môže sa líšiť +/- 1 bajt za vstup. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Transakcie s vyššou prioritou sa dostanú s väčšou pravdepodobnosťou do bloku. - -Tento popis sčervenie, ak je priorita menšia ako "stredná". - -To znamená, že je nutný poplatok vo výške aspoň %1 za kb. - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Tento popis sčervenie, ak príjemca dostane sumu menšiu ako %1. - -To znamená, že je potrebný poplatok aspoň %2. - -Sumy nižšie ako 0,546 násobok minimálneho poplatku sú zobrazené ako PRACH. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Tento popis sčervenie, ak je zmena menšia než %1. - -To znamená, že je potrebný poplatok aspoň %2. - - - - - (no label) - (bez popisu) - - - - change from %1 (%2) - zmena od %1 (%2) - - - - (change) - (zmena) - - - - EditAddressDialog - - - Edit Address - Upraviť adresu - - - - &Label - &Popis - - - - The label associated with this address book entry - Popis spojený s touto položkou v adresáry - - - - &Address - &Adresa - - - - The address associated with this address book entry. This can only be modified for sending addresses. - Adresa spojená s položkou v tomto adresári. Toto môže byť zmenené iba pre odosielané adresy. - - - - &Stealth Address - - - - - New receiving address - Nová adresa pre prijímanie - - - - New sending address - Nová adresa pre odoslanie - - - - Edit receiving address - Upraviť adresu pre prijímanie - - - - Edit sending address - Upraviť adresu pre odosielanie - - - - The entered address "%1" is already in the address book. - Zadaná adresa "%1" sa už nachádza v adresári. - - - - The entered address "%1" is not a valid ShadowCoin address. - Zadaná adresa "%1" nie je platnou ShadowCoin adresou. - - - - Could not unlock wallet. - Nepodarilo sa odomknúť peňaženku. - - - - New key generation failed. - Generovanie nového kľúča zlyhalo. - - - - GUIUtil::HelpMessageBox - - - version - verzia - - - - - Shadow - - - - - Usage: - Použitie: - - - - command-line options - možnosti príkazového riadka - - - - UI options - Možnosti používateľského rozhrania - - - - Set language, for example "de_DE" (default: system locale) - Nastavenie jazyka, napr "de_DE" (predvolené: miestne nastavenie systému) - - - - Start minimized - Spustiť minimalizované - - - - Show splash screen on startup (default: 1) - Zobraziť úvodnú obrazovku pri štarte (predvolené: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Meno klienta - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - nie je k dispozícii - - - - Client version - Verzia klienta - - - - &Information - &Informácie - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Používa OpenSSL verziu - - - - Using BerkeleyDB version - - - - - Startup time - Čas spustenia - - - - Network - Sieť - - - - Name - - - - - Number of connections - Počet pripojení - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Reťazec blokov - - - - Current number of blocks - Aktuálny počet blokov - - - - Estimated total blocks - Očakávaných blokov celkovo - - - - Last block time - Čas posledného bloku - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Otvoriť - - - - Command-line options - Možnosti príkazového riadka - - - - &Show - &Zobraziť - - - - &Console - &Konzola - - - - Build date - Dátum zostavenia - - - - Debug log file - Súbor denníka ladenia - - - - Clear console - Vymazať konzolu - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Použite šípky hore a dole pre navigáciu históriou, a <b> Ctrl-L </ b> pre vymazanie obrazovky. - - - - Type <b>help</b> for an overview of available commands. - Zadajte <b>help</b> pre prehľad dostupných príkazov. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Otvorené do %1 - - - - Open for %n block(s) - Otvoriť pre %n blokOtvoriť pre %n blokovOtvoriť pre %n blokov - - - - conflicted - v rozpore - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/nepotvrdené - - - - %1 confirmations - %1 potvrdení - - - - Status - Stav - - - - , broadcast through %n node(s) - , vysielanie cez %n uzol, vysielanie cez %n uzlov, vysielanie cez %n uzlov - - - - Date - Dátum - - - - Source - Zdroj - - - - Generated - Vygenerované - - - - - - From - Od - - - - - - - To - Pre - - - - - - - own address - vlastná adresa - - - - - label - popis - - - - - - - - Credit - Kredit - - - - matures in %n more block(s) - dozreje o ďalší %n blokdozreje o ďalších %n blokovdozreje o ďalších %n blokov - - - - not accepted - neprijaté - - - - - - - Debit - Debet - - - - Transaction fee - Transakčný poplatok - - - - Net amount - Čiastka netto - - - - Message - Správa - - - - Comment - Komentár - - - - Transaction ID - ID transakcie - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Ladiace informácie - - - - Transaction - Transakcie - - - - Inputs - Vstupy - - - - Amount - Suma - - - - true - pravda - - - - false - nepravda - - - - , has not been successfully broadcast yet - , ešte nebola úspešne odoslaná - - - - - unknown - neznámy - - - - TransactionDescDialog - - - Transaction details - Detaily transakcie - - - - This pane shows a detailed description of the transaction - Táto časť obrazovky zobrazuje detailný popis transakcie - - - - TransactionTableModel - - - Date - Dátum - - - - Type - Typ - - - - Address - Adresa - - - - Amount - Hodnota - - - - Open until %1 - Otvorené do %1 - - - - Confirmed (%1 confirmations) - Potvrdené (%1 potvrdení) - - - - Open for %n more block(s) - Otvoriť pre %n ďalší blokOtvoriť pre %n ďalšie blokyOtvoriť pre %n ďalšie bloky - - - - Narration - - - - - Offline - Offline - - - - Unconfirmed - Nepotvrdené - - - - Confirming (%1 of %2 recommended confirmations) - Potvrdzujem (%1 z %2 doporučených potvrdení) - - - - Conflicted - V rozpore - - - - Immature (%1 confirmations, will be available after %2) - Nezrelé (%1 potvrdení, bude k dispozícii po %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Ten blok nebol prijatý žiadnym iným uzlom a pravdepodobne nebude akceptovaný! - - - - Generated but not accepted - Vypočítané ale neakceptované - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Status transakcie. Presuňte myš nad toto pole a zobrazí sa počet potvrdení. - - - - Date and time that the transaction was received. - Dátum a čas prijatia transakcie. - - - - Type of transaction. - Typ transakcie. - - - - Destination address of transaction. - Cieľová adresa transakcie. - - - - Amount removed from or added to balance. - Suma pridaná alebo odobraná k zostatku. - - - - WalletModel - - - - Sending... - Posielam... - - - - bitcoin-core - - - ShadowCoin version - ShadowCoin verzia - - - - Usage: - Použitie: - - - - Send command to -server or shadowcoind - Pošli príkaz na -server alebo shadowcoind - - - - List commands - Zoznam príkazov - - - - Get help for a command - Získať pomoc pre príkaz - - - - Options: - Možnosti: - - - - Specify configuration file (default: shadowcoin.conf) - Zadajte konfiguračný súbor (predvolené: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Zadajte pid súbor (predvolené: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Zadajte súbor peňaženky (v rámci dátového adresára) - - - - Specify data directory - Zadajte priečinok s dátami - - - - Set database cache size in megabytes (default: 25) - Nastaviť veľkosť vyrovnávajúcej pamäte pre databázu v megabytoch (predvolené: 25) - - - - Set database disk log size in megabytes (default: 100) - Nastaviť veľkosť databázového denníka na disku v MB (predvolené: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Počúvať pripojenia na <port> (predvolené: 51737 alebo testovacia sieť: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Udržiavať maximálne <n> spojení (predvolené: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Pre načítanie peer adresy sa pripojte k uzlu, a odpojte - - - - Specify your own public address - Určite vašu vlastnú verejnú adresu - - - - Bind to given address. Use [host]:port notation for IPv6 - Spojiť do danej adresy. Použite [host]:port zápis pre IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Nechajte stávkovať vaše mince pre podporu siete a získajte odmenu (predvolené: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Hranica pre odpojenie zle sa správajúcich peerov (predvolené: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Počet sekúnd kedy sa zabráni zle sa správajúcim peerom znovupripojenie (predvolené: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Pri nastavovaní portu RPC %u pre počúvanie na IPv4 došlo k chybe: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Odpojiť blok a databázy adries. Zvyšuje vypínací čas (predvolené: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Chyba: Transakcia bola zamietnutá. To môže nastať, ak niektoré z mincí vo vašej peňaženke sa už použili, ako napríklad, ak ste použili kópiu wallet.dat a mince boli použité v kópii, ale neboli označené ako použité tu. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Chyba: Táto operácia vyžaduje transakčný poplatok vo výške aspoň %s, pretože jeho množstvo, zložitosť, alebo použitím nedávno prijatých finančných prostriedkov - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Počúvajte pre JSON-RPC spojenie na <port> (predvolené: 51736 alebo testovaciasieť: 51996) - - - - Accept command line and JSON-RPC commands - Prijímať príkazy z príkazového riadku a JSON-RPC - - - - Error: Transaction creation failed - Chyba: Vytvorenie transakcie zlyhalo - - - - Error: Wallet locked, unable to create transaction - Chyba: Peňaženka je zamknutá, nie je možné vytvoriť transakciu - - - - Importing blockchain data file. - Importovanie dátového súboru reťazca blokov. - - - - Importing bootstrap blockchain data file. - Import zavádzacej časti blockchain dátového súbora. - - - - Run in the background as a daemon and accept commands - Bežať na pozadí ako démon a prijímať príkazy - - - - Use the test network - Použiť testovaciu sieť - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Prijímať pripojenie z vonka (predvolené: 1, ak nie -proxy alebo -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Pri nastavovaní portu RPC %u pre počúvanie na IPv6, spadne späť do IPv4 došlo k chybe: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Chyba pri inicializácii databázy prostredie %s! Ak chcete obnoviť, ZÁLOHUJTE TENTO ADRESÁR, potom všetko z neho odstránte okrem wallet.dat. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Nastavte maximálnu veľkosť high-priority/low-fee transakcií v bajtoch (predvolené: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Upozornenie: -paytxfee je nastavené veľmi vysoko. Toto sú transakčné poplatky ktoré zaplatíte ak odošlete transakciu. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Upozornenie: Skontrolujte, že dátum a čas počítača sú správne! Ak je Váš čas nesprávny ShadowCoin nebude pracovať správne. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Upozornenie: Chyba pri čítaní wallet.dat! Všetky kľúče načítané správne, ale transakčné dáta alebo položky adresára môže chýbať alebo byť nesprávne. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Upozornenie: wallet.dat poškodený, údaje zachránené! Pôvodný wallet.dat bol uložený ako wallet.{timestamp}.bak v %s; ak váš zostatok alebo transakcie nie sú správne, mali by ste obnoviť zo zálohy. - - - - Attempt to recover private keys from a corrupt wallet.dat - Pokus obnoviť súkromné kľúče z poškodeného wallet.dat - - - - Block creation options: - Voľby vytvorenia bloku: - - - - Connect only to the specified node(s) - Pripojiť sa len k určenému uzlu(om) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Objavte vlastnú IP adresa (predvolené: 1 pri počúvaní a nie -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Nepodarilo sa počúvať žiadnom porte. Použite -listen=0 ak to chcete. - - - - Find peers using DNS lookup (default: 1) - Nájsť peerov pomocou vyhľadávania DNS (predvolené: 1) - - - - Sync checkpoints policy (default: strict) - Sync checkpoints policy (predvolené: strict) - - - - Invalid -tor address: '%s' - Neplatná -tor adresa: '%s' - - - - Invalid amount for -reservebalance=<amount> - Neplatná suma pre -reservebalance=<množstvo> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum pre-pripojenie prijímacej vyrovnávacej pamäti, <n>*1000 bajtov (predvolené: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maximum pre-pripojenie posielacej vyrovnávacej pamäti, <n>*1000 bajtov (predvolené: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Pripojiť len k uzlom siete <net> (IPv4, IPv6 alebo Tor) - - - - Output extra debugging information. Implies all other -debug* options - Výstupné ďalšie informácie o ladení. Znamená všetky -debug* možnosti - - - - Output extra network debugging information - Výstupné ďalšie sieťové informácie o ladení - - - - Prepend debug output with timestamp - Pred debug výstup s časovou pečiatkou - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL možnosť: (pozrite Bitcoin Wiki pre návod na nastavenie SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - Vyberte verziu SOCKS proxy pre používanie (4-5, predvolené: 5) - - - - Send trace/debug info to console instead of debug.log file - Odoslať trace/debug informácie na konzolu namiesto debug.info žurnálu - - - - Send trace/debug info to debugger - Poslať stopy/ladiace informácie do debuggera - - - - Set maximum block size in bytes (default: 250000) - Nastavte maximálnu veľkosť bloku v bajtoch (predvolené: 250000) - - - - Set minimum block size in bytes (default: 0) - Nastavte minimálnu veľkosť bloku v bajtoch (predvolené: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Stlačiť debug.log súbor na spustenie klienta (predvolené: 1, keď nie -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Určiť aut spojenia v milisekundách (predvolené: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - Nemožno podpísať kontrolný bod, zlý checkpointkey? - - - - - Use UPnP to map the listening port (default: 0) - Skúsiť použiť UPnP pre mapovanie počúvajúceho portu (default: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Skúsiť použiť UPnP pre mapovanie počúvajúceho portu (default: 1 when listening) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Použiť proxy server k získaniu Tor skrytých služieb (predvolené: rovnaká ako -proxy) - - - - Username for JSON-RPC connections - Užívateľské meno pre JSON-RPC spojenia - - - - Verifying database integrity... - Overenie integrity databázy ... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - UPOZORNENIE: detekovaný synchronizovaný porušený checkpoint, ale preskočený! - - - - Warning: Disk space is low! - Upozornenie: Nedostatok miesta na disku! - - - - Warning: This version is obsolete, upgrade required! - Upozornenie: Táto verzia je zastaraná, vyžaduje sa aktualizácia! - - - - wallet.dat corrupt, salvage failed - wallet.dat je poškodený, záchrana zlyhala - - - - Password for JSON-RPC connections - Heslo pre JSON-rPC spojenia - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, musíte nastaviť rpcpassword v konfiguračnom súbore: - %s -Je odporúčané použiť nasledujúce náhodné heslo: -rpcuser=shadowcoinrpc -rpcpassword=%s -(Nemusíte si pamätať toto heslo) -Užívateľské meno a heslo nesmú byť rovnaké. -Ak súbor neexistuje, vytvorte ho s oprávneniami súborov vlastníkov iba na čítatanie. -Odporúča sa tiež nastaviť alertnotify, takže budete upozornení na problémy; -napríklad: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - Find peers using internet relay chat (default: 0) - Nájsť peerov pomocou Internet Relay Chat (predvolené: 1) {0)?} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Synchronizácia času s ostatnými uzlami. Zakázať ak čas na vašom systéme je presný, napr synchronizáciu s NTP (predvolené: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - Pri vytváraní transakcií, ignorovať vstupy s hodnotou nižšou než táto (predvolené: 0.01) - - - - Allow JSON-RPC connections from specified IP address - Povoliť JSON-RPC spojenia z určenej IP adresy. - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Poslať príkaz nóde bežiacej na <ip> (predvolené: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Vykonaj príkaz, ak zmeny v najlepšom bloku (%s v príkaze nahradí blok hash) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Spustiť príkaz ak sa zmení transakcia v peňaženke (%s v cmd sa nahrádza TxID) - - - - Require a confirmations for change (default: 0) - Požadovať potvrdenie pre zmenu (predvolené: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Presadzovať transakčné skripty k používaniu kanonických PUSH operátorov (predvolené: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Spustiť príkaz, keď je prijaté príslušné upozornenie (%s v cmd je nahradený správou) - - - - Upgrade wallet to latest format - Aktualizuj peňaženku na najnovší formát. - - - - Set key pool size to <n> (default: 100) - Nastaviť zásobu adries na <n> (predvolené: 100) - - - - Rescan the block chain for missing wallet transactions - Znovu skenovať reťaz blokov pre chýbajúce transakcie - - - - How many blocks to check at startup (default: 2500, 0 = all) - Koľko blokov na kontrolu pri štarte (predvolené: 2500, 0 = všetky) - - - - How thorough the block verification is (0-6, default: 1) - Ako dôkladné overenie bloku je (0-6, predvolené: 1) - - - - Imports blocks from external blk000?.dat file - Importovať bloky z externého blk000?.dat súbora - - - - Use OpenSSL (https) for JSON-RPC connections - Použiť OpenSSL (https) pre JSON-RPC spojenia - - - - Server certificate file (default: server.cert) - Súbor s certifikátom servra (predvolené: server.cert) - - - - Server private key (default: server.pem) - Súkromný kľúč servra (predvolené: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Akceptovateľné ciphers (predvolené: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Chyba: Peňaženka odomknuté len pre stávkovanie, nemožné vytvoriť transakciu. - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - UPOZORNENIE: Neplatný checkpoint nájdený! Uvedené transakcie nemusia byť správne! Možno budete musieť upgradovať, alebo upozorniť vývojárov. - - - - This help message - Táto pomocná správa - - - - Wallet %s resides outside data directory %s. - Peňaženka %s bydlisko mimo dátový adresár %s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Nemožno získať zámok na dátový adresár %s. ShadowCoin už pravdepodobne beží. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Nemôžem sa pripojiť k %s na tomto počítači (bind vrátil chybu %d, %s) - - - - Connect through socks proxy - Pripojenie cez SOCKS proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Povoliť vyhľadávanie DNS pre pridanie nódy a spojenie - - - - Loading addresses... - Načítavanie adries... - - - - Error loading blkindex.dat - Chyba pri načítaní blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Chyba načítania wallet.dat: Peňaženka je poškodená - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Chyba pri načítaní wallet.dat: Peňaženka vyžaduje novšiu verziu ShadowCoin - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - Peňaženka potrebuje byť prepísaná: reštartujte ShadowCoin k dokončeniu - - - - Error loading wallet.dat - Chyba načítania wallet.dat - - - - Invalid -proxy address: '%s' - Neplatná adresa proxy: '%s' - - - - Unknown network specified in -onlynet: '%s' - Neznámy siete je uvedené v -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Neznáma požadovaná SOCKS proxy verzia:% i - - - - Cannot resolve -bind address: '%s' - Nemožno rozložiť -bind adresu: '%s' - - - - Cannot resolve -externalip address: '%s' - Nemožno rozložiť -externalip adresu: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Neplatná suma pre -paytxfee=<amount>: '%s' - - - - Error: could not start node - Chyba: nemožno spustiť uzol - - - - Sending... - Posielam... - - - - Invalid amount - Neplatná suma - - - - Insufficient funds - Nedostatok prostriedkov - - - - Loading block index... - Načítavanie zoznamu blokov... - - - - Add a node to connect to and attempt to keep the connection open - Pridať nód na pripojenie a pokus o udržanie pripojenia otvoreného - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Nemôžem sa pripojiť na %s na tomto počítači. ShadowCoin je pravdepodobne už beží. - - - - Fee per KB to add to transactions you send - Poplatok za KB pridať do transakcií, ktoré odosielate - - - - Invalid amount for -mininput=<amount>: '%s' - Neplatná suma pre -mininput=<amount>: '%s' - - - - Loading wallet... - Načítavam peňaženku... - - - - Cannot downgrade wallet - Nie je možné prejsť na nižšiu verziu peňaženky - - - - Cannot initialize keypool - Nemožno inicializovať keypool - - - - Cannot write default address - Nie je možné zapísať predvolenú adresu. - - - - Rescanning... - Nové prehľadávanie... - - - - Done loading - Dokončené načítavanie - - - - To use the %s option - Použiť %s možnosť. - - - - Error - Chyba - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Musíš nastaviť rpcpassword=<heslo> v konfiguračnom súbore: -%s -Ak súbor neexistuje, vytvorte ho s oprávnením pre čítanie len vlastníkom (owner-readable-only) - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_sl_SI.ts b/src/qt/locale/umbra_sl_SI.ts deleted file mode 100644 index 49b8420405..0000000000 --- a/src/qt/locale/umbra_sl_SI.ts +++ /dev/null @@ -1,3416 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - O ShadowCoin - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> verzija - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Oznaka - - - - Address - Naslov - - - - pubkey - - - - - stealth - - - - - (no label) - (ni oznake) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Poziv gesla - - - - Enter passphrase - Vnesite geslo - - - - New passphrase - Novo geslo - - - - Repeat new passphrase - Ponovite novo geslo - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Služi kot onemogočenje pošiljanja prostega denarja, v primerih okužbe operacijskega sistema. Ne ponuja prave zaščite. - - - - For staking only - Samo za staking. - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Vnesite novo geslo za vstop v denarnico.<br/>Prosimo, da geslo sestavite iz <b> 10 ali več naključnih znakov</b> oz. <b>osem ali več besed</b>. - - - - Encrypt wallet - Šifriraj denarnico - - - - This operation needs your wallet passphrase to unlock the wallet. - To dejanje zahteva geslo za odklepanje vaše denarnice. - - - - Unlock wallet - Odkleni denarnico - - - - This operation needs your wallet passphrase to decrypt the wallet. - To dejanje zahteva geslo za dešifriranje vaše denarnice. - - - - Decrypt wallet - Dešifriraj denarnico - - - - Change passphrase - Zamenjaj geslo - - - - Enter the old and new passphrase to the wallet. - Vnesite staro in novo geslo denarnice. - - - - Confirm wallet encryption - Potrdi šifriranje denarnice - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Opozorilo: Če šifrirate svojo denarnico in izgubite svoje geslo, boste <b> IZGUBILI VSE SVOJE KOVANCE</b>! - - - - Are you sure you wish to encrypt your wallet? - Ali ste prepričani, da želite šifrirati vašo denarnico? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - POMEMBNO: Vsaka predhodna varnostna kopija datoteke denarnice mora biti nadomeščena z novo datoteko šifrirane denarnice. Zaradi varnostnih razlogov bodo namreč prejšnje varnostne kopije datoteke nešifrirane denarnice postale neuporabne takoj ko boste pričeli uporabljati novo, šifrirano denarnico. - - - - - Warning: The Caps Lock key is on! - Opozorilo: imate prižgan Cap Lock - - - - - Wallet encrypted - Denarnica šifrirana - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin se bo sedaj zaprl, da dokonča proces šifriranje. Pomnite, da tudi šifriranje vaše denarnice ne more v celoti zaščititi vaših kovancev pred krajo z zlonamernimi programi in računalniškimi virusi, če ti okužijo vaš računalnik. - - - - - - - Wallet encryption failed - Šifriranje denarnice je spodletelo - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Šifriranje denarnice spodletelo je zaradi notranje napake. Vaša denarnica ni šifrirana. - - - - - The supplied passphrases do not match. - Vnešeno geslo se ne ujema - - - - Wallet unlock failed - Odklep denarnice spodletel - - - - - - The passphrase entered for the wallet decryption was incorrect. - Geslo za dešifriranje denarnice, ki ste ga vnesli, ni pravilno. - - - - Wallet decryption failed - Dešifriranje denarnice je spodletelo - - - - Wallet passphrase was successfully changed. - Geslo denarnice je bilo uspešno spremenjeno. - - - - ClientModel - - - Network Alert - Omrežno Opozorilo - - - - CoinControlDialog - - - Coin Control - Kontrola kovancev - - - - Quantity: - Količina: - - - - Bytes: - Biti: - - - - Amount: - Količina: - - - - Priority: - Prednostno mesto: - - - - Fee: - Provizija: - - - - Low Output: - Nizek output: - - - - - no - ne - - - - After Fee: - Po proviziji: - - - - Change: - Sprememba: - - - - (un)select all - od/obkljukaj vse - - - - Tree mode - Drevo - - - - List mode - Seznam - - - - Amount - Količina - - - - Label - Oznaka - - - - Address - Naslov - - - - Date - Datum - - - - Confirmations - Potrdila - - - - Confirmed - Potrjeno - - - - Priority - Prednostno mesto - - - - Copy address - Kopiraj naslov - - - - Copy label - Kopiraj oznako - - - - - Copy amount - Kopiraj količino - - - - Copy transaction ID - Kopiraj ID transakcije - - - - Copy quantity - Kopiraj količino - - - - Copy fee - Kopiraj provizijo - - - - Copy after fee - Kopiraj po proviziji - - - - Copy bytes - Kopiraj bite - - - - Copy priority - Kopiraj prednostno mesto - - - - Copy low output - Kopiraj nizek output: - - - - Copy change - Kopiraj spremembo - - - - highest - najvišja - - - - high - visoka - - - - medium-high - srednje visoka - - - - medium - srednje - - - - low-medium - srednje nizka - - - - low - nizka - - - - lowest - najnižja - - - - - DUST - PRAH - - - - - yes - da - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Ta oznakla se obarva rdeče, če je transakcija večja od 10000 bajtov. - - To pomeni, da je zahtevana provizija vsaj %1 na kb. - - Lahko variira +/- 1 Bajt na vnos. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Transakcije z višjo prioriteto imajo višjo verjetnost, da so vključene v blok. - -Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - - To pomeni, da je zahtevana provizija vsaj %1 na kb. - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Ta oznaka se obarva rdeče, če prejemnik dobi količino manjšo od %1. - - To pomeni, da je potrebna vsaj %2 provizija. - - Zneski pod 0.546 krat minimalna transakcijska provizija so prikazani kot PRAH. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Ta oznakla se obarva rdeče, če je sprememba manjša od %1. - - To pomeni, da je zahtevana provizija vsaj %2. - - - - - (no label) - (ni oznake) - - - - change from %1 (%2) - spremeni iz %1 (%2) - - - - (change) - (spremeni) - - - - EditAddressDialog - - - Edit Address - Uredi naslov - - - - &Label - &Oznaka - - - - The label associated with this address book entry - Oznaka povezana s tem vnosom v imeniku - - - - &Address - &Naslov - - - - The address associated with this address book entry. This can only be modified for sending addresses. - Naslov povezan s tem vnosom v imeniku. Spremenite ga lahko le za naslove odlivov. - - - - &Stealth Address - - - - - New receiving address - Nov naslov za prilive - - - - New sending address - Nov naslov za odlive - - - - Edit receiving address - Uredi naslov za prilive - - - - Edit sending address - Uredi naslov za odlive - - - - The entered address "%1" is already in the address book. - Vnešeni naslov "&1" je že v imeniku. - - - - The entered address "%1" is not a valid ShadowCoin address. - Vneseni naslov "%1" ni veljaven ShadowCoin naslov. - - - - Could not unlock wallet. - Denarnice ni bilo mogoče odkleniti. - - - - New key generation failed. - Ustvarjanje novega ključa je spodletelo. - - - - GUIUtil::HelpMessageBox - - - version - različica - - - - - Shadow - - - - - Usage: - Uporaba: - - - - command-line options - možnosti ukazne vrstice - - - - UI options - možnosti uporabniškega vmesnika - - - - Set language, for example "de_DE" (default: system locale) - Nastavi jezik, npr. "sl_SI" (privzeto: jezikovna oznaka sistema) - - - - Start minimized - Zaženi pomanjšano - - - - Show splash screen on startup (default: 1) - Prikaži splash screen ob zagonu (default: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Ime odjemalca - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - Neznano - - - - Client version - Različica odjemalca - - - - &Information - &Informacije - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - OpenSSL različica v rabi - - - - Using BerkeleyDB version - - - - - Startup time - Čas zagona - - - - Network - Omrežje - - - - Name - - - - - Number of connections - Število povezav - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - veriga blokov - - - - Current number of blocks - Trenutno število blokov - - - - Estimated total blocks - Ocena vseh blokov - - - - Last block time - Čas zadnjega bloka - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Odpri - - - - Command-line options - Možnosti ukazne vrstice. - - - - &Show - &Prikaži - - - - &Console - &Konzola - - - - Build date - Datum izgradnje - - - - Debug log file - Razhroščevalna dnevniška datoteka - - - - Clear console - Počisti konzolo - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Za navigiranje po zgodovini uporabite puščici gor in dol, in <b>Ctrl-L</b> za izpraznjenje zaslona. - - - - Type <b>help</b> for an overview of available commands. - Vtipkaj <b>pomoč</b> za vpogled v razpožljive ukaze. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Odpri enoto %1 - - - - Open for %n block(s) - Odprt za %n blokOdprt za %n blokaOdprt za %n blokovOdprt za %n blokov - - - - conflicted - sporen - - - - %1/offline - %1/offline - - - - %1/unconfirmed - %1/nepotrjeno - - - - %1 confirmations - %1 potrdil - - - - Status - Stanje - - - - , broadcast through %n node(s) - , predvajanje skozi %n vozlišče, predvajanje skozi %n vozlišči, predvajanje skozi %n vozlišč, predvajanje skozi %n vozlišč - - - - Date - Datum - - - - Source - Izvor - - - - Generated - Generirano - - - - - - From - Pošiljatelj - - - - - - - To - Prejemnik - - - - - - - own address - lasten naslov - - - - - label - oznaka - - - - - - - - Credit - Kredit - - - - matures in %n more block(s) - dozori čez %n blokdozori čez %n blokadozori čez %n blokovdozori čez %n blokov - - - - not accepted - ni bilo sprejeto - - - - - - - Debit - Dolg - - - - Transaction fee - Provizija transakcije - - - - Net amount - Neto količina - - - - Message - Sporočilo - - - - Comment - Opomba - - - - Transaction ID - ID transakcije - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Razhroščevalna informacija - - - - Transaction - Transakcija - - - - Inputs - Vnosi - - - - Amount - Količina - - - - true - pravilno - - - - false - nepravilno - - - - , has not been successfully broadcast yet - , še ni bil uspešno predvajan - - - - - unknown - neznano - - - - TransactionDescDialog - - - Transaction details - Podrobnosti transakcije - - - - This pane shows a detailed description of the transaction - To podokno prikazuje podroben opis transakcije - - - - TransactionTableModel - - - Date - Datum - - - - Type - Vrsta - - - - Address - Naslov - - - - Amount - Količina - - - - Open until %1 - Odpri enoto %1 - - - - Confirmed (%1 confirmations) - Potrjeno (%1 potrdil) - - - - Open for %n more block(s) - Odprt še %n blokOdprt še %n blokaOdprt še %n blokovOdprt še %n blokov - - - - Narration - - - - - Offline - Nepovezan - - - - Unconfirmed - Nepotrjeno - - - - Confirming (%1 of %2 recommended confirmations) - Potrjuje (%1 od %2 priporočenih potrditev) - - - - Conflicted - Sporen - - - - Immature (%1 confirmations, will be available after %2) - Nezrel (%1 potrditev, na voljo bo po %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Ta blok ni prejelo še nobeno vozlišče. Najverjetneje ne bo sprejet! - - - - Generated but not accepted - Generirano, toda ne sprejeto - - - - (n/a) - (ni na voljo) - - - - Transaction status. Hover over this field to show number of confirmations. - Stanje transakcije. Zapeljite z miško čez to polje za prikaz števila potrdil. - - - - Date and time that the transaction was received. - Datum in čas, ko je transakcija bila prejeta. - - - - Type of transaction. - Vrsta transakcije. - - - - Destination address of transaction. - Naslov prejemnika transakcije. - - - - Amount removed from or added to balance. - Količina odlita ali prilita dobroimetju. - - - - WalletModel - - - - Sending... - Pošiljanje... - - - - bitcoin-core - - - ShadowCoin version - ShadowCoin različica - - - - Usage: - Uporaba: - - - - Send command to -server or shadowcoind - Pošlji ukaz na -server ali shadowcoind - - - - List commands - Prikaži ukaze - - - - Get help for a command - Prikaži pomoč za ukaz - - - - Options: - Možnosti: - - - - Specify configuration file (default: shadowcoin.conf) - Določi konfiguracijsko datoteko (privzeto: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Določi pid datoteko (privzeto: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Določi datoteko denarnice (znotraj imenika s podatki) - - - - Specify data directory - Določi podatkovni imenik - - - - Set database cache size in megabytes (default: 25) - Nastavi pomnilnik podatkovne zbirke v megabajtih (privzeto: 25) - - - - Set database disk log size in megabytes (default: 100) - Nastavi velikost zapisa podatkovne baze na disku v megabajtih (privzeto: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Sprejmi povezave na <port> (privzeta vrata: 51737 ali testnet: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Obdrži maksimalno število <n> povezav (privzeto: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Poveži se na vozlišče da pridobiš naslove soležnikov in prekini povezavo - - - - Specify your own public address - Določite vaš lasten javni naslov - - - - Bind to given address. Use [host]:port notation for IPv6 - Naveži na dani naslov. Uporabi [host]:port ukaz za IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Deleži svoje kovance za podporo omrežja in pridobi nagrado (default: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Prag za prekinitev povezav s slabimi odjemalci (privzeto: 1000) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Število sekund preden se ponovno povežejo neodzivni soležniki (privzeto: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Prišlo je do napake pri nastavljanju RPC porta %u za vhodne povezave na IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Loči podatkovne baze blokov in naslovov. Podaljša čas zaustavitve (privzeto: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Napaka: Transakcija je bila zavrnjena. To se je lahko zgodilo, če so bili kovanci v vaši denarnici že zapravljeni, na primer če ste uporabili kopijo wallet.dat in so bili kovanci zapravljeni v kopiji, a tu še niso bili označeni kot zapravljeni. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Napaka: Ta transakcija zahteva transakcijsko provizijo vsaj %s zaradi svoje količine, kompleksnosti ali uporabo sredstev, ki ste jih prejeli pred kratkim. - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Sprejmi povezave na <port> (privzeta vrata: 51737 ali testnet: 51997) - - - - Accept command line and JSON-RPC commands - Sprejmi ukaze iz ukazne vrstice in JSON-RPC - - - - Error: Transaction creation failed - Napaka: Ustvarjanje transakcije spodletelo - - - - Error: Wallet locked, unable to create transaction - Napaka: Zaklenjena denarnica, ni mogoče opraviti transakcije - - - - Importing blockchain data file. - Uvažanje blockchain podatkovne datoteke. - - - - Importing bootstrap blockchain data file. - Uvažanje podatkovne datoteke verige blokov. - - - - Run in the background as a daemon and accept commands - Teci v ozadju in sprejemaj ukaze - - - - Use the test network - Uporabi testno omrežje - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Sprejmi zunanje povezave (privzeto: 1 če ni nastavljen -proxy ali -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Prišlo je do napake pri nastavljanju RPC porta %u za vhodne povezave na IPv6: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Napaka pri zagonu podatkovne baze okolja %s! Za popravilo, NAPRAVITE VARNOSTNO KOPIJO IMENIKA, in iz njega odstranite vse razen datoteke wallet.dat - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Nastavi maksimalno velikost visoke-prioritete/nizke-provizije transakcij v bajtih (privzeto: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Opozorilo: -paytxfee je nastavljen zelo visoko! To je transakcijska provizija, ki jo boste plačali ob pošiljanju transakcije. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Opozorilo: Prosimo preverite svoj datum in čas svojega računalnika! Če je vaša ura nastavljena napačno ShadowCoin ne bo deloval. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Opozorilo: napaka pri branju wallet.dat! Vsi ključi so bili pravilno prebrani, podatki o transakciji ali imenik vnešenih naslovov so morda izgubljeni ali nepravilni. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Opozorilo: wallet.dat je pokvarjena, podatki rešeni! Originalna wallet.dat je bila shranjena kot denarnica. {timestamp}.bak v %s; če imate napačno prikazano stanje na računu ali v transakcijah prenovite datoteko z varnostno kopijo. - - - - Attempt to recover private keys from a corrupt wallet.dat - Poizkusi rešiti zasebni ključ iz pokvarjene wallet.dat - - - - Block creation options: - Možnosti ustvarjanja blokov: - - - - Connect only to the specified node(s) - Poveži se samo na določena vozlišče(a) - - - - Discover own IP address (default: 1 when listening and no -externalip) - Odkrij svoj IP naslov (privzeto: 1 ob poslušanju, ko ni aktiviran -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Poslušanje za vrata je spodletelo. Če želite lahko uporabite ukaz -listen=0. - - - - Find peers using DNS lookup (default: 1) - Najdi soležnike z uporabno DNS vpogleda (privzeto: 1) - - - - Sync checkpoints policy (default: strict) - Sinhronizacija načina točk preverjanja (privzeto: strogo) - - - - Invalid -tor address: '%s' - Neveljaven -tor naslov: '%s' - - - - Invalid amount for -reservebalance=<amount> - Neveljavni znesek za -reservebalance=<amount> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Največji sprejemni medpomnilnik glede na povezavo, <n>*1000 bytov (privzeto: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Največji oddajni medpomnilnik glede na povezavo, <n>*1000 bytov (privzeto: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Poveži se samo z vozlišči v omrežju <net> (IPv4, IPv6 in Tor) - - - - Output extra debugging information. Implies all other -debug* options - Output dodatnih informacij razhroščevanja. Obsega vse druge -debug* možnosti. - - - - Output extra network debugging information - Output dodatnih informacij razhroščevanja omrežja. - - - - Prepend debug output with timestamp - Opremi output rahroščevanja s časovnim žigom. - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL možnosti: (glejte Bitcoin Wiki za navodla, kako nastaviti SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - Izberi verzijo socks proxya za uporabo (4-5, privzeto: 5) - - - - Send trace/debug info to console instead of debug.log file - Pošlji sledilne/razhroščevalne informacije v konzolo namesto jih shraniti v debug.log datoteko - - - - Send trace/debug info to debugger - Pošlji sledilne/razhroščevalne informacije v razhroščevalnik - - - - Set maximum block size in bytes (default: 250000) - Nastavi največjo velikost bloka v bajtih (privzeto: 250000) - - - - Set minimum block size in bytes (default: 0) - Nastavi najmanjšo velikost bloka v bajtih (privzeto: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Skrči debug.log datoteko ob zagonu aplikacije (privzeto: 1 ko ni aktiviran -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Določi čas pavze povezovanja v milisekundah (privzeto: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - Ni bilo mogoče vpisati točke preverjanja, napačen ključ za točko preverjanja? - - - - - Use UPnP to map the listening port (default: 0) - Uporabi UPnP za mapiranje vrat poslušanja (privzeto: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Uporabi UPnP za mapiranje vrat poslušanja (privzeto: 1 med poslušanjem) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Uporabi proxy za povezavo s skritimi storitvami tora (privzeto: isto kot -proxy) - - - - Username for JSON-RPC connections - Uporabniško ime za JSON-RPC povezave - - - - Verifying database integrity... - Potrdite neoporečnost baze podatkov... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - OPOZORILO: zaznana je bila kršitev s sinhronizirami točkami preverjanja, a je bila izpuščena. - - - - Warning: Disk space is low! - Opozorilo: Malo prostora na disku! - - - - Warning: This version is obsolete, upgrade required! - Opozorilo: ta različica je zastarela, potrebna je nadgradnja! - - - - wallet.dat corrupt, salvage failed - wallet.dat poškodovana, neuspešna obnova - - - - Password for JSON-RPC connections - Geslo za JSON-RPC povezave - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, nastaviti morate rpcgeslo v konfiguracijski datoteki: - %s -Priporočeno je, da uporabite naslednje naključno geslo: -rpcuser=shadowcoinrpc -rpcpassword=%s -(tega gesla si vam ni potrebno zapomniti) -Uporabniško ime in geslo NE SMETA biti ista. -Če datoteka ne obstaja, jo ustvarite z lastniškimi dovoljenji za datoteke. -Prav tako je priporočeno, da nastavite alernotify, tkako da vas opozori na probleme; -na primer: alertnotify=echo %%s | mail -s "ShadowCoin Alarm" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - Najdi soležnike prek irca (privzeto: 0) - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Sinhroniziraj čas z drugimi vozlišči. Onemogoči, če je čas na vašem sistemu točno nastavljen, npr. sinhroniziranje z NTP (privzeto: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - Ob ustvarjanju transakcij, prezri vnose z manjšo vrednostjo kot (privzeto: 0.01) - - - - Allow JSON-RPC connections from specified IP address - Dovoli JSON-RPC povezave z določenega IP naslova - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Pošlji ukaze vozlišču na <ip> (privzet: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Izvrši ukaz, ko se najboljši blok spremeni (%s je v cmd programu nadomeščen z zgoščenimi bloki). - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Izvedi ukaz, ko bo transakcija denarnice se spremenila (V cmd je bil TxID zamenjan za %s) - - - - Require a confirmations for change (default: 0) - Zahtevaj potrditve za spremembo (default: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Zahtevaj da transakcijske skripte uporabljajo operatorje canonical PUSH (privzeto: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Izvrši ukaz, ko je prejet relevanten alarm (%s je v cmd programu nadomeščen s sporočilom) - - - - Upgrade wallet to latest format - Posodobi denarnico v najnovejši zapis - - - - Set key pool size to <n> (default: 100) - Nastavi velikost ključa bazena na <n> (privzeto: 100) - - - - Rescan the block chain for missing wallet transactions - Ponovno preglej verigo blokov za manjkajoče transakcije denarnice - - - - How many blocks to check at startup (default: 2500, 0 = all) - Koliko blokov naj preveri ob zagonu aplikacije (privzeto: 2500, 0 = vse) - - - - How thorough the block verification is (0-6, default: 1) - Kako temeljito naj bo preverjanje blokov (0-6, privzeto: 1) - - - - Imports blocks from external blk000?.dat file - Uvozi bloke iz zunanje blk000?.dat datoteke - - - - Use OpenSSL (https) for JSON-RPC connections - Uporabi OpenSSL (https) za JSON-RPC povezave - - - - Server certificate file (default: server.cert) - Datoteka potrdila strežnika (privzeta: server.cert) - - - - Server private key (default: server.pem) - Zasebni ključ strežnika (privzet: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Dovoljeni kodirniki (privzeti: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - OPOZORILO: Najdene so bile neveljavne točke preverjanja! Prikazane transakcije so morda napačne! Poiščite novo različico aplikacije ali pa obvestite razvijalce. - - - - This help message - To sporočilo pomoči - - - - Wallet %s resides outside data directory %s. - Denarnica %s se nahaja zunaj datotečnega imenika %s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Ni bilo mogoče najti podatkovnega imenika %s. Aplikacija ShadowCoin je verjetno že zagnana. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Na tem računalniku je bilo nemogoče vezati na %s (bind returned error %d, %s) - - - - Connect through socks proxy - Poveži se skozi socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Omogoči DNS povezave za -addnode, -seednode in -connect - - - - Loading addresses... - Nalaganje naslovov ... - - - - Error loading blkindex.dat - Napaka pri nalaganju blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Napaka pri nalaganju wallet.dat: denarnica pokvarjena - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Napaka pri nalaganju wallet.dat: denarnica zahteva novejšo verzijo ShadowCoin - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - Denarnica mora biti prepisana: ponovno odprite ShadowCoin za dokončanje - - - - Error loading wallet.dat - Napaka pri nalaganju wallet.dat - - - - Invalid -proxy address: '%s' - Neveljaven -proxy naslov: '%s' - - - - Unknown network specified in -onlynet: '%s' - Neznano omrežje določeno v -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Zahtevana neznana -socks proxy različica: %i - - - - Cannot resolve -bind address: '%s' - Ni mogoče določiti -bind naslova: '%s' - - - - Cannot resolve -externalip address: '%s' - Ni mogoče določiti -externalip naslova: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Neveljavni znesek za -paytxfee=<amount>: '%s' - - - - Error: could not start node - Napaka: ni mogoče zagnati vozlišča - - - - Sending... - Pošiljanje... - - - - Invalid amount - Neveljavna količina - - - - Insufficient funds - Premalo sredstev - - - - Loading block index... - Nalaganje indeksa blokov ... - - - - Add a node to connect to and attempt to keep the connection open - Dodaj vozlišče za povezavo nanj in skušaj le to obdržati odprto - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Navezava v %s na tem računalniku ni mogoča ShadowCoin aplikacija je verjetno že zagnana. - - - - Fee per KB to add to transactions you send - Provizija na KB ki jo morate dodati transakcijam, ki jih pošiljate - - - - Invalid amount for -mininput=<amount>: '%s' - Neveljavni znesek za -miniput=<amount>: '%s' - - - - Loading wallet... - Nalaganje denarnice ... - - - - Cannot downgrade wallet - Ne morem - - - - Cannot initialize keypool - Ni mogoče zagnati keypoola - - - - Cannot write default address - Ni mogoče zapisati privzetega naslova - - - - Rescanning... - Ponovno pregledovanje ... - - - - Done loading - Nalaganje končano - - - - To use the %s option - Za uporabo %s opcije - - - - Error - Napaka - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Nastaviti morate rpcpassword=<password> v konfiguracijski datoteki: -%s -Če datoteka ne obstaja, jo ustvarite z lastniškimi dovoljenji za datoteke. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_sq.ts b/src/qt/locale/umbra_sq.ts deleted file mode 100644 index c49a7417aa..0000000000 --- a/src/qt/locale/umbra_sq.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiketë - - - - Address - Adresë - - - - pubkey - - - - - stealth - - - - - (no label) - (pa etiketë) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Futni frazkalimin - - - - New passphrase - Frazkalim i ri - - - - Repeat new passphrase - Përsërisni frazkalimin e ri - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Futni frazkalimin e ri në portofol.<br/>Ju lutemi përdorni një frazkalim prej<b>10 ose më shumë shkronjash të rastësishme<b/>, ose tetë apo më shumë fjalë</b>. - - - - Encrypt wallet - Enkripto portofolin - - - - This operation needs your wallet passphrase to unlock the wallet. - Ky veprim ka nevojë per frazkalimin e portofolit tuaj që të ç'kyç portofolin. - - - - Unlock wallet - ç'kyç portofolin. - - - - This operation needs your wallet passphrase to decrypt the wallet. - Ky veprim kërkon frazkalimin e portofolit tuaj që të dekriptoj portofolin. - - - - Decrypt wallet - Dekripto portofolin - - - - Change passphrase - Ndrysho frazkalimin - - - - Enter the old and new passphrase to the wallet. - Futni frazkalimin e vjetër dhe të ri në portofol. - - - - Confirm wallet encryption - Konfirmoni enkriptimin e portofolit - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Portofoli u enkriptua - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Enkriptimi i portofolit dështoi - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Enkriptimi i portofolit dështoi për shkak të një gabimi të brëndshëm. portofoli juaj nuk u enkriptua. - - - - - The supplied passphrases do not match. - Frazkalimet e plotësuara nuk përputhen. - - - - Wallet unlock failed - ç'kyçja e portofolit dështoi - - - - - - The passphrase entered for the wallet decryption was incorrect. - Frazkalimi i futur për dekriptimin e portofolit nuk ishte i saktë. - - - - Wallet decryption failed - Dekriptimi i portofolit dështoi - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Sasia - - - - Label - - - - - Address - Adresë - - - - Date - Data - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (pa etiketë) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Ndrysho Adresën - - - - &Label - &Etiketë - - - - The label associated with this address book entry - - - - - &Address - &Adresa - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Adresë e re pritëse - - - - New sending address - Adresë e re dërgimi - - - - Edit receiving address - Ndrysho adresën pritëse - - - - Edit sending address - ndrysho adresën dërguese - - - - The entered address "%1" is already in the address book. - Adresa e dhënë "%1" është e zënë në librin e adresave. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Nuk mund të ç'kyçet portofoli. - - - - New key generation failed. - Krijimi i çelësit të ri dështoi. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Hapur deri më %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - %1/I pakonfirmuar - - - - %1 confirmations - %1 konfirmimet - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - Data - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - Sasia - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - , nuk është transmetuar me sukses deri tani - - - - - unknown - i/e panjohur - - - - TransactionDescDialog - - - Transaction details - Detajet e transaksionit - - - - This pane shows a detailed description of the transaction - Ky panel tregon një përshkrim të detajuar të transaksionit - - - - TransactionTableModel - - - Date - Data - - - - Type - Lloji - - - - Address - Adresë - - - - Amount - Sasia - - - - Open until %1 - Hapur deri më %1 - - - - Confirmed (%1 confirmations) - I/E konfirmuar(%1 konfirmime) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Ky bllok është marrë nga ndonjë nyje dhe ka shumë mundësi të mos pranohet! - - - - Generated but not accepted - I krijuar por i papranuar - - - - (n/a) - (p/a) - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_sr.ts b/src/qt/locale/umbra_sr.ts deleted file mode 100644 index 53f181a55d..0000000000 --- a/src/qt/locale/umbra_sr.ts +++ /dev/null @@ -1,3390 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - О ShadowCoin-u - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Етикета - - - - Address - Адреса - - - - pubkey - - - - - stealth - - - - - (no label) - (без етикете) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - Унесите лозинку - - - - New passphrase - Нова лозинка - - - - Repeat new passphrase - Поновите нову лозинку - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Унесите нову лозинку за приступ новчанику.<br/>Молимо Вас да лозинка буде <b>10 или више насумице одабраних знакова</b>, или <b>осам или више речи</b>. - - - - Encrypt wallet - Шифровање новчаника - - - - This operation needs your wallet passphrase to unlock the wallet. - Ова акција захтева лозинку Вашег новчаника да би га откључала. - - - - Unlock wallet - Откључавање новчаника - - - - This operation needs your wallet passphrase to decrypt the wallet. - Ова акција захтева да унесете лозинку да би дешифловала новчаник. - - - - Decrypt wallet - Дешифровање новчаника - - - - Change passphrase - Промена лозинке - - - - Enter the old and new passphrase to the wallet. - Унесите стару и нову лозинку за шифровање новчаника. - - - - Confirm wallet encryption - Одобрите шифровање новчаника - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Да ли сте сигурни да желите да се новчаник шифује? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - Новчаник је шифрован - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Неуспело шифровање новчаника - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Настала је унутрашња грешка током шифровања новчаника. Ваш новчаник није шифрован. - - - - - The supplied passphrases do not match. - Лозинке које сте унели се не подударају. - - - - Wallet unlock failed - Неуспело откључавање новчаника - - - - - - The passphrase entered for the wallet decryption was incorrect. - Лозинка коју сте унели за откључавање новчаника је нетачна. - - - - Wallet decryption failed - Неуспело дешифровање новчаника - - - - Wallet passphrase was successfully changed. - Лозинка за приступ новчанику је успешно промењена. - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Iznos: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - iznos - - - - Label - - - - - Address - Адреса - - - - Date - datum - - - - Confirmations - - - - - Confirmed - Potvrdjen - - - - Priority - - - - - Copy address - kopiraj adresu - - - - Copy label - kopiraj naziv - - - - - Copy amount - kopiraj iznos - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (без етикете) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Измени адресу - - - - &Label - &Етикета - - - - The label associated with this address book entry - - - - - &Address - &Адреса - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - Унешена адреса "%1" се већ налази у адресару. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Немогуће откључати новчаник. - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Otvorite do %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - %1/nepotvrdjeno - - - - %1 confirmations - %1 potvrde - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - datum - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - етикета - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - iznos - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - , nije još uvek uspešno emitovan - - - - - unknown - nepoznato - - - - TransactionDescDialog - - - Transaction details - detalji transakcije - - - - This pane shows a detailed description of the transaction - Ovaj odeljak pokazuje detaljan opis transakcije - - - - TransactionTableModel - - - Date - datum - - - - Type - tip - - - - Address - Адреса - - - - Amount - iznos - - - - Open until %1 - Otvoreno do %1 - - - - Confirmed (%1 confirmations) - Potvrdjena (%1 potvrdjenih) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Ovaj blok nije primljen od ostalih čvorova (nodova) i verovatno neće biti prihvaćen! - - - - Generated but not accepted - Generisan ali nije prihvaćen - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Status vaše transakcije. Predjite mišem preko ovog polja da bi ste videli broj konfirmacija - - - - Date and time that the transaction was received. - Datum i vreme primljene transakcije. - - - - Type of transaction. - Tip transakcije - - - - Destination address of transaction. - Destinacija i adresa transakcije - - - - Amount removed from or added to balance. - Iznos odbijen ili dodat balansu. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Korišćenje: - - - - Send command to -server or shadowcoind - - - - - List commands - Listaj komande - - - - Get help for a command - Zatraži pomoć za komande - - - - Options: - Opcije - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Gde je konkretni data direktorijum - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Održavaj najviše <n> konekcija po priključku (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Prihvati komandnu liniju i JSON-RPC komande - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Radi u pozadini kao daemon servis i prihvati komande - - - - Use the test network - Koristi testnu mrežu - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Korisničko ime za JSON-RPC konekcije - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - Lozinka za JSON-RPC konekcije - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Dozvoli JSON-RPC konekcije sa posebne IP adrese - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Pošalji komande to nodu koji radi na <ip> (default: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - Odredi veličinu zaštićenih ključeva na <n> (default: 100) - - - - Rescan the block chain for missing wallet transactions - Ponovo skeniraj lanac blokova za nedostajuće transakcije iz novčanika - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Koristi OpenSSL (https) za JSON-RPC konekcije - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - privatni ključ za Server (podrazumevan: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Ova poruka Pomoći - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - učitavam adrese.... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Грешка током учитавања wallet.dat: Новчаник је покварен - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Грешка током учитавања wallet.dat - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - Učitavam blok indeksa... - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Новчаник се учитава... - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - Ponovo skeniram... - - - - Done loading - Završeno učitavanje - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_sv.ts b/src/qt/locale/umbra_sv.ts deleted file mode 100644 index e4f99696d1..0000000000 --- a/src/qt/locale/umbra_sv.ts +++ /dev/null @@ -1,3419 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - Vad du behöver veta om ShadowCoin - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> version - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etikett - - - - Address - Adress - - - - pubkey - - - - - stealth - - - - - (no label) - (Ingen etikett) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Lösenords Dialog - - - - Enter passphrase - Ange lösenord - - - - New passphrase - Nytt lösenord - - - - Repeat new passphrase - Upprepa nytt lösenord - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - Avaktiverar "sendmoney" om ditt operativsystem har blivit äventyrat. ger ingen verklig säkerhet. - - - - For staking only - Endast för "staking" - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Ange plånbokens nya lösenord. <br/> Använd ett lösenord på <b>10 eller fler slumpmässiga tecken,</b> eller <b>åtta eller fler ord.</b> - - - - Encrypt wallet - Kryptera plånbok - - - - This operation needs your wallet passphrase to unlock the wallet. - Denna operation behöver din plånboks lösenord för att låsa upp plånboken. - - - - Unlock wallet - Lås upp plånbok - - - - This operation needs your wallet passphrase to decrypt the wallet. - Denna operation behöver din plånboks lösenord för att dekryptera plånboken. - - - - Decrypt wallet - Dekryptera plånbok - - - - Change passphrase - Ändra lösenord - - - - Enter the old and new passphrase to the wallet. - Ange plånbokens gamla och nya lösenord. - - - - Confirm wallet encryption - Bekräfta kryptering av plånbok - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Varning: Om du krypterar plånboken och glömmer lösenordet, kommer du att <b>FÖRLORA ALLA COINS</b>! - - - - Are you sure you wish to encrypt your wallet? - Är du säker på att du vill kryptera din plånbok? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - VIKTIGT: Alla tidigare säkerhetskopior du har gjort av plånbokens fil ska ersättas med den nya genererade, krypterade plånboks filen. Av säkerhetsskäl kommer tidigare säkerhetskopior av den okrypterade plånboks filen blir oanvändbara när du börjar använda en ny, krypterad plånbok. - - - - - Warning: The Caps Lock key is on! - Varning: Caps Lock är påslaget! - - - - - Wallet encrypted - Plånboken är krypterad - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin plånboken kommer nu att stängas för att slutföra krypteringen: Kom ihåg att även en krypterad plånboks säkerhet kan äventyras genom keyloggers eller dylika malwares. - - - - - - - Wallet encryption failed - Kryptering av plånbok misslyckades - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Kryptering av plånbok misslyckades på grund av ett internt fel. Din plånbok blev inte krypterad. - - - - - The supplied passphrases do not match. - De angivna lösenorden överensstämmer inte. - - - - Wallet unlock failed - Upplåsning av plånbok misslyckades - - - - - - The passphrase entered for the wallet decryption was incorrect. - Lösenordet för dekryptering av plånbok var felaktig. - - - - Wallet decryption failed - Dekryptering av plånbok misslyckades - - - - Wallet passphrase was successfully changed. - Plånbokens lösenord har ändrats. - - - - ClientModel - - - Network Alert - Nätverkslarm - - - - CoinControlDialog - - - Coin Control - Coin kontroll - - - - Quantity: - Antal: - - - - Bytes: - Bytes: - - - - Amount: - Belopp: - - - - Priority: - Prioritet: - - - - Fee: - Avgift: - - - - Low Output: - Låg utskrift: - - - - - no - nej - - - - After Fee: - Efter avgift: - - - - Change: - Ändra: - - - - (un)select all - välj/avvälj alla - - - - Tree mode - Träd visning - - - - List mode - List visning - - - - Amount - Mängd - - - - Label - etikett - - - - Address - Adress - - - - Date - Datum - - - - Confirmations - Bekräftelser - - - - Confirmed - Bekräftad - - - - Priority - Prioritet - - - - Copy address - Kopiera adress - - - - Copy label - Kopiera etikett - - - - - Copy amount - Kopiera belopp - - - - Copy transaction ID - Kopiera transaktions ID - - - - Copy quantity - Kopiera antal - - - - Copy fee - Kopiera avgift - - - - Copy after fee - Kopiera efter avgift - - - - Copy bytes - Kopiera bytes - - - - Copy priority - Kopiera prioritet - - - - Copy low output - Kopiera låg utskrift - - - - Copy change - Kopiera förändringarna - - - - highest - högst - - - - high - hög - - - - medium-high - medium-hög - - - - medium - medium - - - - low-medium - låg-medium - - - - low - låg - - - - lowest - lägsta - - - - - DUST - STOFT - - - - - yes - ja - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - Denna label blir röd, om storleken på transaktionen är över 10000 bytes. - - Detta betyder att en avgift på %1 per kb måste betalas. - - Kan variera +/- 1 Byte per ingång. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Transaktioner med en högre prioritet har en större sannolikhet att bli adderat till ett block. - -Denna label blir röd, om prioriteten är lägre än "medium". - -Detta betyder att en avgift på minst %1 krävs. - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Denna label blir röd, om en mottagare får en mängd mindre än %1 - -Detta betyder att en avgift på minst %2 krävs. - -Mängder under 0,546 gånger minimiavgiften visas som DUST. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Denna label blir röd, om ändringen är mindre än %1. - -Detta betyder att en avgift på minst %2 krävs. - - - - - (no label) - (Ingen etikett) - - - - change from %1 (%2) - ändra från %1(%2) - - - - (change) - (ändra) - - - - EditAddressDialog - - - Edit Address - Redigera Adress - - - - &Label - &Etikett - - - - The label associated with this address book entry - Namnet som kopplats till denna ShadowCoin-adress - - - - &Address - &Adress - - - - The address associated with this address book entry. This can only be modified for sending addresses. - Adressen är kopplad till detta inlägg i adressboken. Denna kan endast ändras för skickande adresser. - - - - &Stealth Address - - - - - New receiving address - Ny mottagaradress - - - - New sending address - Ny avsändaradress - - - - Edit receiving address - Redigera mottagaradress - - - - Edit sending address - Redigera avsändaradress - - - - The entered address "%1" is already in the address book. - Den angivna adressen "%1" finns redan i adressboken. - - - - The entered address "%1" is not a valid ShadowCoin address. - Den inslagna adressen "%1" är inte en giltig ShadowCoin adress. - - - - Could not unlock wallet. - Plånboken kunde inte låsas upp. - - - - New key generation failed. - Misslyckades med generering av ny nyckel. - - - - GUIUtil::HelpMessageBox - - - version - version - - - - - Shadow - - - - - Usage: - Användning: - - - - command-line options - Command-line alternativ - - - - UI options - UI alternativ - - - - Set language, for example "de_DE" (default: system locale) - Ställ in språk, t.ex. "de_DE" (förval: systemets språk) - - - - Start minimized - Starta som minimerad - - - - Show splash screen on startup (default: 1) - Visa startscreen vid start (förval: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Klientnamn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - ej tillgänglig - - - - Client version - Klient-version - - - - &Information - &Information - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Använder OpenSSL version - - - - Using BerkeleyDB version - - - - - Startup time - Uppstartstid - - - - Network - Nätverk - - - - Name - - - - - Number of connections - Antalet anslutningar - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Blockkedja - - - - Current number of blocks - Aktuellt antal block - - - - Estimated total blocks - Beräknade totala block - - - - Last block time - Sista blocktid - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Öppna - - - - Command-line options - Kommandoradsalternativ - - - - &Show - &Visa - - - - &Console - &Konsol - - - - Build date - Kompileringsdatum - - - - Debug log file - Debugloggfil - - - - Clear console - Rensa konsollen - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Använd upp- och ner-pilarna för att navigera i historiken, och <b>Ctrl-L</b> för att rensa skärmen. - - - - Type <b>help</b> for an overview of available commands. - Skriv <b>help</b> för en översikt av alla kommandon. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Öppet till %1 - - - - Open for %n block(s) - Öppen för %n blockÖppen för %n block - - - - conflicted - konflikt - - - - %1/offline - %1/nerkopplad - - - - %1/unconfirmed - %1/obekräftade - - - - %1 confirmations - %1 bekräftelser - - - - Status - Status - - - - , broadcast through %n node(s) - , sänd genom %n nod, sänd genom %n noder - - - - Date - Datum - - - - Source - Källa - - - - Generated - Genererad - - - - - - From - Från - - - - - - - To - Till - - - - - - - own address - egen adress - - - - - label - etikett - - - - - - - - Credit - Kredit - - - - matures in %n more block(s) - mognar om %n blockmognar om %n fler block - - - - not accepted - inte accepterad - - - - - - - Debit - Belasta - - - - Transaction fee - Transaktionsavgift - - - - Net amount - Nettobelopp - - - - Message - Meddelande - - - - Comment - Kommentar - - - - Transaction ID - Transaktions-ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Debug information - - - - Transaction - Transaktion - - - - Inputs - Inputs - - - - Amount - Mängd - - - - true - sant - - - - false - falsk - - - - , has not been successfully broadcast yet - , har inte lyckats skickas ännu - - - - - unknown - okänd - - - - TransactionDescDialog - - - Transaction details - Transaktionsdetaljer - - - - This pane shows a detailed description of the transaction - Den här panelen visar en detaljerad beskrivning av transaktionen - - - - TransactionTableModel - - - Date - Datum - - - - Type - Typ - - - - Address - Adress - - - - Amount - Mängd - - - - Open until %1 - Öppet till %1 - - - - Confirmed (%1 confirmations) - Bekräftad (%1 bekräftelser) - - - - Open for %n more block(s) - Öppet för %n mer blockÖppet för %n mer block - - - - Narration - - - - - Offline - Nerkopplad - - - - Unconfirmed - Obekräftad - - - - Confirming (%1 of %2 recommended confirmations) - Bekräftar (%1 av %2 rekommenderade bekräftelser) - - - - Conflicted - Konflikt - - - - Immature (%1 confirmations, will be available after %2) - Omogen (%1 bekräftningar, kommer bli tillgänglig efter %2) - - - - This block was not received by any other nodes and will probably not be accepted! - Det här blocket togs inte emot av några andra noder och kommer antagligen inte att bli godkänt. - - - - Generated but not accepted - Genererad men inte accepterad - - - - (n/a) - (n/a) - - - - Transaction status. Hover over this field to show number of confirmations. - Transaktionsstatus. Håll muspekaren över för att se antal bekräftelser. - - - - Date and time that the transaction was received. - Tidpunkt då transaktionen mottogs. - - - - Type of transaction. - Transaktionstyp. - - - - Destination address of transaction. - Transaktionens destinationsadress. - - - - Amount removed from or added to balance. - Belopp draget eller tillagt till balans. - - - - WalletModel - - - - Sending... - Skickar... - - - - bitcoin-core - - - ShadowCoin version - ShadowCoin version - - - - Usage: - Användning: - - - - Send command to -server or shadowcoind - Skicka kommando till -server eller shadowcoind - - - - List commands - Lista kommandon - - - - Get help for a command - Få hjälp med ett kommando - - - - Options: - Inställningar: - - - - Specify configuration file (default: shadowcoin.conf) - Ange konfigurationsfilen (standard: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - Ange pid filen (standard shadowcoind.pid) - - - - Specify wallet file (within data directory) - Ange plånboksfil (inom datakatalogen) - - - - Specify data directory - Ange katalog för data - - - - Set database cache size in megabytes (default: 25) - Sätt databas cache storleken i megabyte (förvalt: 25) - - - - Set database disk log size in megabytes (default: 100) - Sätt databas logg storleken i MB (standard: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - Lyssna efter anslutningar på <port> (standard: 51737 eller testnät: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Ha som mest <n> anslutningar till andra klienter (förvalt: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Anslut till en nod för att hämta klientadresser, och koppla från - - - - Specify your own public address - Ange din egen publika adress - - - - Bind to given address. Use [host]:port notation for IPv6 - Bind till angiven adress. Använd [host]:port för IPv6 - - - - Stake your coins to support network and gain reward (default: 1) - Använd dina coins för stake-processen, du upprätthåller då nätverket och får belöning (förval: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Tröskelvärde för att koppla ifrån klienter som missköter sig (förvalt: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Antal sekunder att hindra klienter som missköter sig från att ansluta (förvalt: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Ett fel uppstod vid upprättandet av RPC port %u för att lyssna på IPv4: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Koppla ifrån block och adress databaser. Ökar nedstängningstid (standard: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Fel: Transaktionen nekades. Detta kan hända om vissa av mynten i din plånbok redan är använda, t.ex om du använder en kopia av wallet.dat och mynten redan var använda i kopia men inte markerade som använda här. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Fel: Transaktionen kräver en transaktionsavgift på min %s på grund av dess storlek, komplexitet eller användning av nyligen mottagna kapital - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - Lyssna efter JSON-RPC anslutningar på <port> (standard: 51736 eller testnät: 51996) - - - - Accept command line and JSON-RPC commands - Tillåt kommandon från kommandotolken och JSON-RPC-kommandon - - - - Error: Transaction creation failed - Fel: Skapandet av transaktion misslyckades - - - - Error: Wallet locked, unable to create transaction - Fel: Plånboken låst, kan inte utföra transaktion - - - - Importing blockchain data file. - Importerar blockchain data fil. - - - - Importing bootstrap blockchain data file. - Importerar bootstrap blockchain data fil. - - - - Run in the background as a daemon and accept commands - Kör i bakgrunden som tjänst och acceptera kommandon - - - - Use the test network - Använd testnätverket - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Acceptera anslutningar utifrån (förvalt: 1 om ingen -proxy eller -connect) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Ett fel uppstod vid upprättandet av RPC port %u för att lyssna på IPv6, faller tillbaka till IPV4: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Ett fel uppstod vid initialiseringen av databasen %s! För att återställa, SÄKERHETSKOPIERA MAPPEN, radera sedan allt från mappen förutom wallet.dat. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Ställ in max storlek för hög prioritet/lågavgifts transaktioner i bytes (förval: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Varning: -paytxfee är satt väldigt hög! Detta är avgiften du kommer betala för varje transaktion. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Varning: Kolla att din dators tid och datum är rätt. ShadowCoin kan inte fungera ordentligt om tiden i datorn är fel. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Varning: fel vid läsning av wallet.dat! Alla nycklar lästes korrekt, men transaktionsdatan eller adressbokens poster kanske saknas eller är felaktiga. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Varning: wallet.dat korrupt, datan har räddats! Den ursprungliga wallet.dat har sparas som wallet.{timestamp}.bak i %s; om ditt saldo eller transaktioner är felaktiga ska du återställa från en säkerhetskopia. - - - - Attempt to recover private keys from a corrupt wallet.dat - Försök att rädda de privata nycklarna från en korrupt wallet.dat - - - - Block creation options: - Block skapande inställningar: - - - - Connect only to the specified node(s) - Koppla enbart upp till den/de specificerade noden/noder - - - - Discover own IP address (default: 1 when listening and no -externalip) - Hitta egen IP-adress (förvalt: 1 under lyssning och utan -externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Misslyckades att lyssna på någon port. Använd -listen=0 om du vill detta. - - - - Find peers using DNS lookup (default: 1) - Hitta andra klienter via DNS uppsökning (standard: 1) - - - - Sync checkpoints policy (default: strict) - Synka kontrollpunkts policy (standard: strict) - - - - Invalid -tor address: '%s' - Fel -tor adress: '%s' - - - - Invalid amount for -reservebalance=<amount> - Fel mängd för -reservebalance=<amount> - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximal buffert för mottagning per anslutning, <n>*1000 byte (förvalt: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maximal buffert för sändning per anslutning, <n>*1000 byte (förvalt: 5000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Anslut enbart till noder i nätverket <net> (IPv4, IPv6 eller Tor) - - - - Output extra debugging information. Implies all other -debug* options - Skriv ut extra debug information. Betyder alla andra -debug* alternativ - - - - Output extra network debugging information - Skriv ut extra nätverks debug information - - - - Prepend debug output with timestamp - Tidstämpla debug utskriften - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL-inställningar: (se Bitcoin-wikin för SSL-setup instruktioner) - - - - Select the version of socks proxy to use (4-5, default: 5) - Välj version av socks proxy (4-5, förval 5) - - - - Send trace/debug info to console instead of debug.log file - Skicka trace-/debuginformation till terminalen istället för till debug.log - - - - Send trace/debug info to debugger - Skicka trace/debug till debuggern - - - - Set maximum block size in bytes (default: 250000) - Sätt största blockstorlek i bytes (förvalt: 250000) - - - - Set minimum block size in bytes (default: 0) - Sätt minsta blockstorlek i byte (förvalt: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Krymp debug.log filen vid klient start (förvalt: 1 vid ingen -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Ange timeout för uppkoppling i millisekunder (förvalt: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - Kan inte signera checkpoint, fel checkpointkey? - - - - - Use UPnP to map the listening port (default: 0) - Använd UPnP för att mappa den lyssnande porten (förvalt: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Använd UPnP för att mappa den lyssnande porten (förvalt: 1 under lyssning) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Använd proxy för att nå Tor gömda servicer (standard: samma som -proxy) - - - - Username for JSON-RPC connections - Användarnamn för JSON-RPC-anslutningar - - - - Verifying database integrity... - Verifierar integriteten i databasen... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - VARNING: synkroniserad kontrollpunkts brott upptäckt, men hoppades över! - - - - Warning: Disk space is low! - Varning: Lågt skivutrymme - - - - Warning: This version is obsolete, upgrade required! - Varning: denna version är föråldrad, uppgradering krävs! - - - - wallet.dat corrupt, salvage failed - wallet.dat korrupt, räddning misslyckades - - - - Password for JSON-RPC connections - Lösenord för JSON-RPC-anslutningar - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, du måste sätta rpcpassword i konfigurationsfilen: - %s -Det är rekommenderat att du använder följande slumpmässiga lösenord: -rpcuser=shadowcoinrpc -rpcpassword=%s -(du behöver inte komma ihåg detta lösenord) -Användarnamnet och lösenordet FÅR INTE vara samma. -Om filen inte finns, skapa den med endast ägarrättigheter. -Det är också rekommenderat att sätta alertnotify så du blir notifierad om problem; -till exempel: alertnotify=echo %%s | mail -s "ShadowCoin Varning" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - Hitta andra klienter genom internet relay chat (standard: 1) {0)?} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Synkronisera tiden med andra noder. Avaktivera om klockan i ditt sytem är exakt som t.ex. synkroniserad med NTP (förval: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - När transaktioner skapas, ignorera värden som är lägre än detta (standard: 0.01) - - - - Allow JSON-RPC connections from specified IP address - Tillåt JSON-RPC-anslutningar från specifika IP-adresser - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Skicka kommandon till klient på <ip> (förvalt: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Exekvera kommando när det bästa blocket ändras (%s i cmd är utbytt av blockhash) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Exekvera kommando när en plånbokstransaktion ändras (%s i cmd är ersatt av TxID) - - - - Require a confirmations for change (default: 0) - Kräv bekräftelse för ändring (förval: 0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - Tvinga transaktionsskript att använda kanoniska PUSH operatörer (standard: 1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Kör kommando när en relevant alert är mottagen (%s i cmd är ersatt av meddelandet) - - - - Upgrade wallet to latest format - Uppgradera plånboken till senaste formatet - - - - Set key pool size to <n> (default: 100) - Sätt storleken på nyckelpoolen till <n> (förvalt: 100) - - - - Rescan the block chain for missing wallet transactions - Sök i blockkedjan efter saknade plånboks transaktioner - - - - How many blocks to check at startup (default: 2500, 0 = all) - Antal block som kollas vid start (standard: 2500, 0=alla) - - - - How thorough the block verification is (0-6, default: 1) - Hur genomförlig blockverifikationen är (0-6, standard: 1) - - - - Imports blocks from external blk000?.dat file - Importera block från en extern blk000?.dat fil - - - - Use OpenSSL (https) for JSON-RPC connections - Använd OpenSSL (https) för JSON-RPC-anslutningar - - - - Server certificate file (default: server.cert) - Serverns certifikatfil (förvalt: server.cert) - - - - Server private key (default: server.pem) - Serverns privata nyckel (förvalt: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Godtagbara chiffer (standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - Fel: Plånboken öppnad endast för stake-process, kan inte skapa transaktion. - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - VARNING: Felaktig kontrollpunkt hittad! Visade transaktioner kan vara felaktiga! Du kan behöva uppgradera eller kontakta utvecklarna. - - - - This help message - Det här hjälp medelandet - - - - Wallet %s resides outside data directory %s. - Plånbok %s ligger utanför datamappen %s. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - Kan inte låsa datan i mappen %s. ShadowCoin är kanske redan startad. - - - - ShadowCoin - ShadowCoin - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Det går inte att binda till %s på den här datorn (bind returnerade felmeddelande %d, %s) - - - - Connect through socks proxy - Koppla genom en socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Tillåt DNS-sökningar för -addnode, -seednode och -connect - - - - Loading addresses... - Laddar adresser... - - - - Error loading blkindex.dat - Fel vid laddande av blkindex.dat - - - - Error loading wallet.dat: Wallet corrupted - Fel vid inläsningen av wallet.dat: Plånboken är skadad - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - Kunde inte ladda wallet.dat: En nyare version av ShadowCoin krävs - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - Plånboken måste skrivas om: Starta om ShadowCoin för att slutföra - - - - Error loading wallet.dat - Fel vid inläsning av plånboksfilen wallet.dat - - - - Invalid -proxy address: '%s' - Ogiltig -proxy adress: '%s' - - - - Unknown network specified in -onlynet: '%s' - Okänt nätverk som anges i -onlynet: '%s' - - - - Unknown -socks proxy version requested: %i - Okänd -socks proxy version begärd: %i - - - - Cannot resolve -bind address: '%s' - Kan inte matcha -bind adress: '%s' - - - - Cannot resolve -externalip address: '%s' - Kan inte matcha -externalip adress: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - Ogiltigt belopp för -paytxfee=<belopp>:'%s' - - - - Error: could not start node - Fel: kunde inte starta noden - - - - Sending... - Skickar... - - - - Invalid amount - Ogiltig mängd - - - - Insufficient funds - Otillräckligt med bitcoins - - - - Loading block index... - Laddar blockindex... - - - - Add a node to connect to and attempt to keep the connection open - Lägg till en nod att koppla upp mot och försök att hålla anslutningen öppen - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - Kan inte binda till %s på denna dator. ShadowCoin är sannolikt redan startad. - - - - Fee per KB to add to transactions you send - Avgift per KB som adderas till transaktionen du sänder - - - - Invalid amount for -mininput=<amount>: '%s' - Fel mängd för -mininput=<amount>: '%s' - - - - Loading wallet... - Laddar plånbok... - - - - Cannot downgrade wallet - Kan inte nedgradera plånboken - - - - Cannot initialize keypool - Kan inte initialisera keypool - - - - Cannot write default address - Kan inte skriva standardadress - - - - Rescanning... - Söker igen... - - - - Done loading - Klar med laddning - - - - To use the %s option - Att använda %s alternativet - - - - Error - Fel - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Du behöver välja ett rpclösensord i konfigurationsfilen: -%s -Om filen inte existerar, skapa den med filrättigheten endast läsbar för ägaren. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_th_TH.ts b/src/qt/locale/umbra_th_TH.ts deleted file mode 100644 index 99111cc374..0000000000 --- a/src/qt/locale/umbra_th_TH.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - ชื่อ - - - - Address - ที่อยู่ - - - - pubkey - - - - - stealth - - - - - (no label) - (ไม่มีชื่อ) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - ใส่รหัสผ่าน - - - - New passphrase - รหัสผา่นใหม่ - - - - Repeat new passphrase - กรุณากรอกรหัสผ่านใหม่อีกครั้งหนึ่ง - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - - Encrypt wallet - กระเป๋าสตางค์ที่เข้ารหัส - - - - This operation needs your wallet passphrase to unlock the wallet. - - - - - Unlock wallet - เปิดกระเป๋าสตางค์ - - - - This operation needs your wallet passphrase to decrypt the wallet. - - - - - Decrypt wallet - ถอดรหัสกระเป๋าสตางค์ - - - - Change passphrase - เปลี่ยนรหัสผ่าน - - - - Enter the old and new passphrase to the wallet. - กรอกรหัสผ่านเก่าและรหัสผ่านใหม่สำหรับกระเป๋าสตางค์ - - - - Confirm wallet encryption - ยืนยันการเข้ารหัสกระเป๋าสตางค์ - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - กระเป๋าสตางค์ถูกเข้ารหัสเรียบร้อยแล้ว - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - การเข้ารหัสกระเป๋าสตางค์ผิดพลาด - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - รหัสผ่านที่คุณกรอกไม่ตรงกัน - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - ที่อยู่ - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (ไม่มีชื่อ) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - ที่อยู่ - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_tr.ts b/src/qt/locale/umbra_tr.ts deleted file mode 100644 index 22083e5832..0000000000 --- a/src/qt/locale/umbra_tr.ts +++ /dev/null @@ -1,3416 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - ShadowCoin Hakkında - - - - <b>ShadowCoin</b> version - <b>ShadowCoin</b> versiyonu - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Etiket - - - - Address - Adres - - - - pubkey - - - - - stealth - - - - - (no label) - (boş etiket) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Parola Diyaloğu - - - - Enter passphrase - Parolayı giriniz - - - - New passphrase - Yeni parola - - - - Repeat new passphrase - Yeni parolayı tekrarlayınız - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - OS hesabı tehlike girdiğinde önemsiz para gönderme özelliğini devre dışı bırakmayı sağlar. Gerçek anlamda bir güvenlik sağlamaz. - - - - For staking only - Sadece pay almak için - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Cüzdanınız için yeni parolayı giriniz.<br/>Lütfen <b>10 ya da daha fazla rastgele karakter</b> veya <b>sekiz ya da daha fazla kelime</b> içeren bir parola seçiniz. - - - - Encrypt wallet - Cüzdanı şifrele - - - - This operation needs your wallet passphrase to unlock the wallet. - Bu işlem cüzdan kilidini açmak için cüzdan parolanızı gerektirir. - - - - Unlock wallet - Cüzdan kilidini aç - - - - This operation needs your wallet passphrase to decrypt the wallet. - Bu işlem, cüzdan şifresini açmak için cüzdan parolasını gerektirir. - - - - Decrypt wallet - Cüzdan şifresini aç - - - - Change passphrase - Parolayı değiştir - - - - Enter the old and new passphrase to the wallet. - Cüzdan için eski ve yeni parolaları giriniz. - - - - Confirm wallet encryption - Cüzdan şifrelenmesini teyit eder - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Uyarı: Eğer cüzdanınızı şifreleyip parolanızı kaybederseniz, <b> TÜM COINLERİNİZİ KAYBEDECEKSİNİZ</b>! - - - - Are you sure you wish to encrypt your wallet? - Cüzdanınızı şifrelemek istediğinizden emin misiniz? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - ÖNEMLİ: Önceden yapmış olduğunuz cüzdan dosyası yedeklemelerinin yeni oluşturulan, şifrelenmiş cüzdan dosyası ile değiştirilmeleri gerekmektedir. Güvenlik nedenleriyle yeni, şifrelenmiş cüzdanı kullanmaya başladığınızda, şifrelenmemiş cüzdan dosyasının önceki yedekleri işe yaramaz hale gelecektir. - - - - - Warning: The Caps Lock key is on! - Uyarı: Caps Lock tuşu faal durumda! - - - - - Wallet encrypted - Cüzdan şifrelendi - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - ShadowCoin, şifreleme işlemini tamamlamak için şimdi kapatılacak. Cüzdanınızı şifrelemenin; coinlerinizin, bilgisayarınızı etkileyen zararlı yazılımlar tarafından çalınmasını bütünüyle engelleyemeyebileceğini unutmayınız. - - - - - - - Wallet encryption failed - Cüzdan şifrelemesi başarısız oldu - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Dahili bir hata sebebiyle cüzdan şifrelemesi başarısız oldu. Cüzdanınız şifrelenmedi. - - - - - The supplied passphrases do not match. - Girilen parolalar birbirleriyle eşleşmiyor. - - - - Wallet unlock failed - Cüzdan kilidinin açılması başarısız oldu - - - - - - The passphrase entered for the wallet decryption was incorrect. - Cüzdan şifresinin açılması için girilen parola yanlıştı. - - - - Wallet decryption failed - Cüzdan şifresinin açılması başarısız oldu - - - - Wallet passphrase was successfully changed. - Cüzdan parolası başarılı bir şekilde değiştirildi. - - - - ClientModel - - - Network Alert - Ağ Uyarısı - - - - CoinControlDialog - - - Coin Control - Coin Kontrolü - - - - Quantity: - Adet: - - - - Bytes: - Bayt: - - - - Amount: - Miktar: - - - - Priority: - Öncelik: - - - - Fee: - Ücret: - - - - Low Output: - Düşük Çıktı: - - - - - no - hayır - - - - After Fee: - Ücretten sonra: - - - - Change: - Para üstü: - - - - (un)select all - tümünü seç(me) - - - - Tree mode - Ağaç kipi - - - - List mode - Liste kipi - - - - Amount - Miktar - - - - Label - Etiket - - - - Address - Adres - - - - Date - Tarih - - - - Confirmations - Onaylar - - - - Confirmed - Onaylandı - - - - Priority - Öncelik - - - - Copy address - Adresi kopyala - - - - Copy label - Etiketi kopyala - - - - - Copy amount - Miktarı kopyala - - - - Copy transaction ID - İşlem Numarasını Kopyala - - - - Copy quantity - Adedi kopyala - - - - Copy fee - Ücreti kopyala - - - - Copy after fee - Ücretten sonrakini kopyala - - - - Copy bytes - Baytları kopyala - - - - Copy priority - Önceliği kopyala - - - - Copy low output - Düşük çıktıyı kopyala - - - - Copy change - Para üstünü kopyala - - - - highest - en yüksek - - - - high - yüksek - - - - medium-high - orta-yüksek - - - - medium - orta - - - - low-medium - düşük-orta - - - - low - düşük - - - - lowest - en düşük - - - - - DUST - BOZUKLUK - - - - - yes - evet - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - İşlem büyüklüğü 10000 bayttan büyükse, bu etiket kırmızıya dönüşür. - - Bu, kb başına en az %1 ücret gerektiği anlamına gelir. - - Girdi başına +/- 1 Byte değişkenlik gösterebilir. - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - Yüksek öncelikli işlemler, daha yüksek ihtimalle bir bloğa düşer. - -Öncelik "orta" seviyeden düşükse, bu etiket kırmızıya döner. - - Bu, kb başına en az %1 ücret gerektiği anlamına gelir. - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - Eğer herhangi bir alıcı, %1'den daha küçük bir miktar alırsa, bu etiket kırmızıya dönüşür. - - Bu, en az %2 bir ücretin gerektiği anlamına gelir. - - Minimum aktarım ücretinin 0.546 katından düşük miktarlar, BOZUKLUK olarak gösterilir. - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - Eğer para üstü %1'den küçükse, bu etiket kırmızıya dönüşür. - - Bu, en az %2 bir ücretin gerektiği anlamına gelir. - - - - - (no label) - (boş etiket) - - - - change from %1 (%2) - %1 unsurundan para üstü (%2) - - - - (change) - (para üstü) - - - - EditAddressDialog - - - Edit Address - Adresi düzenle - - - - &Label - &Etiket - - - - The label associated with this address book entry - Bu adres defteri kaydıyla ilişkili etiket - - - - &Address - &Adres - - - - The address associated with this address book entry. This can only be modified for sending addresses. - Bu adres defteri kaydıyla ilişkili etiket. Bu, sadece gönderi adresleri için değiştirilebilir. - - - - &Stealth Address - - - - - New receiving address - Yeni alım adresi - - - - New sending address - Yeni gönderi adresi - - - - Edit receiving address - Alım adresini düzenle - - - - Edit sending address - Gönderi adresini düzenle - - - - The entered address "%1" is already in the address book. - Girilen "%1" adresi hâlihazırda adres defterinde mevcuttur. - - - - The entered address "%1" is not a valid ShadowCoin address. - Girilen %1 adresi, geçerli bir ShadowCoin adresi değildir. - - - - Could not unlock wallet. - Cüzdan kilidi açılamadı. - - - - New key generation failed. - Yeni anahtar oluşturulması başarısız oldu. - - - - GUIUtil::HelpMessageBox - - - version - versiyon - - - - - Shadow - - - - - Usage: - Kullanım: - - - - command-line options - komut satırı seçenekleri - - - - UI options - GA seçenekleri - - - - Set language, for example "de_DE" (default: system locale) - Dili ayarla, örneğin "de_DE" (varsayılan: sistem yerel ayarları) - - - - Start minimized - Simge durumunda başlat - - - - Show splash screen on startup (default: 1) - Başlangıçta açılış ekranını göster (varsayılan: 1) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - İstemci ismi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - Mevcut değil - - - - Client version - İstemci sürümü - - - - &Information - &Malumat - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Kullanılan OpenSSL sürümü - - - - Using BerkeleyDB version - - - - - Startup time - Başlama zamanı - - - - Network - Şebeke - - - - Name - - - - - Number of connections - Bağlantı sayısı - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Blok zinciri - - - - Current number of blocks - Güncel blok sayısı - - - - Estimated total blocks - Tahmini toplam blok sayısı - - - - Last block time - Son blok zamanı - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - &Aç - - - - Command-line options - Komut satırı seçenekleri - - - - &Show - &Göster - - - - &Console - &Konsol - - - - Build date - Derleme tarihi - - - - Debug log file - Hata ayıklama kütük dosyası - - - - Clear console - Konsolu temizle - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Tarihçede gezinmek için imleç tuşlarını kullanınız, <b>Ctrl-L</b> ile de ekranı temizleyebilirsiniz. - - - - Type <b>help</b> for an overview of available commands. - Mevcut komutların listesi için <b>help</b> yazınız. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - %1 değerine dek açık - - - - Open for %n block(s) - - - - - conflicted - çakışma - - - - %1/offline - %1/çevrim dışı - - - - %1/unconfirmed - %1/doğrulanmadı - - - - %1 confirmations - %1 teyit - - - - Status - Durum - - - - , broadcast through %n node(s) - - - - - Date - Tarih - - - - Source - Kaynak - - - - Generated - Oluşturuldu - - - - - - From - Gönderen - - - - - - - To - Alıcı - - - - - - - own address - kendi adresiniz - - - - - label - etiket - - - - - - - - Credit - Gider - - - - matures in %n more block(s) - - - - - not accepted - kabul edilmedi - - - - - - - Debit - Gelir - - - - Transaction fee - Muamele ücreti - - - - Net amount - Net meblağ - - - - Message - Mesaj - - - - Comment - Yorum - - - - Transaction ID - Muamele tanımlayıcı - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Hata ayıklama verileri - - - - Transaction - Muamele - - - - Inputs - Girdiler - - - - Amount - Meblağ - - - - true - doğru - - - - false - yanlış - - - - , has not been successfully broadcast yet - , henüz başarılı bir şekilde yayınlanmadı - - - - - unknown - bilinmiyor - - - - TransactionDescDialog - - - Transaction details - Muamele detayları - - - - This pane shows a detailed description of the transaction - Bu pano muamelenin ayrıntılı açıklamasını gösterir - - - - TransactionTableModel - - - Date - Tarih - - - - Type - Tür - - - - Address - Adres - - - - Amount - Meblağ - - - - Open until %1 - %1 değerine dek açık - - - - Confirmed (%1 confirmations) - Doğrulandı (%1 teyit) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - Çevrim dışı - - - - Unconfirmed - Teyit edilmemiş - - - - Confirming (%1 of %2 recommended confirmations) - Teyit ediliyor (tavsiye edilen %2 teyit üzerinden %1 doğrulama) - - - - Conflicted - Çakışma - - - - Immature (%1 confirmations, will be available after %2) - Olgunlaşmamış (%1 teyit, %2 teyit ardından kullanılabilir olacaktır) - - - - This block was not received by any other nodes and will probably not be accepted! - Bu blok başka hiçbir düğüm tarafından alınmamıştır ve muhtemelen kabul edilmeyecektir! - - - - Generated but not accepted - Oluşturuldu ama kabul edilmedi - - - - (n/a) - (mevcut değil) - - - - Transaction status. Hover over this field to show number of confirmations. - Muamele durumu. Doğrulama sayısını görüntülemek için imleci bu alanda tutunuz. - - - - Date and time that the transaction was received. - Muamelenin alındığı tarih ve zaman. - - - - Type of transaction. - Muamele türü. - - - - Destination address of transaction. - Muamelenin alıcı adresi. - - - - Amount removed from or added to balance. - Bakiyeden alınan ya da bakiyeye eklenen meblağ. - - - - WalletModel - - - - Sending... - Gönderiyor... - - - - bitcoin-core - - - ShadowCoin version - ShadowCoin versiyonu - - - - Usage: - Kullanım: - - - - Send command to -server or shadowcoind - -sunucu veya shadowcoind'ye komut gönder - - - - List commands - Komutları listele - - - - Get help for a command - Bir komut için yardım al - - - - Options: - Seçenekler: - - - - Specify configuration file (default: shadowcoin.conf) - Konfigürasyon dosyasını belirt (varsayılan: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - pid dosyasını belirt (varsayılan: shadowcoind.pid) - - - - Specify wallet file (within data directory) - Cüzdan dosyası belirtiniz (veri klasörünün içinde) - - - - Specify data directory - Veri dizinini belirt - - - - Set database cache size in megabytes (default: 25) - Veritabanı önbellek boyutunu megabayt olarak belirt (varsayılan: 25) - - - - Set database disk log size in megabytes (default: 100) - Veritabanı disk log boyutunu megabayt olarak ayarla (varsayılan: 100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - <port> üzerinde bağlantıları dinle (varsayılan: 51737 veya testnet: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - Eşler ile en çok <n> adet bağlantı kur (varsayılan: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Eş adresleri elde etmek için bir düğüme bağlan ve ardından bağlantıyı kes - - - - Specify your own public address - Kendi genel adresinizi tanımlayın - - - - Bind to given address. Use [host]:port notation for IPv6 - Belirtilen adrese bağlı. IPv6 için [host]:port notasyonunu kullan - - - - Stake your coins to support network and gain reward (default: 1) - Ağı desteklemek için coinlerinizden pay alın ve ödül kazanın (varsayılan: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - Aksaklık gösteren eşlerle bağlantıyı kesme sınırı (varsayılan: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Aksaklık gösteren eşlerle yeni bağlantıları engelleme süresi, saniye olarak (varsayılan: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - IPv4 üzerinde dinlemek için %u numaralı RPC portunun kurulumu sırasında hata meydana geldi: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - Blok ve adres veritabanlarını birbirinden ayır. Kapanma süresini arttırır (varsayılan: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Hata: İşlem reddedildi. Bu; cüzdanınızdaki bazı coinler, önceden harcanmışsa, örneğin wallet.dat dosyasının bir kopyasını kullandıysanız ve bu kopyadaki coinler harcanmış ve burada harcanmış olarak işaretlenmediyse gerçekleşebilir. - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - Hata: Bu işlem; miktarı, karmaşıklığı veya son alınan miktarın kullanımı nedeniyle en az %s işlem ücreti gerektirir - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - <port> üzerinde JSON-RPC bağlantılarını dinle (varsayılan: 51736 veya testnet: 51996) - - - - Accept command line and JSON-RPC commands - Konut satırı ve JSON-RPC komutlarını kabul et - - - - Error: Transaction creation failed - Hata: İşlem yaratma başarısız oldu - - - - Error: Wallet locked, unable to create transaction - Hata: Cüzdan kilitli, işlem yaratılamıyor - - - - Importing blockchain data file. - Blok zinciri veri dosyası içeri aktarılıyor. - - - - Importing bootstrap blockchain data file. - Önyükleme blok zinciri veri dosyası içeri aktarılıyor. - - - - Run in the background as a daemon and accept commands - Arka planda daemon (servis) olarak çalış ve komutları kabul et - - - - Use the test network - Deneme şebekesini kullan - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Dışarıdan gelen bağlantıları kabul et (varsayılan: -proxy veya -connect yoksa 1) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - IPv6 üzerinde dinlemek için %u numaralı RPC portu kurulurken bir hata meydana geldi, IPv4'e dönülüyor: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - Veritabanı ortamı %s başlatılırken hata oluştu! Kurtarmak için, İLGİLİ KLASÖRÜ YEDEKLEYİN, ardından wallet.dat dışındaki her şeyi silin. - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Bayt olarak yüksek öncelikli/düşük ücretli işlemlerin maksimum boyutunu belirle (varsayılan: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Uyarı: -paytxfee çok yüksek bir değere ayarlanmış! Bu, muamele gönderirseniz ödeyeceğiniz muamele ücretidir. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - Uyarı: Lütfen bilgisayarınızın tarih ve saatinin doğru olduğunu kontrol ediniz! Saatiniz yanlış ise, ShadowCoin düzgün çalışmayacaktır. - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Uyarı: wallet.dat dosyasının okunması sırasında bir hata meydana geldi! Tüm anahtarlar doğru bir şekilde okundu, ancak muamele verileri ya da adres defteri unsurları hatalı veya eksik olabilir. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Uyarı: wallet.dat bozuk, veriler geri kazanıldı! Özgün wallet.dat, wallet.{zamandamgası}.bak olarak %s klasörüne kaydedildi; bakiyeniz ya da muameleleriniz yanlışsa bir yedeklemeden tekrar yüklemeniz gerekir. - - - - Attempt to recover private keys from a corrupt wallet.dat - Bozuk bir wallet.dat dosyasından özel anahtarları geri kazanmayı dene - - - - Block creation options: - Blok oluşturma seçenekleri: - - - - Connect only to the specified node(s) - Sadece belirtilen düğüme veya düğümlere bağlan - - - - Discover own IP address (default: 1 when listening and no -externalip) - Kendi IP adresini keşfet (varsayılan: dinlenildiğinde ve -externalip yoksa 1) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Herhangi bir portun dinlenmesi başarısız oldu. Bunu istiyorsanız -listen=0 seçeneğini kullanınız. - - - - Find peers using DNS lookup (default: 1) - DNS arama kullanarak eşleri bul (varsayılan: 1) - - - - Sync checkpoints policy (default: strict) - Kontrol noktası politikasını senkronize et (varsayılan: sıkı) - - - - Invalid -tor address: '%s' - Geçersiz -tor adresi: '%s' - - - - Invalid amount for -reservebalance=<amount> - -reservebalance=<amount> için geçersiz miktar - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Bağlantı başına azami alım tamponu, <n>*1000 bayt (varsayılan: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Bağlantı başına azami yollama tamponu, <n>*1000 bayt (varsayılan: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Sadece <net> şebekesindeki düğümlere bağlan (IPv4, IPv6 ya da Tor) - - - - Output extra debugging information. Implies all other -debug* options - Ekstra hata ayıklama bilgisini çıktı al. Diğer tüm -debug* seçeneklerini kapsar - - - - Output extra network debugging information - Ekstra ağ hata ayıklama bilgisini çıktı al - - - - Prepend debug output with timestamp - Tarih bilgisini, hata ayıklama çıktısının başına ekle - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL seçenekleri: (SSL kurulum bilgisi için Bitcoin vikisine bakınız) - - - - Select the version of socks proxy to use (4-5, default: 5) - Kullanılacak socks vekil sunucusunun versiyonunu seç (4-5, varsayılan: 5) - - - - Send trace/debug info to console instead of debug.log file - Trace/hata ayıklama verilerini debug.log dosyası yerine konsola gönder - - - - Send trace/debug info to debugger - Hata ayıklayıcıya iz sürme/hata ayıklama bilgisi gönder - - - - Set maximum block size in bytes (default: 250000) - Bayt olarak maksimum blok boyutunu belirle (varsayılan: 250000) - - - - Set minimum block size in bytes (default: 0) - Bayt olarak asgari blok boyutunu tanımla (varsayılan: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - İstemci başlatıldığında debug.log dosyasını küçült (varsayılan: -debug bulunmadığında 1) - - - - Specify connection timeout in milliseconds (default: 5000) - Bağlantı zaman aşım süresini milisaniye olarak belirt (varsayılan: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - Kontrol noktası imzalanamadı, bu bir hatalı kontrol noktası anahtarı mı? - - - - - Use UPnP to map the listening port (default: 0) - Dinlenecek portu haritalamak için UPnP kullan (varsayılan: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Dinlenecek portu haritalamak için UPnP kullan (varsayılan: dinlenildiğinde 1) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - Tor gizli servisine erişim için vekil sunucu kullan (varsayılan: -proxy ile aynı) - - - - Username for JSON-RPC connections - JSON-RPC bağlantıları için kullanıcı ismi - - - - Verifying database integrity... - Veritabanı bütünlüğü doğrulanıyor... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - UYARI: senkronize edilen kontrol noktası ihlali tespit edildi ancak atlandı! - - - - Warning: Disk space is low! - Uyarı: Disk alanı düşüktür! - - - - Warning: This version is obsolete, upgrade required! - Uyarı: Bu sürüm çok eskidir, güncellemeniz gerekir! - - - - wallet.dat corrupt, salvage failed - wallet.dat bozuk, geri kazanım başarısız oldu - - - - Password for JSON-RPC connections - JSON-RPC bağlantıları için parola - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, konfigürasyon dosyasında bir rpcpassword belirlemelisiniz: - %s -Aşağıdaki rastgele parolayı kullanmanız tavsiye edilir: -rpcuser=shadowcoinrpc -rpcpassword=%s -(bu parolayı hatırlamanız gerekmemektedir) -Kullanıcı adı ve parola aynı OLMAMALIDIR. -Dosya mevcut değilse, dosyayı sadece-kullanıcı-okuyabilir dosya izniyle yaratınız. -alertnotify ayarlamanız da ayrıca tavsiye edilir böylece sorunlar, size bildirilir; -örneğin: alertnotify=echo %%s | mail -s "ShadowCoin Uyarısı" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - Internet aktarımlı söyleşi kullanarak eşleri bul (varsayılan: 1) {0)?} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Diğer devrelerle saati senkronize et. Sisteminizdeki saat doğru ise devre dışı bırakın, örn: NTC ile senkronize etme (varsayılan: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Belirtilen İP adresinden JSON-RPC bağlantılarını kabul et - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Şu <ip> adresinde (varsayılan: 127.0.0.1) çalışan düğüme komut yolla - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - En iyi blok değiştiğinde komutu çalıştır (komut için %s parametresi blok hash değeri ile değiştirilecektir) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Bir cüzdan muamelesi değiştiğinde komutu çalıştır (komuttaki %s TxID ile değiştirilecektir) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Cüzdanı en yeni biçime güncelle - - - - Set key pool size to <n> (default: 100) - Anahtar alan boyutunu <n> değerine ayarla (varsayılan: 100) - - - - Rescan the block chain for missing wallet transactions - Blok zincirini eksik cüzdan muameleleri için tekrar tara - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - JSON-RPC bağlantıları için OpenSSL (https) kullan - - - - Server certificate file (default: server.cert) - Sunucu sertifika dosyası (varsayılan: server.cert) - - - - Server private key (default: server.pem) - Sunucu özel anahtarı (varsayılan: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Bu yardım mesajı - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Bu bilgisayarda %s unsuruna bağlanılamadı. (bind şu hatayı iletti: %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - -addnode, -seednode ve -connect için DNS aramalarına izin ver - - - - Loading addresses... - Adresler yükleniyor... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - wallet.dat dosyasının yüklenmesinde hata oluştu: bozuk cüzdan - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - wallet.dat dosyasının yüklenmesinde hata oluştu - - - - Invalid -proxy address: '%s' - Geçersiz -proxy adresi: '%s' - - - - Unknown network specified in -onlynet: '%s' - -onlynet için bilinmeyen bir şebeke belirtildi: '%s' - - - - Unknown -socks proxy version requested: %i - Bilinmeyen bir -socks vekil sürümü talep edildi: %i - - - - Cannot resolve -bind address: '%s' - -bind adresi çözümlenemedi: '%s' - - - - Cannot resolve -externalip address: '%s' - -externalip adresi çözümlenemedi: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - -paytxfee=<meblağ> için geçersiz meblağ: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Geçersiz meblağ - - - - Insufficient funds - Yetersiz bakiye - - - - Loading block index... - Blok indeksi yükleniyor... - - - - Add a node to connect to and attempt to keep the connection open - Bağlanılacak düğüm ekle ve bağlantıyı zinde tutmaya çalış - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Cüzdan yükleniyor... - - - - Cannot downgrade wallet - Cüzdan eski biçime geri alınamaz - - - - Cannot initialize keypool - - - - - Cannot write default address - Varsayılan adres yazılamadı - - - - Rescanning... - Yeniden tarama... - - - - Done loading - Yükleme tamamlandı - - - - To use the %s option - %s seçeneğini kullanmak için - - - - Error - Hata - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - rpcpassword=<parola> şu yapılandırma dosyasında belirtilmelidir: -%s -Dosya mevcut değilse, sadece sahibi için okumayla sınırlı izin ile oluşturunuz. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_uk.ts b/src/qt/locale/umbra_uk.ts deleted file mode 100644 index 94d82f493d..0000000000 --- a/src/qt/locale/umbra_uk.ts +++ /dev/null @@ -1,3391 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Назва - - - - Address - Адреса - - - - pubkey - - - - - stealth - - - - - (no label) - (немає назви) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - Діалог введення паролю - - - - Enter passphrase - Введіть пароль - - - - New passphrase - Новий пароль - - - - Repeat new passphrase - Повторіть пароль - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Введіть новий пароль для гаманця.<br/>Будь ласка, використовуйте паролі що містять <b>як мінімум 10 випадкових символів</b>, або <b>як мінімум 8 слів</b>. - - - - Encrypt wallet - Зашифрувати гаманець - - - - This operation needs your wallet passphrase to unlock the wallet. - Ця операція потребує пароль для розблокування гаманця. - - - - Unlock wallet - Розблокувати гаманець - - - - This operation needs your wallet passphrase to decrypt the wallet. - Ця операція потребує пароль для дешифрування гаманця. - - - - Decrypt wallet - Дешифрувати гаманець - - - - Change passphrase - Змінити пароль - - - - Enter the old and new passphrase to the wallet. - Ввести старий та новий паролі для гаманця. - - - - Confirm wallet encryption - Підтвердити шифрування гаманця - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - Ви дійсно хочете зашифрувати свій гаманець? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - ВАЖЛИВО: Всі попередні резервні копії, які ви зробили з вашого гаманця файл повинен бути замінений новоствореному, зашифрованому файлі гаманця. З міркувань безпеки, попередні резервні копії в незашифрованому файлі гаманець стане марним, як тільки ви починаєте використовувати нову, зашифрований гаманець. - - - - - Warning: The Caps Lock key is on! - Увага: Ввімкнено Caps Lock! - - - - - Wallet encrypted - Гаманець зашифровано - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - Не вдалося зашифрувати гаманець - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Виникла помилка під час шифрування гаманця. Ваш гаманець не було зашифровано. - - - - - The supplied passphrases do not match. - Введені паролі не співпадають. - - - - Wallet unlock failed - Не вдалося розблокувати гаманець - - - - - - The passphrase entered for the wallet decryption was incorrect. - Введений пароль є невірним. - - - - Wallet decryption failed - Не вдалося розшифрувати гаманець - - - - Wallet passphrase was successfully changed. - Пароль було успішно змінено. - - - - ClientModel - - - Network Alert - Сповіщення мережі - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - Кількість: - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Кількість - - - - Label - - - - - Address - Адреса - - - - Date - Дата - - - - Confirmations - - - - - Confirmed - Підтверджені - - - - Priority - - - - - Copy address - Скопіювати адресу - - - - Copy label - Скопіювати мітку - - - - - Copy amount - Копіювати кількість - - - - Copy transaction ID - Копіювати ID транзакції - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (немає назви) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - Редагувати адресу - - - - &Label - &Мітка - - - - The label associated with this address book entry - - - - - &Address - &Адреса - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - Нова адреса для отримання - - - - New sending address - Нова адреса для відправлення - - - - Edit receiving address - Редагувати адресу для отримання - - - - Edit sending address - Редагувати адресу для відправлення - - - - The entered address "%1" is already in the address book. - Введена адреса «%1» вже присутня в адресній книзі. - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - Неможливо розблокувати гаманець. - - - - New key generation failed. - Не вдалося згенерувати нові ключі. - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - Назва клієнту - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - Н/Д - - - - Client version - Версія клієнту - - - - &Information - &Інформація - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - Використовується OpenSSL версії - - - - Using BerkeleyDB version - - - - - Startup time - Час запуску - - - - Network - Мережа - - - - Name - - - - - Number of connections - Кількість підключень - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - Ланцюг блоків - - - - Current number of blocks - Поточне число блоків - - - - Estimated total blocks - Розрахункове число блоків - - - - Last block time - Час останнього блоку - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - Відкрити - - - - Command-line options - - - - - &Show - - - - - &Console - Консоль - - - - Build date - Дата збирання - - - - Debug log file - Файл звіту зневадження - - - - Clear console - Очистити консоль - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Використовуйте стрілки вгору вниз для навігації по історії, і <b>Ctrl-L</b> для очищення екрана. - - - - Type <b>help</b> for an overview of available commands. - Наберіть <b>help</b> для перегляду доступних команд. - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - Відкрити до %1 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/поза інтернетом - - - - %1/unconfirmed - %1/не підтверджено - - - - %1 confirmations - %1 підтверджень - - - - Status - Статус - - - - , broadcast through %n node(s) - - - - - Date - Дата - - - - Source - Джерело - - - - Generated - Згенеровано - - - - - - From - Відправник - - - - - - - To - Отримувач - - - - - - - own address - Власна адреса - - - - - label - Мітка - - - - - - - - Credit - Кредит - - - - matures in %n more block(s) - - - - - not accepted - не прийнято - - - - - - - Debit - Дебет - - - - Transaction fee - Комісія за транзакцію - - - - Net amount - Загальна сума - - - - Message - Повідомлення - - - - Comment - Коментар - - - - Transaction ID - ID транзакції - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - Отладочна інформація - - - - Transaction - Транзакція - - - - Inputs - витрати - - - - Amount - Кількість - - - - true - true - - - - false - false - - - - , has not been successfully broadcast yet - , ще не було успішно розіслано - - - - - unknown - невідомий - - - - TransactionDescDialog - - - Transaction details - Деталі транзакції - - - - This pane shows a detailed description of the transaction - Даний діалог показує детальну статистику по вибраній транзакції - - - - TransactionTableModel - - - Date - Дата - - - - Type - Тип - - - - Address - Адреса - - - - Amount - Кількість - - - - Open until %1 - Відкрити до %1 - - - - Confirmed (%1 confirmations) - Підтверджено (%1 підтверджень) - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - Цей блок не був отриманий жодними іншими вузлами і, ймовірно, не буде прийнятий! - - - - Generated but not accepted - Згенеровано, але не підтверджено - - - - (n/a) - (недоступно) - - - - Transaction status. Hover over this field to show number of confirmations. - Статус транзакції. Наведіть вказівник на це поле, щоб показати кількість підтверджень. - - - - Date and time that the transaction was received. - Дата і час, коли транзакцію було отримано. - - - - Type of transaction. - Тип транзакції. - - - - Destination address of transaction. - Адреса отримувача транзакції. - - - - Amount removed from or added to balance. - Сума, додана чи знята з балансу. - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - Використання: - - - - Send command to -server or shadowcoind - - - - - List commands - Список команд - - - - Get help for a command - Отримати довідку по команді - - - - Options: - Параметри: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - Вкажіть робочий каталог - - - - Set database cache size in megabytes (default: 25) - Встановити розмір кешу бази даних в мегабайтах (типово: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - Підтримувати не більше <n> зв'язків з колегами (типово: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - Підключитись до вузла, щоб отримати список адрес інших учасників та від'єднатись - - - - Specify your own public address - Вкажіть вашу власну публічну адресу - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - Поріг відключення неправильно під'єднаних пірів (типово: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Максимальній розмір вхідного буферу на одне з'єднання (типово: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - Приймати команди із командного рядка та команди JSON-RPC - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - Запустити в фоновому режимі (як демон) та приймати команди - - - - Use the test network - Використовувати тестову мережу - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - Приймати з'єднання ззовні (за замовчуванням: 1, якщо ні-проксі або-з'єднання) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Увага: встановлено занадто велику комісію (-paytxfee). Комісія зніматиметься кожен раз коли ви проводитимете транзакції. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Увага: помилка читання wallet.dat! Всі ключі прочитано коректно, але дані транзакцій чи записи адресної книги можуть бути пропущені, або пошкоджені. - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Увага: файл wallet.dat пошкоджено, дані врятовано! Оригінальний wallet.dat збережено як wallet.{timestamp}.bak до %s; якщо Ваш баланс чи транзакції неправильні, Ви можете відновити їх з резервної копії. - - - - Attempt to recover private keys from a corrupt wallet.dat - Спроба відновити закриті ключі з пошкодженого wallet.dat - - - - Block creation options: - Опції створення блоку: - - - - Connect only to the specified node(s) - Підключитись лише до вказаного вузла - - - - Discover own IP address (default: 1 when listening and no -externalip) - Відкрийте власну IP-адресу (за замовчуванням: 1, коли не чує і-externalip) - - - - Failed to listen on any port. Use -listen=0 if you want this. - Не вдалося слухати на будь-якому порту. Використовуйте-слухати = 0, якщо ви хочете цього. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Максимальний буфер, <n>*1000 байт (типово: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Максимальній розмір вихідного буферу на одне з'єднання, <n>*1000 байт (типово: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - Підключити тільки до вузлів в мережі <net> (IPv4, IPv6 або Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Параметри SSL: (див. Bitcoin Wiki для налаштування SSL) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - Відсилати налагоджувальну інформацію на консоль, а не у файл debug.log - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - Встановити мінімальний розмір блоку у байтах (типово: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - Стискати файл debug.log під час старту клієнта (типово: 1 коли відсутутній параметр -debug) - - - - Specify connection timeout in milliseconds (default: 5000) - Вказати тайм-аут підключення у мілісекундах (типово: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - Намагатись використовувати UPnP для відображення порту, що прослуховується на роутері (default: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Намагатись використовувати UPnP для відображення порту, що прослуховується на роутері (default: 1 when listening) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Ім'я користувача для JSON-RPC-з'єднань - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - Увага: Поточна версія застаріла, необхідне оновлення! - - - - wallet.dat corrupt, salvage failed - wallet.dat пошкоджено, відновлення не вдалося - - - - Password for JSON-RPC connections - Пароль для JSON-RPC-з'єднань - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - Дозволити JSON-RPC-з'єднання з вказаної IP-адреси - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Відправляти команди на вузол, запущений на <ip> (типово: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Виконати команду, коли з'явиться новий блок (%s в команді змінюється на хеш блоку) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - Модернізувати гаманець до останнього формату - - - - Set key pool size to <n> (default: 100) - Встановити розмір пулу ключів <n> (типово: 100) - - - - Rescan the block chain for missing wallet transactions - Пересканувати ланцюжок блоків, в пошуку втрачених транзакцій - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - Використовувати OpenSSL (https) для JSON-RPC-з'єднань - - - - Server certificate file (default: server.cert) - Файл сертифіката сервера (типово: server.cert) - - - - Server private key (default: server.pem) - Закритий ключ сервера (типово: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - Дана довідка - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Неможливо прив'язати до порту %s на цьому комп'ютері (bind returned error %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - Дозволити пошук в DNS для команд -addnode, -seednode та -connect - - - - Loading addresses... - Завантаження адрес... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - Помилка при завантаженні wallet.dat: Гаманець пошкоджено - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - Помилка при завантаженні wallet.dat - - - - Invalid -proxy address: '%s' - Помилка в адресі проксі-сервера: «%s» - - - - Unknown network specified in -onlynet: '%s' - Невідома мережа вказана в -onlynet: «%s» - - - - Unknown -socks proxy version requested: %i - В параметрі -socks запитується невідома версія: %i - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - Помилка у величині комісії -paytxfee=<amount>: «%s» - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - Некоректна кількість - - - - Insufficient funds - Недостатньо коштів - - - - Loading block index... - Завантаження індексу блоків... - - - - Add a node to connect to and attempt to keep the connection open - Додати вузол до підключення і лишити його відкритим - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - Завантаження гаманця... - - - - Cannot downgrade wallet - Не вдається понизити версію гаманця - - - - Cannot initialize keypool - - - - - Cannot write default address - Неможливо записати типову адресу - - - - Rescanning... - Сканування... - - - - Done loading - Завантаження завершене - - - - To use the %s option - Щоб використати опцію %s - - - - Error - Помилка - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - Ви мусите встановити rpcpassword=<password> в файлі конфігурації: -%s -Якщо файл не існує, створіть його із правами тільки для читання власником (owner-readable-only). - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_ur_PK.ts b/src/qt/locale/umbra_ur_PK.ts deleted file mode 100644 index e51ec2256b..0000000000 --- a/src/qt/locale/umbra_ur_PK.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - - - - - Address - - - - - pubkey - - - - - stealth - - - - - (no label) - - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - - - - - New passphrase - - - - - Repeat new passphrase - - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - - Encrypt wallet - - - - - This operation needs your wallet passphrase to unlock the wallet. - - - - - Unlock wallet - - - - - This operation needs your wallet passphrase to decrypt the wallet. - - - - - Decrypt wallet - - - - - Change passphrase - - - - - Enter the old and new passphrase to the wallet. - - - - - Confirm wallet encryption - - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_vi.ts b/src/qt/locale/umbra_vi.ts deleted file mode 100644 index 52db6850d6..0000000000 --- a/src/qt/locale/umbra_vi.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - Nhãn dữ liệu - - - - Address - Địa chỉ - - - - pubkey - - - - - stealth - - - - - (no label) - (chưa có nhãn) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - - - - - New passphrase - - - - - Repeat new passphrase - - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - - Encrypt wallet - - - - - This operation needs your wallet passphrase to unlock the wallet. - - - - - Unlock wallet - - - - - This operation needs your wallet passphrase to decrypt the wallet. - - - - - Decrypt wallet - - - - - Change passphrase - - - - - Enter the old and new passphrase to the wallet. - - - - - Confirm wallet encryption - - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - Số lượng - - - - Label - - - - - Address - Địa chỉ - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (chưa có nhãn) - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - Số lượng - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - Địa chỉ - - - - Amount - Số lượng - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_vi_VN.ts b/src/qt/locale/umbra_vi_VN.ts deleted file mode 100644 index 030abe4191..0000000000 --- a/src/qt/locale/umbra_vi_VN.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - - - - - Address - - - - - pubkey - - - - - stealth - - - - - (no label) - - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - - - - - New passphrase - - - - - Repeat new passphrase - - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - - Encrypt wallet - - - - - This operation needs your wallet passphrase to unlock the wallet. - - - - - Unlock wallet - - - - - This operation needs your wallet passphrase to decrypt the wallet. - - - - - Decrypt wallet - - - - - Change passphrase - - - - - Enter the old and new passphrase to the wallet. - - - - - Confirm wallet encryption - - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_zh_CN.ts b/src/qt/locale/umbra_zh_CN.ts deleted file mode 100644 index 45079c127f..0000000000 --- a/src/qt/locale/umbra_zh_CN.ts +++ /dev/null @@ -1,3427 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - 关于暗影币 - - - - <b>ShadowCoin</b> version - <b>暗影币客户端</b> 版本 - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - 版权所有 © 2009-2014 比特币Bitcoin开发组 -版权所有 © 2012-2014 新星币Novacoin开发组 -版权所有 © 2014 黑币BlackCoin开发组 -版权所有 © 2014-2015 暗影币ShadowCoin开发组 - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - 标签 - - - - Address - 地址 - - - - pubkey - 公钥 - - - - stealth - - - - - (no label) - (没有标签) - - - - Stealth Address - 隐密地址 - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - 密码对话框 - - - - Enter passphrase - 输入密码 - - - - New passphrase - 新密码 - - - - Repeat new passphrase - 重复新密码 - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - 在系统允许的情况下用于防止sendmoney欺诈,并未提供真正的安全防护措施。 - - - - For staking only - 仅用于权益增值 - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - 输入钱包的新密码。<br/>使用的密码请至少包含<b>10个以上随机字符</>,或者是<b>8个以上的单词</b>。 - - - - Encrypt wallet - 加密钱包 - - - - This operation needs your wallet passphrase to unlock the wallet. - 此操作需要您首先输入密码解锁该钱包。 - - - - Unlock wallet - 解锁钱包 - - - - This operation needs your wallet passphrase to decrypt the wallet. - 该操作需要您首先使用密码解密钱包。 - - - - Decrypt wallet - 解密钱包 - - - - Change passphrase - 更改密码 - - - - Enter the old and new passphrase to the wallet. - 请输入该钱包的旧密码与新密码。 - - - - Confirm wallet encryption - 确认加密钱包 - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - 警告:如果您丢失了加密该钱包的密码,其中所有的暗影币将会丢失! - - - - Are you sure you wish to encrypt your wallet? - 您确定需要为钱包加密吗? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - 重要提示:您以前备份的钱包文件应该替换成最新生成的加密钱包文件(重新备份)。从安全性上考虑,您以前备份的未加密的钱包文件,在您使用新的加密钱包后将无效,请重新备份。 - - - - - Warning: The Caps Lock key is on! - 警告:大写锁定键处于打开状态! - - - - - Wallet encrypted - 钱包已加密 - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - 暗影币客户端即将关闭以完成加密过程。请记住,加密钱包并不能完全防止您的电子货币被入侵您计算机的木马软件盗窃。 - - - - - - - Wallet encryption failed - 钱包加密失败 - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - 由于一个本地错误,加密钱包的操作已经失败。您的钱包没能被加密。 - - - - - The supplied passphrases do not match. - 密码不匹配。 - - - - Wallet unlock failed - 钱包解锁失败 - - - - - - The passphrase entered for the wallet decryption was incorrect. - 用于解密钱包的密码不正确。 - - - - Wallet decryption failed - 钱包解密失败。 - - - - Wallet passphrase was successfully changed. - 修改钱包密码成功。 - - - - ClientModel - - - Network Alert - 网络警报 - - - - CoinControlDialog - - - Coin Control - 暗影币控制 - - - - Quantity: - 总量: - - - - Bytes: - 字节: - - - - Amount: - 金额: - - - - Priority: - 优先级: - - - - Fee: - 费用: - - - - Low Output: - 低输出 - - - - - no - - - - - After Fee: - 加上交易费用后: - - - - Change: - 变更 : - - - - (un)select all - (不)全选 - - - - Tree mode - 树状模式 - - - - List mode - 列表模式 - - - - Amount - 金额 - - - - Label - 标签 - - - - Address - 地址 - - - - Date - 日期 - - - - Confirmations - 确认 - - - - Confirmed - 已确认 - - - - Priority - 优先级 - - - - Copy address - 复制地址 - - - - Copy label - 复制标签 - - - - - Copy amount - 复制金额 - - - - Copy transaction ID - 复制交易编号 - - - - Copy quantity - 复制金额 - - - - Copy fee - 复制交易费 - - - - Copy after fee - 复制含交易费的金额 - - - - Copy bytes - 复制字节 - - - - Copy priority - 复制优先级 - - - - Copy low output - 复制低输出 - - - - Copy change - 复制零钱 - - - - highest - 最高 - - - - high - - - - - medium-high - 中高 - - - - medium - 中等 - - - - low-medium - 中低 - - - - low - - - - - lowest - 最低 - - - - - DUST - DUST - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - 交易数据量超过10000字节时,该标签变为红色。 -此时每kb数据量将会收取 %1 的手续费。 -可能有+/-1字节的误差。 - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - 优先度较高的交易有更高可能进入到区块中。 -当优先度为中级以下时,该标签变为红色。 -此时需要收取每kb %1 的手续费。 - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - 如果收款人所收款项少于 %1,该标签变为红色。 -此时需收取 %2 的手续费。 -低于该手续费的0.546倍的款项将被显示为DUST。 - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - 如果零钱少于 %1,该标签变为红色。 -此时需收取 %2 的手续费。 - - - - - (no label) - (没有标签) - - - - change from %1 (%2) - 来自%1的零钱 (%2) - - - - (change) - (零钱) - - - - EditAddressDialog - - - Edit Address - 编辑地址 - - - - &Label - 标签(&L) - - - - The label associated with this address book entry - 地址簿内该项目对应的标签 - - - - &Address - 地址(&A) - - - - The address associated with this address book entry. This can only be modified for sending addresses. - 地址簿内该项目对应的地址。只有“收款人地址”分类下的地址可以修改。 - - - - &Stealth Address - - - - - New receiving address - 新建接收地址 - - - - New sending address - 新建发送地址 - - - - Edit receiving address - 编辑接收地址 - - - - Edit sending address - 编辑发送地址 - - - - The entered address "%1" is already in the address book. - 输入的地址"%1"已经存在于地址簿中。 - - - - The entered address "%1" is not a valid ShadowCoin address. - "%1" 不是有效的暗影币地址。 - - - - Could not unlock wallet. - 无法解锁钱包 - - - - New key generation failed. - 新的密钥生成失败。 - - - - GUIUtil::HelpMessageBox - - - version - 版本 - - - - - Shadow - - - - - Usage: - 使用 - - - - command-line options - 命令行选项 - - - - UI options - 用户界面选项 - - - - Set language, for example "de_DE" (default: system locale) - 设定语言,例如 “de_DE" (默认语言为本地操作系统语言) - - - - Start minimized - 启动时最小化 - - - - Show splash screen on startup (default: 1) - 登录时显示Logo界面 (默认开启) - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - 对方地址 - - - - From Address - 己方地址 - - - - Message - 信息 - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - 客户端名称 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - 不可用 - - - - Client version - 客户端版本 - - - - &Information - 信息(&I) - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - 使用 OpenSSL 版本 - - - - Using BerkeleyDB version - - - - - Startup time - 启动时间 - - - - Network - 网络 - - - - Name - - - - - Number of connections - 连接数 - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - 版本 - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - 数据链 - - - - Current number of blocks - 当前数据块数量 - - - - Estimated total blocks - 预计数据块数量 - - - - Last block time - 上一数据块时间 - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - 打开(&O) - - - - Command-line options - 命令行选项 - - - - &Show - 显示(&S) - - - - &Console - 控制台(&C) - - - - Build date - 创建时间 - - - - Debug log file - 调试日志文件 - - - - Clear console - 清空控制台 - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - 使用上下方向键浏览历史, <b>Ctrl-L</b>清除屏幕。 - - - - Type <b>help</b> for an overview of available commands. - 使用 <b>help</b> 命令显示帮助信息。 - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - 收到的消息 - - - - default - 默认 - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - 确认发送货币 - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - 确认要发送 %1 ? - - - - - - - - - - - - - - - - - - - Send Coins - 发送货币 - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - 收款人地址无效,请再检查。 - - - - The amount to pay must be larger than 0. - 支付金额必须大于0。 - - - - The amount exceeds your balance. - 金额超出您的余额。 - - - - The total exceeds your balance when the %1 transaction fee is included. - 计入 %1 交易费后的金额超出您的余额。 - - - - - Duplicate address found, can only send to each address once per send operation. - 发现重复的地址, 每次只能对同一地址发送一次。 - - - - Error: Transaction creation failed. - 错误:建立交易失败 - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - 错误:隐秘地址无限 - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - 发出信息 - - - - The message can't be empty. - 信息不能空白。 - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - 未进行权益增值,因为钱包已锁定 - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - 退出(&X) - - - - Quit application - 退出程序 - - - - &About ShadowCoin - 关于暗影币(&A) - - - - Show information about ShadowCoin - - - - - About &Qt - 关于 &Qt - - - - Show information about Qt - - - - - &Options... - 选项(&O)... - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - 解锁钱包 - - - - &Lock Wallet - - - - - Lock wallet - 钱包上锁 - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - 设置(&S) - - - - &Help - - - - - Wallet - 钱包 - - - - - [testnet] - - - - - - Umbra client - Umbra 平台 - - - - %n active connection(s) to ShadowCoin network - %n个活动连接在影子网络传递数据 - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - %n 秒前 - - - - %n minute(s) ago - %n 分钟前 - - - - %n hour(s) ago - %n 小时前 - - - - %n day(s) ago - %n 日前 - - - - Up to date - 更新完毕 - - - - Catching up... - 更新中... - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - 手续费确认 - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - 收到的消息 - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - 钱包已被<b>加密</b>,目前为<b>解锁</b>状态,只允许权益增值 - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - 钱包已被<b>加密</b>,目前为<b>解锁</b>状态 - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - 钱包已被<b>加密</b>,目前为<b>锁定</b>状态 - - - - Backup Wallet - 备份钱包 - - - - Wallet Data (*.dat) - 钱包数据文件(*.dat) - - - - Backup Failed - 备份失败 - - - - There was an error trying to save the wallet data to the new location. - 试图将钱包地址保存到新位置时出现错误 - - - - Lock Wallet - 钱包上锁 - - - - Error: Wallet must first be encrypted to be locked. - 错误:钱包必须先加密才能上锁 - - - - %n second(s) - %n 秒 - - - - %n minute(s) - %n 分钟 - - - - %n hour(s) - %n 小时 - - - - %n day(s) - %n 日 - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - 正进行权益增值 -您的重量 %1 -网络重量 %2 -预期下一奖励距离 %3 - - - - Not staking because wallet is in thin mode - 未进行权益增值,因为钱包在輕模式 - - - - Not staking, staking is disabled - 未进行权益增值,因为权益增值设定为停用。 - - - - Not staking because wallet is locked - 未进行权益增值,因为钱包已锁定 - - - - Not staking because wallet is offline - 未进行权益增值,因为钱包处于离线状态 - - - - Not staking because wallet is syncing - 未进行权益增值,因为钱包正同步中 - - - - Not staking because you don't have mature coins - 未进行权益增值,因为钱包中没有成熟的暗影币 - - - - Not staking - 未进行权益增值 - - - - Received with - - - - - Received from - 收款来自 - - - - Sent to - 发送给 - - - - Payment to yourself - 付款给自己 - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - 其他 - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - 至 %1 个数据块时开启 - - - - Open for %n block(s) - 为 %n 个数据块开启 - - - - conflicted - 发现冲突 - - - - %1/offline - %1 / 离线 - - - - %1/unconfirmed - %1/未确认 - - - - %1 confirmations - %1 已确认 - - - - Status - 状态 - - - - , broadcast through %n node(s) - 通过 %n 个节点广播 - - - - Date - 日期 - - - - Source - - - - - Generated - 生成 - - - - - - From - 来自 - - - - - - - To - - - - - - - - own address - 自己的地址 - - - - - label - 标签 - - - - - - - - Credit - 收入 - - - - matures in %n more block(s) - 将在 %n 个数据块后成熟 - - - - not accepted - 未被接受 - - - - - - - Debit - 支出 - - - - Transaction fee - 交易费 - - - - Net amount - 净额 - - - - Message - 消息 - - - - Comment - 备注 - - - - Transaction ID - 交易ID - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - 调试信息 - - - - Transaction - 交易 - - - - Inputs - 输入 - - - - Amount - 金额 - - - - true - 正确 - - - - false - 错误 - - - - , has not been successfully broadcast yet - ,未被成功广播 - - - - - unknown - 未知 - - - - TransactionDescDialog - - - Transaction details - 交易细节 - - - - This pane shows a detailed description of the transaction - 当前面板显示了交易的详细信息 - - - - TransactionTableModel - - - Date - 日期 - - - - Type - 类型 - - - - Address - 地址 - - - - Amount - 数量 - - - - Open until %1 - 至 %1 个数据块时开启 - - - - Confirmed (%1 confirmations) - 已确认 (%1 条确认信息) - - - - Open for %n more block(s) - 为 %n 个更多的区块开启 - - - - Narration - - - - - Offline - 掉线 - - - - Unconfirmed - 未确认的 - - - - Confirming (%1 of %2 recommended confirmations) - 确认中 (推荐 %2个确认,已经有 %1个确认) - - - - Conflicted - 冲突的 - - - - Immature (%1 confirmations, will be available after %2) - 未成熟 (%1 个确认,将在 %2 个后可用) - - - - This block was not received by any other nodes and will probably not be accepted! - 此数据块未被任何其他节点接收,可能不被接受! - - - - Generated but not accepted - 已生成但未被接受 - - - - (n/a) - (不可用) - - - - Transaction status. Hover over this field to show number of confirmations. - 交易状态。 鼠标移到此区域可显示确认项数量。 - - - - Date and time that the transaction was received. - 接收到交易的时间 - - - - Type of transaction. - 交易类别。 - - - - Destination address of transaction. - 交易目的地址。 - - - - Amount removed from or added to balance. - 从余额添加或移除的金额。 - - - - WalletModel - - - - Sending... - 正在发送 - - - - bitcoin-core - - - ShadowCoin version - 暗影币客户端 版本 - - - - Usage: - 使用: - - - - Send command to -server or shadowcoind - 向-server服务器或shadowcoind发送命令 - - - - List commands - 列出命令 - - - - - Get help for a command - 获得某条命令的帮助 - - - - - Options: - 选项: - - - - - Specify configuration file (default: shadowcoin.conf) - 指定配置文件(默认: shadowcoin.conf) - - - - Specify pid file (default: shadowcoind.pid) - 指定pid文件(默认: shadowcoind.pid) - - - - Specify wallet file (within data directory) - 指定钱包文件(数据目录内) - - - - Specify data directory - 指定数据目录 - - - - - Set database cache size in megabytes (default: 25) - 设置数据库缓冲区大小 (缺省: 25MB) - - - - Set database disk log size in megabytes (default: 100) - 设置数据库日志文件大小(单位MB,默认值100) - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - 监听<port>端口的连接 (默认: 51737 测试网: 51997) - - - - Maintain at most <n> connections to peers (default: 125) - 最大连接数 <n> (缺省: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - 连接一个节点并获取对端地址,然后断开连接 - - - - Specify your own public address - 指定您的公共地址 - - - - Bind to given address. Use [host]:port notation for IPv6 - 以IPv6 [host]:端口绑定给定地址 - - - - Stake your coins to support network and gain reward (default: 1) - 进行权益累积以支持暗影币网络并获得报酬(默认: 1) - - - - Threshold for disconnecting misbehaving peers (default: 100) - 断开出现问题节点阀值(缺省: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Number of seconds to keep misbehaving peers from reconnecting (缺省: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - 设置RPC监听端口%u时发生错误, IPv4:%s - - - - Detach block and address databases. Increases shutdown time (default: 0) - 离线保存区块和地址数据库. 增加关机时间。 (默认: 0) - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - 错误:交易被拒绝。可能由于钱包中部分金额已被使用,例如您使用了钱包数据的副本,在副本中某些金额已被使用,但在此处尚未被标记为已使用。 - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - 错误:该笔交易需至少支付 %s 的手续费。 - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - 监听 <port> 端口的JSON-RPC连接 (默认: 51736 测试网: 51996) - - - - Accept command line and JSON-RPC commands - 接受命令行和 JSON-RPC 命令 - - - - - Error: Transaction creation failed - 错误:交易创建失败。 - - - - Error: Wallet locked, unable to create transaction - 错误:钱包已锁定,无法创建交易。 - - - - Importing blockchain data file. - 正在导入区块链数据文件 - - - - Importing bootstrap blockchain data file. - 正在导入高速区块链数据文件 - - - - Run in the background as a daemon and accept commands - 在后台运行并接受命令 - - - - - - Use the test network - 使用测试网络 - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - 接受来自外部的连接 (缺省: 如果不带 -proxy or -connect 参数设置为1) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - 在IPv6模式下设置RPC监听端口 %u 失败,返回到IPv4模式: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - 数据库环境 %s 初始化错误。要修复,备份该目录并将其下除wallet.dat以外的文件全部删除。 - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - 设置高优先度/低手续费交易的最大字节数 (默认: 27000) - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - 警告:-paytxfee 交易费设置得太高了!每笔交易都将支付交易费。 - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - 警告:请确认您计算机的本地时间。如果时钟错误,暗影币客户端将不能正常工作。 - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - 警告:钱包文件wallet.dat读取失败!最重要的公钥、私钥数据都没有问题,但是交易记录或地址簿数据不正确,或者存在数据丢失。 - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - 警告:钱包文件wallet.dat损坏! 原始的钱包文件已经备份到%s目录下并重命名为{timestamp}.bak 。如果您的账户余额或者交易记录不正确,请使用您的钱包备份文件恢复。 - - - - Attempt to recover private keys from a corrupt wallet.dat - 尝试从损坏的钱包文件wallet.dat中恢复私钥 - - - - Block creation options: - 数据块创建选项: - - - - Connect only to the specified node(s) - 仅连接到指定节点 - - - - Discover own IP address (default: 1 when listening and no -externalip) - 发现自己的IP地址(缺省:不带 -externalip 参数监听时设置为1) - - - - Failed to listen on any port. Use -listen=0 if you want this. - 监听端口失败。请使用 -listen=0 参数。 - - - - Find peers using DNS lookup (default: 1) - 以DNS查找方式寻找节点 (默认:1) - - - - Sync checkpoints policy (default: strict) - 同步检测点政策 (默认:严格) - - - - Invalid -tor address: '%s' - 无效的 -tor 地址: '%s' - - - - Invalid amount for -reservebalance=<amount> - -reservebalance=<amount> 金额无效 - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - 每个连接的最大接收缓存,<n>*1000 字节(缺省:5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - 每个连接的最大发送缓存,<n>*1000 字节(缺省:1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - 仅连接至指定网络的节点<net>(IPv4, IPv6 或者 Tor) - - - - Output extra debugging information. Implies all other -debug* options - 输出额外的调试信息。相当于开启了其它所有-debug选项 - - - - Output extra network debugging information - 输出额外的网络调试信息 - - - - Prepend debug output with timestamp - 将时间信息加入调试输出中 - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL选项:(参见Bitcoin Wiki关于SSL设置栏目) - - - - Select the version of socks proxy to use (4-5, default: 5) - 选择要使用的SOCKS代理版本 (4-5, 默认 5) - - - - Send trace/debug info to console instead of debug.log file - 跟踪/调试信息输出到控制台,不输出到 debug.log 文件 - - - - Send trace/debug info to debugger - 发送跟踪/调试信息给调试者 - - - - Set maximum block size in bytes (default: 250000) - 设置最大区块大小 (默认:250000) - - - - Set minimum block size in bytes (default: 0) - 设置最小数据块大小(缺省:0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - 客户端启动时压缩debug.log文件(缺省:no-debug模式时为1) - - - - Specify connection timeout in milliseconds (default: 5000) - 设置连接超时时间(缺省:5000毫秒) - - - - Unable to sign checkpoint, wrong checkpointkey? - - 无法为记录点签名,错误的记录点密钥。 - - - - Use UPnP to map the listening port (default: 0) - 使用UPnP映射监听端口 (缺省: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - 使用UPnp映射监听端口(缺省: 监听状态设为1) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - 开启代理以使用隐藏服务 (默认: 和-proxy设置相同) - - - - Username for JSON-RPC connections - JSON-RPC 连接用户名 - - - - Verifying database integrity... - 正在检查数据库完整性... - - - - WARNING: syncronized checkpoint violation detected, but skipped! - 警告:检测到同步记录点错误,已跳过。 - - - - Warning: Disk space is low! - 警告:磁盘空间低。 - - - - Warning: This version is obsolete, upgrade required! - 警告:该软件版本已过时,请升级! - - - - wallet.dat corrupt, salvage failed - 钱包文件wallet.dat损坏,抢救备份失败 - - - - Password for JSON-RPC connections - JSON-RPC 连接密码 - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - %s, 必须在配置文件里设置rpc密码: - %s -建议使用如下的随机密码: -rpcuser=shadowcoinrpc -rpcpassword=%s -(不需要记住该密码) -用户名和密码不能重复。 -如果该文件不存在,请自行创建并设为用户本身只读权限。 -建议创建提示以监测可能的问题,如: -alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - Find peers using internet relay chat (default: 0) - 寻找使用互联网接力聊天的节点 (默认: 1) {0)?} - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - 自动和其它节点同步时间。如果本地计算机世界是准确的,建议关闭。(默认: 1) - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - 创建交易时自动忽略该值以下的数额 (默认:0.01) - - - - Allow JSON-RPC connections from specified IP address - 允许从指定IP接受到的 JSON-RPC 连接 - - - - Send commands to node running on <ip> (default: 127.0.0.1) - 向IP地址为 <ip> 的节点发送指令 (缺省: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - 当最佳数据块变化时执行命令 (命令行中的 %s 会被替换成数据块哈希值) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - 当最佳区块变化时执行命令 (命令行中的 %s 会被替换成区块哈希值) - - - - Require a confirmations for change (default: 0) - 要求对零钱进行确认 (默认:0) - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - 强制要求交易脚本使用标准PUSH算子 (默认:1) - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - 收到相关提示时执行命令 (命令中的%s将被信息替换) - - - - Upgrade wallet to latest format - 将钱包升级到最新的格式 - - - - Set key pool size to <n> (default: 100) - 设置密钥池大小为 <n> (缺省: 100) - - - - - Rescan the block chain for missing wallet transactions - 重新扫描区块链以查找遗漏的钱包交易 - - - - How many blocks to check at startup (default: 2500, 0 = all) - 启动时检测的区块数量 (默认: 2500, 0表示检测全部) - - - - How thorough the block verification is (0-6, default: 1) - 区块确认的彻底程度 (0-6, 默认: 1) - - - - Imports blocks from external blk000?.dat file - 从外部 blk000?.dat 文件导入区块 - - - - Use OpenSSL (https) for JSON-RPC connections - 为 JSON-RPC 连接使用 OpenSSL (https) 连接 - - - - Server certificate file (default: server.cert) - 服务器证书 (默认为 server.cert) - - - - - Server private key (default: server.pem) - 服务器私钥 (默认为 server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - 可用加密算法 (默认: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - Error: Wallet unlocked for staking only, unable to create transaction. - 错误:无法创建交易,已解锁的钱包仅用于权益累积。 - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - 警告:发现无效的记录点。所显示的交易信息未必正确!请升级客户端或联系开发者。 - - - - This help message - 本帮助信息 - - - - - Wallet %s resides outside data directory %s. - 钱包 %s 位于数据目录 %s 之外. - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - 无法从数据目录 %s 获得锁定. 暗影币客户端可能已在运行中. - - - - ShadowCoin - 暗影币 - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - 无法绑定本机端口 %s (返回错误消息 %d, %s) - - - - Connect through socks proxy - 通过socks代理连接 - - - - Allow DNS lookups for -addnode, -seednode and -connect - 使用 -addnode, -seednode 和 -connect 选项时允许查询DNS - - - - Loading addresses... - 正在加载地址簿... - - - - Error loading blkindex.dat - blkindex.dat 文件加载出错 - - - - Error loading wallet.dat: Wallet corrupted - wallet.dat 钱包文件加载出错:钱包损坏 - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - wallet.dat 钱包文件加载出错:需要新版本的客户端 - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - 需要重写钱包,重启客户端以完成该操作。 - - - - Error loading wallet.dat - wallet.dat 钱包文件加载出错 - - - - Invalid -proxy address: '%s' - 无效的代理地址:%s - - - - Unknown network specified in -onlynet: '%s' - -onlynet 指定的是未知网络:%s - - - - Unknown -socks proxy version requested: %i - 被指定的是未知socks代理版本: %i - - - - Cannot resolve -bind address: '%s' - 无法解析 -bind 端口地址: '%s' - - - - Cannot resolve -externalip address: '%s' - 无法解析 -externalip 地址: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - 非法金额 -paytxfee=<amount>: '%s' - - - - Error: could not start node - 错误:无法启动节点 - - - - Sending... - 正在发送 - - - - Invalid amount - 无效金额 - - - - Insufficient funds - 金额不足 - - - - Loading block index... - 正在加载数据块索引... - - - - Add a node to connect to and attempt to keep the connection open - 添加节点并与其保持连接 - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - 无法绑定到该计算机上的 %s. 暗影币客户端可能已在运行中。 - - - - Fee per KB to add to transactions you send - 每kB交易所支付的手续费 - - - - Invalid amount for -mininput=<amount>: '%s' - 无效的数量。 -mininput=<amount>: '%s' - - - - Loading wallet... - 正在加载钱包... - - - - Cannot downgrade wallet - 无法降级钱包 - - - - Cannot initialize keypool - 无法初始化密钥池。 - - - - Cannot write default address - 无法写入默认地址 - - - - Rescanning... - 正在重新扫描... - - - - Done loading - 加载完成 - - - - To use the %s option - 使用 %s 选项 - - - - Error - 错误 - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - 您必须在配置文件中加入选项 rpcpassword : - %s -如果配置文件不存在,请新建,并将文件权限设置为仅允许文件所有者读取. - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_zh_HK.ts b/src/qt/locale/umbra_zh_HK.ts deleted file mode 100644 index 27d924c7d6..0000000000 --- a/src/qt/locale/umbra_zh_HK.ts +++ /dev/null @@ -1,3389 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - - - - - <b>ShadowCoin</b> version - - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - - - - - Address - - - - - pubkey - - - - - stealth - - - - - (no label) - - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - - - - - Enter passphrase - - - - - New passphrase - - - - - Repeat new passphrase - - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - - - - - For staking only - - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - - - - - Encrypt wallet - - - - - This operation needs your wallet passphrase to unlock the wallet. - - - - - Unlock wallet - - - - - This operation needs your wallet passphrase to decrypt the wallet. - - - - - Decrypt wallet - - - - - Change passphrase - - - - - Enter the old and new passphrase to the wallet. - - - - - Confirm wallet encryption - - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - - - - - Are you sure you wish to encrypt your wallet? - - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - - - - - - Warning: The Caps Lock key is on! - - - - - - Wallet encrypted - - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - - - - - - - - Wallet encryption failed - - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - - - - - The supplied passphrases do not match. - - - - - Wallet unlock failed - - - - - - - The passphrase entered for the wallet decryption was incorrect. - - - - - Wallet decryption failed - - - - - Wallet passphrase was successfully changed. - - - - - ClientModel - - - Network Alert - - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - - - - - Bytes: - - - - - Amount: - - - - - Priority: - - - - - Fee: - - - - - Low Output: - - - - - - no - - - - - After Fee: - - - - - Change: - - - - - (un)select all - - - - - Tree mode - - - - - List mode - - - - - Amount - - - - - Label - - - - - Address - - - - - Date - - - - - Confirmations - - - - - Confirmed - - - - - Priority - - - - - Copy address - - - - - Copy label - - - - - - Copy amount - - - - - Copy transaction ID - - - - - Copy quantity - - - - - Copy fee - - - - - Copy after fee - - - - - Copy bytes - - - - - Copy priority - - - - - Copy low output - - - - - Copy change - - - - - highest - - - - - high - - - - - medium-high - - - - - medium - - - - - low-medium - - - - - low - - - - - lowest - - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - - - - - change from %1 (%2) - - - - - (change) - - - - - EditAddressDialog - - - Edit Address - - - - - &Label - - - - - The label associated with this address book entry - - - - - &Address - - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - - - - - New sending address - - - - - Edit receiving address - - - - - Edit sending address - - - - - The entered address "%1" is already in the address book. - - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - - - - - New key generation failed. - - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - Client version - - - - - &Information - - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - - - - - Using BerkeleyDB version - - - - - Startup time - - - - - Network - - - - - Name - - - - - Number of connections - - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - - - - - Current number of blocks - - - - - Estimated total blocks - - - - - Last block time - - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - - - - - Command-line options - - - - - &Show - - - - - &Console - - - - - Build date - - - - - Debug log file - - - - - Clear console - - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - - - - - Type <b>help</b> for an overview of available commands. - - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - - - - - %1/unconfirmed - - - - - %1 confirmations - - - - - Status - - - - - , broadcast through %n node(s) - - - - - Date - - - - - Source - - - - - Generated - - - - - - - From - - - - - - - - To - - - - - - - - own address - - - - - - label - - - - - - - - - Credit - - - - - matures in %n more block(s) - - - - - not accepted - - - - - - - - Debit - - - - - Transaction fee - - - - - Net amount - - - - - Message - - - - - Comment - - - - - Transaction ID - - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - - - - - Transaction - - - - - Inputs - - - - - Amount - - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - - - - - - unknown - - - - - TransactionDescDialog - - - Transaction details - - - - - This pane shows a detailed description of the transaction - - - - - TransactionTableModel - - - Date - - - - - Type - - - - - Address - - - - - Amount - - - - - Open until %1 - - - - - Confirmed (%1 confirmations) - - - - - Open for %n more block(s) - - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - - - - - This block was not received by any other nodes and will probably not be accepted! - - - - - Generated but not accepted - - - - - (n/a) - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Date and time that the transaction was received. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Amount removed from or added to balance. - - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - - - - - Send command to -server or shadowcoind - - - - - List commands - - - - - Get help for a command - - - - - Options: - - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - - - - - Specify data directory - - - - - Set database cache size in megabytes (default: 25) - - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - - - - - Connect to a node to retrieve peer addresses, and disconnect - - - - - Specify your own public address - - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - - - - - Use the test network - - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - - - - - Connect only to the specified node(s) - - - - - Discover own IP address (default: 1 when listening and no -externalip) - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - - - - - Use UPnP to map the listening port (default: 1 when listening) - - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - - - - - Send commands to node running on <ip> (default: 127.0.0.1) - - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - - - - - Set key pool size to <n> (default: 100) - - - - - Rescan the block chain for missing wallet transactions - - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - - - - - Server certificate file (default: server.cert) - - - - - Server private key (default: server.pem) - - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - - - - - Loading addresses... - - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - - - - - Invalid -proxy address: '%s' - - - - - Unknown network specified in -onlynet: '%s' - - - - - Unknown -socks proxy version requested: %i - - - - - Cannot resolve -bind address: '%s' - - - - - Cannot resolve -externalip address: '%s' - - - - - Invalid amount for -paytxfee=<amount>: '%s' - - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - - - - - Insufficient funds - - - - - Loading block index... - - - - - Add a node to connect to and attempt to keep the connection open - - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - - - - - Cannot downgrade wallet - - - - - Cannot initialize keypool - - - - - Cannot write default address - - - - - Rescanning... - - - - - Done loading - - - - - To use the %s option - - - - - Error - - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - - - - \ No newline at end of file diff --git a/src/qt/locale/umbra_zh_TW.ts b/src/qt/locale/umbra_zh_TW.ts deleted file mode 100644 index 5c8d10cbaf..0000000000 --- a/src/qt/locale/umbra_zh_TW.ts +++ /dev/null @@ -1,3392 +0,0 @@ - - - AboutDialog - - - About ShadowCoin - 關于黑幣 - - - - <b>ShadowCoin</b> version - <b>黑幣客戶端</b> 版本 - - - - Copyright © 2009-2014 The Bitcoin developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The BlackCoin developers -Copyright © 2014-2015 The ShadowCoin developers - - - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="https://www.openssl.org/">https://www.openssl.org/</a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com">eay@cryptsoft.com</a>) and UPnP software written by Thomas Bernard. - - - - - AddressTableModel - - - Label - 標記 - - - - Address - 位址 - - - - pubkey - - - - - stealth - - - - - (no label) - (無標記) - - - - Stealth Address - - - - - n/a - - - - - AskPassphraseDialog - - - Passphrase Dialog - 密碼對話視窗 - - - - Enter passphrase - 請輸入密碼 - - - - New passphrase - 新密碼 - - - - Repeat new passphrase - 重複新密碼 - - - - Serves to disable the trivial sendmoney when OS account compromised. Provides no real security. - 在系統允許的情況下用于防止sendmoney欺詐,並未提供真正的安全防護措施。 - - - - For staking only - 仅用于权益增值 - - - - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - 請輸入錢包的新密碼。<br/>建議用<b>10 個以上的任意字元</b>,或是<b>8 個以上的單字</b>。 - - - - Encrypt wallet - 加密錢包 - - - - This operation needs your wallet passphrase to unlock the wallet. - 這個動作需要你的錢包密碼來解鎖錢包。 - - - - Unlock wallet - 解鎖錢包 - - - - This operation needs your wallet passphrase to decrypt the wallet. - 這個動作需要你的錢包密碼來把錢包解密。 - - - - Decrypt wallet - 解密錢包 - - - - Change passphrase - 改變密碼 - - - - Enter the old and new passphrase to the wallet. - 請輸入錢包的舊密碼及新密碼。 - - - - Confirm wallet encryption - 確認錢包加密 - - - - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - 警告:如果您丟失了加密該錢包的密碼,其中所有的黑幣將會丟失! - - - - Are you sure you wish to encrypt your wallet? - 你確定要把錢包加密嗎? - - - - IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - 重要: 請改用新產生有加密的錢包檔,來取代舊錢包檔的備份。為了安全性的理由,當你開始使用新的有加密的錢包後,舊錢包檔的備份就不能再使用了。 - - - - - Warning: The Caps Lock key is on! - 警告: 大寫字母鎖定作用中! - - - - - Wallet encrypted - 錢包已加密 - - - - ShadowCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - 黑幣客戶端即將關閉以完成加密過程。請記住,加密錢包並不能完全防止您的電子貨幣被入侵您計算機的木馬軟件盜竊。 - - - - - - - Wallet encryption failed - 錢包加密失敗 - - - - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - 因為內部錯誤導致錢包加密失敗。你的錢包還是沒加密。 - - - - - The supplied passphrases do not match. - 提供的密碼不一樣。 - - - - Wallet unlock failed - 錢包解鎖失敗 - - - - - - The passphrase entered for the wallet decryption was incorrect. - 輸入要用來解密錢包的密碼不對。 - - - - Wallet decryption failed - 錢包解密失敗 - - - - Wallet passphrase was successfully changed. - 錢包密碼改成功了。 - - - - ClientModel - - - Network Alert - 網路警報 - - - - CoinControlDialog - - - Coin Control - - - - - Quantity: - 數目: - - - - Bytes: - 位元組數: - - - - Amount: - 金額: - - - - Priority: - 優先度: - - - - Fee: - 手續費: - - - - Low Output: - 低輸出: - - - - - no - - - - - After Fee: - 計費後金額: - - - - Change: - 找零金額: - - - - (un)select all - 全選或全不選 - - - - Tree mode - 樹狀模式 - - - - List mode - 列表模式 - - - - Amount - 金額 - - - - Label - - - - - Address - 位址 - - - - Date - 日期 - - - - Confirmations - 確認次數 - - - - Confirmed - 已確定 - - - - Priority - 優先度 - - - - Copy address - 複製位址 - - - - Copy label - 複製標記 - - - - - Copy amount - 複製金額 - - - - Copy transaction ID - 複製交易識別碼 - - - - Copy quantity - 複製數目 - - - - Copy fee - 複製手續費 - - - - Copy after fee - 複製計費後金額 - - - - Copy bytes - 複製位元組數 - - - - Copy priority - 複製優先度 - - - - Copy low output - 複製低輸出 - - - - Copy change - 複製找零金額 - - - - highest - 最高 - - - - high - - - - - medium-high - 中高 - - - - medium - 中等 - - - - low-medium - 中低 - - - - low - - - - - lowest - 最低 - - - - - DUST - - - - - - yes - - - - - This label turns red, if the transaction size is bigger than 10000 bytes. - - This means a fee of at least %1 per kb is required. - - Can vary +/- 1 Byte per input. - - - - - Transactions with higher priority get more likely into a block. - -This label turns red, if the priority is smaller than "medium". - - This means a fee of at least %1 per kb is required. - - - - - This label turns red, if any recipient receives an amount smaller than %1. - - This means a fee of at least %2 is required. - - Amounts below 0.546 times the minimum relay fee are shown as DUST. - - - - - This label turns red, if the change is smaller than %1. - - This means a fee of at least %2 is required. - - - - - - (no label) - (無標記) - - - - change from %1 (%2) - 找零前是 %1 (%2) - - - - (change) - (找零) - - - - EditAddressDialog - - - Edit Address - 編輯位址 - - - - &Label - 標記 - - - - The label associated with this address book entry - - - - - &Address - 位址 - - - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - - &Stealth Address - - - - - New receiving address - 造新的收款位址 - - - - New sending address - 造新的付款位址 - - - - Edit receiving address - 編輯收款位址 - - - - Edit sending address - 編輯付款位址 - - - - The entered address "%1" is already in the address book. - 輸入的位址 %1 在位址簿中已經有了。 - - - - The entered address "%1" is not a valid ShadowCoin address. - - - - - Could not unlock wallet. - 沒辦法把錢包解鎖。 - - - - New key generation failed. - 產生新的密鑰失敗了。 - - - - GUIUtil::HelpMessageBox - - - version - - - - - - Shadow - - - - - Usage: - - - - - command-line options - - - - - UI options - - - - - Set language, for example "de_DE" (default: system locale) - - - - - Start minimized - - - - - Show splash screen on startup (default: 1) - - - - - MessageModel - - - Type - - - - - Sent Date Time - - - - - Received Date Time - - - - - Label - - - - - To Address - - - - - From Address - - - - - Message - - - - - Send Secure Message - - - - - Send failed: %1. - - - - - - (no label) - - - - - PaymentServer - - - Cannot start shadow: click-to-pay handler - - - - - PeerTableModel - - - Address/Hostname - - - - - User Agent - - - - - Ping Time - - - - - QObject - - - %1 d - - - - - %1 h - - - - - %1 m - - - - - - %1 s - - - - - None - - - - - N/A - - - - - %1 ms - - - - - RPCConsole - - - Client name - 客戶端軟體名稱 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N/A - 未知 - - - - Client version - 客戶端軟體版本 - - - - &Information - 資訊 - - - - Shadow - Debug window - - - - - Shadow Core - - - - - Using OpenSSL version - 使用的 OpenSSL 版本 - - - - Using BerkeleyDB version - - - - - Startup time - 啓動時間 - - - - Network - 網路 - - - - Name - - - - - Number of connections - 連線數 - - - - Show the Shadow help message to get a list with possible Shadow command-line options. - - - - - &Network Traffic - - - - - &Clear - - - - - Totals - - - - - - In: - - - - - - Out: - - - - - &Peers - - - - - - - Select a peer to view detailed information. - - - - - Peer ID - - - - - Direction - - - - - Version - - - - - User Agent - - - - - Services - - - - - Starting Height - - - - - Sync Height - - - - - Ban Score - - - - - Connection Time - - - - - Last Send - - - - - Last Receive - - - - - Bytes Sent - - - - - Bytes Received - - - - - Ping Time - - - - - Time Offset - - - - - Block chain - 區塊鏈 - - - - Current number of blocks - 目前區塊數 - - - - Estimated total blocks - 估計總區塊數 - - - - Last block time - 最近區塊時間 - - - - Open the Shadow debug log file from the current data directory. This can take a few seconds for large log files. - - - - - &Open - 開啓 - - - - Command-line options - - - - - &Show - - - - - &Console - 主控台 - - - - Build date - 建置日期 - - - - Debug log file - 除錯紀錄檔 - - - - Clear console - 清主控台 - - - - Welcome to the Shadow Core RPC console. - - - - - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - 請用上下游標鍵來瀏覽先前指令的紀錄,並用 <b>Ctrl-L</b> 來清理畫面。 - - - - Type <b>help</b> for an overview of available commands. - 請打 <b>help</b> 來看可用指令的簡介。 - - - - via %1 - - - - - - never - - - - - Inbound - - - - - Outbound - - - - - Unknown - - - - - - Fetching... - - - - - ShadowBridge - - - Incoming Message - - - - - default - - - - - <b>%1</b> to %2 (%3) - - - - - <b>%1</b> to SHADOW %2 (%3) - - - - - <b>%1</b> SHADOW, ring size %2 to SHADOW %3 (%4) - - - - - <b>%1</b> SHADOW, ring size %2 to SDC %3 (%4) - - - - - - - - Error: - - - - - Unknown txn type detected %1. - - - - - Input types must match for all recipients. - - - - - Ring sizes must match for all recipients. - - - - - Ring size outside range [%1, %2]. - - - - - - Confirm send coins - - - - - Are you sure you want to send? -Ring size of one is not anonymous, and harms the network. - - - - - - and - - - - - Are you sure you want to send %1? - - - - - - - - - - - - - - - - - - - - Send Coins - - - - - The change address is not valid, please recheck. - - - - - - The recipient address is not valid, please recheck. - - - - - The amount to pay must be larger than 0. - - - - - The amount exceeds your balance. - - - - - The total exceeds your balance when the %1 transaction fee is included. - - - - - - Duplicate address found, can only send to each address once per send operation. - - - - - Error: Transaction creation failed. - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: Narration is too long. - - - - - Error: Ring Size Error. - - - - - Error: Input Type Error. - - - - - Error: Must be in full mode to send anon. - - - - - Error: Invalid Stealth Address. - - - - - The total exceeds your shadow balance when the %1 transaction fee is included. - - - - - Error generating transaction. - - - - - Error generating transaction: %1 - - - - - - - - - Send Message - - - - - The message can't be empty. - - - - - Error: Message creation failed. - - - - - Error: The message was rejected. - - - - - Sanity Error! - - - - - Error: a sanity check prevented the transfer of a non-group private key, please close your wallet and report this error to the development team as soon as possible. - - - - - Overview - - - - - Wallet - - - - - Send - - - - - Receive - - - - - Transactions - - - - - Address Book - - - - - Chat - - - - - Notifications - - - - - Options - - - - - Wallet Management - - - - - Add New Wallet - - - - - Import Wallet - - - - - Advanced - - - - - Backup - - - - - Backup Wallet - - - - - Encrypt Wallet - - - - - Change Passphrase - - - - - (Un)lock Wallet - - - - - Tools - - - - - Chain Data - - - - - Block Explorer - - - - - Sign Message - - - - - Verify Message - - - - - Debug - - - - - About Shadow - - - - - About QT - - - - - QR code - - - - - Address: - - - - - Label: - - - - - Narration: - - - - - Amount: - - - - - Add new receive address - - - - - Add Address - - - - - Add a new contact - - - - - Address Lookup - - - - - Address Type - - - - - Normal - - - - - Stealth - - - - - Group - - - - - BIP32 - - - - - Label - - - - - Address - - - - - Public Key - - - - - Transaction Hash - - - - - Recent Transactions - - - - - Market - - - - - Advanced Options - - - - - Coin Control - - - - - Make payment - - - - - Balance transfer - - - - - Select Inputs - - - - - Automatically selected - - - - - Quantity: - - - - - Fee: - - - - - After Fee: - - - - - Bytes: - - - - - Priority: - - - - - LowOutput: - - - - - Change: - - - - - Custom change address - - - - - From account - - - - - PUBLIC - - - - - PRIVATE - - - - - Balance: - - - - - Ring Size: - - - - - To account - - - - - Pay to - - - - - (no label) - - - - - Catching up... downloaded 0 blocks of history... - - - - - Tor connection offline - - - - - i2p connection offline - - - - - Wallet is encrypted and currently locked - - - - - Not staking because wallet is locked - - - - - 0 active connection(s) to ShadowCash network - - - - - Wallet is syncing - - - - - Open chat list - - - - - Enter a label for this address to add it to your address book - - - - - Enter a address to add it to your address book - - - - - Inputs - - - - - Values - - - - - Outputs - - - - - Enter a ShadowCash address to sign the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to sign - - - - - Click sign message to generate signature - - - - - Copy the signed message signature - - - - - Enter a ShadowCash address to verify the message with (e.g. SaKYqfD8J3vw4RTnqtgk2K9B67CBaL3mhV) - - - - - Enter the message you want to verify - - - - - Enter a ShadowCash signature - - - - - Paste signature from clipboard - - - - - Your total balance - - - - - Balances overview - - - - - Recent in/out transactions or stakes - - - - - Select inputs to spend - - - - - Optional address to receive transaction change - - - - - Choose from address book - - - - - Paste address from clipboard - - - - - Remove this recipient - - - - - Send from public or private - - - - - Current spendable send payment balance - - - - - Send to public or private - - - - - Current spendable balance to account - - - - - The address transfer the balance to - - - - - The address to transfer the balance to - - - - - The label for this address - - - - - Amount to transfer - - - - - Send to multiple recipients at once - - - - - Date and time that the transaction was received. - - - - - Transaction status. Hover over this field to show number of confirmations. - - - - - Type of transaction. - - - - - Destination address of transaction. - - - - - Short payment note. - - - - - Amount removed from or added to balance. - - - - - The address to send the payment to (e.g. SXywGBZBowrppUwwNUo1GCRDTibzJi7g2M) - - - - - Choose address from address book - - - - - Enter a public key for the address above - - - - - Enter a label for this group - - - - - Name for this Wallet - - - - - Enter a password - - - - - Would you like to create a bip44 path? - - - - - Your recovery phrase (Keep this safe!) - - - - - Recovery Phrase - - - - - Wallet Name for recovered account - - - - - Enter the password for the wallet you are trying to recover - - - - - Is this a bip44 path? - - - - - ID - - - - - Created - - - - - Active Account - - - - - Default - - - - - Path - - - - - Active - - - - - Master - - - - - ShadowGUI - - - A fatal error occurred. Shadow can no longer continue safely and will quit. - - - - - - Umbra - - - - - Client - - - - - E&xit - - - - - Quit application - - - - - &About ShadowCoin - - - - - Show information about ShadowCoin - - - - - About &Qt - - - - - Show information about Qt - - - - - &Options... - - - - - Modify configuration options for ShadowCoin - - - - - &Show / Hide - - - - - &Encrypt Wallet... - - - - - Encrypt or decrypt wallet - - - - - &Backup Wallet... - - - - - Backup wallet to another location - - - - - &Change Passphrase... - - - - - Change the passphrase used for wallet encryption - - - - - &Unlock Wallet... - - - - - Unlock wallet - - - - - &Lock Wallet - - - - - Lock wallet - - - - - &Debug window - - - - - Open debugging and diagnostic console - - - - - &File - - - - - &Settings - - - - - &Help - - - - - Wallet - - - - - - [testnet] - - - - - - Umbra client - - - - - %n active connection(s) to ShadowCoin network - - - - - block - - - - - header - - - - - blocks - - - - - headers - - - - - - Synchronizing with network... - - - - - Downloading filtered blocks... - - - - - ~%1 filtered block(s) remaining (%2% done). - - - - - Importing blocks... - - - - - ~%n block(s) remaining - - - - - - Imported - - - - - - Downloaded - - - - - %1 of %2 %3 of transaction history (%4% done). - - - - - %1 blocks of transaction history. - - - - - %n second(s) ago - - - - - %n minute(s) ago - - - - - %n hour(s) ago - - - - - %n day(s) ago - - - - - Up to date - - - - - Catching up... - - - - - Last received %1 was generated %2. - - - - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - - Confirm transaction fee - - - - - Sent transaction - - - - - Incoming transaction - - - - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - - - - Incoming Message - - - - - Date: %1 -From Address: %2 -To Address: %3 -Message: %4 - - - - - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid ShadowCoin address or malformed URI parameters. - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> for staking only - - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - - - Wallet is <b>encrypted</b> and currently <b>locked</b> - - - - - Backup Wallet - - - - - Wallet Data (*.dat) - - - - - Backup Failed - - - - - There was an error trying to save the wallet data to the new location. - - - - - Lock Wallet - - - - - Error: Wallet must first be encrypted to be locked. - - - - - %n second(s) - - - - - %n minute(s) - - - - - %n hour(s) - - - - - %n day(s) - - - - - Staking. -Your weight is %1 -Network weight is %2 -Expected time to earn reward is %3 - - - - - Not staking because wallet is in thin mode - - - - - Not staking, staking is disabled - - - - - Not staking because wallet is locked - - - - - Not staking because wallet is offline - - - - - Not staking because wallet is syncing - - - - - Not staking because you don't have mature coins - - - - - Not staking - - - - - Received with - - - - - Received from - - - - - Sent to - - - - - Payment to yourself - - - - - Mined - - - - - Received shadow - - - - - Sent shadow - - - - - Other - - - - - TrafficGraphWidget - - - KB/s - - - - - TransactionDesc - - - Open until %1 - 要到 %1 才確定 - - - - Open for %n block(s) - - - - - conflicted - - - - - %1/offline - %1/離線中 - - - - %1/unconfirmed - %1/未確定 - - - - %1 confirmations - %1 次確認 - - - - Status - 狀態 - - - - , broadcast through %n node(s) - ,已公告給 %n 個節點 - - - - Date - 日期 - - - - Source - 來源 - - - - Generated - 生產出來 - - - - - - From - 來源 - - - - - - - To - 目的 - - - - - - - own address - 自己的位址 - - - - - label - 標記 - - - - - - - - Credit - 入帳 - - - - matures in %n more block(s) - 再等 %n 個區塊生出來後成熟 - - - - not accepted - 不被接受 - - - - - - - Debit - 出帳 - - - - Transaction fee - 交易手續費 - - - - Net amount - 淨額 - - - - Message - 訊息 - - - - Comment - 附註 - - - - Transaction ID - 交易識別碼 - - - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - - Debug information - 除錯資訊 - - - - Transaction - 交易 - - - - Inputs - 輸入 - - - - Amount - 金額 - - - - true - - - - - false - - - - - , has not been successfully broadcast yet - ,還沒成功公告出去 - - - - - unknown - 未知 - - - - TransactionDescDialog - - - Transaction details - 交易明細 - - - - This pane shows a detailed description of the transaction - 這個版面顯示這次交易的詳細說明 - - - - TransactionTableModel - - - Date - 日期 - - - - Type - 種類 - - - - Address - 位址 - - - - Amount - 金額 - - - - Open until %1 - 要到 %1 才確定 - - - - Confirmed (%1 confirmations) - 已確定(%1 次確認) - - - - Open for %n more block(s) - 再等 %n 個區塊生出來後才確定 - - - - Narration - - - - - Offline - - - - - Unconfirmed - - - - - Confirming (%1 of %2 recommended confirmations) - - - - - Conflicted - - - - - Immature (%1 confirmations, will be available after %2) - 未成熟(%1 次確認,會在 %2 次確認後可用) - - - - This block was not received by any other nodes and will probably not be accepted! - 沒有其他節點收到這個區塊,也許它不會被接受! - - - - Generated but not accepted - 生產出來但是不被接受 - - - - (n/a) - (不適用) - - - - Transaction status. Hover over this field to show number of confirmations. - 交易狀態。把游標停在欄位上會顯示確認次數。 - - - - Date and time that the transaction was received. - 收到交易的日期和時間。 - - - - Type of transaction. - 交易的種類。 - - - - Destination address of transaction. - 交易的目的地位址。 - - - - Amount removed from or added to balance. - 要減掉或加進餘額的金額。 - - - - WalletModel - - - - Sending... - - - - - bitcoin-core - - - ShadowCoin version - - - - - Usage: - 用法: - - - - Send command to -server or shadowcoind - - - - - List commands - 列出指令 - - - - Get help for a command - 取得指令說明 - - - - Options: - 選項: - - - - Specify configuration file (default: shadowcoin.conf) - - - - - Specify pid file (default: shadowcoind.pid) - - - - - Specify wallet file (within data directory) - 指定錢包檔(會在資料目錄中) - - - - Specify data directory - 指定資料目錄 - - - - Set database cache size in megabytes (default: 25) - 設定資料庫快取大小成多少百萬位元組(MB;預設值: 25) - - - - Set database disk log size in megabytes (default: 100) - - - - - Listen for connections on <port> (default: 51737 or testnet: 51997) - - - - - Maintain at most <n> connections to peers (default: 125) - 維持連線節點數的上限為 <n> 個(預設值: 125) - - - - Connect to a node to retrieve peer addresses, and disconnect - 連線到某個節點來取得其它節點的位址,然後斷線 - - - - Specify your own public address - 指定自己的公開位址 - - - - Bind to given address. Use [host]:port notation for IPv6 - - - - - Stake your coins to support network and gain reward (default: 1) - - - - - Threshold for disconnecting misbehaving peers (default: 100) - 把異常節點斷線的臨界值(預設值: 100) - - - - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - 拒絕跟異常節點連線的秒數(預設值: 86400) - - - - An error occurred while setting up the RPC port %u for listening on IPv4: %s - 設定在 IPv4 網路上以通訊埠 %u 聽取 RPC 連線時發生錯誤: %s - - - - Detach block and address databases. Increases shutdown time (default: 0) - - - - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - - - - - Listen for JSON-RPC connections on <port> (default: 51736 or testnet: 51996) - - - - - Accept command line and JSON-RPC commands - 接受指令列和 JSON-RPC 指令 - - - - - Error: Transaction creation failed - - - - - Error: Wallet locked, unable to create transaction - - - - - Importing blockchain data file. - - - - - Importing bootstrap blockchain data file. - - - - - Run in the background as a daemon and accept commands - 用護靈模式在背後執行並接受指令 - - - - Use the test network - 使用測試網路 - - - - Accept connections from outside (default: 1 if no -proxy or -connect) - 是否接受外來連線(預設值: 當沒有 -proxy 或 -connect 時為 1) - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - 設定在 IPv6 網路上以通訊埠 %u 聽候 RPC 連線失敗,退而改用 IPv4 網路: %s - - - - Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - 警告: -paytxfee 設定了很高的金額!這可是你交易付款所要付的手續費。 - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong ShadowCoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - 警告: 讀取錢包檔 wallet.dat 時發生錯誤!所有的密鑰都正確讀取了,但是交易資料或位址簿資料可能會缺少或不正確。 - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - 警告: 錢包檔 wallet.dat 壞掉,但資料被拯救回來了!原來的 wallet.dat 會改儲存在 %s, 檔名是 wallet.{timestamp}.bak. 如果餘額或交易資料有誤,你應該要用備份資料復原回來。 - - - - Attempt to recover private keys from a corrupt wallet.dat - 嘗試從壞掉的錢包檔 wallet.dat 復原密鑰 - - - - Block creation options: - 區塊製造選項: - - - - Connect only to the specified node(s) - 只連線到指定節點(可多個) - - - - Discover own IP address (default: 1 when listening and no -externalip) - 找出自己的網際網路位址(預設值: 當有聽候連線且沒有 -externalip 時為 1) - - - - Failed to listen on any port. Use -listen=0 if you want this. - 在任意的通訊埠聽候失敗。如果你希望這樣的話,可以設定 -listen=0. - - - - Find peers using DNS lookup (default: 1) - - - - - Sync checkpoints policy (default: strict) - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -reservebalance=<amount> - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - 每個連線的接收緩衝區大小上限為 <n>*1000 個位元組(預設值: 5000) - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - 每個連線的傳送緩衝區大小上限為 <n>*1000 位元組(預設值: 1000) - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - 只和 <net> 網路上的節點連線(IPv4, IPv6, 或 Tor) - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL 選項: (SSL 設定程序請見 Bitcoin Wiki) - - - - Select the version of socks proxy to use (4-5, default: 5) - - - - - Send trace/debug info to console instead of debug.log file - 在終端機顯示追蹤或除錯資訊,而不是寫到檔案 debug.log 中 - - - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - 設定區塊大小下限成多少位元組(預設值: 0) - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - 客戶端軟體啓動時把 debug.log 檔縮小(預設值: 當沒有 -debug 時為 1) - - - - Specify connection timeout in milliseconds (default: 5000) - 指定連線在幾毫秒後逾時(預設值: 5000) - - - - Unable to sign checkpoint, wrong checkpointkey? - - - - - - Use UPnP to map the listening port (default: 0) - 是否要使用通用即插即用(UPnP)協定,來設定聽候連線的通訊埠的對應(預設值: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - 是否要使用通用即插即用(UPnP)協定,來設定聽候連線的通訊埠的對應(預設值: 當有聽候連線時為 1) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - JSON-RPC 連線使用者名稱 - - - - Verifying database integrity... - - - - - WARNING: syncronized checkpoint violation detected, but skipped! - - - - - Warning: Disk space is low! - - - - - Warning: This version is obsolete, upgrade required! - 警告: 這個版本已經被淘汰了,必須要升級! - - - - wallet.dat corrupt, salvage failed - 錢包檔 weallet.dat 壞掉了,拯救失敗 - - - - Password for JSON-RPC connections - JSON-RPC 連線密碼 - - - - %s, you must set a rpcpassword in the configuration file: - %s -It is recommended you use the following random password: -rpcuser=shadowcoinrpc -rpcpassword=%s -(you do not need to remember this password) -The username and password MUST NOT be the same. -If the file does not exist, create it with owner-readable-only file permissions. -It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "ShadowCoin Alert" admin@foo.com - - - - - - Find peers using internet relay chat (default: 0) - - - - - Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - - - - - When creating transactions, ignore inputs with value less than this (default: 0.01) - - - - - Allow JSON-RPC connections from specified IP address - 允許指定的來源 IP 位址進行 JSON-RPC 連線 - - - - Send commands to node running on <ip> (default: 127.0.0.1) - 傳送指令給在 <ip> 的節點(預設值: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - 當最新區塊改變時要執行的指令(指令中的 %s 會被取代成區塊雜湊值) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - 當錢包有交易改變時要執行的指令(指令中的 %s 會被取代成交易識別碼) - - - - Require a confirmations for change (default: 0) - - - - - Enforce transaction scripts to use canonical PUSH operators (default: 1) - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Upgrade wallet to latest format - 把錢包檔案升級成最新的格式 - - - - Set key pool size to <n> (default: 100) - 設定密鑰池大小成 <n> (預設值: 100) - - - - Rescan the block chain for missing wallet transactions - 重新掃描區塊鏈,來尋找錢包可能漏掉的交易。 - - - - How many blocks to check at startup (default: 2500, 0 = all) - - - - - How thorough the block verification is (0-6, default: 1) - - - - - Imports blocks from external blk000?.dat file - - - - - Use OpenSSL (https) for JSON-RPC connections - 在 JSON-RPC 連線使用 OpenSSL (https) - - - - Server certificate file (default: server.cert) - 伺服器憑證檔(預設值: server.cert) - - - - Server private key (default: server.pem) - 伺服器私鑰檔(預設值: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - - Error: Wallet unlocked for staking only, unable to create transaction. - - - - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - - - - - This help message - 這些說明訊息 - - - - Wallet %s resides outside data directory %s. - - - - - Cannot obtain a lock on data directory %s. ShadowCoin is probably already running. - - - - - ShadowCoin - - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - 沒辦法和這台電腦上的 %s 繫結(回傳錯誤 %d, %s) - - - - Connect through socks proxy - - - - - Allow DNS lookups for -addnode, -seednode and -connect - 允許對 -addnode, -seednode, -connect 的參數使用域名查詢 - - - - Loading addresses... - 正在載入位址資料... - - - - Error loading blkindex.dat - - - - - Error loading wallet.dat: Wallet corrupted - 載入檔案 wallet.dat 時發生錯誤: 錢包損毀了 - - - - Error loading wallet.dat: Wallet requires newer version of ShadowCoin - - - - - Wallet needed to be rewritten: restart ShadowCoin to complete - - - - - Error loading wallet.dat - 載入錢包檔 wallet.dat 時發生錯誤 - - - - Invalid -proxy address: '%s' - 無效的 -proxy 位址: '%s' - - - - Unknown network specified in -onlynet: '%s' - 在 -onlynet 指定了不明的網路別: '%s' - - - - Unknown -socks proxy version requested: %i - 在 -socks 指定了不明的代理協定版本: %i - - - - Cannot resolve -bind address: '%s' - 沒辦法解析 -bind 位址: '%s' - - - - Cannot resolve -externalip address: '%s' - 沒辦法解析 -externalip 位址: '%s' - - - - Invalid amount for -paytxfee=<amount>: '%s' - 設定 -paytxfee=<金額> 的金額無效: '%s' - - - - Error: could not start node - - - - - Sending... - - - - - Invalid amount - 無效的金額 - - - - Insufficient funds - 累積金額不足 - - - - Loading block index... - 正在載入區塊索引... - - - - Add a node to connect to and attempt to keep the connection open - 增加一個要連線的節線,並試著保持對它的連線暢通 - - - - Unable to bind to %s on this computer. ShadowCoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - - Invalid amount for -mininput=<amount>: '%s' - - - - - Loading wallet... - 正在載入錢包資料... - - - - Cannot downgrade wallet - 沒辦法把錢包格式降級 - - - - Cannot initialize keypool - - - - - Cannot write default address - 沒辦法把預設位址寫進去 - - - - Rescanning... - 正在重新掃描... - - - - Done loading - 載入完成 - - - - To use the %s option - 為了要使用 %s 選項 - - - - Error - 錯誤 - - - - You must set rpcpassword=<password> in the configuration file: -%s -If the file does not exist, create it with owner-readable-only file permissions. - 你必須在以下設定檔中設定 RPC 密碼(rpcpassword=<password>): -%s -如果還沒有這個檔案,請在造出來的時候,設定檔案權限成只有主人才能讀取。 - - - \ No newline at end of file diff --git a/src/qt/macdockiconhandler.h b/src/qt/macdockiconhandler.h index b21a61cb07..7944316dcb 100644 --- a/src/qt/macdockiconhandler.h +++ b/src/qt/macdockiconhandler.h @@ -1,6 +1,9 @@ -// Copyright (c) 2011-2013 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT #ifndef MACDOCKICONHANDLER_H #define MACDOCKICONHANDLER_H diff --git a/src/qt/macdockiconhandler.mm b/src/qt/macdockiconhandler.mm index a2ff148d9d..fdd97d57d7 100644 --- a/src/qt/macdockiconhandler.mm +++ b/src/qt/macdockiconhandler.mm @@ -1,6 +1,9 @@ -// Copyright (c) 2011-2013 The Bitcoin Core developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT #include "macdockiconhandler.h" diff --git a/src/qt/macnotificationhandler.h b/src/qt/macnotificationhandler.h index bc335edede..67c8cd1e65 100644 --- a/src/qt/macnotificationhandler.h +++ b/src/qt/macnotificationhandler.h @@ -1,6 +1,9 @@ -// Copyright (c) 2011-2013 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT #ifndef MACNOTIFICATIONHANDLER_H #define MACNOTIFICATIONHANDLER_H diff --git a/src/qt/macnotificationhandler.mm b/src/qt/macnotificationhandler.mm index 8a4c94cc5c..ec9c72869e 100644 --- a/src/qt/macnotificationhandler.mm +++ b/src/qt/macnotificationhandler.mm @@ -1,6 +1,9 @@ -// Copyright (c) 2011-2013 The Bitcoin Core developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT #include "macnotificationhandler.h" diff --git a/src/qt/messagemodel.cpp b/src/qt/messagemodel.cpp deleted file mode 100644 index 990501f3c5..0000000000 --- a/src/qt/messagemodel.cpp +++ /dev/null @@ -1,628 +0,0 @@ -#include "guiutil.h" -#include "guiconstants.h" -#include "bitcoinunits.h" -#include "optionsmodel.h" -#include "walletmodel.h" -#include "messagemodel.h" -#include "addresstablemodel.h" - -#include "ui_interface.h" -#include "base58.h" -#include "json_spirit.h" -#include "init.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -Q_DECLARE_METATYPE(std::vector); - -QList ambiguous; /**< Specifies Ambiguous addresses */ - -const QString MessageModel::Sent = "S"; -const QString MessageModel::Received = "R"; - -struct MessageTableEntryLessThan -{ - bool operator()(const MessageTableEntry &a, const MessageTableEntry &b) const {return a.received_datetime < b.received_datetime;}; - bool operator()(const MessageTableEntry &a, const QDateTime &b) const {return a.received_datetime < b;} - bool operator()(const QDateTime &a, const MessageTableEntry &b) const {return a < b.received_datetime;} -}; - -// Private implementation -class MessageTablePriv -{ -public: - QList cachedMessageTable; - MessageModel *parent; - - MessageTablePriv(MessageModel *parent): - parent(parent) {} - - void refreshMessageTable() - { - cachedMessageTable.clear(); - - if (parent->getWalletModel()->getEncryptionStatus() == WalletModel::Locked) - // -- messages are stored encrypted, can't load them without the private keys - return; - - { - LOCK2(pwalletMain->cs_wallet, cs_smsgDB); - - SecMsgDB dbSmsg; - - if (!dbSmsg.Open("cr+")) - //throw runtime_error("Could not open DB."); - return; - - unsigned char chKey[18]; - std::vector vchKey; - vchKey.resize(18); - - SecMsgStored smsgStored; - MessageData msg; - QString label; - QString labelTo; - QString groupPrefix = QString::fromStdString("group_"); - QDateTime sent_datetime; - QDateTime received_datetime; - - std::string sPrefix("im"); - leveldb::Iterator* it = dbSmsg.pdb->NewIterator(leveldb::ReadOptions()); - while (dbSmsg.NextSmesg(it, sPrefix, chKey, smsgStored)) - { - uint32_t nPayload = smsgStored.vchMessage.size() - SMSG_HDR_LEN; - if (SecureMsgDecrypt(false, smsgStored.sAddrTo, &smsgStored.vchMessage[0], &smsgStored.vchMessage[SMSG_HDR_LEN], nPayload, msg) == 0) - { - if (fDebugSmsg) - LogPrintf("refreshMessageTable: secureMsgDecrypt succesful\n"); - - label = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(msg.sFromAddress)); - labelTo = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(smsgStored.sAddrTo)); //returns "" if not found. - - if (fDebugSmsg){ - LogPrintf("refreshMessageTable: addressTo: %s\n", smsgStored.sAddrTo); - LogPrintf("refreshMessageTable: addressFrom: %s\n", msg.sFromAddress); - } - - std::string publicKey; - int duplicateMessageFromOutBox = SecureMsgGetLocalPublicKey(msg.sFromAddress, publicKey); - - if((labelTo.startsWith(groupPrefix)) && (duplicateMessageFromOutBox == 0)) { - //a message has been received to our group but it was one of our own. Just don't process this at all. - if(fDebugSmsg) - LogPrintf("refreshMessageTable: groupchat message, but duplicate. Label: %s, LabelTo: %s, SecureMsgGetLocalPublicKey: %i\n", label.toStdString(), labelTo.toStdString(), duplicateMessageFromOutBox); - continue; - } else if(labelTo.startsWith(groupPrefix) && (duplicateMessageFromOutBox == 4)) { - //a message has been received to our group and it was NOT one of our own. Yet retrieving the public key of it was succesful. - if(fDebugSmsg) - LogPrintf("refreshMessageTable: grouchat message and it was not a duplicate. Label: %s, LabelTo: %s, SecureMsgGetLocalPublicKey: %i\n", label.toStdString(), labelTo.toStdString(), duplicateMessageFromOutBox); - } else { - if(fDebugSmsg) - LogPrintf("refreshMessageTable: not groupchat. Label: %s, LabelTo: %s, SecureMsgGetLocalPublicKey: %i\n", label.toStdString(), labelTo.toStdString(), duplicateMessageFromOutBox); - } - - sent_datetime .setTime_t(msg.timestamp); - received_datetime.setTime_t(smsgStored.timeReceived); - - memcpy(&vchKey[0], chKey, 18); - - addMessageEntry(MessageTableEntry(vchKey, - MessageTableEntry::Received, - label, - labelTo, - QString::fromStdString(smsgStored.sAddrTo), - QString::fromStdString(msg.sFromAddress), - sent_datetime, - received_datetime, - !(smsgStored.status & SMSG_MASK_UNREAD), - (char*)&msg.vchMessage[0]), - true); - } - }; - - delete it; - - sPrefix = "sm"; - it = dbSmsg.pdb->NewIterator(leveldb::ReadOptions()); - while (dbSmsg.NextSmesg(it, sPrefix, chKey, smsgStored)) - { - uint32_t nPayload = smsgStored.vchMessage.size() - SMSG_HDR_LEN; - if (SecureMsgDecrypt(false, smsgStored.sAddrOutbox, &smsgStored.vchMessage[0], &smsgStored.vchMessage[SMSG_HDR_LEN], nPayload, msg) == 0) - { - label = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(smsgStored.sAddrTo)); - labelTo = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(msg.sFromAddress)); - - if(fDebugSmsg) - LogPrintf("refreshMessageTable: sendMessage: label: %s, labelTo: %s\n", label.toStdString(), labelTo.toStdString()); - - sent_datetime .setTime_t(msg.timestamp); - received_datetime.setTime_t(smsgStored.timeReceived); - - memcpy(&vchKey[0], chKey, 18); - - addMessageEntry(MessageTableEntry(vchKey, - MessageTableEntry::Sent, - label, - labelTo, - QString::fromStdString(smsgStored.sAddrTo), - QString::fromStdString(msg.sFromAddress), - sent_datetime, - received_datetime, - !(smsgStored.status & SMSG_MASK_UNREAD), - (char*)&msg.vchMessage[0]), - true); - } - }; - - delete it; - } - } - - void newMessage(const SecMsgStored& inboxHdr) - { - // we have to copy it, because it doesn't like constants going into Decrypt - SecMsgStored smsgStored = inboxHdr; - MessageData msg; - QString label; - QString labelTo; - QString groupPrefix = QString::fromStdString("group_"); - QDateTime sent_datetime; - QDateTime received_datetime; - - uint32_t nPayload = smsgStored.vchMessage.size() - SMSG_HDR_LEN; - if (SecureMsgDecrypt(false, smsgStored.sAddrTo, &smsgStored.vchMessage[0], &smsgStored.vchMessage[SMSG_HDR_LEN], nPayload, msg) == 0) - { - label = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(msg.sFromAddress)); - labelTo = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(smsgStored.sAddrTo)); //returns "" if not found. - - if(fDebugSmsg) - LogPrintf("newMessage: secureMsgDecrypt succesful\n"); - LogPrintf("newMessage: addressTo: %s\n", smsgStored.sAddrTo); - - std::string publicKey; - int duplicateMessageFromOutBox = SecureMsgGetLocalPublicKey(msg.sFromAddress, publicKey); - - if((labelTo.startsWith(groupPrefix)) && (duplicateMessageFromOutBox == 0)) { - //a message has been received to our group but it was one of our own. Just don't process this at all. - //MAY CAUSE LOOP? - if(fDebugSmsg) - LogPrintf("newMessage: groupchat message, but duplicate."); - return; - } else if(labelTo.startsWith(groupPrefix) && (duplicateMessageFromOutBox == 4)) { - //a message has been received to our group and it was NOT one of our own. Yet retrieving the public key of it was succesful. - if(fDebugSmsg) - LogPrintf("newMessage: grouchat message and it was not a duplicate. Label: %s, LabelTo: %s, SecureMsgGetLocalPublicKey: %i\n", label.toStdString(), labelTo.toStdString(), duplicateMessageFromOutBox); - } else { - if(fDebugSmsg) - LogPrintf("newMessage: not groupchat. Label: %s, LabelTo: %s, SecureMsgGetLocalPublicKey: %i\n", label.toStdString(), labelTo.toStdString(), duplicateMessageFromOutBox); - } - - sent_datetime .setTime_t(msg.timestamp); - received_datetime.setTime_t(smsgStored.timeReceived); - - std::string sPrefix("im"); - SecureMessage* psmsg = (SecureMessage*) &smsgStored.vchMessage[0]; - - std::vector vchKey; - vchKey.resize(18); - memcpy(&vchKey[0], sPrefix.data(), 2); - memcpy(&vchKey[2], &psmsg->timestamp, 8); - memcpy(&vchKey[10], &smsgStored.vchMessage[SMSG_HDR_LEN], 8); // sample - - addMessageEntry(MessageTableEntry(vchKey, - MessageTableEntry::Received, - label, - labelTo, - QString::fromStdString(smsgStored.sAddrTo), - QString::fromStdString(msg.sFromAddress), - sent_datetime, - received_datetime, - !(smsgStored.status & SMSG_MASK_UNREAD), - (char*)&msg.vchMessage[0]), - false); - } - } - - void newOutboxMessage(const SecMsgStored& outboxHdr) - { - - SecMsgStored smsgStored = outboxHdr; - MessageData msg; - QString label; - QString labelTo; - QDateTime sent_datetime; - QDateTime received_datetime; - - uint32_t nPayload = smsgStored.vchMessage.size() - SMSG_HDR_LEN; - if (SecureMsgDecrypt(false, smsgStored.sAddrOutbox, &smsgStored.vchMessage[0], &smsgStored.vchMessage[SMSG_HDR_LEN], nPayload, msg) == 0) - { - label = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(smsgStored.sAddrTo)); - labelTo = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(msg.sFromAddress)); - - if(fDebugSmsg) - LogPrintf("newOutboxMessage: Label: %s, LabelTo: %s\n", label.toStdString(), labelTo.toStdString()); - - sent_datetime .setTime_t(msg.timestamp); - received_datetime.setTime_t(smsgStored.timeReceived); - - std::string sPrefix("sm"); - SecureMessage* psmsg = (SecureMessage*) &smsgStored.vchMessage[0]; - std::vector vchKey; - vchKey.resize(18); - memcpy(&vchKey[0], sPrefix.data(), 2); - memcpy(&vchKey[2], &psmsg->timestamp, 8); - memcpy(&vchKey[10], &smsgStored.vchMessage[SMSG_HDR_LEN], 8); // sample - - addMessageEntry(MessageTableEntry(vchKey, - MessageTableEntry::Sent, - label, - labelTo, - QString::fromStdString(smsgStored.sAddrTo), - QString::fromStdString(msg.sFromAddress), - sent_datetime, - received_datetime, - !(smsgStored.status & SMSG_MASK_UNREAD), - (char*)&msg.vchMessage[0]), - false); - } - } - - bool markAsRead(const int& idx) - { - MessageTableEntry *rec = index(idx); - - if(!rec || rec->read) - // Can only mark one row at a time, and cannot mark rows not in model. - return false; - - { - LOCK(cs_smsgDB); - SecMsgDB dbSmsg; - - if (!dbSmsg.Open("cr+")) - //throw runtime_error("Could not open DB."); - return false; - - SecMsgStored smsgStored; - dbSmsg.ReadSmesg(&rec->chKey[0], smsgStored); - - smsgStored.status &= ~SMSG_MASK_UNREAD; - dbSmsg.WriteSmesg(&rec->chKey[0], smsgStored); - rec->read = !(smsgStored.status & SMSG_MASK_UNREAD); - } - - return true; - }; - - MessageTableEntry *index(int idx) - { - if(idx >= 0 && idx < cachedMessageTable.size()) - return &cachedMessageTable[idx]; - else - return 0; - } - -private: - // Get the json value - const json_spirit::mValue & find_value(json_spirit::mObject & obj, const char * key) - { - std::string newKey = key; - - json_spirit::mObject::const_iterator i = obj.find(newKey); - - if(i != obj.end() && i->first == newKey) - return i->second; - else - return json_spirit::mValue::null; - } - - const std::string get_value(json_spirit::mObject & obj, const char * key) - { - json_spirit::mValue val = find_value(obj, key); - - if(val.is_null()) - return ""; - else - return val.get_str(); - } - - // Determine if it is a special message, i.e.: Invoice, Receipt, etc... - void handleMessageEntry(const MessageTableEntry & message, const bool append) - { - addMessageEntry(message, append); - json_spirit::mValue mVal; - json_spirit::read(message.message.toStdString(), mVal); - - if(mVal.is_null()) - { - addMessageEntry(message, append); - return; - } - - json_spirit::mObject mObj(mVal.get_obj()); - json_spirit::mValue mvType = find_value(mObj, "type"); - - } - - void addMessageEntry(const MessageTableEntry & message, const bool & append) - { - if(append) - { - cachedMessageTable.append(message); - } else - { - int index = qLowerBound(cachedMessageTable.begin(), cachedMessageTable.end(), message.received_datetime, MessageTableEntryLessThan()) - cachedMessageTable.begin(); - parent->beginInsertRows(QModelIndex(), index, index); - cachedMessageTable.insert( - index, - message); - parent->endInsertRows(); - } - } - -}; - -MessageModel::MessageModel(CWallet *wallet, WalletModel *walletModel, QObject *parent) : - QAbstractTableModel(parent), wallet(wallet), walletModel(walletModel), optionsModel(0), priv(0) -{ - columns << tr("Type") << tr("Sent Date Time") << tr("Received Date Time") << tr("Label") << tr("To Address") << tr("From Address") << tr("Message"); - - optionsModel = walletModel->getOptionsModel(); - - priv = new MessageTablePriv(this); - priv->refreshMessageTable(); - - subscribeToCoreSignals(); -} - -MessageModel::~MessageModel() -{ - delete priv; - unsubscribeFromCoreSignals(); -} - -WalletModel *MessageModel::getWalletModel() -{ - return walletModel; -} - -OptionsModel *MessageModel::getOptionsModel() -{ - return optionsModel; -} - -MessageModel::StatusCode MessageModel::sendMessage(const QString &address, const QString &message, const QString &addressFrom) -{ - if(!walletModel->validateAddress(address)) - return InvalidAddress; - - if(message == "") - return MessageCreationFailed; - - std::string sendTo = address.toStdString(); - std::string msg = message.toStdString(); - std::string from = addressFrom.toStdString(); - - std::string sError; - if (SecureMsgSend(from, sendTo, msg, sError) != 0) - { - QMessageBox::warning(NULL, tr("Send Secure Message"), - tr("Send failed: %1.").arg(sError.c_str()), - QMessageBox::Ok, QMessageBox::Ok); - - return FailedErrorShown; - }; - - return OK; -} - -QVariant MessageModel::data(const QModelIndex &index, int role) const -{ - if(!index.isValid()) - return QVariant(); - - MessageTableEntry *rec = static_cast(index.internalPointer()); - - switch(role) - { - - case Qt::DisplayRole: - switch(index.column()) - { - case Label: return (rec->label.isEmpty() ? tr("(no label)") : rec->label); - case LabelTo: return (rec->labelTo.isEmpty() ? tr("(no label)") : rec->labelTo); - case ToAddress: return rec->to_address; - case FromAddress: return rec->from_address; - case SentDateTime: return rec->sent_datetime; - case ReceivedDateTime: return rec->received_datetime; - case Message: return rec->message; - case Read: return rec->read; - case TypeInt: return rec->type; - case HTML: return rec->received_datetime.toString() + "
" + (rec->label.isEmpty() ? rec->from_address : rec->label) + "
" + rec->message; - case Type: - switch(rec->type) - { - case MessageTableEntry::Sent: return Sent; - case MessageTableEntry::Received: return Received; - default: break; - } - case Key: return (rec->type == MessageTableEntry::Sent ? Sent : Received) + rec->from_address + QString::number(rec->sent_datetime.toTime_t()); - } - break; - - case Qt::EditRole: - if(index.column() == Key) - return (rec->type == MessageTableEntry::Sent ? Sent : Received) + rec->from_address + QString::number(rec->sent_datetime.toTime_t()); - break; - - case KeyRole: return QVariant::fromValue(rec->chKey); - case TypeRole: return rec->type; - case SentDateRole: return rec->sent_datetime; - case ReceivedDateRole: return rec->received_datetime; - case FromAddressRole: return rec->from_address; - case ToAddressRole: return rec->to_address; - case FilterAddressRole: return (rec->type == MessageTableEntry::Sent ? rec->to_address + rec->from_address : rec->from_address + rec->to_address); - case LabelRole: return rec->label; - case MessageRole: return rec->message; - case ShortMessageRole: return rec->message; // TODO: Short message - case ReadRole: return rec->read; - case HTMLRole: return rec->received_datetime.toString() + "
" + (rec->label.isEmpty() ? rec->from_address : rec->label) + "
" + rec->message; - case Ambiguous: - int it; - - for (it = 0; ittype == MessageTableEntry::Sent ? rec->to_address + rec->from_address : rec->from_address + rec->to_address)) - return false; - } - QString address = (rec->type == MessageTableEntry::Sent ? rec->to_address + rec->from_address : rec->from_address + rec->to_address); - ambiguous.append(address); - - return "true"; - break; - } - - return QVariant(); -} - -QVariant MessageModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - return (orientation == Qt::Horizontal && role == Qt::DisplayRole ? columns[section] : QVariant()); -} - -Qt::ItemFlags MessageModel::flags(const QModelIndex & index) const -{ - if(index.isValid()) - return Qt::ItemIsSelectable | Qt::ItemIsEnabled; - - return 0; -} - -QModelIndex MessageModel::index(int row, int column, const QModelIndex & parent) const -{ - Q_UNUSED(parent); - MessageTableEntry *data = priv->index(row); - return (data ? createIndex(row, column, priv->index(row)) : QModelIndex()); -} - -bool MessageModel::removeRows(int row, int count, const QModelIndex & parent) -{ - MessageTableEntry *rec = priv->index(row); - if(count != 1 || !rec) - // Can only remove one row at a time, and cannot remove rows not in model. - return false; - - { - LOCK(cs_smsgDB); - SecMsgDB dbSmsg; - - if (!dbSmsg.Open("cr+")) - //throw runtime_error("Could not open DB."); - return false; - - dbSmsg.EraseSmesg(&rec->chKey[0]); - } - - beginRemoveRows(parent, row, row); - priv->cachedMessageTable.removeAt(row); - endRemoveRows(); - - return true; -} - -int MessageModel::rowCount(const QModelIndex &parent) const -{ - return priv->cachedMessageTable.length(); -} - -int MessageModel::columnCount(const QModelIndex &parent) const -{ - return columns.length(); -} - -void MessageModel::resetFilter() -{ - ambiguous.clear(); -} - -void MessageModel::newMessage(const SecMsgStored &smsg) -{ - priv->newMessage(smsg); -} - - -void MessageModel::newOutboxMessage(const SecMsgStored &smsgOutbox) -{ - priv->newOutboxMessage(smsgOutbox); -} - -void MessageModel::setEncryptionStatus(int status) -{ - // We're only interested in NotifySecMsgWalletUnlocked when unlocked, as its called after new messagse are processed - if(status == WalletModel::Unlocked && QObject::sender()!=NULL) - return; - - priv->refreshMessageTable(); - - reset(); // reload table view -} - -bool MessageModel::markMessageAsRead(const QString &key) const -{ - return priv->markAsRead(lookupMessage(key)); -} - -int MessageModel::lookupMessage(const QString &key) const -{ - QModelIndexList lst = match(index(0, Key, QModelIndex()), Qt::EditRole, key, 1, Qt::MatchExactly); - if(lst.isEmpty()) - return -1; - else - return lst.at(0).row(); -} - -static void NotifySecMsgInbox(MessageModel *messageModel, SecMsgStored inboxHdr) -{ - // Too noisy: LogPrintf("NotifySecMsgInboxChanged %s\n", message); - QMetaObject::invokeMethod(messageModel, "newMessage", Qt::QueuedConnection, - Q_ARG(SecMsgStored, inboxHdr)); -} - -static void NotifySecMsgOutbox(MessageModel *messageModel, SecMsgStored outboxHdr) -{ - QMetaObject::invokeMethod(messageModel, "newOutboxMessage", Qt::QueuedConnection, - Q_ARG(SecMsgStored, outboxHdr)); -} - -static void NotifySecMsgWallet(MessageModel *messageModel) -{ - messageModel->setEncryptionStatus(WalletModel::Unlocked); -} - -void MessageModel::subscribeToCoreSignals() -{ - qRegisterMetaType("SecMsgStored"); - - // Connect signals - NotifySecMsgInboxChanged.connect(boost::bind(NotifySecMsgInbox, this, _1)); - NotifySecMsgOutboxChanged.connect(boost::bind(NotifySecMsgOutbox, this, _1)); - NotifySecMsgWalletUnlocked.connect(boost::bind(NotifySecMsgWallet, this)); - - connect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SLOT(setEncryptionStatus(int))); -} - -void MessageModel::unsubscribeFromCoreSignals() -{ - // Disconnect signals - NotifySecMsgInboxChanged.disconnect(boost::bind(NotifySecMsgInbox, this, _1)); - NotifySecMsgOutboxChanged.disconnect(boost::bind(NotifySecMsgOutbox, this, _1)); - NotifySecMsgWalletUnlocked.disconnect(boost::bind(NotifySecMsgWallet, this)); - - disconnect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SLOT(setEncryptionStatus(int))); -} diff --git a/src/qt/messagemodel.h b/src/qt/messagemodel.h deleted file mode 100644 index 78596d374b..0000000000 --- a/src/qt/messagemodel.h +++ /dev/null @@ -1,187 +0,0 @@ -#ifndef MESSAGEMODEL_H -#define MESSAGEMODEL_H - -#include "uint256.h" - -#include -#include "allocators.h" /* for SecureString */ -#include "smessage.h" -#include -#include -#include -#include - - -class MessageTablePriv; -class InvoiceTableModel; -class InvoiceItemTableModel; -class ReceiptTableModel; -class CWallet; -class WalletModel; -class OptionsModel; - -struct MessageTableEntry -{ - enum Type { - Sent, - Received - }; - - std::vector chKey; - Type type; - QString label; - QString labelTo; - QString to_address; - QString from_address; - QDateTime sent_datetime; - QDateTime received_datetime; - bool read; - QString message; - - MessageTableEntry() {} - MessageTableEntry(std::vector &chKey, - Type type, - const QString &label, - const QString &labelTo, - const QString &to_address, - const QString &from_address, - const QDateTime &sent_datetime, - const QDateTime &received_datetime, - const bool &read, - const QString &message): - chKey(chKey), - type(type), - label(label), - labelTo(labelTo), - to_address(to_address), - from_address(from_address), - sent_datetime(sent_datetime), - received_datetime(received_datetime), - read(read), - message(message) - { - } -}; - -/** Interface to ShadowCoin Secure Messaging from Qt view code. */ -class MessageModel : public QAbstractTableModel -{ - Q_OBJECT - -public: - explicit MessageModel(CWallet *wallet, WalletModel *walletModel, QObject *parent = 0); - ~MessageModel(); - - enum StatusCode // Returned by sendMessages - { - OK, - InvalidAddress, - InvalidMessage, - DuplicateAddress, - MessageCreationFailed, // Error returned when DB is still locked - MessageCommitFailed, - Aborted, - FailedErrorShown - }; - - enum ColumnIndex { - Type = 0, /**< Sent/Received */ - SentDateTime = 1, /**< Time Sent */ - ReceivedDateTime = 2, /**< Time Received */ - Label = 3, /**< User specified label */ - ToAddress = 4, /**< To Bitcoin address */ - FromAddress = 5, /**< From Bitcoin address */ - Message = 6, /**< Plaintext */ - Read = 7, /**< Plaintext */ - TypeInt = 8, /**< Plaintext */ - Key = 9, /**< chKey */ - HTML = 10, /**< HTML Formatted Data */ - LabelTo = 11, - }; - - /** Roles to get specific information from a message row. - These are independent of column. - */ - enum RoleIndex { - /** Type of message */ - TypeRole = Qt::UserRole, - /** message key */ - KeyRole, - /** Date and time this message was sent */ - SentDateRole, - /** Date and time this message was received */ - ReceivedDateRole, - /** From Address of message */ - FromAddressRole, - /** To Address of message */ - ToAddressRole, - /** Filter address related to message */ - FilterAddressRole, - /** Label of address related to message */ - LabelRole, - /** Full Message */ - MessageRole, - /** Short Message */ - ShortMessageRole, - /** Message Read */ - ReadRole, - /** HTML Formatted */ - HTMLRole, - /** Ambiguous bool */ - Ambiguous - }; - - static const QString Sent; /**< Specifies sent message */ - static const QString Received; /**< Specifies sent message */ - - //QList ambiguous; /**< Specifies Ambiguous addresses */ - - /** @name Methods overridden from QAbstractTableModel - @{*/ - int rowCount(const QModelIndex &parent) const; - int columnCount(const QModelIndex &parent) const; - QVariant data(const QModelIndex &index, int role) const; - QVariant headerData(int section, Qt::Orientation orientation, int role) const; - QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; - bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()); - Qt::ItemFlags flags(const QModelIndex & index) const; - /*@}*/ - - - /* Mark message as read - */ - bool markMessageAsRead(const QString &key) const; - /* Look up row index of a message in the model. - Return -1 if not found. - */ - int lookupMessage(const QString &key) const; - - WalletModel *getWalletModel(); - OptionsModel *getOptionsModel(); - - void resetFilter(); - - StatusCode sendMessage(const QString &address, const QString &message, const QString &addressFrom); - -private: - CWallet *wallet; - WalletModel *walletModel; - OptionsModel *optionsModel; - MessageTablePriv *priv; - QStringList columns; - - void subscribeToCoreSignals(); - void unsubscribeFromCoreSignals(); - -public slots: - - /* Check for new messages */ - void newMessage(const SecMsgStored& smsg); - void newOutboxMessage(const SecMsgStored& smsg); - - void setEncryptionStatus(int status); - - friend class MessageTablePriv; -}; - -#endif // MESSAGEMODEL_H diff --git a/src/qt/monitoreddatamapper.cpp b/src/qt/monitoreddatamapper.cpp index 88948d07bf..a208feea52 100644 --- a/src/qt/monitoreddatamapper.cpp +++ b/src/qt/monitoreddatamapper.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "monitoreddatamapper.h" #include diff --git a/src/qt/monitoreddatamapper.h b/src/qt/monitoreddatamapper.h index 33a874e73a..dae3eb80eb 100644 --- a/src/qt/monitoreddatamapper.h +++ b/src/qt/monitoreddatamapper.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef MONITOREDDATAMAPPER_H #define MONITOREDDATAMAPPER_H diff --git a/src/qt/notificator.cpp b/src/qt/notificator.cpp index 3d588cd317..e70af5b788 100644 --- a/src/qt/notificator.cpp +++ b/src/qt/notificator.cpp @@ -1,6 +1,9 @@ -// Copyright (c) 2011-2013 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT #include "notificator.h" @@ -22,7 +25,7 @@ // This affects at least OSX 10.6. See /usr/include/AssertMacros.h for details. // Note: This could also be worked around using: // #define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS #include #include "macnotificationhandler.h" #endif @@ -55,27 +58,11 @@ Notificator::Notificator(const QString &programName, QSystemTrayIcon *trayicon, mode = Freedesktop; } #endif -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS // check if users OS has support for NSUserNotification if( MacNotificationHandler::instance()->hasUserNotificationCenterSupport()) { mode = UserNotificationCenter; } - else { - // Check if Growl is installed (based on Qt's tray icon implementation) - CFURLRef cfurl; - OSStatus status = LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator, CFSTR("growlTicket"), kLSRolesAll, 0, &cfurl); - if (status != kLSApplicationNotFoundErr) { - CFBundleRef bundle = CFBundleCreate(0, cfurl); - if (CFStringCompare(CFBundleGetIdentifier(bundle), CFSTR("com.Growl.GrowlHelperApp"), kCFCompareCaseInsensitive | kCFCompareBackwards) == kCFCompareEqualTo) { - if (CFStringHasSuffix(CFURLGetString(cfurl), CFSTR("/Growl.app/"))) - mode = Growl13; - else - mode = Growl12; - } - CFRelease(cfurl); - CFRelease(bundle); - } - } #endif } @@ -240,53 +227,7 @@ void Notificator::notifySystray(Class cls, const QString &title, const QString & } // Based on Qt's tray icon implementation -#ifdef Q_OS_MAC -void Notificator::notifyGrowl(Class cls, const QString &title, const QString &text, const QIcon &icon) -{ - const QString script( - "tell application \"%5\"\n" - " set the allNotificationsList to {\"Notification\"}\n" // -- Make a list of all the notification types (all) - " set the enabledNotificationsList to {\"Notification\"}\n" // -- Make a list of the notifications (enabled) - " register as application \"%1\" all notifications allNotificationsList default notifications enabledNotificationsList\n" // -- Register our script with Growl - " notify with name \"Notification\" title \"%2\" description \"%3\" application name \"%1\"%4\n" // -- Send a Notification - "end tell" - ); - - QString notificationApp(QApplication::applicationName()); - if (notificationApp.isEmpty()) - notificationApp = "Application"; - - QPixmap notificationIconPixmap; - if (icon.isNull()) { // If no icon specified, set icon based on class - QStyle::StandardPixmap sicon = QStyle::SP_MessageBoxQuestion; - switch (cls) - { - case Information: sicon = QStyle::SP_MessageBoxInformation; break; - case Warning: sicon = QStyle::SP_MessageBoxWarning; break; - case Critical: sicon = QStyle::SP_MessageBoxCritical; break; - } - notificationIconPixmap = QApplication::style()->standardPixmap(sicon); - } - else { - QSize size = icon.actualSize(QSize(48, 48)); - notificationIconPixmap = icon.pixmap(size); - } - - QString notificationIcon; - QTemporaryFile notificationIconFile; - if (!notificationIconPixmap.isNull() && notificationIconFile.open()) { - QImageWriter writer(¬ificationIconFile, "PNG"); - if (writer.write(notificationIconPixmap.toImage())) - notificationIcon = QString(" image from location \"file://%1\"").arg(notificationIconFile.fileName()); - } - - QString quotedTitle(title), quotedText(text); - quotedTitle.replace("\\", "\\\\").replace("\"", "\\"); - quotedText.replace("\\", "\\\\").replace("\"", "\\"); - QString growlApp(this->mode == Notificator::Growl13 ? "Growl" : "GrowlHelperApp"); - MacNotificationHandler::instance()->sendAppleScript(script.arg(notificationApp, quotedTitle, quotedText, notificationIcon, growlApp)); -} - +#ifdef Q_OS_MACOS void Notificator::notifyMacUserNotificationCenter(Class cls, const QString &title, const QString &text, const QIcon &icon) { // icon is not supported by the user notification center yet. OSX will use the app icon. MacNotificationHandler::instance()->showNotification(title, text); @@ -306,14 +247,10 @@ void Notificator::notify(Class cls, const QString &title, const QString &text, c case QSystemTray: notifySystray(cls, title, text, icon, millisTimeout); break; -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS case UserNotificationCenter: notifyMacUserNotificationCenter(cls, title, text, icon); break; - case Growl12: - case Growl13: - notifyGrowl(cls, title, text, icon); - break; #endif default: if(cls == Critical) diff --git a/src/qt/notificator.h b/src/qt/notificator.h index bc3b9e9d1a..7ad4895b76 100644 --- a/src/qt/notificator.h +++ b/src/qt/notificator.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef NOTIFICATOR_H #define NOTIFICATOR_H @@ -51,8 +58,6 @@ public slots: None, /**< Ignore informational notifications, and show a modal pop-up dialog for Critical notifications. */ Freedesktop, /**< Use DBus org.freedesktop.Notifications */ QSystemTray, /**< Use QSystemTray::showMessage */ - Growl12, /**< Use the Growl 1.2 notification system (Mac only) */ - Growl13, /**< Use the Growl 1.3 notification system (Mac only) */ UserNotificationCenter /**< Use the 10.8+ User Notification Center (Mac only) */ }; QString programName; @@ -64,8 +69,7 @@ public slots: void notifyDBus(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout); #endif void notifySystray(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout); -#ifdef Q_OS_MAC - void notifyGrowl(Class cls, const QString &title, const QString &text, const QIcon &icon); +#ifdef Q_OS_MACOS void notifyMacUserNotificationCenter(Class cls, const QString &title, const QString &text, const QIcon &icon); #endif }; diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index 19525ab5e4..132ef563b4 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -1,11 +1,18 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "optionsmodel.h" #include "bitcoinunits.h" #include -#include "init.h" -#include "walletdb.h" +#include "init/init.h" +#include "wallet/walletdb.h" #include "guiutil.h" -#include "ringsig.h" +#include "anon/ringsig.h" OptionsModel::OptionsModel(QObject *parent) : QAbstractListModel(parent) @@ -13,63 +20,48 @@ OptionsModel::OptionsModel(QObject *parent) : Init(); } -bool static ApplyProxySettings() +void OptionsModel::Init() { QSettings settings; - CService addrProxy(settings.value("addrProxy", "127.0.0.1:9050").toString().toStdString()); - if (!settings.value("fUseProxy", false).toBool()) { - addrProxy = CService(); - return false; + int nSettingsVersion = settings.value("nSettingsVersion", 0).toInt(); + if (nSettingsVersion < 1) { + settings.clear(); + settings.setValue("nSettingsVersion", 1); } - if (!addrProxy.IsValid()) - return false; - if (!IsLimited(NET_IPV4)) - SetProxy(NET_IPV4, addrProxy); - if (!IsLimited(NET_IPV6)) - SetProxy(NET_IPV6, addrProxy); - SetNameProxy(addrProxy); - return true; -} - -void OptionsModel::Init() -{ - QSettings settings; // These are Qt-only settings: - nDisplayUnit = settings.value("nDisplayUnit", BitcoinUnits::SDC).toInt(); + //nDisplayUnit = settings.value("nDisplayUnit", BitcoinUnits::ALIAS).toInt(); + nDisplayUnit = BitcoinUnits::ALIAS; bDisplayAddresses = settings.value("bDisplayAddresses", false).toBool(); fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool(); fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool(); - nTransactionFee = settings.value("nTransactionFee").toLongLong(); + nTransactionFee = settings.value("nTransactionFee").toLongLong() >= nMinTxFee ? settings.value("nTransactionFee").toLongLong() : nMinTxFee; nReserveBalance = settings.value("nReserveBalance").toLongLong(); language = settings.value("language", "").toString(); nRowsPerPage = settings.value("nRowsPerPage", 20).toInt(); notifications = settings.value("notifications", "*").toStringList(); visibleTransactions = settings.value("visibleTransactions", "*").toStringList(); fAutoRingSize = settings.value("fAutoRingSize", false).toBool(); - fAutoRedeemShadow = settings.value("fAutoRedeemShadow", false).toBool(); + fAutoRedeemSpectre = settings.value("fAutoRedeemSpectre", false).toBool(); nMinRingSize = settings.value("nMinRingSize", MIN_RING_SIZE).toInt(); - nMaxRingSize = settings.value("nMaxRingSize", MAX_RING_SIZE).toInt(); + nMaxRingSize = settings.value("nMaxRingSize", MIN_RING_SIZE).toInt(); // These are shared with core Bitcoin; we want // command-line options to override the GUI settings: - if (settings.contains("fUseUPnP")) - SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool()); - if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool()) - SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString()); - if (settings.contains("nSocksVersion") && settings.value("fUseProxy").toBool()) - SoftSetArg("-socks", settings.value("nSocksVersion").toString().toStdString()); if (settings.contains("detachDB")) SoftSetBoolArg("-detachdb", settings.value("detachDB").toBool()); if (!language.isEmpty()) SoftSetArg("-lang", language.toStdString()); if (settings.contains("fStaking")) + { SoftSetBoolArg("-staking", settings.value("fStaking").toBool()); + fIsStakingEnabled = settings.value("fStaking").toBool(); + } if (settings.contains("nMinStakeInterval")) SoftSetArg("-minstakeinterval", settings.value("nMinStakeInterval").toString().toStdString()); - if (settings.contains("fSecMsgEnabled")) - SoftSetBoolArg("-nosmsg", !settings.value("fSecMsgEnabled").toBool()); + if (settings.contains("nStakingDonation")) + SoftSetArg("-stakingdonation", settings.value("nStakingDonation").toString().toStdString()); if (settings.contains("fThinMode")) SoftSetBoolArg("-thinmode", settings.value("fThinMode").toBool()); if (settings.contains("fThinFullIndex")) @@ -94,28 +86,8 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const return GUIUtil::GetStartOnSystemStartup(); case MinimizeToTray: return fMinimizeToTray; - case MapPortUPnP: - return settings.value("fUseUPnP", GetBoolArg("-upnp", true)); case MinimizeOnClose: return fMinimizeOnClose; - case ProxyUse: - return settings.value("fUseProxy", false); - case ProxyIP: { - proxyType proxy; - if (GetProxy(NET_IPV4, proxy)) - return QString::fromStdString(proxy.ToStringIP()); - else - return ""; - } - case ProxyPort: { - proxyType proxy; - if (GetProxy(NET_IPV4, proxy)) - return QVariant(proxy.GetPort()); - } - break; - - case ProxySocksVersion: - return settings.value("nSocksVersion", 5); case Fee: return (qint64) nTransactionFee; case ReserveBalance: @@ -132,19 +104,22 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const return nRowsPerPage; case AutoRingSize: return fAutoRingSize; - case AutoRedeemShadow: - return fAutoRedeemShadow; + case AutoRedeemSpectre: + return fAutoRedeemSpectre; case MinRingSize: return nMinRingSize; case MaxRingSize: return nMaxRingSize; case Staking: return settings.value("fStaking", GetBoolArg("-staking", true)).toBool(); + case StakingDonation: + if (nStakingDonation < 0) { + nStakingDonation = 0; + } + return nStakingDonation; case MinStakeInterval: return nMinStakeInterval; - case SecureMessaging: - return fSecMsgEnabled; - case ThinMode: + case ThinMode: return settings.value("fThinMode", GetBoolArg("-thinmode", false)).toBool(); case ThinFullIndex: return settings.value("fThinFullIndex", GetBoolArg("-thinfullindex", false)).toBool(); @@ -169,20 +144,15 @@ QString OptionsModel::optionIDName(int row) case StartAtStartup: return "StartAtStartup"; case DetachDatabases: return "DetachDatabases"; case Staking: return "Staking"; + case StakingDonation: return "StakingDonation"; case MinStakeInterval: return "MinStakeInterval"; - case SecureMessaging: return "SecureMessaging"; case ThinMode: return "ThinMode"; case ThinFullIndex: return "ThinFullIndex"; case ThinIndexWindow: return "ThinIndexWindow"; case AutoRingSize: return "AutoRingSize"; - case AutoRedeemShadow: return "AutoRedeemShadow"; + case AutoRedeemSpectre: return "AutoRedeemSpectre"; case MinRingSize: return "MinRingSize"; case MaxRingSize: return "MaxRingSize"; - case MapPortUPnP: return "MapPortUPnP"; - case ProxyUse: return "ProxyUse"; - case ProxyIP: return "ProxyIP"; - case ProxyPort: return "ProxyPort"; - case ProxySocksVersion: return "ProxySocksVersion"; case MinimizeToTray: return "MinimizeToTray"; case MinimizeOnClose: return "MinimizeOnClose"; case Language: return "Language"; @@ -220,42 +190,12 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in fMinimizeToTray = value.toBool(); settings.setValue("fMinimizeToTray", fMinimizeToTray); break; - case MapPortUPnP: - fUseUPnP = value.toBool(); - settings.setValue("fUseUPnP", value.toBool()); - MapPort(value.toBool()); - break; case MinimizeOnClose: fMinimizeOnClose = value.toBool(); settings.setValue("fMinimizeOnClose", fMinimizeOnClose); break; - case ProxyUse: - settings.setValue("fUseProxy", value.toBool()); - ApplyProxySettings(); - break; - case ProxyIP: { - proxyType proxy; - proxy = CService("127.0.0.1", 9050); - GetProxy(NET_IPV4, proxy); - - CNetAddr addr(value.toString().toStdString()); - proxy.SetIP(addr); - settings.setValue("addrProxy", proxy.ToStringIPPort().c_str()); - successful = ApplyProxySettings(); - } - break; - case ProxyPort: { - proxyType proxy; - proxy = CService("127.0.0.1", 9050); - GetProxy(NET_IPV4, proxy); - - proxy.SetPort(value.toInt()); - settings.setValue("addrProxy", proxy.ToStringIPPort().c_str()); - successful = ApplyProxySettings(); - } - break; case Fee: - nTransactionFee = value.toLongLong(); + nTransactionFee = value.toLongLong() < nMinTxFee ? nMinTxFee : value.toLongLong(); settings.setValue("nTransactionFee", (qint64) nTransactionFee); emit transactionFeeChanged(nTransactionFee); break; @@ -265,14 +205,14 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in emit reserveBalanceChanged(nReserveBalance); break; case DisplayUnit: - nDisplayUnit = value.toInt(); - settings.setValue("nDisplayUnit", nDisplayUnit); + //nDisplayUnit = value.toInt(); + //settings.setValue("nDisplayUnit", nDisplayUnit); emit displayUnitChanged(nDisplayUnit); break; case DisplayAddresses: bDisplayAddresses = value.toBool(); settings.setValue("bDisplayAddresses", bDisplayAddresses); - emit displayUnitChanged(settings.value("nDisplayUnit", BitcoinUnits::SDC).toInt()); + emit displayUnitChanged(settings.value("nDisplayUnit", BitcoinUnits::ALIAS).toInt()); break; case DetachDatabases: { bool fDetachDB = value.toBool(); @@ -282,6 +222,20 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in break; case Language: settings.setValue("language", value); + + // As long as the real strings of the choosen language are used to filter transactions and notifications, + // this workaround is neccessary. Otherwise the transaction list will be empty after a language change and + // wallet restart. + visibleTransactions.clear(); + visibleTransactions.append("*"); + settings.setValue("visibleTransactions", visibleTransactions); + bActivateAllTransactiontypesAfterLanguageSwitch = true; + + notifications.clear(); + notifications.append("*"); + settings.setValue("notifications", notifications); + bActivateAllNotificationsAfterLanguageSwitch = true; + break; case RowsPerPage: { nRowsPerPage = value.toInt(); @@ -290,12 +244,24 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in } break; case Notifications: { - notifications = value.toStringList(); + if (bActivateAllNotificationsAfterLanguageSwitch) { + notifications.clear(); + notifications.append("*"); + bActivateAllNotificationsAfterLanguageSwitch = false; + } else { + notifications = value.toStringList(); + } settings.setValue("notifications", notifications); } break; case VisibleTransactions: { - visibleTransactions = value.toStringList(); + if (bActivateAllTransactiontypesAfterLanguageSwitch) { + visibleTransactions.clear(); + visibleTransactions.append("*"); + bActivateAllTransactiontypesAfterLanguageSwitch = false; + } else { + visibleTransactions = value.toStringList(); + } settings.setValue("visibleTransactions", visibleTransactions); emit visibleTransactionsChanged(visibleTransactions); } @@ -305,9 +271,9 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in settings.setValue("fAutoRingSize", fAutoRingSize); } break; - case AutoRedeemShadow: { - fAutoRedeemShadow = value.toBool(); - settings.setValue("fAutoRedeemShadow", fAutoRedeemShadow); + case AutoRedeemSpectre: { + fAutoRedeemSpectre = value.toBool(); + settings.setValue("fAutoRedeemSpectre", fAutoRedeemSpectre); } break; case MinRingSize: { @@ -322,6 +288,15 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in break; case Staking: settings.setValue("fStaking", value.toBool()); + SoftSetBoolArg("-staking", value.toBool()); + fIsStakingEnabled = value.toBool(); + break; + case StakingDonation: + nStakingDonation = value.toInt(); + if (nStakingDonation < 0) { + nStakingDonation = 0; + } + settings.setValue("nStakingDonation", nStakingDonation); break; case MinStakeInterval: nMinStakeInterval = value.toInt(); @@ -336,18 +311,6 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in case ThinIndexWindow: settings.setValue("fThinIndexWindow", value.toInt()); break; - case SecureMessaging: { - if(value.toBool()) - { - if(!fSecMsgEnabled) - SecureMsgEnable(); - } - else - SecureMsgDisable(); - - settings.setValue("fSecMsgEnabled", fSecMsgEnabled); - } - break; default: break; } @@ -391,6 +354,12 @@ int OptionsModel::getRowsPerPage() { return nRowsPerPage; } QStringList OptionsModel::getNotifications() { return notifications; } QStringList OptionsModel::getVisibleTransactions() { return visibleTransactions; } bool OptionsModel::getAutoRingSize() { return fAutoRingSize; } -bool OptionsModel::getAutoRedeemShadow() { return fAutoRedeemShadow; } +bool OptionsModel::getAutoRedeemSpectre() { return fAutoRedeemSpectre; } int OptionsModel::getMinRingSize() { return nMinRingSize; } int OptionsModel::getMaxRingSize() { return nMaxRingSize; } + +void OptionsModel::emitDisplayUnitChanged(int unit) { emit displayUnitChanged(unit); } +void OptionsModel::emitTransactionFeeChanged(qint64 fee) { emit transactionFeeChanged(fee); } +void OptionsModel::emitReserveBalanceChanged(qint64 bal) { emit reserveBalanceChanged(bal); } +void OptionsModel::emitRowsPerPageChanged(int rows) { emit rowsPerPageChanged(rows); } +void OptionsModel::emitVisibleTransactionsChanged(QStringList txns) { emit visibleTransactionsChanged(txns); } diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index 63ff599998..f16eab4a05 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef OPTIONSMODEL_H #define OPTIONSMODEL_H @@ -20,18 +27,18 @@ class OptionsModel : public QAbstractListModel enum OptionID { /// Main Options Fee, /**< Transaction Fee. qint64 - Optional transaction fee per kB that helps make sure your transactions are processed quickly. - *< Most transactions are 1 kB. Fee 0.01 recommended. 0.0001 SDC */ + *< Most transactions are 1 kB. Fee 0.01 recommended. 0.0001 ALIAS */ ReserveBalance, /**< Reserve Balance. qint64 - Reserved amount does not participate in staking and is therefore spendable at any time. */ StartAtStartup, /**< Default Transaction Fee. bool */ DetachDatabases, /**< Default Transaction Fee. bool */ Staking, /**< Default Transaction Fee. bool */ + StakingDonation, MinStakeInterval, - SecureMessaging, /**< Default Transaction Fee. bool */ ThinMode, /**< Default Transaction Fee. bool */ ThinFullIndex, ThinIndexWindow, AutoRingSize, /**< Default Transaction Fee. bool */ - AutoRedeemShadow, /**< Default Transaction Fee. bool */ + AutoRedeemSpectre, /**< Default Transaction Fee. bool */ MinRingSize, /**< Default Transaction Fee. int */ MaxRingSize, /**< Default Transaction Fee. int */ /// Network Related Options @@ -69,28 +76,38 @@ class OptionsModel : public QAbstractListModel bool getMinimizeOnClose(); bool getDisplayAddresses(); bool getAutoRingSize(); - bool getAutoRedeemShadow(); + bool getAutoRedeemSpectre(); int getDisplayUnit(); int getRowsPerPage(); int getMinRingSize(); int getMaxRingSize(); + int getStakingDonation(); QStringList getNotifications(); QStringList getVisibleTransactions(); QString getLanguage() { return language; } + void emitDisplayUnitChanged(int unit); + void emitTransactionFeeChanged(qint64); + void emitReserveBalanceChanged(qint64); + void emitRowsPerPageChanged(int); + void emitVisibleTransactionsChanged(QStringList); + private: int nDisplayUnit; int nRowsPerPage; int nMinRingSize; int nMaxRingSize; + int fStakingDonation; bool bDisplayAddresses; bool fMinimizeToTray; bool fMinimizeOnClose; bool fAutoRingSize; - bool fAutoRedeemShadow; + bool fAutoRedeemSpectre; QString language; QStringList notifications; QStringList visibleTransactions; + bool bActivateAllTransactiontypesAfterLanguageSwitch = false; + bool bActivateAllNotificationsAfterLanguageSwitch = false; signals: void displayUnitChanged(int unit); diff --git a/src/qt/paymentserver.cpp b/src/qt/paymentserver.cpp index fa124dbd0a..e35508a498 100644 --- a/src/qt/paymentserver.cpp +++ b/src/qt/paymentserver.cpp @@ -1,14 +1,17 @@ -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2009 Bitcoin Developers +// +// SPDX-License-Identifier: MIT #include #include "paymentserver.h" #include "guiconstants.h" -#include "ui_interface.h" -#include "util.h" +#include "interface.h" +#include "util/util.h" #include #include @@ -23,7 +26,7 @@ using namespace boost; const int BITCOIN_IPC_CONNECT_TIMEOUT = 1000; // milliseconds -const QString BITCOIN_IPC_PREFIX("shadowcoin:"); +const QString BITCOIN_IPC_PREFIX("alias:"); // // Create a name that is unique for: @@ -32,7 +35,7 @@ const QString BITCOIN_IPC_PREFIX("shadowcoin:"); // static QString ipcServerName() { - QString name("Shadow"); + QString name("ALias"); // Append a simple hash of the datadir // Note that GetDataDir(true) returns a different path @@ -104,7 +107,7 @@ PaymentServer::PaymentServer(QApplication* parent) : QObject(parent), saveURIs(t uriServer = new QLocalServer(this); if (!uriServer->listen(name)) - qDebug() << tr("Cannot start shadow: click-to-pay handler"); + qDebug() << tr("Cannot start ALIAS: click-to-pay handler"); else connect(uriServer, SIGNAL(newConnection()), this, SLOT(handleURIConnection())); } diff --git a/src/qt/paymentserver.h b/src/qt/paymentserver.h index 0fdee333a2..547642bace 100644 --- a/src/qt/paymentserver.h +++ b/src/qt/paymentserver.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef PAYMENTSERVER_H #define PAYMENTSERVER_H diff --git a/src/qt/peertablemodel.cpp b/src/qt/peertablemodel.cpp index 9f68d56bee..fb66b75c61 100644 --- a/src/qt/peertablemodel.cpp +++ b/src/qt/peertablemodel.cpp @@ -1,6 +1,9 @@ -// Copyright (c) 2011-2013 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT #include "peertablemodel.h" @@ -8,8 +11,8 @@ #include "guiconstants.h" #include "guiutil.h" -#include "net.h" -#include "sync.h" +#include "net/net.h" +#include "util/sync.h" #include #include @@ -86,7 +89,7 @@ class PeerTablePriv if (sortColumn >= 0) // sort cacheNodeStats (use stable sort to prevent rows jumping around unneceesarily) - qStableSort(cachedNodeStats.begin(), cachedNodeStats.end(), NodeLessThan(sortColumn, sortOrder)); + std::stable_sort(cachedNodeStats.begin(), cachedNodeStats.end(), NodeLessThan(sortColumn, sortOrder)); // build index map mapNodeRows.clear(); @@ -191,7 +194,7 @@ QVariant PeerTableModel::headerData(int section, Qt::Orientation orientation, in Qt::ItemFlags PeerTableModel::flags(const QModelIndex &index) const { if(!index.isValid()) - return 0; + return Qt::ItemFlags(); Qt::ItemFlags retval = Qt::ItemIsSelectable | Qt::ItemIsEnabled; return retval; diff --git a/src/qt/peertablemodel.h b/src/qt/peertablemodel.h index bff7bb824e..0dd0437fbd 100644 --- a/src/qt/peertablemodel.h +++ b/src/qt/peertablemodel.h @@ -1,12 +1,15 @@ -// Copyright (c) 2011-2013 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT #ifndef BITCOIN_QT_PEERTABLEMODEL_H #define BITCOIN_QT_PEERTABLEMODEL_H #include "main.h" -#include "net.h" +#include "net/net.h" #include #include diff --git a/src/qt/qvalidatedlineedit.cpp b/src/qt/qvalidatedlineedit.cpp index 8ca230c9d7..6ce6f96262 100644 --- a/src/qt/qvalidatedlineedit.cpp +++ b/src/qt/qvalidatedlineedit.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "qvalidatedlineedit.h" #include "guiconstants.h" diff --git a/src/qt/qvalidatedlineedit.h b/src/qt/qvalidatedlineedit.h index 66e26be9a3..e321012c68 100644 --- a/src/qt/qvalidatedlineedit.h +++ b/src/qt/qvalidatedlineedit.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef QVALIDATEDLINEEDIT_H #define QVALIDATEDLINEEDIT_H diff --git a/src/qt/qvaluecombobox.cpp b/src/qt/qvaluecombobox.cpp index d7ce3d0130..238284f437 100644 --- a/src/qt/qvaluecombobox.cpp +++ b/src/qt/qvaluecombobox.cpp @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #include "qvaluecombobox.h" QValueComboBox::QValueComboBox(QWidget *parent) : diff --git a/src/qt/qvaluecombobox.h b/src/qt/qvaluecombobox.h index 1a47bb6565..c1dd244b69 100644 --- a/src/qt/qvaluecombobox.h +++ b/src/qt/qvaluecombobox.h @@ -1,3 +1,10 @@ +// SPDX-FileCopyrightText: © 2025 ALIAS Developer +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-FileCopyrightText: © 2011 Bitcoin Developers +// +// SPDX-License-Identifier: MIT + #ifndef QVALUECOMBOBOX_H #define QVALUECOMBOBOX_H diff --git a/src/qt/res/README.md b/src/qt/res/README.md new file mode 100644 index 0000000000..d0a46ec54d --- /dev/null +++ b/src/qt/res/README.md @@ -0,0 +1,17 @@ +# Attention + +The following files where maintained on the separate Git repository +[alias-wallet-ui](https://github.com/aliascash/alias-wallet-ui): +* src/qt/res/assets/* +* src/qt/res/index.html +* spectre.qrc + +**Do not modify them here!** + +# Licensing + +- SPDX-FileCopyrightText: © 2025 ALIAS Developer +- SPDX-FileCopyrightText: © 2020 Alias Developers +- SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +- SPDX-License-Identifier: MIT + diff --git a/src/qt/res/alias-qt.rc b/src/qt/res/alias-qt.rc new file mode 100644 index 0000000000..ee95d0369d --- /dev/null +++ b/src/qt/res/alias-qt.rc @@ -0,0 +1,41 @@ +// SPDX-FileCopyrightText: © 2020 Alias Developers +// SPDX-FileCopyrightText: © 2016 SpectreCoin Developers +// SPDX-License-Identifier: MIT + +IDI_ICON1 ICON DISCARDABLE "icons/alias-app.ico" + +#include // needed for VERSIONINFO +#include "../../clientversion.h" // holds the needed client version information + +#define VER_PRODUCTVERSION CLIENT_VERSION_MAJOR,CLIENT_VERSION_MINOR,CLIENT_VERSION_REVISION,CLIENT_VERSION_BUILD +#define VER_PRODUCTVERSION_STR STRINGIZE(CLIENT_VERSION_MAJOR) "." STRINGIZE(CLIENT_VERSION_MINOR) "." STRINGIZE(CLIENT_VERSION_REVISION) "." STRINGIZE(CLIENT_VERSION_BUILD) +#define VER_FILEVERSION VER_PRODUCTVERSION +#define VER_FILEVERSION_STR VER_PRODUCTVERSION_STR + +VS_VERSION_INFO VERSIONINFO +FILEVERSION VER_FILEVERSION +PRODUCTVERSION VER_PRODUCTVERSION +FILEOS VOS_NT_WINDOWS32 +FILETYPE VFT_APP +BEGIN + BLOCK "StringFileInfo" +BEGIN + BLOCK "040904E4" // U.S. English - multilingual (hex) +BEGIN + VALUE "CompanyName", "Alias" +VALUE "FileDescription", "Alias wallet (OSS GUI client for Alias)" +VALUE "FileVersion", VER_FILEVERSION_STR +VALUE "InternalName", "alias" +VALUE "LegalCopyright", "2020 (c) The Alias developers, 2016 (c) The SpectreCoin developers, 2014 (c) The ShadowCoin developers, 2014 (c) The BlackCoin developers, 2012 (c) The NovaCoin & PPCoin developers, 2009 (c) The Bitcoin developers" +VALUE "LegalTrademarks1", "Distributed under the MIT/X11 software license" +VALUE "OriginalFilename", "Alias.exe" +VALUE "ProductName", "Alias" +VALUE "ProductVersion", VER_PRODUCTVERSION_STR +END + END + +BLOCK "VarFileInfo" +BEGIN + VALUE "Translation", 0x0, 1252 // language neutral - multilingual (decimal) +END + END diff --git a/src/qt/res/css/contextMenu.css b/src/qt/res/assets/css/contextMenu.css similarity index 98% rename from src/qt/res/css/contextMenu.css rename to src/qt/res/assets/css/contextMenu.css index c4145a9919..55cd12e0f3 100644 --- a/src/qt/res/css/contextMenu.css +++ b/src/qt/res/assets/css/contextMenu.css @@ -16,7 +16,7 @@ font-size:0.7em; } .iw-cm-menu{ - background:#131218; + background:#382b3f; color:#fff; margin:0px; padding:5px; diff --git a/src/qt/res/assets/css/font-montserrat.css b/src/qt/res/assets/css/font-montserrat.css new file mode 100644 index 0000000000..5e1a5e520d --- /dev/null +++ b/src/qt/res/assets/css/font-montserrat.css @@ -0,0 +1,36 @@ +/* montserrat-300 - latin */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 300; + src: local('Montserrat Light'), local('Montserrat-Light'), + url(qrc:///assets/fonts/Montserrat/montserrat-v14-latin-300.woff2) format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url(qrc:///assets/fonts/Montserrat/montserrat-v14-latin-300.woff) format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} +/* montserrat-regular - latin */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: local('Montserrat Regular'), local('Montserrat-Regular'), + url(qrc:///assets/fonts/Montserrat/montserrat-v14-latin-regular.woff2) format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url(qrc:///assets/fonts/Montserrat/montserrat-v14-latin-regular.woff) format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} +/* montserrat-500 - latin */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 500; + src: local('Montserrat Medium'), local('Montserrat-Medium'), + url(qrc:///assets/fonts/Montserrat/montserrat-v14-latin-500.woff2) format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url(qrc:///assets/fonts/Montserrat/montserrat-v14-latin-500.woff) format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} +/* montserrat-700 - latin */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 700; + src: local('Montserrat Bold'), local('Montserrat-Bold'), + url(qrc:///assets/fonts/Montserrat/montserrat-v14-latin-700.woff2) format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url(qrc:///assets/fonts/Montserrat/montserrat-v14-latin-700.woff) format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} \ No newline at end of file diff --git a/src/qt/res/css/footable.core.css b/src/qt/res/assets/css/footable.core.css similarity index 90% rename from src/qt/res/css/footable.core.css rename to src/qt/res/assets/css/footable.core.css index 1647fd9f08..34405c46a4 100644 --- a/src/qt/res/css/footable.core.css +++ b/src/qt/res/assets/css/footable.core.css @@ -1,18 +1,11 @@ -@font-face { - font-family: 'footable'; - src: url('footable.eot'); - src: url('footable.eot?#iefix') format('embedded-opentype'), url('footable.woff') format('woff'), url('footable.ttf') format('truetype'), url('footable.svg#footable') format('svg'); - font-weight: normal; - font-style: normal; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - @font-face { - font-family: 'footable'; - src: url('footable.svg#footable') format('svg'); - font-weight: normal; - font-style: normal; - } -} +@font-face{font-family:'footable';src:url(qrc:///assets/fonts/Footable/footable.eot); + src:url(qrc:///assets/fonts/Footable/footable.eot) format('embedded-opentype'), + url(qrc:///assets/fonts/Footable/footable.woff) format('woff'), + url(qrc:///assets/fonts/Footable/footable.ttf) format('truetype'), + url(qrc:///assets/fonts/Footable/footable.svg) format('svg'); + font-weight:normal; + font-style:normal} + .footable { width: 100%; /** SORTING **/ diff --git a/src/qt/res/css/footable.metro.css b/src/qt/res/assets/css/footable.metro.css similarity index 98% rename from src/qt/res/css/footable.metro.css rename to src/qt/res/assets/css/footable.metro.css index 8bdb937adf..bc93d23dde 100644 --- a/src/qt/res/css/footable.metro.css +++ b/src/qt/res/assets/css/footable.metro.css @@ -3,7 +3,7 @@ border-spacing: 0; width: 100%; border: 3px solid #52b9e9; - font-family: "Open Sans", Arial, Helvetica, sans-serif; + font-family: Montserrat, sans-serif; color: #444444; background: #efefef; -moz-border-radius: 0; diff --git a/src/qt/res/assets/css/framework-icons.css b/src/qt/res/assets/css/framework-icons.css new file mode 100644 index 0000000000..a372ce2b33 --- /dev/null +++ b/src/qt/res/assets/css/framework-icons.css @@ -0,0 +1,405 @@ +@font-face{font-family:'framework-icon';src:url(qrc:///assets/fonts/Framework-icon/framework-icon.eot); + src:url(qrc:///assets/fonts/Framework-icon/framework-icon.eot) format('embedded-opentype'), + url(qrc:///assets/fonts/Framework-icon/framework-icon.woff) format('woff'), + url(qrc:///assets/fonts/Framework-icon/framework-icon.ttf) format('truetype'), + url(qrc:///assets/fonts/Framework-icon/framework-icon.svg) format('svg'); + font-weight:normal; + font-style:normal} + +.pg, [class*=" pg-"], [class^=pg-] { + display: inline-block; + font: normal normal normal 14px/1 framework-icon; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +.pg-signals:before { + content: "\e61c" +} + +.pg-crop:before { + content: "\e657" +} + +.pg-folder_alt:before { + content: "\e658" +} + +.pg-folder:before { + content: "\e659" +} + +.pg-theme:before { + content: "\e65a" +} + +.pg-battery_empty:before { + content: "\e65b" +} + +.pg-battery:before { + content: "\e65c" +} + +.pg-note:before { + content: "\e65d" +} + +.pg-server_hard:before { + content: "\e65e" +} + +.pg-servers:before { + content: "\e65f" +} + +.pg-menu_justify:before { + content: "\e660" +} + +.pg-credit_card:before { + content: "\e60f" +} + +.pg-fullscreen_restore:before { + content: "\e633" +} + +.pg-fullscreen:before { + content: "\e634" +} + +.pg-minus:before { + content: "\e635" +} + +.pg-minus_circle:before { + content: "\e63a" +} + +.pg-plus_circle:before { + content: "\e656" +} + +.pg-refresh_new:before { + content: "\e600" +} + +.pg-close_line:before { + content: "\e601" +} + +.pg-close:before { + content: "\e60a" +} + +.pg-arrow_down:before { + content: "\e60b" +} + +.pg-arrow_left_line_alt:before { + content: "\e628" +} + +.pg-arrow_left:before { + content: "\e629" +} + +.pg-arrow_lright_line_alt:before { + content: "\e62a" +} + +.pg-arrow_maximize_line:before { + content: "\e62b" +} + +.pg-arrow_maximize:before { + content: "\e62c" +} + +.pg-arrow_minimize_line:before { + content: "\e62f" +} + +.pg-arrow_minimize:before { + content: "\e630" +} + +.pg-arrow_right:before { + content: "\e631" +} + +.pg-arrow_up:before { + content: "\e632" +} + +.pg-more:before { + content: "\e655" +} + +.pg-bag:before { + content: "\e602" +} + +.pg-bag1:before { + content: "\e603" +} + +.pg-bold:before { + content: "\e604" +} + +.pg-calender:before { + content: "\e605" +} + +.pg-camera:before { + content: "\e606" +} + +.pg-centeralign:before { + content: "\e607" +} + +.pg-charts:before { + content: "\e608" +} + +.pg-clock:before { + content: "\e609" +} + +.pg-comment:before { + content: "\e60c" +} + +.pg-contact_book:before { + content: "\e60d" +} + +.pg-credit_card_line:before { + content: "\e60e" +} + +.pg-cupboard:before { + content: "\e610" +} + +.pg-desktop:before { + content: "\e611" +} + +.pg-download:before { + content: "\e612" +} + +.pg-eraser:before { + content: "\e613" +} + +.pg-extra:before { + content: "\e614" +} + +.pg-form:before { + content: "\e615" +} + +.pg-grid:before { + content: "\e616" +} + +.pg-home:before { + content: "\e617" +} + +.pg-image:before { + content: "\e618" +} + +.pg-inbox:before { + content: "\e619" +} + +.pg-indent:before { + content: "\e61a" +} + +.pg-italic:before { + content: "\e61b" +} + +.pg-laptop:before { + content: "\e61d" +} + +.pg-layouts:before { + content: "\e61e" +} + +.pg-layouts2:before { + content: "\e61f" +} + +.pg-layouts3:before { + content: "\e620" +} + +.pg-layouts4:before { + content: "\e621" +} + +.pg-leftalign:before { + content: "\e622" +} + +.pg-like:before { + content: "\e623" +} + +.pg-like1:before { + content: "\e624" +} + +.pg-lock:before { + content: "\e625" +} + +.pg-mail:before { + content: "\e626" +} + +.pg-map:before { + content: "\e627" +} + +.pg-menu_lv:before { + content: "\e62d" +} + +.pg-menu:before { + content: "\e62e" +} + +.pg-movie:before { + content: "\e636" +} + +.pg-ordered_list:before { + content: "\e637" +} + +.pg-outdent:before { + content: "\e638" +} + +.pg-phone:before { + content: "\e639" +} + +.pg-plus:before { + content: "\e63b" +} + +.pg-power:before { + content: "\e63c" +} + +.pg-printer:before { + content: "\e63d" +} + +.pg-refresh:before { + content: "\e63e" +} + +.pg-resize:before { + content: "\e63f" +} + +.pg-right_align:before { + content: "\e640" +} + +.pg-save:before { + content: "\e641" +} + +.pg-search:before { + content: "\e642" +} + +.pg-sent:before { + content: "\e643" +} + +.pg-settings_small_1:before { + content: "\e644" +} + +.pg-settings_small:before { + content: "\e645" +} + +.pg-settings:before { + content: "\e646" +} + +.pg-shopping_cart:before { + content: "\e647" +} + +.pg-social:before { + content: "\e648" +} + +.pg-spam:before { + content: "\e649" +} + +.pg-suitcase:before { + content: "\e64a" +} + +.pg-tables:before { + content: "\e64b" +} + +.pg-tablet:before { + content: "\e64c" +} + +.pg-telephone:before { + content: "\e64d" +} + +.pg-text_style:before { + content: "\e64e" +} + +.pg-trash_line:before { + content: "\e64f" +} + +.pg-trash:before { + content: "\e650" +} + +.pg-ui:before { + content: "\e651" +} + +.pg-underline:before { + content: "\e652" +} + +.pg-unordered_list:before { + content: "\e653" +} + +.pg-video:before { + content: "\e654" +} + diff --git a/src/qt/res/assets/css/framework-icons.min.css b/src/qt/res/assets/css/framework-icons.min.css deleted file mode 100644 index bc6407822c..0000000000 --- a/src/qt/res/assets/css/framework-icons.min.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:framework-icon;src:url(qrc:///assets/fonts/Framework-icon/framework-icon.eot?-u69vo5);src:url(qrc:///assets/fonts/Framework-icon/framework-icon.eot?#iefix-u69vo5) format('embedded-opentype'),url(qrc:///assets/fonts/Framework-icon/framework-icon.woff?-u69vo5) format('woff'),url(qrc:///assets/fonts/Framework-icon/framework-icon.ttf?-u69vo5) format('truetype'),url(qrc:///assets/fonts/Framework-icon/framework-icon.svg?-u69vo5#framework-icon) format('svg');font-weight:400;font-style:normal}.pg,[class*=" pg-"],[class^=pg-]{display:inline-block;font:normal normal normal 14px/1 framework-icon;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.pg-signals:before{content:"\e61c"}.pg-crop:before{content:"\e657"}.pg-folder_alt:before{content:"\e658"}.pg-folder:before{content:"\e659"}.pg-theme:before{content:"\e65a"}.pg-battery_empty:before{content:"\e65b"}.pg-battery:before{content:"\e65c"}.pg-note:before{content:"\e65d"}.pg-server_hard:before{content:"\e65e"}.pg-servers:before{content:"\e65f"}.pg-menu_justify:before{content:"\e660"}.pg-credit_card:before{content:"\e60f"}.pg-fullscreen_restore:before{content:"\e633"}.pg-fullscreen:before{content:"\e634"}.pg-minus:before{content:"\e635"}.pg-minus_circle:before{content:"\e63a"}.pg-plus_circle:before{content:"\e656"}.pg-refresh_new:before{content:"\e600"}.pg-close_line:before{content:"\e601"}.pg-close:before{content:"\e60a"}.pg-arrow_down:before{content:"\e60b"}.pg-arrow_left_line_alt:before{content:"\e628"}.pg-arrow_left:before{content:"\e629"}.pg-arrow_lright_line_alt:before{content:"\e62a"}.pg-arrow_maximize_line:before{content:"\e62b"}.pg-arrow_maximize:before{content:"\e62c"}.pg-arrow_minimize_line:before{content:"\e62f"}.pg-arrow_minimize:before{content:"\e630"}.pg-arrow_right:before{content:"\e631"}.pg-arrow_up:before{content:"\e632"}.pg-more:before{content:"\e655"}.pg-bag:before{content:"\e602"}.pg-bag1:before{content:"\e603"}.pg-bold:before{content:"\e604"}.pg-calender:before{content:"\e605"}.pg-camera:before{content:"\e606"}.pg-centeralign:before{content:"\e607"}.pg-charts:before{content:"\e608"}.pg-clock:before{content:"\e609"}.pg-comment:before{content:"\e60c"}.pg-contact_book:before{content:"\e60d"}.pg-credit_card_line:before{content:"\e60e"}.pg-cupboard:before{content:"\e610"}.pg-desktop:before{content:"\e611"}.pg-download:before{content:"\e612"}.pg-eraser:before{content:"\e613"}.pg-extra:before{content:"\e614"}.pg-form:before{content:"\e615"}.pg-grid:before{content:"\e616"}.pg-home:before{content:"\e617"}.pg-image:before{content:"\e618"}.pg-inbox:before{content:"\e619"}.pg-indent:before{content:"\e61a"}.pg-italic:before{content:"\e61b"}.pg-laptop:before{content:"\e61d"}.pg-layouts:before{content:"\e61e"}.pg-layouts2:before{content:"\e61f"}.pg-layouts3:before{content:"\e620"}.pg-layouts4:before{content:"\e621"}.pg-leftalign:before{content:"\e622"}.pg-like:before{content:"\e623"}.pg-like1:before{content:"\e624"}.pg-lock:before{content:"\e625"}.pg-mail:before{content:"\e626"}.pg-map:before{content:"\e627"}.pg-menu_lv:before{content:"\e62d"}.pg-menu:before{content:"\e62e"}.pg-movie:before{content:"\e636"}.pg-ordered_list:before{content:"\e637"}.pg-outdent:before{content:"\e638"}.pg-phone:before{content:"\e639"}.pg-plus:before{content:"\e63b"}.pg-power:before{content:"\e63c"}.pg-printer:before{content:"\e63d"}.pg-refresh:before{content:"\e63e"}.pg-resize:before{content:"\e63f"}.pg-right_align:before{content:"\e640"}.pg-save:before{content:"\e641"}.pg-search:before{content:"\e642"}.pg-sent:before{content:"\e643"}.pg-settings_small_1:before{content:"\e644"}.pg-settings_small:before{content:"\e645"}.pg-settings:before{content:"\e646"}.pg-shopping_cart:before{content:"\e647"}.pg-social:before{content:"\e648"}.pg-spam:before{content:"\e649"}.pg-suitcase:before{content:"\e64a"}.pg-tables:before{content:"\e64b"}.pg-tablet:before{content:"\e64c"}.pg-telephone:before{content:"\e64d"}.pg-text_style:before{content:"\e64e"}.pg-trash_line:before{content:"\e64f"}.pg-trash:before{content:"\e650"}.pg-ui:before{content:"\e651"}.pg-underline:before{content:"\e652"}.pg-unordered_list:before{content:"\e653"}.pg-video:before{content:"\e654"} diff --git a/src/qt/res/assets/css/framework.min.css b/src/qt/res/assets/css/framework.min.css index a9e88658f2..90646fc183 100644 --- a/src/qt/res/assets/css/framework.min.css +++ b/src/qt/res/assets/css/framework.min.css @@ -1 +1 @@ -body,html{height:100%}.header .brand,.icon-thumbnail{vertical-align:middle;text-align:center}.btn-animated,.view-port .view{-moz-backface-visibility:hidden}.breadcrumb,.page-sidebar .sidebar-menu .menu-items>li>.icon-thumbnail:first-letter,.panel .panel-heading .panel-title{text-transform:uppercase}.btn,body{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-font-feature-settings:"kern" 1;-moz-font-feature-settings:"kern" 1;-webkit-font-smoothing:antialiased}.btn,.icon-thumbnail,body,h1,h2,h3,h4,h5,h6{-webkit-font-smoothing:antialiased}body{margin:0;padding:0;background-color:#fafafa;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}body.fixed-header .header{position:fixed;left:0;top:0}body.mobile .sidebar-menu{overflow:scroll;-webkit-overflow-scrolling:touch}body.mobile .sidebar-menu>ul{height:auto!important;overflow:visible!important;-webkit-overflow-scrolling:touch!important}body.mobile .page-sidebar .sidebar-menu .menu-items li:hover a{color:#4c4a55}body.mobile .page-sidebar .sidebar-menu .menu-items li:hover .icon-thumbnail{color:#4c4a55!important}body.mobile .page-sidebar .sidebar-menu .menu-items li.active>a,body.mobile .page-sidebar .sidebar-menu .menu-items li.active>a .icon-thumbnail,body.mobile .page-sidebar .sidebar-menu .menu-items li.open>a,body.mobile .page-sidebar .sidebar-menu .menu-items li.open>a .icon-thumbnail{color:#fff}body.mobile .drager{overflow:auto;-webkit-overflow-scrolling:touch}body.sidebar-visible .page-sidebar .scroll-element{visibility:visible}body.sidebar-visible .page-sidebar .menu-items .icon-thumbnail{-webkit-transform:translate3d(-14px,0,0);transform:translate3d(-14px,0,0);-ms-transform:translate(-14px,0)}body.sidebar-visible .page-sidebar .sidebar-header .sidebar-header-controls{-webkit-transform:translate3d(48px,0,0);transform:translate3d(48px,0,0);-ms-transform:translate(48px,0)}body.no-header .page-container .page-content-wrapper .content{padding-top:0}body.no-header .header{border-bottom-color:transparent}body.dashboard,body.dashboard .page-container{background:#f5f5f5}.pace .pace-progress{background:#e3223c;height:3px}.pace .pace-progress-inner{box-shadow:none}.pace .pace-activity{-webkit-animation:none;animation:none;top:73px;background:url(qrc:///assets/img/progress/progress-circle-success.svg) top left no-repeat;background-size:100% auto;margin:0 auto;border-width:0;border-radius:0;width:28px;height:40px;right:19px}.header{position:relative;display:block;height:60px;width:100%;padding:0 20px 0 0;z-index:800;background-color:#fff;border-bottom:1px solid rgba(230,230,230,.7)}.page-sidebar,.quickview-wrapper{z-index:1000;bottom:0;-webkit-backface-visibility:hidden;-webkit-perspective:1000}.header a{color:#3b4751}.header a.btn{color:#8b91a0}.header a.btn-warning{color:#eaeef1}.header .header-inner{height:60px;width:100%;vertical-align:middle;display:table-cell}.header .header-inner .toggle-sidebar{display:none}.header .notification-list,.header .search-link{display:inline-block}.header.transparent{background-color:transparent!important}.header .brand{width:300px}.header .bubble{border-radius:100%;height:14px;width:14px;background-color:rgba(226,32,91,.77);color:#fff;position:relative;top:-6px;float:right;right:-5px}.header .search-link{margin-left:15px;color:#626262;opacity:.7;font-size:16px;font-family:"Open Sans",sans-serif}.header .search-link i{margin-right:15px;font-size:16px}.header .search-link:hover{opacity:1}.navbar{top:-1px}.navbar-nav>li>a{padding-top:20px;padding-bottom:20px}.navbar-default{background-color:#fff}.navbar-default .navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a{background-color:transparent}.navbar-toggle{border-radius:0;background-color:transparent!important}.page-sidebar{width:280px;background-color:#131218;left:-210px;position:fixed;top:0;right:auto;overflow:hidden;-webkit-transition:-webkit-transform .4s cubic-bezier(.05,.74,.27,.99);-moz-transition:-moz-transform .4s cubic-bezier(.05,.74,.27,.99);-o-transition:-o-transform .4s cubic-bezier(.05,.74,.27,.99);transition:transform .4s cubic-bezier(.05,.74,.27,.99)}.page-sidebar a,.page-sidebar button{color:#4c4a55}.page-sidebar a:active,.page-sidebar a:hover,.page-sidebar button:active,.page-sidebar button:hover{color:#fff}.page-sidebar a:focus,.page-sidebar a:visited,.page-sidebar button:focus,.page-sidebar button:visited{color:#4c4a55}.page-sidebar .scroll-element{visibility:hidden}.page-sidebar .sidebar-header{display:block;height:60px;line-height:60px;background-color:#111016;border-bottom:1px solid #0f0f13;color:#fff;width:100%;padding-left:30px;clear:both;z-index:10;position:relative}.sidebar-header-collapsed{float:right;height:60px;width:30px;overflow:hidden;margin-right:18.5px;display:none}.sidebar-header-collapsed-visible{display:block!important}.page-sidebar .sidebar-header .sidebar-header-controls{display:inline-block;-webkit-transition:-webkit-transform .4s cubic-bezier(.05,.74,.27,.99);transition:transform .4s cubic-bezier(.05,.74,.27,.99);-webkit-backface-visibility:hidden}.page-sidebar .sidebar-header .sidebar-slide-toggle i{-webkit-transition:all .12s ease;transition:all .12s ease}.page-sidebar .sidebar-header .sidebar-slide-toggle.active i{-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.page-sidebar .close-sidebar{position:absolute;right:19px;top:14px;padding:9px;z-index:1}.page-sidebar .close-sidebar>i{color:rgba(255,255,255,.57)}.page-sidebar .sidebar-overlay-slide{width:100%;height:100%;background-color:#111016;display:block;z-index:9;padding:80px 20px 20px}.page-sidebar .sidebar-overlay-slide.from-top{top:-100%;position:absolute;-webkit-transition:all .2s ease;transition:all .2s ease}.page-sidebar .sidebar-overlay-slide.from-top.show{-webkit-transform:translate(0,100%);-ms-transform:translate(0,100%);transform:translate(0,100%)}.page-sidebar .sidebar-menu{height:calc(100% - 50px);position:relative;width:100%}.page-sidebar .sidebar-menu .outer-tab-nav-section{display:inline-block;width:45px;position:absolute;height:100%;background-color:#0aa699!important}.page-sidebar .sidebar-menu .menu-items{list-style:none;margin:0;padding:0;position:relative;overflow:auto;-webkit-overflow-scrolling:touch;height:calc(100% - 10px);width:100%}.page-sidebar .sidebar-menu .menu-items li.active>a .icon-thumbnail,.page-sidebar .sidebar-menu .menu-items li.open>a .icon-thumbnail,.page-sidebar .sidebar-menu .menu-items li:hover>a .icon-thumbnail{color:#E3223C}.page-sidebar .sidebar-menu .menu-items li.active>a,.page-sidebar .sidebar-menu .menu-items li.open>a,.page-sidebar .sidebar-menu .menu-items li:hover>a{color:#fff}.page-sidebar .sidebar-menu .menu-items li>a{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}.page-sidebar .sidebar-menu .menu-items>li{display:block;padding:0;clear:right}.page-sidebar .sidebar-menu .menu-items>li:after,.page-sidebar .sidebar-menu .menu-items>li:before{display:table;content:" ";clear:both}.page-sidebar .sidebar-menu .menu-items>li>a{font-family:Arial,sans-serif;display:inline-block;padding:0 3px 0 32px;min-height:40px;line-height:40px;font-size:14px;clear:both}.page-sidebar .sidebar-menu .menu-items>li>a.open{background:#313131}.page-sidebar .sidebar-menu .menu-items>li>a>.arrow{float:left}.page-sidebar .sidebar-menu .menu-items>li>a>.arrow:before{float:left;display:inline;font-size:16px;font-family:FontAwesome;height:auto;content:"\f104";font-weight:300;text-shadow:none;-webkit-transition:all .12s ease;transition:all .12s ease}.page-sidebar .sidebar-menu .menu-items>li>a>.arrow.open:before{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.page-sidebar .sidebar-menu .menu-items>li>a>.badge{margin-top:12px}.page-sidebar .sidebar-menu .menu-items>li>a>.title{float:left;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:65%}.page-sidebar .sidebar-menu .menu-items>li>a>.details{font-size:12px;opacity:.4;display:block;clear:both}.page-sidebar .sidebar-menu .menu-items>li>a.detailed>.title{line-height:28px}.page-sidebar .sidebar-menu .menu-items>li>a.detailed>.details{line-height:16px}.page-sidebar .sidebar-menu .menu-items>li.active>ul.sub-menu{display:block}.page-sidebar .sidebar-menu .menu-items>li>ul.sub-menu>li ul.sub-menu li{padding-left:10px;padding-right:3px}.page-sidebar .sidebar-menu .menu-items>li>ul.sub-menu>li ul.sub-menu .icon-thumbnail{width:25px;height:25px;line-height:25px;font-size:10px}.page-sidebar .sidebar-menu .menu-items>li>ul.sub-menu li>a>.arrow:before{float:right;margin-top:1px;margin-right:20px;display:inline;font-size:16px;font-family:FontAwesome;height:auto;content:"\f104";font-weight:300;text-shadow:none;-webkit-transition:all .12s ease;transition:all .12s ease}.page-sidebar .sidebar-menu .menu-items>li>ul.sub-menu li>a>.arrow.open:before{float:right;margin-top:1px;margin-right:18px;display:inline;font-family:FontAwesome;height:auto;font-size:16px;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);font-weight:300;text-shadow:none}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu{display:none;list-style:none;clear:both;background-color:#0f0e12;padding:0 0 10px}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li{background:0 0;padding:0 20px 0 40px;margin-top:1px}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li:hover>.icon-thumbnail{color:#E3223C}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li>a{width:100%;display:inline-block;padding:5px 0;font-size:13px;font-family:Arial,sans-serif;white-space:normal}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li .icon-thumbnail{width:30px;height:30px;line-height:30px;margin:0;background-color:#131218;font-size:14px}.page-sidebar .sidebar-menu .muted{color:#576775;opacity:.45}.page-sidebar .icon-thumbnail [class^=bg-],.page-sidebar [class*=bg-]{color:#fff}[data-toggle-pin=sidebar]>i:before{content:"\f10c"}.icon-thumbnail{display:inline-block;background:#0f0e12;height:40px;width:40px;line-height:40px;position:relative;left:0;float:right;margin-right:14px;color:#4c4a55;font-size:16px;-webkit-transition:-webkit-transform .4s cubic-bezier(.05,.74,.27,.99);transition:transform .4s cubic-bezier(.05,.74,.27,.99);-webkit-backface-visibility:hidden;-webkit-perspective:1000;font-family:"Open Sans",sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;font-weight:700}.icon-thumbnail>i{font-size:14px}.nav-collapse.collapse{height:100%!important}.quickview-wrapper{position:fixed;right:-285px;top:0;width:285px;background:#fff;box-shadow:0 0 9px rgba(191,191,191,.36);-webkit-transition:-webkit-transform .4s cubic-bezier(.05,.74,.27,.99);transition:transform .4s cubic-bezier(.05,.74,.27,.99);-ms-backface-visibility:hidden}.quickview-wrapper.open{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-ms-transform:translate(-100%,0)}.quickview-wrapper .quickview-toggle{position:absolute;right:12px;top:2px;color:#fff;padding:6px;opacity:.4}.quickview-wrapper .quickview-toggle:hover{opacity:1}.quickview-wrapper .nav-tabs{background-color:#131218;position:relative;padding:0 15px;height:40px}.quickview-wrapper .nav-tabs>li>a{padding:11px;color:#fff;border:0;text-align:center;font-size:11px;font-weight:700;min-width:62px}.quickview-wrapper .nav-tabs>li>a:hover{color:#E3223C;opacity:1}.quickview-wrapper .nav-tabs>li.active>a,.quickview-wrapper .nav-tabs>li.active>a:focus,.quickview-wrapper .nav-tabs>li.active>a:hover{background-color:transparent;border:0;color:#E3223C;opacity:1}.quickview-wrapper .nav-tabs~.tab-content{position:absolute;padding:0;left:0;right:0;top:38px;bottom:0;height:auto}.quickview-wrapper .nav-tabs~.tab-content>div{height:100%}.quickview-wrapper .nav-tabs~.tab-content ul{margin:0;padding:0}.quickview-wrapper .nav-tabs~.tab-content ul li{list-style:none}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes{background:#fff}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes a,.quickview-wrapper .nav-tabs~.tab-content .quickview-notes button{color:#000}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list{position:relative}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar{height:50px;padding:0 25px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar ul{margin-top:10px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar ul>li{display:inline-block;height:auto}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar ul>li a{height:22px;line-height:22px;display:block;padding:0 5px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar ul>li a.selected,.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar ul>li a:hover{background:#968974;color:#FBF9E3}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar .btn-remove-notes{background:0 0;bottom:8px;display:block;left:50%;margin-left:-40%;position:absolute;width:83%;border:1px solid #968974}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul{padding:0}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li{cursor:pointer;height:42px;padding:0 25px;display:block;clear:both}.sortable .grid .grid-title,.sortable .panel-heading{cursor:move}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .left{float:left;width:65%;height:100%;padding-top:9px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .left .checkbox{display:none;float:left}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .left .checkbox label{margin-right:0;vertical-align:text-top}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .left p{margin:0;font-size:13px;font-weight:700;width:100px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;display:inline-block}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .right{font-size:10.5px;text-align:right;width:35%;line-height:41px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .right .date{margin-right:10px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li:hover{background:#f4ecd1}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note{background-repeat:repeat-y;background-position:27px top}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note>div{display:table;height:100%;width:100%}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar{background:#fcfcfa;height:55px;width:100%;display:table-row;box-shadow:0 1px 1px -1px rgba(0,0,0,.33)}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar>li{display:inline-block;border-right:1px solid #EDECEC;float:left;line-height:55px;padding:0;text-align:center;width:55px;height:auto}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar>li>a{color:#a5a5a5;display:block}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar>li>a:hover{background:#fffaf6}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar>li>a.active{color:#333;background:#f9f1ea}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar:after{position:absolute;content:"";width:100%}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body{display:table-row;height:100%}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body>div{display:table;height:100%;width:100%;padding:0 20px 0 45px;white-space:normal}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .top{height:50px;display:table-row;clear:both;line-height:50px;text-align:center}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .top>a{float:left;color:#b0b0a8;margin-left:10px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .top>span{font-style:italic;color:#b0b0a8;font-size:11px}.portlet-icon,p{font-style:normal}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content{display:table-row;height:100%}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content form{height:100%}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content .quick-note-editor{font-size:12px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content .quick-note-editor:focus{outline:0}.btn.active:focus,.btn:active:focus,.btn:focus,button:focus{outline:0!important}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content .quick-note-editor::-moz-selection{background:#fef8ae}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content .quick-note-editor::selection{background:#fef8ae}.page-container{width:100%;height:100%;padding-left:70px}.page-container .page-content-wrapper{min-height:100%;position:relative}.page-container .page-content-wrapper .content{z-index:10;padding-top:60px;padding-bottom:72px;min-height:100%;-webkit-transition:all .3s ease;transition:all .3s ease}.page-container .page-content-wrapper .content.full-width{width:100%}.page-container .page-content-wrapper .content .content-inner{display:inline-block;vertical-align:top;height:100%;padding-left:30px;position:relative}.page-container .page-content-wrapper .content.overlay-footer,.page-container .page-content-wrapper .content:only-child{padding-bottom:0}.page-container .page-content-wrapper .footer{position:absolute;left:0;right:0;bottom:0;-webkit-transition:left .3s ease;transition:left .3s ease}.page-container .page-content-wrapper .footer.fixed{position:fixed}.icon-set,.scroll{position:relative}.page-title{margin-top:0}.breadcrumb{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;background-color:transparent;padding:15px 0;margin:0;border:none;display:block}.breadcrumb a{margin-left:5px;margin-right:5px;font-size:11px!important;color:#7b7d82}.breadcrumb a.active{font-weight:600;color:#0090d9}.breadcrumb li{padding-left:0}.breadcrumb>li+li:before{padding:0 5px;color:#515050;font-family:FontAwesome;content:"\f105";font-weight:700}.breadcrumb a,.breadcrumb i,.breadcrumb li,.breadcrumb span{color:#7b7d82;font-weight:300;text-shadow:none}.icon-set{background:url(qrc:///assets/icons/top_tray.png) no-repeat;display:block}.icon-set.globe-fill{background-position:-1px -1px;width:17px;height:17px;top:2px}.icon-set.clip{background-position:-20px -2px;width:16px;height:16px}.icon-set.grid-box{background-position:-41px -2px;width:14px;height:14px}.icon-set.menu-hambuger{background-position:-58px -3px;width:15px;height:13px}.icon-set.menu-hambuger-plus{background-position:-77px -1px;width:18px;height:15px}.dropzone{overflow:hidden}.dropzone .dz-default.dz-message{width:100%}.scroll{overflow:auto}.scroll-wrapper>.scroll-element,.scroll-wrapper>.scroll-element div{background:0 0;border:none;margin:0;padding:0;position:absolute;z-index:10}.scroll-wrapper>.scroll-element div{display:block;height:100%;left:0;top:0;width:100%}.scroll-wrapper>.scroll-element.scroll-x{bottom:2px;height:7px;left:0;min-width:100%;width:100%}.scroll-wrapper>.scroll-element.scroll-y{height:100%;min-height:100%;right:2px;top:0;width:4px}.scroll-wrapper>.scroll-element .scroll-element_outer{opacity:.3}.scroll-wrapper>.scroll-element .scroll-element_size{background-color:rgba(0,0,0,.07);opacity:0}.scroll-wrapper>.scroll-element .scroll-bar{background-color:#697686}.scroll-wrapper>.scroll-element.scroll-x .scroll-bar{bottom:0;height:4px;min-width:24px;top:auto}.scroll-wrapper>.scroll-element.scroll-x .scroll-element_outer{bottom:0;top:auto;left:2px;-webkit-transition:height .2s;transition:height .2s}.scroll-wrapper>.scroll-element.scroll-x .scroll-element_size{left:-4px}.scroll-wrapper>.scroll-element.scroll-y .scroll-bar{left:auto;min-height:24px;right:0;width:4px}.scroll-wrapper>.scroll-element.scroll-y .scroll-element_outer{left:auto;right:0;top:2px;-webkit-transition:all .2s;transition:all .2s}.scroll-wrapper>.scroll-element.scroll-y .scroll-element_size{top:-4px}.scroll-wrapper.auto-hide>.scroll-element .scroll-element_track{display:none}.scroll-wrapper>.scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size{left:-11px}.scroll-wrapper>.scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size{top:-11px}.scroll-wrapper>.scroll-element.scroll-draggable .scroll-element_outer,.scroll-wrapper>.scroll-element:hover .scroll-element_outer{overflow:hidden;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";filter:alpha(opacity=70);opacity:.7}.scroll-wrapper>.scroll-element.scroll-draggable .scroll-element_outer .scroll-element_size,.scroll-wrapper>.scroll-element:hover .scroll-element_outer .scroll-element_size{opacity:1}.scroll-wrapper>.scroll-element.scroll-draggable .scroll-element_outer .scroll-bar,.scroll-wrapper>.scroll-element:hover .scroll-element_outer .scroll-bar{height:100%;width:100%}.scroll-wrapper>.scroll-element.scroll-x.scroll-draggable .scroll-element_outer,.scroll-wrapper>.scroll-element.scroll-x:hover .scroll-element_outer{height:10px;min-height:7px}.scroll-wrapper>.scroll-element.scroll-y.scroll-draggable .scroll-element_outer,.scroll-wrapper>.scroll-element.scroll-y:hover .scroll-element_outer{min-width:7px;width:7px}.container-fluid{padding-left:30px;padding-right:30px}.copyright{padding:25px 0;border-top:1px solid rgba(98,98,98,.07)}.navbar-center,.navbar-center>li{float:none;display:inline-block;vertical-align:top}.navbar-nav li a{min-width:50px}.pager{margin:0}.view-port{position:relative;width:100%;height:100%;display:block;white-space:nowrap;overflow:hidden}.view-port .navbar{border-radius:0;padding-left:0;margin-bottom:0;border-left:0;display:table;width:100%;top:0;border-top:0}.view-port .navbar .navbar-inner{display:table-cell;height:50px;vertical-align:middle}.view-port .navbar .action{position:absolute;top:0;line-height:50px;z-index:1}.view-port .navbar .action.pull-right{right:0}.view-port .navbar .view-heading{font-size:15px;text-align:center}.view-port .navbar>p{line-height:12px;font-size:12px;margin:0}.view-port .navbar.navbar-sm{min-height:35px}.view-port .navbar.navbar-sm .navbar-inner{height:35px}.view-port .navbar.navbar-sm .action{line-height:35px}.view-port .view{display:inline-block;width:100%;height:100%;vertical-align:top;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;-webkit-transition:all .4s ease;transition:all .4s ease}.view-port .view:first-child:before{position:absolute;content:'';width:100%;height:100%;background-color:#000;opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear;z-index:-1}.view-port .view:only-child{margin:0}.view-port.from-top>.view:last-child,.view-port.push>.view:first-child,.view-port.push>.view:last-child{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-ms-transform:translate(-100%,0)}.view-port.push-parrallax>.view:first-child{-webkit-transition:all .4s cubic-bezier(.1,.7,.1,1);transition:all .4s cubic-bezier(.1,.7,.1,1);-webkit-transform:translate3d(-25%,0,0);transform:translate3d(-25%,0,0);-ms-transform:translate(-25%,0)}.view-port.push-parrallax>.view:first-child:before{opacity:0;z-index:100}.view-port.push-parrallax>.view:last-child{-webkit-transition:all .4s cubic-bezier(.1,.7,.1,1);transition:all .4s cubic-bezier(.1,.7,.1,1);-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-ms-transform:translate(-100%,0);box-shadow:0 0 9px rgba(191,191,191,.36)}.panel{box-shadow:none;border-radius:1px;-webkit-border-radius:1px;-moz-border-radius:1px;-webkit-transition:all .2s ease;transition:all .2s ease;position:relative}.panel .panel-heading{background:#fff;border-radius:0;border-bottom:0;padding:20px 20px 7px;position:relative;z-index:3;min-height:48px}.panel .panel-heading.separator:after{content:"";height:1px;background:rgba(0,0,0,.08);left:16px;right:16px;position:absolute;bottom:0}.panel .panel-heading+.panel-body{padding-top:0;height:calc(100% - 50px)}.panel .panel-heading .panel-title{display:inline-block;letter-spacing:.02em;font-size:12px;font-weight:600;margin:0;padding:0;line-height:normal;overflow:hidden;text-overflow:ellipsis;-webkit-text-stroke:0;filter:alpha(opacity=40);-webkit-transition:opacity .3s ease;transition:opacity .3s ease}body,p{letter-spacing:.01em}.panel .panel-heading .panel-controls{float:right;margin-top:-3px}.panel .panel-heading .panel-controls ul{margin:0;padding:0}.panel .panel-heading .panel-controls ul li{display:inline-block;list-style:none;line-height:0}.panel .panel-heading .panel-controls:after{content:"";display:table;clear:both}.panel .panel-heading.panel-heading-hover .panel-title{opacity:.4}.panel .panel-heading.panel-heading-hover:hover .panel-title{opacity:1}.panel.panel-condensed .panel-heading .panel-title,.panel.panel-hover .panel-heading .panel-title{opacity:.4}.panel.panel-default{border:1px solid rgba(0,0,0,.07)}.panel.panel-bordered{border:1px solid rgba(230,230,230,.7)}.panel.panel-condensed .panel-heading{padding:13px 13px 0;min-height:30px}.panel.panel-condensed .panel-body{padding:13px}.panel.panel-hover:hover .panel-heading .panel-title{opacity:1}.panel.panel-transparent{background:0 0;box-shadow:none}.panel.panel-transparent .panel-body{background:0 0}.panel.full-height{height:calc(100%)}.panel.full-height .panel-body{width:100%;height:100%}.panel.panel-featured{box-shadow:-1px 1px 3px 0 rgba(121,129,135,.14);width:calc(100% - 50px);float:right}.panel.panel-featured .panel-title h4{font-size:16px;text-transform:uppercase;color:#f0f0f0}.panel.panel-featured .panel-body h3{line-height:34px;font-size:26px}.panel.panel-featured .footer .username{line-height:8px;padding-top:10px;font-size:16px}.panel.panel-featured .footer .buttons li{display:inline;list-style:none;font-weight:700;margin-left:20px}.panel.panel-featured .footer .buttons li:first-child{margin-left:0}.panel.panel-featured .footer .buttons .heart{color:#f55753}.panel.panel-featured .footer .buttons .comment{color:#626262}.panel.panel-featured .ribbon{width:38px;height:38px;margin-left:-39px;float:left;box-shadow:inset -3px 0 3px 0 rgba(0,0,0,.14)}.panel.panel-featured .ribbon.blue,.panel.panel-featured .ribbon.green{background:#e3223c}.panel.hover-fill:hover{background:#f0f0f0}.panel.hover-stroke:hover{border:1px solid #e6e6e6}.panel .panel-body{padding:20px;height:100%;width:100%}.panel .panel-body.no-padding .row{margin-left:0;margin-right:0}.panel .panel-body.no-bottom-padding{padding-bottom:0}.panel .panel-body.no-top-padding{padding-top:0}.panel .panel-body .title{margin-top:0}.panel .panel-body.scrollable{margin-bottom:20px}.portlet-progress{background:rgba(255,255,255,.8);bottom:0;left:0;position:absolute!important;right:0;top:0;display:none;z-index:2}.portlet-progress>.progress,.portlet-progress>.progress.progress-small{height:3px}.portlet-progress>.portlet-bar-indeterminate,.portlet-progress>.progress-circle-indeterminate{display:block;left:50%;margin-left:-17px;margin-top:-17px;position:absolute;top:50%}.portlet-progress>.progress-circle-indeterminate{width:35px;height:35px}.panel-maximized{position:fixed!important;left:70px;top:59px;bottom:0;right:0;z-index:600;margin:0}.panel .pgn-wrapper{position:absolute;z-index:602}.btn,.btn-file,label.inline{position:relative}.panel-heading a{color:#626262!important;opacity:.4}address a,body{color:#626262}.panel-heading a.portlet-refresh{-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.panel-heading a.portlet-help,.panel-heading a.portlet-refresh.refreshing,.panel-heading a[data-toggle]:hover{opacity:1}.portlet-icon{-moz-osx-font-smoothing:grayscale;font-family:framework-icon;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.portlet-icon-close:before{content:"\e60a"}.portlet-icon-maximize:before{content:"\e634"}.portlet-icon-refresh:before{content:"\e600"}.portlet-icon-collapse:before{content:"\e62c"}.portlet-icon-settings:before{content:"\e655"}.portlet-icon-refresh-lg-master,.portlet-icon-refresh-lg-white{width:15px;height:15px;display:block;background-size:cover;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.portlet-icon-refresh-lg-master.fade,.portlet-icon-refresh-lg-white.fade{opacity:.1}.portlet-icon-refresh-lg-master{background-image:url(qrc:///assets/img/progress/progress-circle-lg-master-static.svg)}.portlet-icon-refresh-lg-white{background-image:url(qrc:///assets/img/progress/progress-circle-lg-white-static.svg)}.portlet-icon-refresh-lg-master-animated,.portlet-icon-refresh-lg-white-animated{width:15px;height:15px;display:block;background-size:cover;opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.portlet-icon-refresh-lg-master-animated.active,.portlet-icon-refresh-lg-white-animated.active{opacity:1}.portlet-icon-refresh-lg-master-animated{background-image:url(qrc:///assets/img/progress/progress-circle-lg-master.svg)}.portlet-icon-refresh-lg-white-animated{background-image:url(qrc:///assets/img/progress/progress-circle-lg-white.svg)}.panel-scroll{height:100px}.ui-sortable-handle{transition:max-height .3s ease 0s}.btn,a[ng-click]{cursor:pointer}.ui-sortable{min-height:0!important}.ui-sortable-placeholder{border:1px dotted #000;visibility:visible!important;height:100%!important}.sortable-box-placeholder *,.ui-sortable-placeholder *{visibility:hidden}.sortable-box-placeholder{background-color:#f0f0f0;border:1px dashed #e6e6e6;display:block;margin-top:0!important;margin-bottom:24px!important}.sortable .panel{transition:none}.btn,a{transition:color .1s linear 0s,background-color .1s linear 0s,opacity .2s linear 0s!important}.sortable-column{padding-bottom:100px}.demo-portlet-scrollable{height:158px}@font-face{font-family:Montserrat;font-style:normal;font-weight:400;src:local('Montserrat-Regular'),url(qrc:///assets/fonts/Montserrat/montserrat-regular-webfont.woff2) format('woff2'),url(qrc:///assets/fonts/Montserrat/montserrat-regular-webfont.woff) format('woff'),url(qrc:///assets/fonts/Montserrat/Montserrat-Regular.ttf) format('truetype')}@font-face{font-family:Montserrat;font-style:normal;font-weight:700;src:local('Montserrat-Bold'),url(qrc:///assets/fonts/Montserrat/montserrat-bold-webfont.woff2) format('woff2'),url(qrc:///assets/fonts/Montserrat/montserrat-bold-webfont.woff) format('woff'),url(qrc:///assets/fonts/Montserrat/Montserrat-Bold.ttf) format('truetype')}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{font-family:"Open Sans",sans-serif;font-size:13px;font-weight:400}option,select{font-family:sans-serif}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:"Open Sans",sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;font-weight:300;color:#2c2c2c}h1{font-size:44px;line-height:55px;letter-spacing:-.08px}h2{font-size:31px;line-height:40px}h3{font-size:27px;line-height:35px}h4{font-size:22px;line-height:31.88px}h5{font-size:18px;line-height:25.88px}h3 small,h4 small,h5 small{font-weight:300}.normal,p{font-weight:400}h1.block,h2.block,h3.block,h4.block,h5.block,h6.block{padding-bottom:10px}a{text-shadow:none!important;color:#E7223C}a:active,a:focus,a:hover{color:#e3223c}a,a:active,a:focus,a:hover{outline:0!important;text-decoration:none}br{line-height:normal;clear:both}code{color:#c64643;background-color:#f0f0f0}code:hover{background-color:#fddddd}p{display:block;font-size:14px;line-height:22px;margin:0 0 10px;white-space:normal}.overflow-ellipsis,.pgn-circle .alert>div>div.pgn-message>div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.small,small{line-height:18px}label.inline{display:inline-block;top:0;font-size:13px}ol>li,ul>li{padding-left:3px;line-height:24px}ol.lg-icon>li,ul.lg-icon>li{font-size:21px}ol.lg-icon>li span,ul.lg-icon>li span{font-size:14px}ol.no-style,ul.no-style{list-style:none;padding-left:5px}address{margin-bottom:0}blockquote{padding:0 0 0 18px;border-left:0}blockquote:before{font-family:FontAwesome;content:"\f10d";margin-right:13px;float:left}blockquote p{font-size:16px}blockquote small{line-height:29px;color:#8b91a0;padding-left:30px}blockquote small:before{content:""}blockquote.pull-right{border-right:0}blockquote.pull-right:before{float:right;font-family:FontAwesome;content:"\f10d";margin-left:13px;margin-right:0}.dropdown-default .dropdown-menu:after,blockquote.pull-right small:after{content:""}blockquote.pull-right small{padding-right:30px}hr{border-color:#e6e6e6}hr.double{border-width:2px}hr.dotted{border-style:dotted none none}.small-text{font-size:12px!important}.normal-text{font-size:13px!important}.large-text{font-size:15px!important}.semi-bold{font-weight:400!important}.bold{font-weight:700!important}.light{font-weight:300!important}.logo{margin:18px 14px}.all-caps{text-transform:uppercase}.muted{color:#e2e2e2}.hint-text{opacity:.7}.no-decoration{text-decoration:none!important}.bg-master{background-color:#626262}.bg-master-light{background-color:#e6e6e6}.bg-master-lighter{background-color:#f0f0f0}.bg-master-lightest{background-color:#fafafa}.bg-master-dark{background-color:#2c2c2c}.bg-master-darker{background-color:#1a1a1a}.bg-master-darkest{background-color:#121212}.bg-primary{background-color:#e3223c}.bg-primary-dark{background-color:#b81c31}.bg-primary-darker{background-color:#881424}.bg-primary-light{background-color:#e94e63}.bg-primary-lighter{background-color:#f9d3d8}.bg-complete{background-color:#e3223c}.bg-complete-dark{background-color:#b81c31}.bg-complete-darker{background-color:#881424}.bg-complete-light{background-color:#e94e63}.bg-complete-lighter{background-color:#f9d3d8}.bg-success{background-color:#e3223c}.bg-success-dark{background-color:#b81c31}.bg-success-darker{background-color:#881424}.bg-success-light{background-color:#e94e63}.bg-success-lighter{background-color:#f9d3d8}.bg-info{background-color:#3b4752}.bg-info-dark{background-color:#303a42}.bg-info-darker{background-color:#232b31}.bg-info-light{background-color:#626c75}.bg-info-lighter{background-color:#d8dadc}.bg-danger{background-color:#f55753}.bg-danger-dark{background-color:#c64643}.bg-danger-darker{background-color:#933432}.bg-danger-light{background-color:#f77975}.bg-danger-lighter{background-color:#fddddd}.bg-warning{background-color:#f8d053}.bg-warning-dark{background-color:#c9a843}.bg-warning-darker{background-color:#957d32}.bg-warning-light{background-color:#f9d975}.bg-warning-lighter{background-color:#fef6dd}.bg-menu-dark{background-color:#0f0e12}.bg-menu{background-color:#131218}.bg-menu-light{background-color:#4c4a55}.gradient-black,.gradient-grey{background:-webkit-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,.8) 75%);background:linear-gradient(to bottom,rgba(0,0,0,0) 0,rgba(0,0,0,.8) 75%)}.bg-white{background-color:#fff}.bg-transparent{background-color:transparent!important}.text-master{color:#626262!important}.text-master-light{color:#e6e6e6!important}.text-black{color:#2c2c2c!important}.text-white{color:#fff!important}.text-complete,.text-success{color:#e3223c!important}.text-info{color:#3b4752!important}.text-warning{color:#f8d053!important}.text-warning-dark{color:#c9a843!important}.text-danger{color:#f55753!important}.text-primary{color:#e3223c!important}.text-right{text-align:right!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.label{padding:3px 9px;font-size:11px;text-shadow:none;background-color:#e6e6e6;font-weight:600;color:#626262}.label-success{background-color:#e3223c;color:#fff}.label-warning{background-color:#f8d053;color:#fff}.label-danger,.label-important{background-color:#E3223C;color:#fff}.label-info{background-color:#e3223c;color:#fff}.label-inverse{background-color:#b81c31;color:#fff}.label-white{background-color:#fff;color:#626262}.fs-10{font-size:10px!important}.fs-11{font-size:11px!important}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-15{font-size:15px!important}.fs-16{font-size:16px!important}.lh-normal{line-height:normal}.lh-10{line-height:10px}.lh-11{line-height:11px}.lh-12{line-height:12px}.lh-13{line-height:13px}.lh-14{line-height:14px}.lh-15{line-height:15px}.lh-16{line-height:16px}.font-arial{font-family:Arial,sans-serif!important}.font-montserrat{font-family:Montserrat!important}.font-georgia{font-family:Georgia!important}.font-heading{font-family:"Open Sans",sans-serif}.well{background-color:#e6e6e6;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;box-shadow:none!important;border:none;background-image:none}.btn,.btn-group.open .dropdown-toggle,.btn.active,.btn.disabled,.btn:active,.btn:focus,.btn:hover,.btn[disabled],.open .dropdown-toggle,.open.dropdown-default .dropdown-toggle{box-shadow:none}.well.well-large{padding:24px;width:auto}.well.well-small{padding:13px;width:auto}.well.green{background-color:#e3223c;color:#fff;border:none}.jumbotron p{font-size:14px;font-weight:400;margin-bottom:inherit}.jumbotron p.small{font-size:85%}@media (max-width:1400px){body,p{font-size:13px;line-height:20px}h1{font-size:33px;line-height:44px;letter-spacing:-.08px}h2{font-size:28px;line-height:40px}h3{font-size:24px;line-height:35.88px}h4{font-size:18px;line-height:33.88px}h5{font-size:16px;line-height:25.88px}.small,small{font-size:89%;line-height:17px}}.windows body,.windows p{font-size:13px;letter-spacing:normal}.windows h1{font-size:33px;line-height:49px}.windows h2{font-size:29px;line-height:40px}.windows h3{font-size:29px;line-height:33px}.windows h4{font-size:23px;line-height:32px}.windows h5{font-size:19px;line-height:28px}.windows h1,.windows h2,.windows h3,.windows h4,.windows h5{font-weight:300;letter-spacing:normal}.windows .jumbotron p{font-size:13px}.windows .jumbotron p.small{font-size:88%}.windows .small,.windows small{font-size:89%}.btn{font-family:Arial,sans-serif;font-size:14px;font-weight:400;letter-spacing:.01em;margin-bottom:0;border:1px solid #f0f0f0;text-align:center;vertical-align:middle;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:none!important;color:#626262;background-color:#fff;text-shadow:none;line-height:21px;padding-left:17px;padding-right:17px}.btn:hover{background-color:#fafafa;border:1px solid rgba(98,98,98,.27)}.btn.active{border-color:#e6e6e6;background:#fff}.btn .caret{margin-left:3px}.btn .caret.single{margin-left:0}.btn-primary,.btn-primary:focus{color:#fff;background-color:#e3223c;border-color:#e3223c}.btn-primary.active,.btn-primary.active:focus,.btn-primary:active,.btn-primary:active:focus,.btn-primary:active:hover,.open .dropdown-toggle.btn-primary{background-color:#b81c31;border-color:#b81c31;color:#fff}.btn-primary.hover,.btn-primary:hover,.open .dropdown-toggle.btn-primary{background-color:#e94e63;border-color:#e94e63;color:#fff}.btn-primary.active:hover{background:#c31d34;border-color:#c31d34}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#e3223c;border-color:#e3223c}.btn-primary .badge{color:#e3223c;background-color:#fff}.btn-success,.btn-success:focus{color:#fff;background-color:#e3223c;border-color:#e3223c}.btn-success.active,.btn-success.active:focus,.btn-success:active,.btn-success:active:focus,.btn-success:active:hover,.open .dropdown-toggle.btn-success{background-color:#b81c31;border-color:#b81c31;color:#fff}.btn-success.hover,.btn-success:hover,.open .dropdown-toggle.btn-success{background-color:#e94e63;border-color:#e94e63;color:#fff}.btn-success.active:hover{background:#c31d34;border-color:#c31d34}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#e3223c;border-color:#e3223c}.btn-success .badge{color:#e3223c;background-color:#fff}.btn-complete,.btn-complete:focus{color:#fff;background-color:#e3223c;border-color:#e3223c}.btn-complete.active,.btn-complete.active:focus,.btn-complete:active,.btn-complete:active:focus,.btn-complete:active:hover,.open .dropdown-toggle.btn-complete{background-color:#b81c31;border-color:#b81c31;color:#fff}.btn-complete.hover,.btn-complete:hover,.open .dropdown-toggle.btn-complete{background-color:#e94e63;border-color:#e94e63;color:#fff}.btn-complete.active:hover{background:#c31d34;border-color:#c31d34}.btn-complete.disabled,.btn-complete.disabled.active,.btn-complete.disabled:active,.btn-complete.disabled:focus,.btn-complete.disabled:hover,.btn-complete[disabled],.btn-complete[disabled].active,.btn-complete[disabled]:active,.btn-complete[disabled]:focus,.btn-complete[disabled]:hover,fieldset[disabled] .btn-complete,fieldset[disabled] .btn-complete.active,fieldset[disabled] .btn-complete:active,fieldset[disabled] .btn-complete:focus,fieldset[disabled] .btn-complete:hover{background-color:#e3223c;border-color:#e3223c}.btn-complete .badge{color:#e3223c;background-color:#fff}.btn-info,.btn-info:focus{color:#fff;background-color:#3b4752;border-color:#3b4752}.btn-info.active,.btn-info.active:focus,.btn-info:active,.btn-info:active:focus,.btn-info:active:hover,.open .dropdown-toggle.btn-info{background-color:#303a42;border-color:#303a42;color:#fff}.btn-info.hover,.btn-info:hover,.open .dropdown-toggle.btn-info{background-color:#626c75;border-color:#626c75;color:#fff}.btn-info.active:hover{background:#333d47;border-color:#333d47}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#3b4752;border-color:#3b4752}.btn-info .badge{color:#3b4752;background-color:#fff}.btn-warning,.btn-warning:focus{color:#fff;background-color:#f8d053;border-color:#f8d053}.btn-warning.active,.btn-warning.active:focus,.btn-warning:active,.btn-warning:active:focus,.btn-warning:active:hover,.open .dropdown-toggle.btn-warning{background-color:#c9a843;border-color:#c9a843;color:#fff}.btn-warning.hover,.btn-warning:hover,.open .dropdown-toggle.btn-warning{background-color:#f9d975;border-color:#f9d975;color:#fff}.btn-warning.active:hover{background:#d5b347;border-color:#d5b347}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f8d053;border-color:#f8d053}.btn-warning .badge{color:#E3223C;background-color:#fff}.btn-danger,.btn-danger:focus{color:#fff;background-color:#e3223c;border-color:#e3223c}.btn-danger.active,.btn-danger.active:focus,.btn-danger:active,.btn-danger:active:focus,.btn-danger:active:hover,.open .dropdown-toggle.btn-danger{background-color:#c64643;border-color:#c64643;color:#fff}.btn-danger.hover,.btn-danger:hover,.open .dropdown-toggle.btn-danger{background-color:#f77975;border-color:#f77975;color:#fff}.btn-danger.active:hover{background:#d34b47;border-color:#d34b47}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#e3223c;border-color:#e3223c}.btn-danger .badge{color:#e3223c;background-color:#fff}.btn-default,.btn-default:focus{color:#5e5e5e;background-color:#fff;border-color:#f0f0f0}.btn-default.active,.btn-default.active:focus,.btn-default:active,.btn-default:active:focus,.btn-default:active:hover{background-color:#f0f0f0;border-color:#e6e6e6;color:#2c2c2c}.btn-default.hover,.btn-default:hover{background-color:#fafafa;border-color:rgba(98,98,98,.27);color:#1a1a1a}.btn-default.active:hover{background:#f0f0f0}.btn-link{color:#5e5e5e;background-color:transparent;border:none}.btn-link.active,.btn-link.disabled,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled]{background-color:transparent;border:none;text-decoration:none;outline:0}.btn-file{overflow:hidden}.btn-file input[type=file]{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;filter:alpha(opacity=0);opacity:0;background:red;cursor:inherit;display:block}.btn-group-lg>.btn,.btn-lg{padding-left:28px;padding-right:28px;line-height:23px}.btn-group-sm>.btn,.btn-sm{padding-left:16px;padding-right:16px;font-size:11.9px;line-height:20px}.btn-group-xs>.btn,.btn-xs{padding:2px 9px;font-size:8.5px}.btn-cons{margin-right:5px;min-width:120px}.btn-group{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-rounded{border-radius:100px}.dropdown-default{display:inline-block}.dropdown-default.open>.btn.dropdown-toggle{border-color:transparent!important;background:0 0!important;z-index:791!important}.dropdown-default.open .dropdown-menu{opacity:1;transform:scale(1,1);z-index:700}.dropdown-default.open .dropdown-menu li{visibility:visible}.dropdown-default.open.dropup>.btn-complete+.dropdown-menu:after,.dropdown-default.open.dropup>.btn-danger+.dropdown-menu:after,.dropdown-default.open.dropup>.btn-info+.dropdown-menu:after,.dropdown-default.open.dropup>.btn-primary+.dropdown-menu:after,.dropdown-default.open.dropup>.btn-success+.dropdown-menu:after,.dropdown-default.open.dropup>.btn-warning+.dropdown-menu:after{top:auto;bottom:0}.dropdown-default.open>.btn-complete+.dropdown-menu:after,.dropdown-default.open>.btn-danger+.dropdown-menu:after,.dropdown-default.open>.btn-info+.dropdown-menu:after,.dropdown-default.open>.btn-primary+.dropdown-menu:after,.dropdown-default.open>.btn-success+.dropdown-menu:after,.dropdown-default.open>.btn-warning+.dropdown-menu:after{top:0;height:42px}.dropdown-default.open>.btn-complete+.dropdown-menu:after,.dropdown-default.open>.btn-primary+.dropdown-menu:after,.dropdown-default.open>.btn-success+.dropdown-menu:after{background-color:#e3223c}.dropdown-default.open>.btn-warning+.dropdown-menu:after{background-color:#f8d053}.dropdown-default.open>.btn-danger+.dropdown-menu:after{background-color:#f55753}.dropdown-default.open>.btn-info+.dropdown-menu:after{background-color:#3b4752}.dropdown-default.dropup .btn.dropdown-toggle.btn-lg+.dropdown-menu{margin-bottom:-47px;padding-bottom:49px}.dropdown-default.dropup .btn.dropdown-toggle.btn-lg+.dropdown-menu:after{bottom:49px}.dropdown-default.dropup .btn.dropdown-toggle.btn-sm+.dropdown-menu{margin-bottom:-34px;padding-bottom:36px}.dropdown-default.dropup .btn.dropdown-toggle.btn-sm+.dropdown-menu:after{bottom:36px}.dropdown-default.dropup .btn.dropdown-toggle.btn-xs+.dropdown-menu{margin-bottom:-29px;padding-bottom:31px}.dropdown-default.dropup .btn.dropdown-toggle.btn-xs+.dropdown-menu:after{bottom:31px}.dropdown-default.dropup .dropdown-menu{margin-bottom:-40px;padding:0 3px 44px 0!important;transform-origin:center bottom 0}.dropdown-default.dropup .dropdown-menu:after{bottom:43px;top:auto!important}.dropdown-default .btn.dropdown-toggle{text-align:left;padding-right:27px}.dropdown-default .btn.dropdown-toggle.btn-lg{padding-right:42px}.dropdown-default .btn.dropdown-toggle.btn-lg .caret{right:26px}.dropdown-default .btn.dropdown-toggle.btn-lg+.dropdown-menu{margin-top:-47px;padding-top:49px}.dropdown-default .btn.dropdown-toggle.btn-lg+.dropdown-menu:after{top:49px}.dropdown-default .btn.dropdown-toggle.btn-sm{padding-right:26px}.dropdown-default .btn.dropdown-toggle.btn-sm .caret{right:16px}.dropdown-default .btn.dropdown-toggle.btn-sm+.dropdown-menu{margin-top:-34px;padding-top:36px}.dropdown-default .btn.dropdown-toggle.btn-sm+.dropdown-menu:after{top:36px}.dropdown-default .btn.dropdown-toggle.btn-xs{padding-right:21px}.dropdown-default .btn.dropdown-toggle.btn-xs .caret{right:8px}.dropdown-default .btn.dropdown-toggle.btn-xs+.dropdown-menu{margin-top:-29px;padding-top:31px}.dropdown-default .btn.dropdown-toggle.btn-xs+.dropdown-menu:after{top:31px}.dropdown-default .btn.dropdown-toggle .caret{position:absolute;right:15px;top:50%;margin-top:-2px}.dropdown-default .btn-rounded{padding-left:17px;padding-right:17px}.dropdown-default .btn-rounded+.dropdown-menu{border-radius:17px}.dropdown-default .dropdown-menu{margin-top:-40px;padding-top:42px;overflow:hidden;backface-visibility:hidden;display:block;opacity:0;transform:scale(1,0);transform-origin:center top 0;-webkit-transition:all 170ms cubic-bezier(.05,.74,.27,.99) 0s;transition:all 170ms cubic-bezier(.05,.74,.27,.99) 0s;z-index:-1}.btn-animated,.btn-animated>span{-webkit-backface-visibility:hidden}.dropdown-default .dropdown-menu:after{position:absolute;height:1px;left:0;top:42px;background:#e6e6e6;width:100%}.dropdown-default .dropdown-menu li{visibility:hidden}.dropdown-menu{position:absolute;display:none;float:left;list-style:none;text-shadow:none;box-shadow:0 0 5px rgba(98,98,98,.2);border:none;border-radius:3px;font-size:13px;margin:0;background:#fafafa;min-width:50px;z-index:700}.dropdown-menu .divider{background-color:#e6e6e6;height:1px;margin:3px 0;border-bottom:0}.btn-animated:before,.btn-animated>span{height:100%;width:100%;-webkit-transition:all .2s ease-in-out}.dropdown-menu>li{padding-left:0}.dropdown-menu>li:first-child{padding-top:9px}.dropdown-menu>li:last-child{padding-bottom:9px}.dropdown-menu>li.dropdown-header{padding:3px 20px}.dropdown-menu>li.active>a,.dropdown-menu>li.active>a:focus,.dropdown-menu>li.active>a:hover{color:#1a1a1a;text-decoration:none;background-color:#f0f0f0;background-image:none}.dropdown-menu>li.disabled>a,.dropdown-menu>li.disabled>a:focus,.dropdown-menu>li.disabled>a:hover{color:#959595}.dropdown-menu>li.disabled>a:focus,.dropdown-menu>li.disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent;background-image:none}.dropdown-menu>li>a{line-height:35px;color:#626262;padding:0 20px;border-radius:3px;text-align:left}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#1a1a1a;text-decoration:none;background-color:transparent;background-image:none}.dropdown-backdrop{z-index:600}.btn-animated{overflow:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d}.btn-animated>span{display:inline-block;-moz-backface-visibility:hidden;backface-visibility:hidden;transition:all .2s ease-in-out;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d}.nav-tabs-fillup,.nav-tabs-simple>li:after,.progress-circle{-webkit-backface-visibility:hidden}.btn-animated:before{position:absolute;font-size:100%;line-height:2.5;transition:all .2s ease-in-out}.btn-animated:after{content:'';position:absolute;z-index:-1;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.btn-animated.from-top:before{left:0;top:-100%}.btn-animated.from-top.show-icon:before,.btn-animated.from-top:hover:before{top:0}.btn-animated.from-top.show-icon>span,.btn-animated.from-top:hover>span{-webkit-transform:translateY(300%);-ms-transform:translateY(300%);transform:translateY(300%)}.btn-animated.from-left:before{left:-100%;top:0}.btn-animated.from-left.show-icon:before,.btn-animated.from-left:hover:before{left:0}.btn-animated.from-left.show-icon>span,.btn-animated.from-left:hover>span{-webkit-transform:translateX(200%);-ms-transform:translateX(200%);transform:translateX(200%)}.btn-animated.fa:before{font-family:FontAwesome}.btn-animated.pg:before{font-family:framework-icon}.btn-tag{line-height:17px;border-radius:17px 3px 3px 17px;padding:5px 19px}.btn-tag.hover,.btn-tag:hover{border-color:transparent}.btn-tag.btn-tag-light{background:#fafdff;color:#5b8ca5;border:1px solid #cbe4f0}.btn-tag.btn-tag-light:hover{background:#fff}.btn-tag.btn-tag-dark{background:#e6e6e6;color:#626262}.btn-tag.btn-tag-dark:hover{background:#ebebeb}.btn-tag.btn-tag-rounded{border-radius:17px}.btn-toolbar .btn{padding-left:14px;padding-right:14px}.pager .disabled>button,.pager .disabled>button:focus,.pager .disabled>button:hover,.pager .disabled>span{cursor:not-allowed;opacity:.5}.checkbox label,.cs-select span,.notification-panel .notification-body .notification-item .heading .thumbnail-wrapper,.notification-positions .position:hover,.radio label{cursor:pointer}.alert{background-image:none;box-shadow:none;text-shadow:none;padding:9px 19px 9px 15px;border-radius:3px;font-size:13px;border-width:0;-webkit-transition:all .2s linear 0s;transition:all .2s linear 0s}.alert.bordered{border-width:1px}.alert .link{color:#ce8f22;font-weight:700}.alert .alert-heading{color:#ce8f22!important;margin-bottom:5px;font-weight:600}.alert .btn-small{position:relative;top:-3.5px}.alert .button-set .btn{position:relative;top:8px}.alert .close{background:url(qrc:///assets/icons/noti-cross.png) -9px -10px no-repeat;width:10px;height:9px;position:relative;opacity:.8;top:4.5px;margin-left:20px;font-size:0}.alert .close:hover,.notification-panel .notification-body .notification-item.unread .heading{opacity:1}.alert-danger,.alert-error{background-color:#fddddd;color:#933432;border-color:#933432}.alert-danger .close,.alert-error .close{background-position:-95px -10px!important}.alert-warning{background-color:#fef6dd;color:#957d32;border-color:#957d32}.alert-info,.alert-success{background-color:#f9d3d8;color:#881424;border-color:#881424}.alert-info .close{background-position:-67px -10px!important}.alert-success .close{background-position:-38px -10px!important}.alert-default{background-color:#fff;color:#626262;border-color:#e6e6e6}.alert-default .close{background-position:-67px -10px!important}.badge{text-shadow:none;font-family:"Open Sans",sans-serif;font-weight:600;background-color:#e6e6e6;font-size:11px;padding-left:6px;padding-right:6px;padding-bottom:4px;color:#626262}.badge-success{background-color:#e3223c;color:#fff}.badge-warning{background-color:#f8d053;color:#fff}.badge-danger,.badge-important{background-color:#f55753;color:#fff}.badge-info{background-color:#3b4752;color:#fff}.badge-inverse{background-color:#881424;color:#fff}.badge-white{background-color:#fff;color:#626262}.badge-disable{background-color:#2c2c2c;color:#626262}.popover{border:1px solid rgba(0,0,0,.1);box-shadow:0 0 9px rgba(191,191,191,.36);z-index:790}.notification-toggle{top:35px;left:-26px;padding:0}.notification-toggle:after,.notification-toggle:before{border-bottom:0!important}.notification-panel{background-color:#fff;border:1px solid #e6e6e6}.notification-panel .notification-body{height:auto;max-height:350px;position:relative;overflow:hidden}.notification-panel .notification-body .notification-item{position:relative;margin-left:25px;background-color:#fff;padding-right:26px}.notification-panel .notification-body .notification-item.unread .option{background-color:#f9d3d8}.notification-panel .notification-body .notification-item.unread .option .mark{color:#e94e63}.notification-panel .notification-body .notification-item .heading{line-height:43px;margin-right:5px;background:#fff;border-bottom:1px solid #e6e6e6;position:relative;float:left;width:100%;font-size:14px;opacity:.7}.notification-panel .notification-body .notification-item .heading:after{content:'';position:absolute;width:5px;height:100%;background-color:#fff;right:0;top:1px}.notification-panel .notification-body .notification-item .heading .thumbnail-wrapper i{-webkit-transition:all .12s linear;transition:all .12s linear}.notification-panel .notification-body .notification-item .heading .time{font-size:11px;margin-right:8px}.notification-panel .notification-body .notification-item .heading.open,.notification-panel .notification-body .notification-item .heading.open .more-details{display:block}.notification-panel .notification-body .notification-item .heading.open .thumbnail-wrapper i{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.notification-panel .notification-body .notification-item .heading .thumbnail-wrapper.d24{line-height:20px}.notification-panel .notification-body .notification-item .more-details{display:none;background-color:#fff;width:100%;height:100%;clear:both;position:relative}.notification-panel .notification-body .notification-item .more-details .more-details-inner{margin-left:10px;padding-left:28px;padding-top:15px;margin-bottom:20px;position:relative;border-left:1px solid rgba(230,230,230,.7)}.notification-panel .notification-body .notification-item .more-details .more-details-inner:after{width:14px;height:14px;position:absolute;content:'';background-color:#fff;left:-7px;top:25px;border:1px solid rgba(230,230,230,.9);border-radius:99px;-webkit-border-radius:99px;-moz-border-radius:99px}.notification-panel .notification-body .notification-item .more-details .more-details-inner:before{color:silver;position:absolute;bottom:0;left:-5px;content:' \25CF';font-size:13px;line-height:5px;background-color:#fff;height:9px}.notification-panel .notification-body .notification-item .more-details .more-details-inner .hint-text{opacity:.44}.notification-panel .notification-body .notification-item .option{font-size:10px;position:absolute;width:26px;right:0;text-align:center;vertical-align:middle;line-height:44px;background-color:#fafafa;height:100%}.notification-panel .notification-body .notification-item .option .mark{background-color:transparent;color:silver}.notification-panel .notification-body .notification-item .option .mark:before{content:' \25CF';font-size:12px}.notification-panel .notification-body .notification-item:last-child .heading{border-bottom:0}.notification-panel .notification-footer{padding:10px;display:block;border-top:1px solid #e6e6e6}.pgn-bar .alert,.pgn-simple .alert{padding-top:13px;padding-bottom:13px}.notification-panel .notification-footer a{color:#626262;opacity:.54}.notification-panel .notification-footer a:hover{opacity:.74}.alerts-container{position:fixed;width:350px;right:20px;z-index:999;top:80px}.alerts-container[data-placement$='-left']{left:100px;right:auto}.alerts-container[data-placement$='-right']{right:20px;left:auto}.alerts-container[data-placement^=top-]{top:80px;bottom:auto}.alerts-container[data-placement^=bottom-]{top:auto;bottom:20px}.alerts-container[data-placement=bottom-right] .alert:last-child,.alerts-container[data-placement=bottom-left] .alert:last-child{margin-bottom:0}.alerts-container .alert{position:relative}.alerts-container .alert .close{position:absolute;right:9px;top:15px}body.menu-pin>.pgn-wrapper[data-position$='-left'],body.menu-pin>.pgn-wrapper[data-position=top],body.menu-pin>.pgn-wrapper[data-position=bottom]{left:250px}.pgn-wrapper{position:fixed;z-index:1000}.pgn-wrapper[data-position$='-left']{left:30px}.pgn-wrapper[data-position$='-right']{right:20px}.pgn-wrapper[data-position^=top-]{top:20px}.pgn-wrapper[data-position^=bottom-]{bottom:20px}.pgn-wrapper[data-position=top]{top:0;left:0;right:0}.pgn-wrapper[data-position=bottom]{bottom:0;left:0;right:0}.pgn{position:relative;margin:10px}.pgn .alert,.pgn-bar{margin:0}.pgn-simple .alert{max-width:500px;animation:fadeIn .3s cubic-bezier(.05,.74,.27,.99) forwards;-webkit-animation:fadeIn .3s cubic-bezier(.05,.74,.27,.99) forwards;max-height:250px;overflow:hidden}.pgn-bar{overflow:hidden}.pgn-bar .alert{border-radius:0;max-height:91px}.pgn-wrapper[data-position=top] .pgn-bar .alert{animation:slideInFromTop .5s cubic-bezier(.05,.74,.27,.99) forwards;-webkit-animation:slideInFromTop .5s cubic-bezier(.05,.74,.27,.99) forwards;transform-origin:top left;-webkit-transform-origin:top left}.pgn-wrapper[data-position=bottom] .pgn-bar .alert{animation:slideInFromBottom .5s cubic-bezier(.05,.74,.27,.99) forwards;-webkit-animation:slideInFromBottom .5s cubic-bezier(.05,.74,.27,.99) forwards;transform-origin:bottom left;-webkit-transform-origin:bottom left}.pgn-bar .alert span{opacity:0;animation:fadeIn .3s cubic-bezier(.05,.74,.27,.99) forwards;-webkit-animation:fadeIn .3s cubic-bezier(.05,.74,.27,.99) forwards}@keyframes slideInFromTop{0%{transform:translateY(-100%)}100%{transform:translateY(0)}}@-webkit-keyframes slideInFromTop{0%{-webkit-transform:translateY(-100%)}100%{-webkit-transform:translateY(0)}}@keyframes slideInFromBottom{0%{transform:translateY(100%)}100%{transform:translateY(0)}}@-webkit-keyframes slideInFromBottom{0%{-webkit-transform:translateY(100%)}100%{-webkit-transform:translateY(0)}}.pgn-circle .alert{border-radius:300px;animation:fadeInCircle .3s ease forwards,resizeCircle .3s .4s cubic-bezier(.25,.25,.4,1.6) forwards;-webkit-animation:fadeInCircle .3s ease forwards,resizeCircle .3s .4s cubic-bezier(.25,.25,.4,1.6) forwards;height:60px;overflow:hidden;padding:6px 55px 6px 6px;-webkit-transform:translateZ(0);position:relative}.pgn-wrapper[data-position$='-right'] .pgn-circle .alert{float:right}.pgn-wrapper[data-position$='-left'] .pgn-circle .alert{float:left}.pgn-circle .alert>div>div.pgn-thumbnail>div{border-radius:50%;overflow:hidden;width:48px;height:48px}.pgn-circle .alert>div>div.pgn-thumbnail>div>img{width:100%;height:100%}.pgn-circle .alert>div>div.pgn-message>div{opacity:0;height:47px;padding-left:9px;animation:fadeIn .3s .5s ease forwards;-webkit-animation:fadeIn .3s .5s ease forwards;word-break:break-all;word-wrap:break-word}.pgn-circle .alert>div>div.pgn-message>div p:only-child{padding:12px 0}.pgn-circle .alert .close{position:absolute;right:18px;top:50%;opacity:0;animation:fadeIn .3s .5s ease forwards;-webkit-animation:fadeIn .3s .5s ease forwards;margin-top:-4px}.pgn-circle .alert p{margin-bottom:0}.pgn-circle .alert>div{display:table;height:100%}.pgn-circle .alert>div>div{display:table-cell;vertical-align:middle}@keyframes fadeInCircle{0%{opacity:0;width:60px}100%{opacity:1;width:60px}}@-webkit-keyframes fadeInCircle{0%{opacity:0;width:60px}100%{opacity:1;width:60px}}@keyframes resizeCircle{0%{width:60px}100%{width:300px}}@-webkit-keyframes resizeCircle{0%{width:60px}100%{width:300px}}.pgn-wrapper[data-position^=top-] .pgn-flip{top:-30px}.pgn-wrapper[data-position^=bottom-] .pgn-flip{bottom:-30px}.pgn-wrapper[data-position^=bottom-] .pgn-flip .alert{-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.pgn-flip .alert{-webkit-transform-origin:50% 0;transform-origin:50% 0;box-shadow:0 6px 4px -3px rgba(0,0,0,.2);-webkit-animation-name:flipInX;animation-name:flipInX;-webkit-animation-duration:.8s;animation-duration:.8s;border-radius:0;padding:25px 35px;max-width:500px;max-height:250px;overflow:hidden}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-90deg);-webkit-transition-timing-function:ease-in}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,20deg);-webkit-transition-timing-function:ease-out}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-10deg);-webkit-transition-timing-function:ease-in;opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,5deg);-webkit-transition-timing-function:ease-out}100%{-webkit-transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-90deg);transform:perspective(400px) rotate3d(1,0,0,-90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,20deg);transform:perspective(400px) rotate3d(1,0,0,20deg);-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-10deg);transform:perspective(400px) rotate3d(1,0,0,-10deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,5deg);transform:perspective(400px) rotate3d(1,0,0,5deg);-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}body>.pgn-wrapper[data-position=top]{top:60px;left:70px}body>.pgn-wrapper[data-position=bottom]{left:70px}body>.pgn-wrapper[data-position$='-left']{left:90px;right:auto}body>.pgn-wrapper[data-position^=top-]{top:80px;bottom:auto}body>.pgn-wrapper{z-index:900}@media (max-width:979px){body>.pgn-wrapper[data-position=top],body>.pgn-wrapper[data-position=bottom]{left:0}}@media (max-width:767px){body>.pgn-wrapper[data-position$='-left'],body>.pgn-wrapper[data-position$='-right']{left:10px!important;right:10px!important}body>.pgn-wrapper[data-position$='-left'] .alert,body>.pgn-wrapper[data-position$='-right'] .alert{max-width:100%;width:100%}}.notification-positions{border-radius:4px;border:3px dashed #e6e6e6;height:370px;position:relative}.notification-positions>div>.position:not(:only-child){max-width:50%}.notification-positions .position{padding:15px}.notification-positions .position img{border:3px solid transparent;width:100%}.progress,.progress-bar{border-radius:0;box-shadow:none}.notification-positions .position.active img{border-color:#0090d9}.notification-positions .position.pull-bottom,.notification-positions .position.pull-top{left:0;right:0}.progress{height:4px;background-color:rgba(98,98,98,.2);background-image:none}.progress.transparent{background-color:rgba(0,0,0,.28)}.progress.progress-small{height:3px}.progress-bar-indeterminate{background:url(qrc:///assets/img/progress/progress-bar-master.svg) top left no-repeat;width:100%;height:100%;background-size:cover}.progress-bar-indeterminate.progress-bar-primary{background-image:url(qrc:///assets/img/progress/progress-bar-primary.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-complete{background-image:url(qrc:///assets/img/progress/progress-bar-complete.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-success{background-image:url(qrc:///assets/img/progress/progress-bar-success.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-info{background-image:url(qrc:///assets/img/progress/progress-bar-info.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-warning{background-image:url(qrc:///assets/img/progress/progress-bar-warning.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-danger{background-image:url(qrc:///assets/img/progress/progress-bar-danger.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-master{background-image:url(qrc:///assets/img/progress/progress-bar-master.svg);background-color:transparent}.progress-bar{background-color:#626262;background-image:none;-webkit-transition:all 1s cubic-bezier(.785,.135,.15,.86);transition:all 1s cubic-bezier(.785,.135,.15,.86);-webkit-transition-timing-function:cubic-bezier(.785,.135,.15,.86);-moz-transition-timing-function:cubic-bezier(.785,.135,.15,.86);-ms-transition-timing-function:cubic-bezier(.785,.135,.15,.86);-o-transition-timing-function:cubic-bezier(.785,.135,.15,.86);transition-timing-function:cubic-bezier(.785,.135,.15,.86)}.progress-bar-complete,.progress-bar-primary,.progress-bar-success{background-color:#e3223c;background-image:none}.progress-bar-info{background-color:#3b4752;background-image:none}.progress-bar-warning{background-color:#f8d053;background-image:none}.progress-bar-danger{background-color:#f55753;background-image:none}.progress-bar-white{background-color:#fff;background-image:none}.progress-bar-black{background-color:#000;background-image:none}.progress .bar-info,.progress-info .bar{background-color:#232b31;background-image:none}.progress .bar-warning,.progress-warning .bar{background-color:#957d32;background-image:none}.progress .bar-danger,.progress-danger .bar{background-color:#933432;background-image:none}.progress .bar-white,.progress-white .bar{background-color:#fff;background-image:none}.progress-striped .bar-success,.progress-success.progress-striped .bar{background-color:#e3223c}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#3b4752}.progress-circle-indeterminate{background:url(qrc:///assets/img/progress/progress-circle-master.svg) top left no-repeat;width:50px;height:50px;background-size:100% auto;margin:0 auto}.progress-circle-indeterminate.progress-circle-warning{background-image:url(qrc:///assets/img/progress/progress-circle-warning.svg)}.progress-circle-indeterminate.progress-circle-danger{background-image:url(qrc:///assets/img/progress/progress-circle-danger.svg)}.progress-circle-indeterminate.progress-circle-info{background-image:url(qrc:///assets/img/progress/progress-circle-info.svg)}.progress-circle-indeterminate.progress-circle-primary{background-image:url(qrc:///assets/img/progress/progress-circle-primary.svg)}.progress-circle-indeterminate.progress-circle-success{background-image:url(qrc:///assets/img/progress/progress-circle-success.svg)}.progress-circle-indeterminate.progress-circle-complete{background-image:url(qrc:///assets/img/progress/progress-circle-complete.svg)}.progress-circle{display:block;height:45px;margin:0 auto;position:relative;width:45px}.progress-circle.progress-circle-warning .pie .half-circle{border-color:#f8d053}.progress-circle.progress-circle-danger .pie .half-circle{border-color:#f55753}.progress-circle.progress-circle-info .pie .half-circle{border-color:#3b4752}.progress-circle.progress-circle-complete .pie .half-circle,.progress-circle.progress-circle-primary .pie .half-circle,.progress-circle.progress-circle-success .pie .half-circle{border-color:#e3223c}.progress-circle.progress-circle-thick .pie .half-circle,.progress-circle.progress-circle-thick .shadow{border-width:5px}.progress-circle .pie{clip:rect(0,45px,45px,22.5px);height:45px;position:absolute;width:45px}.progress-circle .pie .half-circle{border:3px solid #626262;border-radius:50%;clip:rect(0,22.5px,45px,0);height:45px;position:absolute;width:45px}.progress-circle .shadow{border:3px solid rgba(0,0,0,.1);border-radius:50%;height:100%;width:100%}.modal .close:focus{outline:0}.modal .modal-dialog{transition:all .2s!important}.modal .modal-content{border:1px solid #f2f6f7;border-radius:3px;box-shadow:none}.modal.fade.center-scale .modal-content .modal-header,.modal.fade.fill-in .modal-content .modal-header{border-bottom:0}.modal{background:rgba(0,0,0,.4)}.modal .modal-header{text-align:center;border-bottom:0;padding:25px 25px 0}.modal .modal-header p{color:#8b91a0}.modal .modal-body{box-shadow:none;padding:0 25px 25px;white-space:normal}.modal .modal-footer{border-top:none;box-shadow:none;margin-top:0;padding:0 25px 25px}.modal .drop-shadow{box-shadow:0 0 9px rgba(191,191,191,.36)!important}.modal.fade{opacity:1!important}.modal.fade.stick-up .modal-dialog{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);-ms-transform:translate(0,-100%);margin-top:-5px}.modal.fade.stick-up.in .modal-dialog{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0)}.modal.fade.slide-up{height:100%;top:auto}.modal.fade.slide-up.in .modal-dialog{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0)}.modal.fade.slide-up.disable-scroll{overflow:hidden}.modal.fade.slide-up .modal-dialog{display:table;height:100%;-webkit-transform:translate3d(0,75%,0);transform:translate3d(0,75%,0);-ms-transform:translate(0,75%)}.modal.fade.slide-up .modal-content-wrapper{display:table-cell;vertical-align:middle}.modal.fade.center-scale .modal-dialog{display:table;height:100%}.modal.fade.center-scale .modal-content{display:table-cell;vertical-align:middle;border:0;background:0 0}.modal.fade.center-scale.in .modal-dialog{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.modal.fade.center-scale .modal-dialog{opacity:0;-webkit-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6)}.modal.fade.fill-in{background-color:rgba(255,255,255,0);-webkit-transition:background-color .3s;transition:background-color .3s}.modal.fade.fill-in>.close{margin-top:20px;margin-right:20px;opacity:.6}.modal.fade.fill-in>.close>i{font-size:16px}.modal.fade.fill-in .modal-dialog{display:table;height:100%}.modal.fade.fill-in .modal-content{display:table-cell;vertical-align:middle;border:0;background:0 0}.modal.fade.slide-right .modal-content,.nav-tabs>li>a{border-radius:0}.modal.fade.fill-in.in{background-color:rgba(255,255,255,.85)}.modal.fade.fill-in.in .modal-dialog{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.modal.fade.fill-in .modal-dialog{opacity:0;-webkit-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6)}.modal.fade.slide-right .close{position:absolute;top:0;right:0;margin-right:10px;z-index:10}.modal.fade.slide-right.in .modal-dialog{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0)}.modal.fade.slide-right .modal-dialog{position:absolute;right:0;margin:0;height:100%;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-ms-transform:translate(100%,0)}.modal.fade.slide-right .modal-dialog .modal-content,.modal.fade.slide-right .modal-dialog .modal-content-wrapper{height:100%}.fill-in-modal .modal-backdrop{background-color:transparent}.modal-backdrop{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s linear;display:none}.modal-backdrop.in{opacity:.3}@media (max-width:768px){.modal.fill-in .modal-dialog,.modal.slide-up .modal-dialog{width:calc(100% - 20px)}}@media (min-width:768px){.modal.stick-up .modal-dialog{margin:-5px auto}.modal.fill-in .modal-dialog,.modal.slide-up .modal-dialog{margin:0 auto}.modal .modal-content{box-shadow:none}}.nav-tabs>li{padding-left:0;padding-right:0}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{border-color:#e6e6e6;color:#626262;background-color:#e6e6e6}.nav-tabs>li>a{padding:15px 20px;margin-right:0;min-width:70px;text-transform:uppercase;border-color:transparent;font-weight:bolder;font-size:13px;color:#333}.nav-tabs>li>a:focus,.nav-tabs>li>a:hover{background:0 0;border-color:transparent;color:#333}.nav-tabs-simple,.nav-tabs.nav-tabs-left:after,.nav-tabs.nav-tabs-right:after{border-bottom:0}.nav-tabs>li>a .tab-icon{margin-right:6px}.nav-tabs~.tab-content{overflow:hidden;padding:15px}.nav-tabs~.tab-content>.tab-pane.slide-left,.nav-tabs~.tab-content>.tab-pane.slide-right{-webkit-transition:all .3s ease!important;transition:all .3s ease!important}.nav-tabs~.tab-content>.tab-pane.slide-left.sliding,.nav-tabs~.tab-content>.tab-pane.slide-right.sliding{opacity:0!important}.nav-tabs~.tab-content>.tab-pane.slide-left.active,.nav-tabs~.tab-content>.tab-pane.slide-right.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0);opacity:1}.nav-tabs~.tab-content>.tab-pane.slide-left.sliding{-webkit-transform:translate3d(10%,0,0)!important;transform:translate3d(10%,0,0)!important;-ms-transform:translate(10%,0)!important}.nav-tabs~.tab-content>.tab-pane.slide-right.sliding{-webkit-transform:translate3d(-10%,0,0)!important;transform:translate3d(-10%,0,0)!important;-ms-transform:translate(-10%,0)!important}.nav-tabs.nav-tabs-left>li,.nav-tabs.nav-tabs-right>li{float:none}.nav-tabs.nav-tabs-left{float:left}.nav-tabs.nav-tabs-left~.tab-content{border-left:1px solid rgba(0,0,0,.1)}.nav-tabs.nav-tabs-right{float:right}.nav-tabs.nav-tabs-right~.tab-content{border-right:1px solid rgba(0,0,0,.1)}.nav-tabs-simple:after{border-bottom:1px solid rgba(0,0,0,.1);width:100%;position:relative;bottom:3px;z-index:120}.nav-tabs-simple>li{margin-bottom:0}.nav-tabs-simple>li:after{-webkit-transition:all .1s linear 0s;transition:all .1s linear 0s;width:100%;display:block;background-color:#f55753;height:0;content:'';z-index:125}.nav-tabs-complete.nav-tabs-simple>li:after,.nav-tabs-primary.nav-tabs-simple>li:after,.nav-tabs-success.nav-tabs-simple>li:after{background-color:#e3223c}.nav-tabs-danger.nav-tabs-simple>li:after{background-color:#f55753}.nav-tabs-warning.nav-tabs-simple>li:after{background-color:#f8d053}.nav-tabs-info.nav-tabs-simple>li:after{background-color:#3b4752}.nav-tabs-simple>li.active a,.nav-tabs-simple>li.active a:focus,.nav-tabs-simple>li.active a:hover{background-color:transparent;border-color:transparent;font-weight:bolder;font-size:13px;color:#333}.nav-tabs-linetriangle,.nav-tabs-simple.nav-tabs-left:after,.nav-tabs-simple.nav-tabs-right:after{border-bottom:0}.nav-tabs-simple>li.active:after,.nav-tabs-simple>li:hover:after{height:3px}.nav-tabs-simple.nav-tabs-left>li:after,.nav-tabs-simple.nav-tabs-right>li:after{width:0;height:100%;top:0;bottom:0;position:absolute}.nav-tabs-simple.nav-tabs-left>li.active:after,.nav-tabs-simple.nav-tabs-left>li:hover:after,.nav-tabs-simple.nav-tabs-right>li.active:after,.nav-tabs-simple.nav-tabs-right>li:hover:after{width:3px}.nav-tabs-simple.nav-tabs-left>li:after{right:0}.nav-tabs-simple.nav-tabs-right>li:after{left:0}.nav-tabs-linetriangle:after{border-bottom:1px solid rgba(0,0,0,.1);width:100%;position:relative;bottom:0}.nav-tabs-linetriangle>li.active>a{background:0 0;box-shadow:none;border-color:transparent}.nav-tabs-linetriangle>li.active>a:active,.nav-tabs-linetriangle>li.active>a:focus,.nav-tabs-linetriangle>li.active>a:hover{border-color:transparent;background-color:transparent}.nav-tabs-linetriangle>li.active>a:after,.nav-tabs-linetriangle>li.active>a:before{border:solid transparent;content:"";height:0;left:50%;pointer-events:none;position:absolute;width:0;z-index:1;top:100%}.nav-tabs-linetriangle>li.active>a:after{border-top-color:#fafafa;border-width:10px;margin-left:-10px}.nav-tabs-linetriangle>li.active>a:before{border-top-color:rgba(0,0,0,.2);border-width:11px;margin-left:-11px}.nav-tabs-linetriangle>li>a span{font-size:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-tabs-linetriangle>li>a,.nav-tabs-linetriangle>li>a:focus,.nav-tabs-linetriangle>li>a:hover{overflow:visible;-webkit-transition:color .2s ease 0s;transition:color .2s ease 0s}.nav-tabs-linetriangle~.tab-content{background:#fff}.nav-tabs-linetriangle.nav-tabs-left.nav-tabs:after{border-bottom:none}.nav-tabs-linetriangle.nav-tabs-left.nav-tabs>li.active>a:before{border-top:11px solid transparent;border-bottom:11px solid transparent;border-left:11px solid rgba(0,0,0,.2)}.nav-tabs-linetriangle.nav-tabs-left.nav-tabs>li.active>a:after{border-top:10px solid transparent;border-bottom:10px solid transparent;border-left:10px solid #fafafa;margin-top:1px;margin-right:2px}.nav-tabs-linetriangle.nav-tabs-left.nav-tabs>li.active>a:after,.nav-tabs-linetriangle.nav-tabs-left.nav-tabs>li.active>a:before{top:auto;right:-23px;left:auto}.nav-tabs-linetriangle.nav-tabs-right.nav-tabs:after{border-bottom:none}.nav-tabs-linetriangle.nav-tabs-right.nav-tabs>li.active>a:before{border-top:11px solid transparent;border-bottom:11px solid transparent;border-right:11px solid rgba(0,0,0,.2)}.nav-tabs-linetriangle.nav-tabs-right.nav-tabs>li.active>a:after{border-top:10px solid transparent;border-bottom:10px solid transparent;border-right:10px solid #fafafa;margin-top:1px;margin-left:-9px}.nav-tabs-linetriangle.nav-tabs-right.nav-tabs>li.active>a:after,.nav-tabs-linetriangle.nav-tabs-right.nav-tabs>li.active>a:before{top:auto;left:-12px;right:auto}@media screen and (max-width:58em){.nav-tabs-linetriangle{font-size:.6em}}.nav-tabs-fillup{-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;-moz-perspective:1000;perspective:1000}.nav-tabs-fillup>li>a,.nav-tabs-fillup>li>a:after{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden}.nav-tabs-fillup>li{overflow:hidden}.nav-tabs-fillup>li>a{backface-visibility:hidden;-webkit-transition:color .3s ease 0s;transition:color .3s ease 0s;background:0 0}.nav-tabs-complete.nav-tabs-fillup>li>a:after,.nav-tabs-fillup>li>a:after,.nav-tabs-primary.nav-tabs-fillup>li>a:after,.nav-tabs-success.nav-tabs-fillup>li>a:after{background:#e3223c;border:1px solid #e3223c}.nav-tabs-fillup>li>a:after{backface-visibility:hidden;content:"";height:calc(100% + 1px);left:0;position:absolute;top:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .3s ease 0s;transition:transform .3s ease 0s;width:100%;z-index:-1}.form-group-default.focused label,.nav-tabs-fillup>li>a span{-moz-backface-visibility:hidden;-webkit-backface-visibility:hidden}.nav-tabs-warning.nav-tabs-fillup>li>a:after{background:#f8d053;border:1px solid #f8d053}.nav-tabs-danger.nav-tabs-fillup>li>a:after{background:#f55753;border:1px solid #f55753}.nav-tabs-info.nav-tabs-fillup>li>a:after{background:#3b4752;border:1px solid #3b4752}.nav-tabs-fillup>li>a span{backface-visibility:hidden;-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0);-webkit-transition:-webkit-transform .5s ease 0s;transition:transform .5s ease 0s;display:block;font-weight:700;line-height:1.5}.nav-tabs-fillup>li.active{z-index:100}.nav-tabs-fillup>li.active>a,.nav-tabs-fillup>li.active>a:focus,.nav-tabs-fillup>li.active>a:hover{border-color:transparent;background:0 0;color:#fff}.nav-tabs-fillup>li.active>a:after{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0)}.nav-tabs-fillup>li.active .icon:before,.nav-tabs-fillup>li.active>a span{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0);-ms-transform:translate(0,-5px)}.nav-tabs-fillup .icon:before{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0);-ms-transform:translate(0,5px);-webkit-transition:transform .5s ease 0s;transition:transform .5s ease 0s;display:block;margin:0}.nav-tabs-fillup~.tab-content{background:#fff}.nav-tabs-fillup.nav-tabs-left,.nav-tabs-fillup.nav-tabs-left:after,.nav-tabs-fillup.nav-tabs-right,.nav-tabs-fillup.nav-tabs-right:after{border-bottom:none}.nav-tabs-fillup.nav-tabs-left>li>a:after,.nav-tabs-fillup.nav-tabs-right>li>a:after{width:calc(100% + 1px);height:100%}.nav-tabs-fillup.nav-tabs-left>li.active a:after,.nav-tabs-fillup.nav-tabs-right>li.active a:after{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0)}.nav-tabs-fillup.nav-tabs-left>li>a:after{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-ms-transform:translate(100%,0)}.nav-tabs-fillup.nav-tabs-left>li>a span{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0);-ms-transform:translate(5px,0)}.nav-tabs-fillup.nav-tabs-left>li.active .icon:before,.nav-tabs-fillup.nav-tabs-left>li.active a span{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0);-ms-transform:translate(-5px,0)}.nav-tabs-fillup.nav-tabs-right>li>a:after{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-ms-transform:translate(-100%,0);left:-1px}.nav-tabs-fillup.nav-tabs-right>li>a span{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0);-ms-transform:translate(-5px,0)}.nav-tabs-fillup.nav-tabs-right>li.active .icon:before,.nav-tabs-fillup.nav-tabs-right>li.active a span{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0);-ms-transform:translate(5px,0)}.panel-group{margin-bottom:18px}.panel-group .panel-heading{padding:13px 18px 10px 22px}.panel-group .panel-heading.collapsed{background-color:#fff}.panel-group .panel-heading+.panel-collapse .panel-body{border:0}.panel-group .panel-heading .panel-title{width:100%}.panel-group .panel-heading .panel-title>a{color:#626262;font-size:13px;font-weight:400;display:block;opacity:1}.panel-group .panel-heading .panel-title>a:hover,.panel-group .panel-heading .panel-title>a:hover:after{color:#626262!important}.panel-group .panel-heading .panel-title>a:after{font-family:FontAwesome;content:"\f056";position:absolute;right:13px;top:36%;color:#626262}.dd-item>button:before,.dd3-handle:before{font-family:framework-icon}.panel-group .panel-heading .panel-title>a.collapsed{color:rgba(98,98,98,.7);opacity:1}.panel-group .panel-heading .panel-title>a.collapsed:after{content:"\f055";color:rgba(98,98,98,.7)}.panel-group .panel+.panel{margin-top:2px}.panel-group .panel .panel-body{height:auto}.nav-pills>li>a{border-radius:0;color:#626262}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#626262;background-color:#e6e6e6}@media (max-width:767px){.nav.nav-tabs.nav-stack-sm li{float:none}.nav.nav-tabs.nav-stack-sm.nav-tabs-linetriangle>li.active>a:after,.nav.nav-tabs.nav-stack-sm.nav-tabs-linetriangle>li.active>a:before{display:none}}.irs-bar,.irs-bar-edge,.irs-line-left,.irs-line-mid,.irs-line-right,.irs-slider{background-image:none}.irs-bar{background:#f55753}.irs-wrapper .irs-line{background-color:#e6e6e6}.irs-wrapper .irs-diapason,.irs-wrapper .irs-line-left,.irs-wrapper .irs-line-mid,.irs-wrapper .irs-line-right,.irs-wrapper .irs-slider{background:0 0}.irs-wrapper .irs-diapason{background-color:#f55753;-webkit-transition:all .3s ease;transition:all .3s ease}.irs-wrapper .irs-from,.irs-wrapper .irs-single,.irs-wrapper .irs-to{background:#f55753}.irs-wrapper .irs-slider.from:before,.irs-wrapper .irs-slider.single:before,.irs-wrapper .irs-slider.to:before{top:-2%;left:37%;width:16%;height:100%;background:rgba(0,0,0,0);background-color:#f55753}.irs-wrapper.primary .irs-from,.irs-wrapper.primary .irs-single,.irs-wrapper.primary .irs-to,.irs-wrapper.success .irs-from,.irs-wrapper.success .irs-single,.irs-wrapper.success .irs-to{background:#e3223c}.irs-wrapper.primary .irs-bar,.irs-wrapper.primary .irs-diapason,.irs-wrapper.primary .irs-slider.from:before,.irs-wrapper.primary .irs-slider.single:before,.irs-wrapper.primary .irs-slider.to:before,.irs-wrapper.success .irs-bar,.irs-wrapper.success .irs-diapason,.irs-wrapper.success .irs-slider.from:before,.irs-wrapper.success .irs-slider.single:before,.irs-wrapper.success .irs-slider.to:before{background-color:#e3223c}.irs-wrapper .irs-from:after,.irs-wrapper .irs-single:after,.irs-wrapper .irs-to:after{border-top-color:#f55753}.irs-wrapper.primary .irs-from:after,.irs-wrapper.primary .irs-single:after,.irs-wrapper.primary .irs-to:after,.irs-wrapper.success .irs-from:after,.irs-wrapper.success .irs-single:after,.irs-wrapper.success .irs-to:after{border-top-color:#e3223c}.irs-wrapper.warning .irs-bar,.irs-wrapper.warning .irs-diapason,.irs-wrapper.warning .irs-slider.from:before,.irs-wrapper.warning .irs-slider.single:before,.irs-wrapper.warning .irs-slider.to:before{background-color:#f8d053}.irs-wrapper.warning .irs-from,.irs-wrapper.warning .irs-single,.irs-wrapper.warning .irs-to{background:#f8d053}.irs-wrapper.warning .irs-from:after,.irs-wrapper.warning .irs-single:after,.irs-wrapper.warning .irs-to:after{border-top-color:#f8d053}.irs-wrapper.complete .irs-bar,.irs-wrapper.complete .irs-diapason,.irs-wrapper.complete .irs-slider.from:before,.irs-wrapper.complete .irs-slider.single:before,.irs-wrapper.complete .irs-slider.to:before{background-color:#e3223c}.irs-wrapper.complete .irs-from,.irs-wrapper.complete .irs-single,.irs-wrapper.complete .irs-to{background:#e3223c}.irs-wrapper.complete .irs-from:after,.irs-wrapper.complete .irs-single:after,.irs-wrapper.complete .irs-to:after{border-top-color:#e3223c}.irs-wrapper.danger .irs-bar,.irs-wrapper.danger .irs-diapason,.irs-wrapper.danger .irs-slider.from:before,.irs-wrapper.danger .irs-slider.single:before,.irs-wrapper.danger .irs-slider.to:before{background-color:#f55753}.irs-wrapper.danger .irs-from,.irs-wrapper.danger .irs-single,.irs-wrapper.danger .irs-to{background:#f55753}.irs-wrapper.danger .irs-from:after,.irs-wrapper.danger .irs-single:after,.irs-wrapper.danger .irs-to:after{border-top-color:#f55753}.noUi-target{border-radius:0;border:0;box-shadow:none}.noUi-target.bg-complete .noUi-connect,.noUi-target.bg-success .noUi-connect{background-color:#e3223c}.noUi-target.bg-warning .noUi-connect{background-color:#f8d053}.noUi-target.bg-danger .noUi-connect{background-color:#f55753}.noUi-target.bg-info .noUi-connect{background-color:#3b4752}.noUi-target.bg-primary .noUi-connect{background-color:#e3223c}.noUi-target.noUi-connect{box-shadow:none}.noUi-handle{border-radius:999px;box-shadow:none}.noUi-handle:after,.noUi-handle:before{display:none}.noUi-horizontal{height:4px}.noUi-horizontal .noUi-handle{width:18px;height:18px;left:-15px;border:1px solid #dbdbdb;top:-7px;-webkit-transition:all .2s ease;transition:all .2s ease}.noUi-horizontal .noUi-handle:hover{border:1px solid silver}.noUi-horizontal .noUi-handle:active,.noUi-horizontal .noUi-handle:focus{-webkit-transform:scale(1.3);-ms-transform:scale(1.3);transform:scale(1.3);border:1px solid #dbdbdb}.disable-hover-scale .noUi-handle:active,.disable-hover-scale .noUi-handle:focus{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.vertical-slider{height:150px}.noUi-vertical{width:4px}.noUi-vertical .noUi-handle{width:18px;height:18px;border:1px solid #dbdbdb;-webkit-transition:all .2s ease;transition:all .2s ease}.noUi-vertical .noUi-handle:hover{border:1px solid silver}.noUi-vertical .noUi-handle:active,.noUi-vertical .noUi-handle:focus{-webkit-transform:scale(1.3);-ms-transform:scale(1.3);transform:scale(1.3);border:1px solid #dbdbdb}.dd-handle,.dd3-content{border-color:rgba(230,230,230,.7)}.noUi-base{padding:5px 0}.noUi-origin{border-radius:0;bottom:5px}.noUi-connect{box-shadow:none}.noUi-background{background:#ececec;box-shadow:none}span.dynatree-active a{color:#2c2c2c!important;background-color:transparent!important}span.dynatree-selected a{color:#2c2c2c!important;font-style:normal}span.dynatree-focused a:link,ul.dynatree-container,ul.dynatree-container a:focus{background-color:transparent}ul.dynatree-container a:hover{color:#626262;opacity:.7;background-color:transparent}ul.dynatree-container a{color:#626262}#dynatree-drop-marker,span.dynatree-checkbox,span.dynatree-connector,span.dynatree-drag-helper-img,span.dynatree-empty,span.dynatree-expander,span.dynatree-icon,span.dynatree-radio,span.dynatree-vline{height:17px;position:relative;top:3px}.dd-handle{color:#626262}.dd-handle:hover{background-color:#fafafa}.dark .dd-handle{color:#626262;background:#f0f0f0}.dark .dd-handle:hover{background-color:#fafafa}.dark .dd-placeholder{background-color:#e6e6e6}.dd3-content{background:#fff;color:#626262}.dd3-content:hover{background-color:#fafafa}.dd3-handle{background:0 0;text-indent:9999px}.dd3-handle:before{color:#626262;content:"\e660";font-size:11px;top:5px}.dd-placeholder{background:#f0f0f0;border-color:rgba(98,98,98,.35)}.dd-empty{background:#f0f0f0;border-color:rgba(98,98,98,.5)}.dd-item>button{font-size:11px}.dd-item>button:before{content:"\e63b"}.dd-item>button[data-action=collapse]:before{font-family:framework-icon;content:"\e635"}@media only screen and (min-width:700px){.dd{width:100%}}button,input,label,select,textarea{font-size:14px;font-weight:400;line-height:20px}input[type=radio],input[type=checkbox]{margin-top:1px 0 0;line-height:normal;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}select[multiple],select[size]{height:auto!important}input:focus,input[type=radio]:focus,input[type=checkbox]:focus,input[type=file]:focus,select:focus,textarea:focus{outline:0;box-shadow:none}form legend{margin:15px 0 10px}.form-control{background-color:#F0F1F3;background-image:none;border:1px solid rgba(0,0,0,.07);font-family:Arial,sans-serif;-webkit-appearance:none;color:#2c2c2c;outline:0;height:35px;padding:9px 12px;line-height:normal;font-size:14px;font-weight:400;vertical-align:middle;min-height:35px;box-shadow:none;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-transition:background .2s linear 0s;transition:background .2s linear 0s}.form-control:focus{border-color:rgba(0,0,0,.1);background-color:#f0f0f0;outline:0!important;box-shadow:none}.form-control:focus::-moz-placeholder{color:inherit;opacity:.7}.form-control:focus:-ms-input-placeholder{color:inherit;opacity:.7}.form-control:focus::-webkit-input-placeholder{color:inherit;opacity:.7}.form-control::-moz-placeholder{color:inherit;opacity:.33}.form-control:-ms-input-placeholder{color:inherit;opacity:.33}.form-control::-webkit-input-placeholder{color:inherit;opacity:.33}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background:#f8f8f8;color:rgba(98,98,98,.23)}.form-horizontal .form-group-sm .form-control,.input-sm{font-size:13px;min-height:32px;height:32px;padding:8px 9px}.form-horizontal .form-group-lg .form-control,.input-lg{border-radius:3px;font-size:18px;height:45px;padding:11px 13px}.input-xlg{height:51px;font-size:18px;line-height:22px}.checkbox,.radio{margin-bottom:10px;margin-top:10px;padding-left:0}.checkbox label,.radio label{display:inline-block;position:relative;padding-left:25px!important;margin-right:15px;font-size:13px}.checkbox label:before,.radio label:before{content:"";display:inline-block;width:17px;height:17px;margin-right:10px;position:absolute;left:0;background-color:#F0F1F3;border:1px solid #F0F1F3}.checkbox input[type=checkbox]:focus+label:before,.checkbox input[type=radio][disabled]+label:after,.radio input[type=radio]:focus+label:before{background-color:#e6e6e6}.radio label{margin-bottom:6px}.radio label:before{bottom:2.5px;border-radius:99px;-webkit-transition:border .3s 0s cubic-bezier(.455,.03,.215,1.33);transition:border .3s 0s cubic-bezier(.455,.03,.215,1.33)}.checkbox label,.checkbox label::after,.checkbox label:before{transition:border .2s linear 0s,color .2s linear 0s}.radio input[type=radio]:checked+label:before{border-width:5px}.radio input[type=radio]:focus+label{color:#2c2c2c}.radio input[type=radio]{opacity:0;width:0;height:0}.radio input[type=radio][disabled]+label{opacity:.65}.radio.radio-primary input[type=radio]:checked+label:before,.radio.radio-success input[type=radio]:checked+label:before{border-color:#e3223c}.radio.radio-info input[type=radio]:checked+label:before{border-color:#3b4752}.radio.radio-warning input[type=radio]:checked+label:before{border-color:#f8d053}.radio.radio-danger input[type=radio]:checked+label:before{border-color:#f55753}.checkbox.check-complete input[type=checkbox]:checked+label:before,.checkbox.check-primary input[type=checkbox]:checked+label:before,.checkbox.check-success input[type=checkbox]:checked+label:before,.radio.radio-complete input[type=radio]:checked+label:before{border-color:#e3223c}.checkbox label{white-space:nowrap}.checkbox label:before{top:1.4px;border-radius:3px}.checkbox label::after{display:inline-block;width:16px;height:16px;position:absolute;left:3.2px;top:0;font-size:11px}.checkbox label:after{border-radius:3px}.checkbox input[type=checkbox]{opacity:0;width:0;height:0}.checkbox.checkbox-circle label:after,.checkbox.checkbox-circle label:before{border-radius:99px}.checkbox input[type=checkbox]:checked+label:before{border-width:8.5px}.checkbox input[type=checkbox]:checked+label::after{font-family:FontAwesome;content:"\F00C";color:#fff}.checkbox input[type=checkbox]:focus+label{color:#2c2c2c}.checkbox input[type=checkbox][disabled]+label{opacity:.65}.checkbox input[type=checkbox][disabled]+label:before{background-color:#eceff3}.checkbox.right label{margin-right:35px;padding-left:0!important}.checkbox.right label:before{right:-35px;left:auto}.checkbox.right input[type=checkbox]:checked+label{position:relative}.checkbox.right input[type=checkbox]:checked+label::after{font-family:FontAwesome;content:"\F00C";position:absolute;right:-27px;left:auto}.checkbox.check-warning input[type=checkbox]:checked+label:before{border-color:#f8d053}.checkbox.check-danger input[type=checkbox]:checked+label:before{border-color:#f55753}.checkbox.check-info input[type=checkbox]:checked+label:before{border-color:#3b4752}.checkbox.check-complete input[type=checkbox]:checked+label::after,.checkbox.check-danger input[type=checkbox]:checked+label::after,.checkbox.check-info input[type=checkbox]:checked+label::after,.checkbox.check-primary input[type=checkbox]:checked+label::after,.checkbox.check-success input[type=checkbox]:checked+label::after,.checkbox.check-warning input[type=checkbox]:checked+label::after{color:#fff}.input-group.transparent .input-group-addon{background-color:transparent;border-color:rgba(0,0,0,.07)}@media only screen and (min-width:768px){form .row{margin-left:0;margin-right:0}form .row [class*=col-]:not(:first-child),form .row [class*=col-]:not(:last-child){padding-right:7px;padding-left:7px}form .row [class*=col-]:first-child{padding-left:0}form .row [class*=col-]:last-child{padding-right:0}}@media (min-width:768px) and (max-width:991px){form .row [class*=col-md-]:not(:first-child),form .row [class*=col-md-]:not(:last-child){padding-right:0;padding-left:0}}.form-horizontal .form-group{border-bottom:1px solid #F0F1F3;padding-top:19px;padding-bottom:19px;margin-bottom:0}.form-horizontal .form-group:last-child{border-bottom:none}.form-horizontal .form-group:hover .control-label{opacity:.6}.form-horizontal .form-group.focused .control-label{opacity:1}.form-horizontal .form-group .control-label{text-align:left;opacity:.42;-webkit-transition:opacity ease .3s;transition:opacity ease .3s}.form-group-attached .form-group.form-group-default{border-radius:0;margin-bottom:0}.form-group-attached>div{margin:0}.form-group-attached>div:first-child.row>[class*=col-]:first-child .form-group-default{border-top-left-radius:2px}.form-group-attached>div:first-child.row>[class*=col-]:last-child .form-group-default{border-top-right-radius:2px}.form-group-attached>div:first-child.form-group-default{border-top-left-radius:2px;border-top-right-radius:2px}.form-group-attached>div:last-child.row>[class*=col-]:first-child .form-group-default{border-bottom-left-radius:2px}.form-group-attached>div:last-child.row>[class*=col-]:last-child .form-group-default{border-bottom-right-radius:2px}.form-group-attached>div:last-child.form-group-default{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.form-group-attached>div.row>[class*=col-]{padding-right:0!important;padding-left:0!important}.form-group-attached>div.row>[class*=col-]>.form-group-default{display:table;width:100%}.form-group-attached>div.row>[class*=col-]:not(:only-child):not(:last-child)>.form-group-default{border-right-color:transparent}.form-group-attached>div:not(:last-child) .form-group-default,.form-group-attached>div:not(:last-child).form-group-default{border-bottom-color:transparent}@media (max-width:767px){.form-group-attached .form-group-default{border-right-color:rgba(0,0,0,.07)!important}}@media only screen and (min-width:768px){.form-group-attached>div.row{display:table;width:100%}.form-group-attached>div.row>[class*=col-]{display:table-cell;height:100%;float:none;vertical-align:top}.form-group-attached>div.row>[class*=col-] .form-group{height:100%;width:100%}}.form-group{margin-bottom:10px}.form-group label:not(.error){font-size:11px;text-transform:uppercase;font-weight:600}.form-group label .help{margin-left:8px}.form-group .help{font-size:12px;color:rgba(98,98,98,.55)}.form-group-default{background-color:#fff;position:relative;border:1px solid rgba(0,0,0,.07);border-radius:2px;overflow:hidden;-webkit-transition:background-color .2s ease;transition:background-color .2s ease;padding:7px 12px 4px}.form-group-default.required:after{color:#f55753;content:"*";font-family:arial;font-size:20px;position:absolute;right:15px;top:9px}.form-group-default.disabled{background:#f8f8f8;color:rgba(98,98,98,.23)}.form-group-default.disabled input{opacity:.6}.form-group-default.disabled.focused{background:#f8f8f8}.form-group-default.disabled.focused label{opacity:1}.form-group-default.focused{border-color:rgba(0,0,0,.1)!important;background-color:#f0f0f0}.form-group-default.focused label{opacity:.4;backface-visibility:hidden}.form-group-default.has-error{background-color:rgba(245,87,83,.1)}.form-group-default.has-error .form-control-feedback,.form-group-default.has-success .form-control-feedback{display:none!important}.form-group-default.has-error .form-control,.form-group-default.has-error .form-control:focus,.form-group-default.has-success .form-control,.form-group-default.has-success .form-control:focus{border:none;box-shadow:none}.form-group-default.input-group{padding:0}.form-group-default.input-group>label{margin-top:6px;padding-left:12px}.form-group-default.input-group>.form-control{margin-top:-2px;margin-bottom:3px;padding-left:12px}.form-group-default.input-group .input-group-addon{height:calc(50px);min-width:calc(50px);border-radius:0;border:none}.form-group-default.input-group.focused .input-group-addon{border-color:rgba(0,0,0,.1)}.form-group-default .form-control{border:none;height:25px;min-height:25px;padding:0;margin-top:-4px;background:0 0}.form-group-default .form-control.error{color:#2c2c2c}.form-group-default .form-control:focus{background:0 0}.form-group-default textarea.form-control{padding-top:5px}.form-group-default label{margin:0;display:block;opacity:1;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.form-group-default label.label-lg{font-size:13px;left:13px;top:9px}.form-group-default label.label-sm{font-size:11px;left:11px;top:6px}.form-group-default label.highlight{opacity:1}.form-group-default label.fade{opacity:.5;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden}.form-group-default>.input-lg{height:29px;min-height:29px;padding-left:1px}.form-group-default>.input-sm{min-height:18px;height:18px}.form-group-default.form-group-default-select{overflow:visible}.form-group-default.form-group-default-select .ui-select-container.ui-select-bootstrap.dropdown .ui-select-match{padding-top:6px;height:23px}.form-group-default.form-group-default-select2{padding:0}.form-group-default.form-group-default-select2>label{position:absolute;z-index:10;padding:7px 12px 0}.form-group-default.form-group-default-select2>label.label-lg,.form-group-default.form-group-default-select2>label.label-sm{left:0;top:0}.form-group-default.form-group-default-select2 .select2-container .select2-choice{padding-top:20px;height:52px}.form-group-default.form-group-default-select2 .select2-container .select2-choice .select2-arrow b:before{top:20px}.form-group-default.form-group-default-select2 .select2-container .select2-choice .select2-chosen{padding-left:3px;padding-top:1px}.form-group-default.form-group-default-select2 .select2-container .select2-choices{padding-top:20px;height:52px;border:0}.form-group-default.form-group-default-select2>.input-lg{height:auto;padding:0}.form-group-default.form-group-default-select2>.input-lg .select2-choice{padding-top:20px;height:56px}.form-group-default.form-group-default-select2>.input-sm{height:auto;padding:0}.form-group-default.form-group-default-select2>.input-sm .select2-choice{padding-top:20px;height:46px}.form-group-default.form-group-default-selectFx{padding:0}.form-group-default.form-group-default-selectFx>label{position:absolute;z-index:10;padding:7px 12px 0}.form-group-default.form-group-default-selectFx>label.label-lg,.form-group-default.form-group-default-selectFx>label.label-sm{left:0;top:0}.form-group-default.form-group-default-selectFx .cs-wrapper .cs-placeholder{padding-top:28px;height:52px;padding-left:12px}.form-group-default.form-group-default-selectFx .cs-wrapper .cs-select{height:auto}.form-group-default.form-group-default-selectFx .cs-wrapper .cs-select .cs-selected span:after,.form-group-default.form-group-default-selectFx .cs-wrapper .cs-select>span:after{top:39px}.form-group-default.form-group-default-selectFx .cs-wrapper .cs-select.input-lg .cs-placeholder{height:60px}.form-group-default.form-group-default-selectFx .cs-wrapper .cs-select.input-sm .cs-placeholder{height:50px}.datepicker table tr td,.datepicker thead tr th{width:31px;height:29px}.form-group-default.form-group-default-selectFx .cs-wrapper .dropdown-placeholder{vertical-align:top}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline{color:#b81c31}.has-success .form-control{border-color:#b81c31;box-shadow:none}.has-success .form-control:focus{border-color:#8c1525;box-shadow:none}.has-success .input-group-addon{background:#f0f0f0;border:1px solid rgba(0,0,0,.07);color:rgba(98,98,98,.47)}.has-success .form-control-feedback{color:#b81c31}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline{color:#c9a843}.has-warning .form-control{border-color:#c9a843;box-shadow:none}.has-warning .form-control:focus{border-color:#a98b31;box-shadow:none}.has-warning .input-group-addon{background:#f0f0f0;border:1px solid rgba(0,0,0,.07);color:rgba(98,98,98,.47)}.has-warning .form-control-feedback{color:#c9a843}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline{color:#f55753}.has-error .form-control{border-color:#f55753;box-shadow:none}.has-error .form-control:focus{border-color:#f22823;box-shadow:none}.has-error .input-group-addon,.input-group-addon{background:#f0f0f0;border:1px solid rgba(0,0,0,.07)}.has-error .input-group-addon{color:rgba(98,98,98,.47)}.error,.has-error .form-control-feedback{color:#f55753}.error{font-size:12px;display:block}.input-group-addon{color:rgba(98,98,98,.47);font-size:14px;padding:6px 9px;display:table-cell;border-radius:3px;transition:border .2s linear 0s,box-shadow .2s linear 0s,color .2s linear 0s,box-shadow .2s linear 0s,background .2s linear 0s}.input-group-addon i{position:relative;top:1px}.input-group-addon.primary{background-color:#e3223c;border:1px solid #e3223c;color:#fff}.input-group-addon.primary .arrow{color:#e3223c}.input-group-addon.success{background-color:#0090d9;color:#fff}.input-group-addon.success .arrow{color:#0090d9}.input-group-addon.info{background-color:#1f3853;color:#fff}.input-group-addon.info .arrow{color:#1f3853}.input-group-addon.warning{background-color:#fbb05e;color:#fff}.input-group-addon.warning .arrow{color:#fbb05e}.input-group-addon.danger{background-color:#f35958;color:#fff}.input-group-addon.danger .arrow{color:#f35958}.input-group-addon .arrow{position:relative;right:-6px;color:#D1DADE;z-index:100}.input-group-addon .arrow:before,.input-group-addon:last-child .arrow:before{font-size:23px;position:absolute;top:-2px;font-family:FontAwesome}.input-group-addon .arrow:before{content:"\f0da";left:17px}.input-group-addon:last-child .arrow:before{content:"\f0d9";left:-23px}.input-group-addon:last-child input{border-left:0}.datepicker{padding:16px 25px;border-radius:2px;font-size:12px}.datepicker:after{border-bottom-color:#fafafa}.datepicker thead tr .datepicker-switch{color:#6f7b8a;font-size:13px}.datepicker thead tr .next,.datepicker thead tr .prev{color:#e3223c;content:'';font-size:0}.datepicker thead tr .next:before,.datepicker thead tr .prev:before{color:#e3223c;font-family:FontAwesome;font-size:10px}.datepicker thead tr .prev:before{content:"\f053"}.datepicker thead tr .next:before{content:"\f054"}.datepicker thead tr .dow{color:#e3223c;text-transform:uppercase;font-size:11px}.datepicker tbody tr .odd{color:#d0d3d8}.datepicker table tr td.new,.datepicker table tr td.old{color:#e6e6e6}.datepicker table tr td.day:hover{background:#f0f0f0}.datepicker table tr td.active{background-color:#e3223c!important}.datepicker table tr td.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active:hover{background-image:none;text-shadow:none;font-weight:600}.datepicker table tr td.today,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today:hover{background-color:#f0f0f0;background-image:none;color:#fff}.datepicker table tr td span{border-radius:4px;width:42px;height:42px;line-height:42px}.datepicker table tr td span.active{background-color:#e3223c!important}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{background-image:none;border:none;text-shadow:none}.datepicker.dropdown-menu{border-color:#e6e6e6;color:#626262}.datepicker.datepicker-dropdown.datepicker-orient-bottom:before{border-color:#e6e6e6}.datepicker-inline{width:auto}.input-daterange .input-group-addon{text-shadow:none;border:0}.bootstrap-timepicker-widget table td a i{font-size:12px}.bootstrap-timepicker-widget .bootstrap-timepicker-widget input,.bootstrap-timepicker-widget a.btn{border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.bootstrap-timepicker-widget.dropdown-menu,.daterangepicker{background:#fff}.daterangepicker .calendar .calendar-date{border:1px solid rgba(0,0,0,.07)}.daterangepicker .calendar .next,.daterangepicker .calendar .prev,.daterangepicker .calendar th{color:#e3223c;text-transform:uppercase;font-size:11px}.daterangepicker .calendar .month{color:#6f7b8a;font-size:13px}.daterangepicker td.active,.daterangepicker td.active:hover{background-color:#e3223c;border-color:#e3223c}.form-group-default .select2-container .select2-choice,.select2-container-multi .select2-choices{border-color:transparent}.select2-container .select2-choice{background-image:none;border-radius:2px;border:1px solid rgba(0,0,0,.07);padding:3px 9px;transition:border .2s linear 0s;height:35px}.select2-container .select2-choice .select2-arrow{background:0 0;border-left:0;-webkit-transition:all .3s ease;transition:all .3s ease}.select2-container .select2-choice .select2-arrow b:before{font-family:FontAwesome;content:"\f0d7";position:relative;top:2px;right:5px;font-size:12px}.select2-container.select2-drop-above .select2-choice{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.select2-container .select2-choice .select2-arrow b,.select2-container .select2-choice abbr,.select2-search input,.select2-search-choice-close{background-image:none!important}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{background-image:none!important;border:1px solid rgba(0,0,0,.07);background:#f0f0f0}.select2-dropdown-open .select2-choice .select2-arrow{-webkit-transform:scale(scale(1,-1));-ms-transform:scale(scale(1,-1));transform:scale(scale(1,-1))}.select2-drop.select2-drop-above{border-top-left-radius:2px;border-top-right-radius:2px;box-shadow:none}.select2-drop.select2-drop-above.select2-drop-active{border:1px solid rgba(0,0,0,.07);border-bottom:none;border-radius:2px;padding-top:0}.select2-container-active .select2-choice,.select2-container-active .select2-choices{box-shadow:none;border:1px solid rgba(0,0,0,.07);background:#f0f0f0;border-top-left-radius:2px;border-top-right-radius:2px}.select2-search{padding-left:8px;padding-right:8px;padding-top:4px}.select2-search input{background:#fff!important;vertical-align:baseline;line-height:28px;border-radius:2px;border:none;font-size:12px;border:1px solid rgba(0,0,0,.07)}.select2-results{margin:3px 10px 10px 3px}.select2-results li{color:#626262}.select2-results li.select2-result-with-children>.select2-result-label{color:#2c2c2c}.select2-results li.select2-result-with-children>.select2-result-label:first-child{padding-top:8px}.select2-results .select2-highlighted{background:#f0f0f0;border-radius:3px}.select2-results .select2-highlighted .select2-result-label{color:#626262}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background:0 0;color:#626262;font-size:12px;padding-left:8px;padding-top:0;position:relative;top:-5px}.select2-drop-active{border:1px solid rgba(0,0,0,.07);border-bottom:none;border-top:none;border-bottom-right-radius:2px;border-bottom-left-radius:2px;padding-top:5px;z-index:790}.select2-container-multi .select2-choices{background-image:none;border:1px solid rgba(0,0,0,.07);border-radius:2px}.select2-container-multi .select2-choices .select2-search-choice{background-color:#e6e6e6;background-image:none;border:none;box-shadow:none;color:inherit;border-radius:8px;margin:8px -5px 7px 10px;padding:4px 8px 4px 21px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid rgba(0,0,0,.07);box-shadow:none}.select2-container-multi.select2-container-active .select2-search-choice{background-color:#fff!important}.select2-container-multi .select2-search-choice-close{left:6px}.select2-search-choice-close{background:0 0;top:4px;right:0}.select2-search-choice-close:hover{text-decoration:none}.select2-search-choice-close:before{font-family:FontAwesome;content:"\f00d";font-size:12px;color:#626262}.select2-drop-multi .select2-results .select2-no-results,.select2-drop-multi .select2-results .select2-searching,.select2-drop-multi .select2-results .select2-selection-limit{top:0}.select2.form-control{padding:0;box-shadow:none;border:0}.select2-drop-mask{z-index:700}.ui-select-bootstrap .ui-select-choices-row.active>a{background:#f0f0f0;border-radius:3px;color:#626262}.ui-select-bootstrap>.ui-select-choices{background-color:#fff}.ui-select-choices-group-label{color:#2c2c2c;font-weight:700}.modal-open .select2-drop-active{z-index:1051}.modal-open .cs-skin-slide.cs-active,.modal-open .select2-drop-mask{z-index:1050}.dropdown-placeholder{display:inline-block;vertical-align:middle}.dropdown-mask{bottom:0;display:none;left:0;outline:0;overflow:hidden;position:fixed;right:0;top:0;z-index:600}.form-group-default .bootstrap-tagsinput{border:0;padding-left:0}.bootstrap-tagsinput{background-color:transparent;border:1px solid rgba(0,0,0,.07);border-radius:4px;padding-bottom:5px;box-shadow:none;width:100%;-webkit-transition:background .2s linear 0s;transition:background .2s linear 0s}.bootstrap-tagsinput.active-element{background-color:#e6e6e6}.bootstrap-tagsinput input{border:none;margin-bottom:0;min-height:25px;min-width:10em!important}.bootstrap-tagsinput .tag{vertical-align:middle;padding:6px 6px 6px 9px;border-radius:3px;line-height:30px}.bootstrap-tagsinput .tag[data-role=remove]{margin-left:4px}.bootstrap-tagsinput .tag [data-role=remove]:hover,.bootstrap-tagsinput .tag[data-role=remove]:hover:active{box-shadow:none}.bootstrap-tagsinput .tag [data-role=remove]:after{font-family:framework-icon;content:"\e60a";padding:0}.wysiwyg5-wrapper{position:relative}.wysiwyg5-wrapper .wysihtml5-toolbar{position:absolute;bottom:0;left:0;right:0;background:#f0f0f0;border-top:1px solid #e6e6e6}.wysiwyg5-wrapper .wysihtml5-toolbar .btn{background:rgba(0,0,0,0);border-color:transparent #e6e6e6 transparent transparent;color:#A5A5A5;font-size:16px;font-weight:600;height:50px;line-height:50px;padding:0 5px;border-width:1px;border-radius:0!important;box-shadow:none!important}.wysiwyg5-wrapper .wysihtml5-toolbar .btn:hover .editor-icon{opacity:.8}.wysiwyg5-wrapper .wysihtml5-toolbar .btn.active .editor-icon{opacity:1}.wysiwyg5-wrapper .wysihtml5-toolbar .btn.dropdown-toggle{padding-left:10px;padding-right:20px}.wysiwyg5-wrapper .wysihtml5-toolbar .btn.dropdown-toggle .current-font{opacity:.5;font-size:14px}.wysiwyg5-wrapper .wysihtml5-toolbar>li{margin:0;padding:0}.wysiwyg5-wrapper .wysiwyg{width:100%;min-height:200px;font-size:14px;line-height:18px;padding-bottom:50px!important;border:0}.wysiwyg5-wrapper .wysiwyg:focus{background-color:#fafafa;outline:0!important;box-shadow:none}.wysiwyg5-wrapper .expand-wysiwyg{bottom:0;color:#A5A5A5;font-size:20px;font-weight:600;height:50px;line-height:50px;padding:0 15px;position:absolute;right:0}.wysiwyg5-wrapper .wysihtml5-sandbox{border:none!important;padding:16px 16px 50px!important;width:100%!important}.wysiwyg5-wrapper .wysihtml5-sandbox.expanded{height:100%!important}.toggle-wysiwyg{position:absolute;right:15px;top:0}.toggle-wysiwyg li{display:inline-block;font-weight:600}.editor-icon{display:inline-block;height:40px;margin-top:5px;opacity:.4;vertical-align:top;width:40px}.editor-icon-headline{background-position:0 0;width:31px}.editor-icon-bold{background-position:-40px 0}.editor-icon-italic{background-position:-80px 0}.editor-icon-underline{background-position:-120px 0}.editor-icon-link{background-position:-160px 0}.editor-icon-quote{background-position:-200px 0}.editor-icon-ul{background-position:-240px 0}.editor-icon-ol{background-position:-280px 0}.editor-icon-outdent{background-position:-320px 0}.editor-icon-indent{background-position:-360px 0}.editor-icon-image{background-position:-400px 0}.editor-icon-html{background-position:-440px 0}.summernote-wrapper .note-editor{border-color:#e6e6e6}.summernote-wrapper .note-editor .note-toolbar{padding:0;background-color:#f0f0f0;border-bottom:none}.summernote-wrapper .note-editor .note-toolbar .btn-group{margin:0 -1px 0 0}.summernote-wrapper .note-editor .note-toolbar .btn-group .btn{font-size:12px;font-weight:600;height:50px;min-width:47px;line-height:50px;padding:0 5px;border-radius:0;background-color:#f0f0f0;border-color:transparent #e6e6e6 #e6e6e6 transparent;color:#626262}.summernote-wrapper .note-editor .note-toolbar .btn-group .btn.active,.summernote-wrapper .note-editor .note-toolbar .btn-group .btn:active{background-color:#e6e6e6}.summernote-wrapper .note-editor .note-toolbar .btn-group .btn.dropdown-toggle{min-width:61px}.summernote-wrapper .note-editor .note-toolbar .btn-group .btn:not(:last-child),.summernote-wrapper .note-editor .note-toolbar .btn-group .btn:not(:only-child){margin-right:1px}.summernote-wrapper .note-editor .note-statusbar{background-color:transparent}.summernote-wrapper .note-editor .note-statusbar .note-resizebar{border-top-color:transparent}.summernote-wrapper .note-editor .note-statusbar .note-resizebar .note-icon-bar{border-top:1px solid #e6e6e6}.summernote-wrapper .note-popover .popover .popover-content .dropdown-menu li a i,.summernote-wrapper .note-toolbar .dropdown-menu li a i{color:#e3223c}input,input:focus{-webkit-transition:none!important}input:-webkit-autofill{box-shadow:0 0 0 1000px #fff inset!important}input:-webkit-autofill:focus{box-shadow:0 0 0 1000px #f0f0f0 inset!important}.has-error input:-webkit-autofill,input.error:-webkit-autofill,input.error:-webkit-autofill:focus{box-shadow:0 0 0 1000px #F9E9E9 inset!important}div.cs-select{display:inline-block;vertical-align:middle;position:relative;text-align:left;background:#fff;z-index:700;width:100%;max-width:500px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.cs-select:focus{outline:0}.cs-select select{display:none}.cs-select span{display:block;position:relative;padding:1em;white-space:nowrap;overflow:hidden;text-overflow:initial}.cs-select>span{padding-right:3em}.cs-select .cs-selected span::after,.cs-select>span::after{speak:none;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.cs-select>span::after{content:'\25BE';right:1em}.cs-select .cs-selected span::after{content:'\2713';margin-left:1em}.cs-skin-slide .cs-selected span::after,div.cs-skin-slide::before{content:''}.cs-select.cs-active>span::after{-webkit-transform:translateY(-50%) rotate(180deg);transform:translateY(-50%) rotate(180deg)}.cs-select .cs-options{position:absolute;overflow:hidden;width:100%;background:#fff;visibility:hidden}.cs-select.cs-active .cs-options{visibility:visible}.cs-select ul{list-style:none;margin:0;padding:0;width:100%}.cs-select ul span{padding:1em}.cs-select ul li.cs-focus span{background-color:#ddd}.cs-select li.cs-optgroup ul{padding-left:1em}.cs-select li.cs-optgroup>span{cursor:default}.cursor,.table.table-condensed.table-detailed>tbody>tr>td:hover{cursor:pointer}@media screen and (max-width:30em){div.cs-skin-slide{font-size:1em;width:250px}}div.cs-skin-slide::before{background:#282b30;position:absolute;width:100%;height:100%;top:0;left:0;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .3s;transition:transform .3s}.cs-skin-slide.cs-active::before{-webkit-transform:scale3d(1.1,3.5,1);transform:scale3d(1.1,3.5,1)}.cs-skin-slide>span{height:80px;line-height:32px;-webkit-transition:text-indent .3s,opacity .3s;transition:text-indent .3s,opacity .3s}@media screen and (max-width:30em){.cs-skin-slide>span{height:60px;line-height:28px}}.cs-skin-slide.cs-active>span{text-indent:-290px;opacity:0}.cs-skin-slide.cs-active>span::after{-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.cs-skin-slide .cs-options{background:0 0;width:70%;height:400%;padding:1.9em 0;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}@media screen and (max-width:30em){.cs-skin-slide .cs-options{padding-top:3em}}.cs-skin-slide .cs-options li{opacity:0;-webkit-transform:translate3d(30%,0,0);transform:translate3d(30%,0,0);-webkit-transition:-webkit-transform .3s,opacity .3s;transition:transform .3s,opacity .3s}.cs-skin-slide.cs-active .cs-options li{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.cs-skin-slide.cs-active .cs-options li:first-child{-webkit-transition-delay:50ms;transition-delay:50ms}.cs-skin-slide.cs-active .cs-options li:nth-child(2){-webkit-transition-delay:.1s;transition-delay:.1s}.cs-skin-slide.cs-active .cs-options li:nth-child(3){-webkit-transition-delay:.15s;transition-delay:.15s}.cs-skin-slide.cs-active .cs-options li:nth-child(4){-webkit-transition-delay:.2s;transition-delay:.2s}.cs-skin-slide.cs-active .cs-options li:nth-child(5){-webkit-transition-delay:.25s;transition-delay:.25s}.cs-skin-slide .cs-options li span{text-transform:uppercase;font-weight:500;letter-spacing:2px;font-size:65%;padding:.8em 1em .8em 2.5em}.cs-skin-slide .cs-options li span:hover,.cs-skin-slide .cs-options li.cs-focus span,.cs-skin-slide .cs-options li.cs-selected span{color:#eb7e7f;background:0 0}.cs-select,div.cs-skin-slide:before{background-color:transparent}.form-group-default .cs-skin-slide>span{padding:0 30px 0 0;height:22px;line-height:21px}.form-group-default .cs-wrapper{width:100%}.cs-wrapper{display:inline-block}.form-control.cs-select:not(.cs-active){width:100%!important}.cs-select .cs-placeholder{width:100%}div.cs-skin-slide{width:auto;font-family:Arial,sans-serif;color:#5e5e5e}div.cs-skin-slide.cs-transparent{background:0 0}div.cs-skin-slide.cs-transparent .cs-backdrop{border-color:transparent;background:0 0}div.cs-skin-slide.cs-transparent.cs-active .cs-backdrop{background:#fafafa}div.cs-skin-slide>span{height:35px;padding:6px 33px 6px 17px;line-height:23px}div.cs-skin-slide.cs-active{z-index:790}div.cs-skin-slide.cs-active:before{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}div.cs-skin-slide.cs-active .cs-backdrop{border:transparent;background:#fafafa;box-shadow:-1px 0 1px #ccc,1px 0 1px #ccc}div.cs-skin-slide.cs-active>span:after,div.cs-skin-slide>span:after{content:"\f0d7";font-family:FontAwesome;color:#5e5e5e}div.cs-skin-slide .cs-options{height:auto;width:auto;padding:10px;max-height:350px;transform:translate3d(1,1,1);overflow:hidden}div.cs-skin-slide .cs-options ul{width:100%;display:table}div.cs-skin-slide .cs-options ul li{display:table-row}div.cs-skin-slide .cs-options ul li span{display:table-cell;font-size:14px;font-weight:400;letter-spacing:normal;padding:5px 0;text-transform:none;max-height:350px;overflow-y:auto}div.cs-skin-slide .cs-options ul li span:hover,div.cs-skin-slide .cs-options ul li.cs-focus span,div.cs-skin-slide .cs-options ul li.cs-selected span{color:#2c2c2c}.cs-backdrop{background:#fff;border:1px solid rgba(0,0,0,.07);bottom:0;left:0;position:absolute;right:0;top:0;z-index:-1;-webkit-transition:all .3s ease;transition:all .3s ease}.table tbody tr td,.table thead tr th{border-bottom:1px solid rgba(230,230,230,.7)}.cs-skin-slide.cs-active .cs-options li:nth-child(6){transition-delay:.3s}.cs-skin-slide.cs-active .cs-options li:nth-child(7){transition-delay:.35s}.cs-skin-slide.cs-active .cs-options li:nth-child(8){transition-delay:.4s}.cs-skin-slide.cs-active .cs-options li:nth-child(9){transition-delay:.45s}.cs-skin-slide.cs-active .cs-options li:nth-child(10){transition-delay:.5s}.cs-skin-slide.cs-active .cs-options li:nth-child(11){transition-delay:.55s}.dropzone[dropzone=dropzone] input[type=file]{visibility:hidden}.table thead tr th{text-transform:uppercase;font-weight:600;font-size:13px;padding-top:14px;padding-bottom:14px;vertical-align:middle;color:#333}.table thead tr th[class*=sorting_]{color:#2c2c2c}.table thead tr th .btn{margin-top:-20px;margin-bottom:-20px}.table tbody tr td{background:#fff;border-top:0;padding-top:20px;padding-bottom:20px;font-size:11px}.table tbody tr td .btn-tag{background:rgba(44,44,44,.07);display:inline-block;margin:5px;border-radius:4px;padding:5px;color:#62605a!important}.table tbody tr td .btn-tag:hover{background:rgba(44,44,44,.15)}.table tbody tr td[class*=sorting_]{color:#000}.table tbody tr.selected td{background:#F0F1F3}.table.table-hover tbody tr.selected:hover td,.table.table-hover tbody tr:hover td{background:#F0F1F3!important}.table.table-striped tbody tr td{background:#fafafa!important}.table.table-striped tbody tr:nth-child(2n+1) td{background:#fff!important}.table.table-borderless tbody tr td{border-top:0}.table.table-condensed{table-layout:fixed}.table.table-condensed thead tr th{padding-left:20px;padding-right:20px}.table.table-condensed tbody tr td{padding-top:12px;padding-bottom:12px}.table.table-condensed tbody tr td,.table.table-condensed tbody tr td *,.table.table-condensed thead tr th{white-space:nowrap;vertical-align:middle;overflow:hidden;text-overflow:ellipsis}.table.table-condensed.table-detailed>tbody>tr.shown>td{background:#fef6dd}.table.table-condensed.table-detailed>tbody>tr.shown>td:first-child:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.table.table-condensed.table-detailed>tbody>tr.shown+tr>td{background:rgba(250,250,250,.4);padding:0 40px}.table.table-condensed.table-detailed>tbody>tr.shown+tr>td .table-inline{background:0 0}.table.table-condensed.table-detailed>tbody>tr.shown+tr>td .table-inline td,.table.table-condensed.table-detailed>tbody>tr.shown+tr>td .table-inline tr{background:0 0;font-weight:600}.table.table-condensed.table-detailed>tbody>tr.row-details>td:first-child:before{content:''}.table.table-condensed.table-detailed>tbody>tr>td:first-child:before{content:"\f054";display:inline-block;margin-right:8px;font-family:FontAwesome;-webkit-transition:all .12s linear;transition:all .12s linear}.table.table-condensed.table-detailed .table-inline td{border:none;text-align:left}.table.table-borderless>tbody>tr>td{border-bottom:0}.fht-table{margin-bottom:0!important}.table.dataTable.no-footer{border:none}.dataTables_scroll:hover .dataTables_scrollBody:before{content:"";top:0;height:0}.dataTables_scrollBody{overflow-y:auto;border:none!important}.dataTables_scrollBody:before{content:"";position:absolute;left:0;right:0;top:60px;bottom:0;background:0 0}.profile-dropdown:after,.profile-dropdown:before{content:'';position:absolute;display:inline-block}.dataTables_wrapper .dataTables_paginate{margin:0}.dataTables_wrapper .dataTables_paginate ul>li>a{padding:5px 10px;color:#626262;opacity:.35;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.dataTables_wrapper .dataTables_paginate ul>li>a:hover{opacity:.65}.dataTables_wrapper .dataTables_paginate ul>li.next>a,.dataTables_wrapper .dataTables_paginate ul>li.prev>a{opacity:1}.dataTables_wrapper .dataTables_paginate ul>li.disabled a,.dataTables_wrapper .dataTables_paginate ul>li.disabled a:hover{opacity:.35}.dataTables_paginate.paging_bootstrap.pagination,.dataTables_wrapper .dataTables_info{margin-top:25px}.dataTables_paginate.paging_bootstrap.pagination{padding-top:0;padding-right:20px}.dataTables_wrapper .dataTables_info{clear:none;font-size:12px;padding:0 33px;color:#626262}.dataTables_wrapper .dataTables_paginate ul>li{display:inline-block;padding-left:0;font-size:11px}.dataTables_scrollHeadInner{padding-right:0!important}.export-options-container{position:relative}.dataTables_wrapper .dataTables_paginate ul>li.active>a{font-weight:700;color:#626262;opacity:1}.export-options-container a{color:inherit;opacity:1}.exportOptions .DTTT.btn-group a{display:block!important}@media (max-width:991px){.dataTables_wrapper .dataTables_info{float:left}.dataTables_paginate.paging_bootstrap.pagination{float:right}}@media (max-width:480px){.dataTables_paginate.paging_bootstrap.pagination,.dataTables_wrapper .dataTables_info{float:none;text-align:left;clear:both;display:block}}.thumbnail-wrapper{display:inline-block;overflow:hidden;float:left}.thumbnail-wrapper.circular{border-radius:50%;-webkit-border-radius:50%;-moz-border-radius:50%}.thumbnail-wrapper.bordered{border-width:4px;border-style:solid}.thumbnail-wrapper.bordered.d16{width:20px;height:20px}.thumbnail-wrapper.bordered.d16>*{line-height:12px}.thumbnail-wrapper.bordered.d24{width:28px;height:28px}.thumbnail-wrapper.bordered.d24>*{line-height:24px}.thumbnail-wrapper.bordered.d32{width:36px;height:36px}.thumbnail-wrapper.bordered.d32>*{line-height:28px}.thumbnail-wrapper.bordered.d48{width:52px;height:52px}.thumbnail-wrapper.bordered.d48>*{line-height:44px}.thumbnail-wrapper.d16{width:16px;height:16px}.thumbnail-wrapper.d16>*{line-height:16px}.thumbnail-wrapper.d24{width:24px;height:24px}.thumbnail-wrapper.d24>*{line-height:24px}.thumbnail-wrapper.d32{width:32px;height:32px}.thumbnail-wrapper.d32>*{line-height:32px}.thumbnail-wrapper.d39{width:39px;height:39px}.thumbnail-wrapper.d39>*{line-height:39px}.thumbnail-wrapper.d48{width:48px;height:48px}.thumbnail-wrapper.d48>*{line-height:50px}.thumbnail-wrapper>*{vertical-align:middle;width:100%;height:100%;text-align:center}.inherit-height,.inherit-size{height:inherit}.profile-dropdown{background:#fff;padding:0}.profile-dropdown:before{top:-7px;right:15px;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,.2)}.profile-dropdown:after{top:-6px;right:16px;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent}.ar-1-1>div,.ar-1-2>div,.ar-2-1>div,.ar-2-3>div,.ar-3-2>div,.bottom-right{right:0;bottom:0}.ar-1-1:before,.ar-1-2:before,.ar-2-1:before,.ar-2-3:before,.ar-3-2:before{content:""}.profile-dropdown li:last-child{margin-top:11px;padding:0}.profile-dropdown li:last-child>a{padding-top:3px;padding-bottom:3px;padding-right:19px}.profile-dropdown li>a{opacity:.5;-webkit-transition:opacity ease .3s;transition:opacity ease .3s;padding-left:17px;padding-right:37px;min-width:138px}.profile-dropdown li>a>i{margin-right:5px}.profile-dropdown li>a:hover{opacity:1}.profile-dropdown-toggle{background:0 0;border:none}.scrollable{overflow-y:auto;-webkit-overflow-scrolling:touch}.no-padding{padding:0!important}.no-margin{margin:0!important}.no-overflow{overflow:hidden!important}.auto-overflow{overflow:auto}.center-margin{margin-left:auto;margin-right:auto}.inherit-size{width:inherit}.full-width,.image-responsive-height,.overlayer.fullwidth{width:100%}.image-responsive-width{height:100%}.overlayer{position:absolute;display:block;z-index:21}.overlayer-wrapper{position:relative;display:block;z-index:10}.overlay-fixed{position:fixed!important;top:auto!important}.bottom-left,.bottom-right,.pull-bottom,.pull-up,.top-left,.top-right{position:absolute!important}.top-left{top:0;left:0}.top-right{top:1px;right:0}.bottom-left{bottom:1px;left:0}.pull-bottom{bottom:0}.pull-up{top:0}.ar-1-1,.relative{position:relative}.scroll-x-hidden{overflow-x:hidden!important}.ar-1-1,.ar-1-2,.ar-2-1,.ar-2-3,.ar-3-2{overflow:hidden}.p-t-5{padding-top:5px!important}.p-r-5{padding-right:5px!important}.p-l-5{padding-left:5px!important}.p-b-5{padding-bottom:5px!important}.padding-5{padding:5px!important}.p-t-10{padding-top:10px!important}.p-r-10{padding-right:10px!important}.p-l-10{padding-left:10px!important}.p-b-10{padding-bottom:10px!important}.padding-10{padding:10px!important}.p-t-15{padding-top:15px!important}.p-r-15{padding-right:15px!important}.p-l-15{padding-left:15px!important}.p-b-15{padding-bottom:15px!important}.padding-15{padding:15px!important}.p-t-20{padding-top:20px!important}.p-r-20{padding-right:20px!important}.p-l-20{padding-left:20px!important}.p-b-20{padding-bottom:20px!important}.padding-20{padding:20px!important}.p-t-25{padding-top:25px!important}.p-r-25{padding-right:25px!important}.p-l-25{padding-left:25px!important}.p-b-25{padding-bottom:25px!important}.padding-25{padding:25px!important}.p-t-30{padding-top:30px!important}.p-r-30{padding-right:30px!important}.p-l-30{padding-left:30px!important}.p-b-30{padding-bottom:30px!important}.padding-30{padding:30px!important}.p-t-35{padding-top:35px!important}.p-r-35{padding-right:35px!important}.p-l-35{padding-left:35px!important}.p-b-35{padding-bottom:35px!important}.padding-35{padding:35px!important}.p-t-40{padding-top:40px!important}.p-r-40{padding-right:40px!important}.p-l-40{padding-left:40px!important}.p-b-40{padding-bottom:40px!important}.padding-40{padding:40px!important}.p-t-45{padding-top:45px!important}.p-r-45{padding-right:45px!important}.p-l-45{padding-left:45px!important}.p-b-45{padding-bottom:45px!important}.padding-45{padding:45px!important}.p-t-50{padding-top:50px!important}.p-r-50{padding-right:50px!important}.p-l-50{padding-left:50px!important}.p-b-50{padding-bottom:50px!important}.padding-50{padding:50px!important}.p-t-55{padding-top:55px!important}.p-r-55{padding-right:55px!important}.p-l-55{padding-left:55px!important}.p-b-55{padding-bottom:55px!important}.padding-55{padding:55px!important}.p-t-60{padding-top:60px!important}.p-r-60{padding-right:60px!important}.p-l-60{padding-left:60px!important}.p-b-60{padding-bottom:60px!important}.padding-60{padding:60px!important}.p-t-65{padding-top:65px!important}.p-r-65{padding-right:65px!important}.p-l-65{padding-left:65px!important}.p-b-65{padding-bottom:65px!important}.padding-65{padding:65px!important}.p-t-70{padding-top:70px!important}.p-r-70{padding-right:70px!important}.p-l-70{padding-left:70px!important}.p-b-70{padding-bottom:70px!important}.padding-70{padding:70px!important}.p-t-75{padding-top:75px!important}.p-r-75{padding-right:75px!important}.p-l-75{padding-left:75px!important}.p-b-75{padding-bottom:75px!important}.padding-75{padding:75px!important}.p-t-80{padding-top:80px!important}.p-r-80{padding-right:80px!important}.p-l-80{padding-left:80px!important}.p-b-80{padding-bottom:80px!important}.padding-80{padding:80px!important}.p-t-85{padding-top:85px!important}.p-r-85{padding-right:85px!important}.p-l-85{padding-left:85px!important}.p-b-85{padding-bottom:85px!important}.padding-85{padding:85px!important}.p-t-90{padding-top:90px!important}.p-r-90{padding-right:90px!important}.p-l-90{padding-left:90px!important}.p-b-90{padding-bottom:90px!important}.padding-90{padding:90px!important}.p-t-95{padding-top:95px!important}.p-r-95{padding-right:95px!important}.p-l-95{padding-left:95px!important}.p-b-95{padding-bottom:95px!important}.padding-95{padding:95px!important}.p-t-100{padding-top:100px!important}.p-r-100{padding-right:100px!important}.p-l-100{padding-left:100px!important}.p-b-100{padding-bottom:100px!important}.padding-100{padding:100px!important}.m-t-0{margin-top:0}.m-r-0{margin-right:0}.m-l-0{margin-left:0}.m-b-0{margin-bottom:0}.m-t-5{margin-top:5px}.m-r-5{margin-right:5px}.m-l-5{margin-left:5px}.m-b-5{margin-bottom:5px}.m-t-10{margin-top:10px}.m-r-10{margin-right:10px}.m-l-10{margin-left:10px}.m-b-10{margin-bottom:10px}.m-t-15{margin-top:15px}.m-r-15{margin-right:15px}.m-l-15{margin-left:15px}.m-b-15{margin-bottom:15px}.m-t-20{margin-top:20px}.m-r-20{margin-right:20px}.m-l-20{margin-left:20px}.m-b-20{margin-bottom:20px}.m-t-25{margin-top:25px}.m-r-25{margin-right:25px}.m-l-25{margin-left:25px}.m-b-25{margin-bottom:25px}.m-t-30{margin-top:30px}.m-r-30{margin-right:30px}.m-l-30{margin-left:30px}.m-b-30{margin-bottom:30px}.m-t-35{margin-top:35px}.m-r-35{margin-right:35px}.m-l-35{margin-left:35px}.m-b-35{margin-bottom:35px}.m-t-40{margin-top:40px}.m-r-40{margin-right:40px}.m-l-40{margin-left:40px}.m-b-40{margin-bottom:40px}.m-t-45{margin-top:45px}.m-r-45{margin-right:45px}.m-l-45{margin-left:45px}.m-b-45{margin-bottom:45px}.m-t-50{margin-top:50px}.m-r-50{margin-right:50px}.m-l-50{margin-left:50px}.m-b-50{margin-bottom:50px}.m-t-55{margin-top:55px}.m-r-55{margin-right:55px}.m-l-55{margin-left:55px}.m-b-55{margin-bottom:55px}.m-t-60{margin-top:60px}.m-r-60{margin-right:60px}.m-l-60{margin-left:60px}.m-b-60{margin-bottom:60px}.m-t-65{margin-top:65px}.m-r-65{margin-right:65px}.m-l-65{margin-left:65px}.m-b-65{margin-bottom:65px}.m-t-70{margin-top:70px}.m-r-70{margin-right:70px}.m-l-70{margin-left:70px}.m-b-70{margin-bottom:70px}.m-t-75{margin-top:75px}.m-r-75{margin-right:75px}.m-l-75{margin-left:75px}.m-b-75{margin-bottom:75px}.m-t-80{margin-top:80px}.m-r-80{margin-right:80px}.m-l-80{margin-left:80px}.m-b-80{margin-bottom:80px}.m-t-85{margin-top:85px}.m-r-85{margin-right:85px}.m-l-85{margin-left:85px}.m-b-85{margin-bottom:85px}.m-t-90{margin-top:90px}.m-r-90{margin-right:90px}.m-l-90{margin-left:90px}.m-b-90{margin-bottom:90px}.m-t-95{margin-top:95px}.m-r-95{margin-right:95px}.m-l-95{margin-left:95px}.m-b-95{margin-bottom:95px}.m-t-100{margin-top:100px}.m-r-100{margin-right:100px}.m-l-100{margin-left:100px}.m-b-100{margin-bottom:100px}.full-height{height:100%!important}.hide{display:none}.inline{display:inline-block!important}.block{display:block}.b-blank{border-color:#000}.b-a,.b-b,.b-l,.b-r,.b-t{border-style:solid;border-width:0}.b-r{border-right-width:1px}.b-l{border-left-width:1px}.b-t{border-top-width:1px}.b-b{border-bottom-width:1px}.b-a{border-width:1px}.b-dashed{border-style:dashed}.b-thick{border-width:2px}.b-transparent{border-color:rgba(0,0,0,.4)}.b-transparent-white{border-color:rgba(255,255,255,.3)}.b-grey{border-color:#e6e6e6}.b-white{border-color:#fff}.b-complete,.b-primary,.b-success{border-color:#e3223c}.b-info{border-color:#3b4752}.b-danger{border-color:#f55753}.b-warning{border-color:#f8d053}.b-rad-sm{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px}.b-rad-md{border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px}.b-rad-lg{border-radius:7px;-webkit-border-radius:7px;-moz-border-radius:7px}.no-border{border:none!important}.profile-img-wrapper{float:left;border-radius:100px;display:inline-block;height:35px;overflow:hidden;width:35px;-webkit-flex:1;-moz-flex:1;flex:1}.profile-img-wrapper.big{height:68px;width:68px}.profile-img-wrapper.with-left-space-custom{margin-left:7px}.icon-set-preview{transition:opacity .1s linear}#icon-list{transition:all .1s ease-in-out}.error-number{font-size:90px;line-height:90px}.error-container-innner{margin-left:auto;margin-right:auto;width:360px}.error-container{margin-top:-100px;margin-left:auto;margin-right:auto;width:38%}.ar-1-1,.ar-1-2,.ar-2-1,.ar-2-3,.ar-3-2{width:100%}.visible-xlg{display:none}.hidden-xlg{display:block}.sm-gutter .row>[class*=col-],.sm-gutter .row>[class^=col-]{padding-left:5px;padding-right:5px}.sm-gutter .row{margin-left:-5px;margin-right:-5px}.ar-1-1 .panel,.ar-1-2 .panel,.ar-2-1 .panel,.ar-2-3 .panel,.ar-3-2 .panel{margin:0}.ar-1-1:before{display:block;padding-top:100%}.ar-1-1>div{position:absolute;top:0;left:0}.ar-2-1{position:relative}.ar-2-1:before{display:block;padding-top:calc(50% - 5px)}.ar-2-1>div{position:absolute;top:0;left:0}.ar-1-2{position:relative}.ar-1-2:before{display:block;padding-top:calc(150% - 5px)}.ar-1-2>div{position:absolute;top:0;left:0}.ar-3-2{position:relative}.ar-3-2:before{display:block;padding-top:calc(75% - 5px)}.ar-3-2>div{position:absolute;top:0;left:0}.ar-2-3{position:relative}.ar-2-3:before{display:block;padding-top:calc(125% - 5px)}.ar-2-3>div{position:absolute;top:0;left:0}.v-align-bottom{vertical-align:bottom}.v-align-top{vertical-align:top}.v-align-middle{vertical-align:middle}.col-top{vertical-align:top}.col-middle{vertical-align:middle}.col-bottom{vertical-align:bottom}.container-xs-height{display:table;padding-left:0;padding-right:0;width:100%;border-collapse:collapse;table-layout:fixed}.row-xs-height{display:table-row}.col-xs-height{display:table-cell;float:none}@media (min-width:768px){.container-sm-height{display:table;padding-left:0;padding-right:0;width:100%;border-collapse:collapse;table-layout:fixed}.row-sm-height{display:table-row}.col-sm-height{display:table-cell!important;float:none!important}}@media (min-width:992px){.container-md-height{display:table;padding-left:0;padding-right:0;width:100%;border-collapse:collapse;table-layout:fixed}.row-md-height{display:table-row}.col-md-height{display:table-cell!important;float:none!important}}@media (min-width:1200px){.container-lg-height{display:table;padding-left:0;padding-right:0;width:100%;border-collapse:collapse;table-layout:fixed}.row-lg-height{display:table-row}.col-lg-height{display:table-cell!important;float:none!important}}@media (min-width:1824px){.col-xlg-1,.col-xlg-10,.col-xlg-11,.col-xlg-12,.col-xlg-2,.col-xlg-3,.col-xlg-4,.col-xlg-5,.col-xlg-6,.col-xlg-7,.col-xlg-8,.col-xlg-9{float:left;min-height:1px;padding-left:15px;padding-right:15px;position:relative}.quickview-wrapper .tab-content #quickview-notes>.inner{width:570px}.container-fluid.container-fixed-lg{width:1700px;margin-right:auto;margin-left:auto}.menu-pin .container-fluid.container-fixed-lg{width:1450px}.visible-xlg{display:block!important}.hidden-xlg{display:none!important}.col-xlg-12{width:100%}.col-xlg-11{width:91.6667%}.col-xlg-10{width:83.3333%}.col-xlg-9{width:75%}.col-xlg-8{width:66.6667%}.col-xlg-7{width:58.3333%}.col-xlg-6{width:50%}.col-xlg-5{width:41.6667%}.col-xlg-4{width:33.3333%}.col-xlg-3{width:25%}.col-xlg-2{width:16.6667%}.col-xlg-1{width:8.33333%}.col-xlg-pull-12{right:100%}.col-xlg-pull-11{right:91.6667%}.col-xlg-pull-10{right:83.3333%}.col-xlg-pull-9{right:75%}.col-xlg-pull-8{right:66.6667%}.col-xlg-pull-7{right:58.3333%}.col-xlg-pull-6{right:50%}.col-xlg-pull-5{right:41.6667%}.col-xlg-pull-4{right:33.3333%}.col-xlg-pull-3{right:25%}.col-xlg-pull-2{right:16.6667%}.col-xlg-pull-1{right:8.33333%}.col-xlg-pull-0{right:0}.col-xlg-push-12{left:100%}.col-xlg-push-11{left:91.6667%}.col-xlg-push-10{left:83.3333%}.col-xlg-push-9{left:75%}.col-xlg-push-8{left:66.6667%}.col-xlg-push-7{left:58.3333%}.col-xlg-push-6{left:50%}.col-xlg-push-5{left:41.6667%}.col-xlg-push-4{left:33.3333%}.col-xlg-push-3{left:25%}.col-xlg-push-2{left:16.6667%}.col-xlg-push-1{left:8.33333%}.col-xlg-push-0{left:0}.col-xlg-offset-12{margin-left:100%}.col-xlg-offset-11{margin-left:91.6667%}.col-xlg-offset-10{margin-left:83.3333%}.col-xlg-offset-9{margin-left:75%}.col-xlg-offset-8{margin-left:66.6667%}.col-xlg-offset-7{margin-left:58.3333%}.col-xlg-offset-6{margin-left:50%}.col-xlg-offset-5{margin-left:41.6667%}.col-xlg-offset-4{margin-left:33.3333%}.col-xlg-offset-3{margin-left:25%}.col-xlg-offset-2{margin-left:16.6667%}.col-xlg-offset-1{margin-left:8.33333%}.col-xlg-offset-0{margin-left:0}}@media only screen and (max-width:1400px){.page-sidebar .page-sidebar-inner .sidebar-slide .sidebar-menu{bottom:50px}.page-sidebar .page-sidebar-inner .sidebar-slide .sidebar-widgets{display:none}.footer-widget{padding:11px 21px!important}}@media only screen and (min-width:980px){body.ie9.menu-pin .page-sidebar{transform:none!important;-webkit-transform:none!important;-ms-transform:none!important}body.menu-pin{overflow-x:hidden}body.menu-pin .header .brand{width:245px}body.menu-pin .page-container{padding-left:0}body.menu-pin .page-container .page-content-wrapper .content{padding-left:250px}body.menu-pin .page-container .page-content-wrapper .footer{left:250px}body.menu-pin [data-toggle-pin=sidebar]>i:before{content:"\f192"}body.menu-pin .page-sidebar{transform:translate(210px,0)!important;-webkit-transform:translate(210px,0)!important;-ms-transform:translate(210px,0)!important;width:250px}body.menu-pin .page-sidebar .sidebar-header .sidebar-header-controls{transform:translateX(18px);-webkit-transform:translateX(18px)}body.menu-pin .page-sidebar .menu-items .icon-thumbnail{transform:translate3d(-14px,0,0);-webkit-transform:-webkit-translate3d(-14px,0,0)}body.menu-behind .page-sidebar{z-index:799}body.menu-behind .header .brand{width:300px;text-align:left;padding-left:20px}body.box-layout{background-color:#fff}body.box-layout>.container{height:100%;padding:0;background-color:#fafafa}body.box-layout .header{background-color:transparent;border:0;padding:0}body.box-layout .header>.container{background-color:#fff;border-bottom:1px solid rgba(230,230,230,.7);padding:0 20px 0 0}body.box-layout .page-sidebar{left:auto;transform:none!important;-webkit-transform:none!important}body.box-layout .page-container .page-content-wrapper .footer{width:auto}.header .brand{position:relative}.header .user-info-wrapper .user-details .user-name{font-size:16px}.header .user-info-wrapper .user-details .user-other{font-size:10px}.header .user-info-wrapper .user-pic{position:relative;top:-6px}.notification-panel{width:400px}}@media (max-width:991px){.header>.pull-right .sm-action-bar,body.box-layout .header>.container .pull-right .sm-action-bar{right:0}.page-container{padding-left:0}body.sidebar-open .page-container{-webkit-transform:translate3d(250px,0,0);transform:translate3d(250px,0,0);-ms-transform:translate(250px,0);overflow:hidden;position:fixed}body.box-layout>.container{padding:0;height:100%}body.box-layout .header>.container{padding:0}.header{padding:0 10px;width:100%;border-bottom:1px solid rgba(0,0,0,.07);background:#fff!important}.header .header-inner{text-align:center}.header .header-inner .toggle-sidebar{display:block;position:absolute;left:23px}.header .header-inner .mark-email{left:45px;position:absolute;top:23px}.header .header-inner .quickview-link{position:absolute;right:0;top:12px}.header .brand{width:auto}.header .notification-list,.header .search-link{display:none}.header>.pull-left,.header>.pull-right{position:relative}.sm-action-bar{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:10}.sm-action-bar>a{padding:10px;display:inline-block}.pace .pace-activity{top:60px}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li{padding:0 30px 0 36px}.page-container{z-index:100;position:relative;transition:transform .25s ease;-webkit-transition:-webkit-transform .25s ease}.page-container .page-content-wrapper .content{overflow-x:hidden;height:auto}.icon-thumbnail{margin-right:24px}.page-sidebar{width:250px;left:0!important;-webkit-transform:translate3d(0,0,0)!important;transform:translate3d(0,0,0)!important;display:none;z-index:auto}.page-sidebar.visible{display:block}.page-sidebar .page-sidebar-inner{z-index:1;left:0!important;width:260px}.page-sidebar .page-sidebar-inner .sidebar-slide .sidebar-menu{overflow:scroll;-webkit-overflow-scrolling:touch;top:40px;bottom:0}.page-sidebar .page-sidebar-inner .sidebar-slide .sidebar-menu ul>li>a>.badge{display:inline-block}.breadcrumb,.copyright{padding-left:15px;padding-right:15px}body>.pgn-wrapper[data-position=top]{top:48px;left:0}body>.pgn-wrapper[data-position=bottom]{left:0}body>.pgn-wrapper[data-position$='-left']{left:20px;right:auto}.sm-table{display:table;width:100%}.user-profile-wrapper{position:absolute;right:50px;top:-9px}.sm-b-b,.sm-b-l,.sm-b-r,.sm-b-t{border-width:0}.sm-b-r{border-right-width:1px}.sm-b-l{border-left-width:1px}.sm-b-t{border-top-width:1px}.sm-b-b{border-bottom-width:1px}}@media (min-width:768px) and (max-width:1024px) and (orientation:landscape){.page-sidebar .sidebar-menu .menu-items ul{-webkit-transform:translateZ(0);-webkit-backface-visibility:hidden;-webkit-perspective:1000}.page-container .page-content-wrapper .content{padding-top:60px}body.box-layout>.container{width:100%}.error-page .error-container{width:auto}}@media (min-width:1200px){.row-same-height{overflow:hidden}.row-same-height>[class*=col-lg]{margin-bottom:-99999px;padding-bottom:99999px}}@media (min-width:992px){.row-same-height{overflow:hidden}.row-same-height>[class*=col-md]{margin-bottom:-99999px;padding-bottom:99999px}}@media (min-width:768px){.row-same-height{overflow:hidden}.row-same-height>[class*=col-sm]{margin-bottom:-99999px;padding-bottom:99999px}}@media only screen and (min-device-width:768px) and (max-device-width:1024px) and (orientation:portrait){.page-sidebar .sidebar-menu .menu-items>li>a{padding-left:27px}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li{padding:0 27px 0 31px}.icon-thumbnail{margin-right:21px}.error-page .error-container{width:auto}}@media (max-width:767px){.header,.header .header-inner{height:48px}.header .notification-list,.header .search-link,.header .user-info-wrapper{display:none}.header .search-link{height:19px;width:16px;overflow:hidden}.container-fluid,.jumbotron{padding-left:0;padding-right:0}.page-container .page-content-wrapper .content{padding-top:48px;padding-bottom:100px}.page-sidebar .sidebar-header{padding:0 12px}.page-sidebar .sidebar-menu .menu-items>li>a{padding-left:20px}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li{padding:0 25px 0 28px}.icon-thumbnail{margin-right:20px}.sm-pull-bottom,.sm-pull-up{position:relative!important}.sm-p-t-0{padding-top:0!important}.sm-p-r-0{padding-right:0!important}.sm-p-l-0{padding-left:0!important}.sm-p-b-0{padding-bottom:0!important}.sm-padding-0{padding:0!important}.sm-p-t-5{padding-top:5px!important}.sm-p-r-5{padding-right:5px!important}.sm-p-l-5{padding-left:5px!important}.sm-p-b-5{padding-bottom:5px!important}.sm-padding-5{padding:5px!important}.sm-p-t-10{padding-top:10px!important}.sm-p-r-10{padding-right:10px!important}.sm-p-l-10{padding-left:10px!important}.sm-p-b-10{padding-bottom:10px!important}.sm-padding-10{padding:10px!important}.sm-p-t-15{padding-top:15px!important}.sm-p-r-15{padding-right:15px!important}.sm-p-l-15{padding-left:15px!important}.sm-p-b-15{padding-bottom:15px!important}.sm-padding-15{padding:15px!important}.sm-p-t-20{padding-top:20px!important}.sm-p-r-20{padding-right:20px!important}.sm-p-l-20{padding-left:20px!important}.sm-p-b-20{padding-bottom:20px!important}.sm-padding-20{padding:20px!important}.sm-p-t-25{padding-top:25px!important}.sm-p-r-25{padding-right:25px!important}.sm-p-l-25{padding-left:25px!important}.sm-p-b-25{padding-bottom:25px!important}.sm-padding-25{padding:25px!important}.sm-p-t-30{padding-top:30px!important}.sm-p-r-30{padding-right:30px!important}.sm-p-l-30{padding-left:30px!important}.sm-p-b-30{padding-bottom:30px!important}.sm-padding-30{padding:30px!important}.sm-p-t-35{padding-top:35px!important}.sm-p-r-35{padding-right:35px!important}.sm-p-l-35{padding-left:35px!important}.sm-p-b-35{padding-bottom:35px!important}.sm-padding-35{padding:35px!important}.sm-p-t-40{padding-top:40px!important}.sm-p-r-40{padding-right:40px!important}.sm-p-l-40{padding-left:40px!important}.sm-p-b-40{padding-bottom:40px!important}.sm-padding-40{padding:40px!important}.sm-p-t-45{padding-top:45px!important}.sm-p-r-45{padding-right:45px!important}.sm-p-l-45{padding-left:45px!important}.sm-p-b-45{padding-bottom:45px!important}.sm-padding-45{padding:45px!important}.sm-p-t-50{padding-top:50px!important}.sm-p-r-50{padding-right:50px!important}.sm-p-l-50{padding-left:50px!important}.sm-p-b-50{padding-bottom:50px!important}.sm-padding-50{padding:50px!important}.sm-m-t-5{margin-top:5px!important}.sm-m-r-5{margin-right:5px!important}.sm-m-l-5{margin-left:5px!important}.sm-m-b-5{margin-bottom:5px!important}.sm-m-t-10{margin-top:10px!important}.sm-m-r-10{margin-right:10px!important}.sm-m-l-10{margin-left:10px!important}.sm-m-b-10{margin-bottom:10px!important}.sm-m-t-15{margin-top:15px!important}.sm-m-r-15{margin-right:15px!important}.sm-m-l-15{margin-left:15px!important}.sm-m-b-15{margin-bottom:15px!important}.sm-m-t-20{margin-top:20px!important}.sm-m-r-20{margin-right:20px!important}.sm-m-l-20{margin-left:20px!important}.sm-m-b-20{margin-bottom:20px!important}.sm-m-t-25{margin-top:25px!important}.sm-m-r-25{margin-right:25px!important}.sm-m-l-25{margin-left:25px!important}.sm-m-b-25{margin-bottom:25px!important}.sm-m-t-30{margin-top:30px!important}.sm-m-r-30{margin-right:30px!important}.sm-m-l-30{margin-left:30px!important}.sm-m-b-30{margin-bottom:30px!important}.sm-m-t-35{margin-top:35px!important}.sm-m-r-35{margin-right:35px!important}.sm-m-l-35{margin-left:35px!important}.sm-m-b-35{margin-bottom:35px!important}.sm-m-t-40{margin-top:40px!important}.sm-m-r-40{margin-right:40px!important}.sm-m-l-40{margin-left:40px!important}.sm-m-b-40{margin-bottom:40px!important}.sm-m-t-45{margin-top:45px!important}.sm-m-r-45{margin-right:45px!important}.sm-m-l-45{margin-left:45px!important}.sm-m-b-45{margin-bottom:45px!important}.sm-m-t-50{margin-top:50px!important}.sm-m-r-50{margin-right:50px!important}.sm-m-l-50{margin-left:50px!important}.sm-m-b-50{margin-bottom:50px!important}.sm-no-margin{margin:0}.sm-no-padding{padding:0}.sm-text-right{text-align:right!important}.sm-text-left{text-align:left!important}.sm-text-center{text-align:center!important}.sm-pull-right{float:right!important}.sm-pull-left{float:left!important}.sm-pull-reset{float:none!important}.sm-block{display:block}.error-container{width:auto}.sm-image-responsive-height{width:100%;height:auto}}@media (max-width:480px){body{width:100%}body .header{width:100%;height:48px;border-bottom:1px solid rgba(0,0,0,.07)}body .header .header-inner{height:48px;text-align:center}body .header .header-inner .toggle-email-sidebar{font-size:16px;top:12px}body .header .header-inner .toggle-sidebar{left:14px}body .header .header-inner .mark-email{left:35px;top:14px}body .header .header-inner .quickview-link{top:14px}body .header .dropdown-submenu{top:12px}body .header .notification-list,body .header .search-link{display:none}body #overlay-search{font-size:48px;height:118px;line-height:46px}.page-sidebar .sidebar-header{height:48px;line-height:48px}.panel .panel-heading{padding-left:15px}.panel .panel-body{padding:0 15px 15px}.error-page{padding:15px}.error-page .error-container{margin-top:30px;width:auto}.error-page .pull-bottom{position:relative}.map-controls{left:10px}.register-container{height:auto!important}.error-container-innner{width:auto}}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:200/100),only screen and (min-device-pixel-ratio:2){.icon-set{background:url(qrc:///assets/icons/top_tray_2x.png);position:relative;background-size:95px 19px}.editor-icon{background-image:url(qrc:///assets/img/editor_tray_2x.png);background-size:480px 40px}.alert .close{background:url(qrc:///assets/icons/noti-cross-2x.png) -9px -10px no-repeat;width:10px;height:9px;position:relative;opacity:.8;background-size:114px 29px}}.f-off:before{content:""!important} +body,html{height:100%}.header .brand,.icon-thumbnail{vertical-align:middle;text-align:center}.btn-animated,.view-port .view{-moz-backface-visibility:hidden}.breadcrumb,.page-sidebar .sidebar-menu .menu-items>li>.icon-thumbnail:first-letter,.panel .panel-heading .panel-title{text-transform:uppercase}.btn,body{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-font-feature-settings:"kern" 1;-moz-font-feature-settings:"kern" 1;-webkit-font-smoothing:antialiased}.btn,.icon-thumbnail,body,h1,h2,h3,h4,h5,h6{-webkit-font-smoothing:antialiased}body{margin:0;padding:0;background-color:#fafafa;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}body.fixed-header .header{position:fixed;left:0;top:0}body.mobile .sidebar-menu{overflow:scroll;-webkit-overflow-scrolling:touch}body.mobile .sidebar-menu>ul{height:auto!important;overflow:visible!important;-webkit-overflow-scrolling:touch!important}.pace .pace-progress{background:#f28321;height:3px}.pace .pace-progress-inner{box-shadow:none}.pace .pace-activity{-webkit-animation:none;animation:none;top:73px;background:url(qrc:///assets/img/progress/progress-circle-success.svg) top left no-repeat;background-size:100% auto;margin:0 auto;border-width:0;border-radius:0;width:28px;height:40px;right:19px}.header{position:relative;display:block;height:60px;width:100%;padding:0 20px 0 0;z-index:800;background-color:#fff;border-bottom:1px solid rgba(230,230,230,.7)}.page-sidebar,.quickview-wrapper{z-index:1000;bottom:0;-webkit-backface-visibility:hidden;-webkit-perspective:1000}.header a{color:#3b4751}.header a.btn{color:#8b91a0}.header a.btn-warning{color:#eaeef1}.header .header-inner{height:60px;width:100%;vertical-align:middle;display:table-cell}.header .header-inner .toggle-sidebar{display:none}.header .notification-list,.header .search-link{display:inline-block}.header.transparent{background-color:transparent!important}.header .brand{width:300px}.header .bubble{border-radius:100%;height:14px;width:14px;background-color:rgba(248,68,68,.77);color:#fff;position:relative;top:-6px;float:right;right:-5px}.header .search-link{margin-left:15px;color:#8a8c8e;opacity:.7;font-size:16px;font-family:Montserrat,sans-serif}.header .search-link i{margin-right:15px;font-size:16px}.header .search-link:hover{opacity:1}.navbar{top:-1px}.navbar-nav>li>a{padding-top:20px;padding-bottom:20px}.navbar-default{background-color:#fff}.navbar-default .navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a{background-color:transparent}.navbar-toggle{border-radius:0;background-color:transparent!important}.page-sidebar{width:250px;background-color:#382b3f;left:-210px;position:fixed;top:0;right:auto;overflow:hidden;-webkit-transition:-webkit-transform .4s cubic-bezier(.05,.74,.27,.99);-moz-transition:-moz-transform .4s cubic-bezier(.05,.74,.27,.99);-o-transition:-o-transform .4s cubic-bezier(.05,.74,.27,.99);transition:transform .4s cubic-bezier(.05,.74,.27,.99)}.page-sidebar a,.page-sidebar button{color:#8a8c8e}.page-sidebar a:active,.page-sidebar a:hover,.page-sidebar button:active,.page-sidebar button:hover{color:#fff}.page-sidebar a:focus,.page-sidebar a:visited,.page-sidebar button:focus,.page-sidebar button:visited{color:#8a8c8e}.page-sidebar .scroll-element{visibility:hidden}.page-sidebar .sidebar-header{display:block;height:60px;line-height:60px;background-color:#382b3f;border-bottom:1px solid #382b3f;color:#fff;width:100%;padding-left:0;clear:both;z-index:10;position:relative}.page-sidebar .sidebar-header .brand{margin-left:25px;margin-right:25px}.page-sidebar .sidebar-header-collapsed .brand{margin-top:20px}.sidebar-header-hidden{display:none!important}.sidebar-header-collapsed{float:right;height:60px;width:40px;overflow:hidden;display:none}.sidebar-header-collapsed-visible{display:block!important}.page-sidebar .sidebar-header .sidebar-header-controls{display:inline-block;-webkit-transition:-webkit-transform .4s cubic-bezier(.05,.74,.27,.99);transition:transform .4s cubic-bezier(.05,.74,.27,.99);-webkit-backface-visibility:hidden}.page-sidebar .sidebar-header .sidebar-slide-toggle i{-webkit-transition:all .12s ease;transition:all .12s ease}.page-sidebar .sidebar-header .sidebar-slide-toggle.active i{-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.page-sidebar .close-sidebar{position:absolute;right:19px;top:14px;padding:9px;z-index:1}.page-sidebar .close-sidebar>i{color:rgba(255,255,255,.57)}.page-sidebar .sidebar-overlay-slide{width:100%;height:100%;background-color:#382b3f;display:block;z-index:9;padding:80px 20px 20px}.page-sidebar .sidebar-overlay-slide.from-top{top:-100%;position:absolute;-webkit-transition:all .2s ease;transition:all .2s ease}.page-sidebar .sidebar-overlay-slide.from-top.show{-webkit-transform:translate(0,100%);-ms-transform:translate(0,100%);transform:translate(0,100%)}.page-sidebar .sidebar-menu{height:calc(100% - 50px);position:relative;width:100%}.page-sidebar .sidebar-menu .outer-tab-nav-section{display:inline-block;width:45px;position:absolute;height:100%;background-color:#382b3f!important}.page-sidebar .sidebar-menu .menu-items{list-style:none;margin:0;padding:0;position:relative;overflow:auto;-webkit-overflow-scrolling:touch;height:calc(100% - 10px);width:100%}.page-sidebar .sidebar-menu .menu-items li.active>a,.page-sidebar .sidebar-menu .menu-items li.open>a,.page-sidebar .sidebar-menu .menu-items li:hover>a,.page-sidebar .sidebar-menu .menu-items li:hover>a .icon-thumbnail{color:#fff}.page-sidebar .sidebar-menu .menu-items li.active>a .icon-thumbnail,.page-sidebar .sidebar-menu .menu-items li.open>a .icon-thumbnail{color:#f28321}.page-sidebar .sidebar-menu .menu-items li>a{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}.page-sidebar .sidebar-menu .menu-items>li{display:block;padding:0;clear:right}.page-sidebar .sidebar-menu .menu-items>li:after,.page-sidebar .sidebar-menu .menu-items>li:before{display:table;content:" ";clear:both}.page-sidebar .sidebar-menu .menu-items>li>a{display:inline-block;padding:0 3px 0 32px;min-height:40px;line-height:40px;font-size:14px;clear:both}.page-sidebar .sidebar-menu .menu-items>li>a.open{background:#313131}.page-sidebar .sidebar-menu .menu-items>li>a>.arrow{float:left}.page-sidebar .sidebar-menu .menu-items>li>a>.arrow:before{float:left;display:inline;font-size:16px;font-family:FontAwesome;height:auto;content:"\f104";font-weight:300;text-shadow:none;-webkit-transition:all .12s ease;transition:all .12s ease}.page-sidebar .sidebar-menu .menu-items>li>a>.arrow.open:before{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.page-sidebar .sidebar-menu .menu-items>li>a>.badge{margin-top:12px}.page-sidebar .sidebar-menu .menu-items>li>a>.title{float:left;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:65%}.page-sidebar .sidebar-menu .menu-items>li>a>.details{font-size:12px;opacity:.4;display:block;clear:both}.page-sidebar .sidebar-menu .menu-items>li>a.detailed>.title{line-height:28px}.page-sidebar .sidebar-menu .menu-items>li>a.detailed>.details{line-height:16px}.page-sidebar .sidebar-menu .menu-items>li.active>ul.sub-menu{display:block}.page-sidebar .sidebar-menu .menu-items>li>ul.sub-menu>li ul.sub-menu li{padding-left:10px;padding-right:3px}.page-sidebar .sidebar-menu .menu-items>li>ul.sub-menu>li ul.sub-menu .icon-thumbnail{width:25px;height:25px;line-height:25px;font-size:10px}.page-sidebar .sidebar-menu .menu-items>li>ul.sub-menu li>a>.arrow:before{float:right;margin-top:1px;margin-right:20px;display:inline;font-size:16px;font-family:FontAwesome;height:auto;content:"\f104";font-weight:300;text-shadow:none;-webkit-transition:all .12s ease;transition:all .12s ease}.page-sidebar .sidebar-menu .menu-items>li>ul.sub-menu li>a>.arrow.open:before{float:right;margin-top:1px;margin-right:18px;display:inline;font-family:FontAwesome;height:auto;font-size:16px;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);font-weight:300;text-shadow:none}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu{display:none;list-style:none;clear:both;background-color:#382b3f;padding:0 0 10px}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li{background:0 0;padding:0 20px 0 40px;margin-top:1px}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li:hover>.icon-thumbnail{color:#f28321}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li>a{width:100%;display:inline-block;padding:5px 0;font-size:13px;white-space:normal}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li .icon-thumbnail{width:30px;height:30px;line-height:30px;margin:0;background-color:#382b3f;font-size:14px}.page-sidebar .sidebar-menu .muted{color:#576775;opacity:.45}.page-sidebar .icon-thumbnail [class^=bg-],.page-sidebar [class*=bg-]{color:#fff}[data-toggle-pin=sidebar]>i:before{content:"\f10c"}.icon-thumbnail{display:inline-block;background:#382b3f;height:40px;width:40px;line-height:40px;position:relative;left:0;float:right;margin-right:14px;color:#8a8c8e;font-size:16px;-webkit-transition:-webkit-transform .4s cubic-bezier(.05,.74,.27,.99);transition:transform .4s cubic-bezier(.05,.74,.27,.99);-webkit-backface-visibility:hidden;-webkit-perspective:1000;font-family:Montserrat,sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;font-weight:700}.icon-thumbnail>i{font-size:14px}.nav-collapse.collapse{height:100%!important}.quickview-wrapper{position:fixed;right:-285px;top:0;width:285px;background:#fff;box-shadow:0 0 9px rgba(191,191,191,.36);-webkit-transition:-webkit-transform .4s cubic-bezier(.05,.74,.27,.99);transition:transform .4s cubic-bezier(.05,.74,.27,.99);-ms-backface-visibility:hidden}.quickview-wrapper.open{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-ms-transform:translate(-100%,0)}.quickview-wrapper .quickview-toggle{position:absolute;right:12px;top:2px;color:#fff;padding:6px;opacity:.4}.quickview-wrapper .quickview-toggle:hover{opacity:1}.quickview-wrapper .nav-tabs{background-color:#382b3f;position:relative;padding:0 15px;height:40px}.quickview-wrapper .nav-tabs>li>a{padding:11px;color:#fff;border:0;text-align:center;font-size:11px;font-weight:700;min-width:62px}.quickview-wrapper .nav-tabs>li>a:hover{color:#f28321;opacity:1}.quickview-wrapper .nav-tabs>li.active>a,.quickview-wrapper .nav-tabs>li.active>a:focus,.quickview-wrapper .nav-tabs>li.active>a:hover{background-color:transparent;border:0;color:#f28321;opacity:1}.quickview-wrapper .nav-tabs~.tab-content{position:absolute;padding:0;left:0;right:0;top:38px;bottom:0;height:auto}.quickview-wrapper .nav-tabs~.tab-content>div{height:100%}.quickview-wrapper .nav-tabs~.tab-content ul{margin:0;padding:0}.quickview-wrapper .nav-tabs~.tab-content ul li{list-style:none}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes{background:#fff}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes a,.quickview-wrapper .nav-tabs~.tab-content .quickview-notes button{color:#000}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list{position:relative}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar{height:50px;padding:0 25px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar ul{margin-top:10px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar ul>li{display:inline-block;height:auto}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar ul>li a{height:22px;line-height:22px;display:block;padding:0 5px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar ul>li a.selected,.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar ul>li a:hover{background:#968974;color:#fbf9e3}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list .toolbar .btn-remove-notes{background:0 0;bottom:8px;display:block;left:50%;margin-left:-40%;position:absolute;width:83%;border:1px solid #968974}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul{padding:0}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li{cursor:pointer;height:42px;padding:0 25px;display:block;clear:both}.sortable .grid .grid-title,.sortable .panel-heading{cursor:move}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .left{float:left;width:65%;height:100%;padding-top:9px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .left .checkbox{display:none;float:left}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .left .checkbox label{margin-right:0;vertical-align:text-top}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .left p{margin:0;font-size:13px;font-weight:700;width:100px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;display:inline-block}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .right{font-size:10.5px;text-align:right;width:35%;line-height:41px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li .right .date{margin-right:10px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .list>ul li:hover{background:#f4ecd1}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note{background-repeat:repeat-y;background-position:27px top}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note>div{display:table;height:100%;width:100%}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar{background:#fcfcfa;height:55px;width:100%;display:table-row;box-shadow:0 1px 1px -1px rgba(0,0,0,.33)}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar>li{display:inline-block;border-right:1px solid #edecec;float:left;line-height:55px;padding:0;text-align:center;width:55px;height:auto}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar>li>a{color:#a5a5a5;display:block}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar>li>a:hover{background:#fffaf6}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar>li>a.active{color:#282829;background:#f9f1ea}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .toolbar:after{position:absolute;content:"";width:100%}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body{display:table-row;height:100%}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body>div{display:table;height:100%;width:100%;padding:0 20px 0 45px;white-space:normal}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .top{height:50px;display:table-row;clear:both;line-height:50px;text-align:center}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .top>a{float:left;color:#b0b0a8;margin-left:10px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .top>span{font-style:italic;color:#b0b0a8;font-size:11px}.portlet-icon,p{font-style:normal}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content{display:table-row;height:100%}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content form{height:100%}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content .quick-note-editor{font-size:12px}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content .quick-note-editor:focus{outline:0}.btn.active:focus,.btn:active:focus,.btn:focus,button:focus{outline:0!important}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content .quick-note-editor::-moz-selection{background:#fef8ae}.quickview-wrapper .nav-tabs~.tab-content .quickview-notes .note .body .content .quick-note-editor::selection{background:#fef8ae}.page-container{width:100%;height:100%;padding-left:40px}.page-container .page-content-wrapper{min-height:100%;position:relative}.page-container .page-content-wrapper .content{z-index:10;padding-top:60px;padding-bottom:72px;min-height:100%;-webkit-transition:all .3s ease;transition:all .3s ease}.page-container .page-content-wrapper .content.full-width{width:100%}.page-container .page-content-wrapper .content .content-inner{display:inline-block;vertical-align:top;height:100%;padding-left:30px;position:relative}.page-container .page-content-wrapper .content.overlay-footer,.page-container .page-content-wrapper .content:only-child{padding-bottom:0}.page-container .page-content-wrapper .footer{position:absolute;left:0;right:0;bottom:0;-webkit-transition:left .3s ease;transition:left .3s ease}.page-container .page-content-wrapper .footer.fixed{position:fixed}.icon-set,.scroll{position:relative}.page-title{margin-top:0}.breadcrumb{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;background-color:transparent;padding:15px 0;margin:0;border:none;display:block}.breadcrumb a{margin-left:5px;margin-right:5px;font-size:11px!important;color:#7b7d82}.breadcrumb a.active{font-weight:600;color:#f28321}.breadcrumb li{padding-left:0}.breadcrumb>li+li:before{padding:0 5px;color:#515050;font-family:FontAwesome;content:"\f105";font-weight:700}.breadcrumb a,.breadcrumb i,.breadcrumb li,.breadcrumb span{color:#7b7d82;font-weight:300;text-shadow:none}.icon-set{background:url(qrc:///assets/icons/top_tray.png) no-repeat;display:block}.icon-set.globe-fill{background-position:-1px -1px;width:17px;height:17px;top:2px}.icon-set.clip{background-position:-20px -2px;width:16px;height:16px}.icon-set.grid-box{background-position:-41px -2px;width:14px;height:14px}.icon-set.menu-hambuger{background-position:-58px -3px;width:15px;height:13px}.icon-set.menu-hambuger-plus{background-position:-77px -1px;width:18px;height:15px}.dropzone{overflow:hidden}.dropzone .dz-default.dz-message{width:100%}.scroll{overflow:auto}.scroll-wrapper>.scroll-element,.scroll-wrapper>.scroll-element div{background:0 0;border:none;margin:0;padding:0;position:absolute;z-index:10}.scroll-wrapper>.scroll-element div{display:block;height:100%;left:0;top:0;width:100%}.scroll-wrapper>.scroll-element.scroll-x{bottom:2px;height:7px;left:0;min-width:100%;width:100%}.scroll-wrapper>.scroll-element.scroll-y{height:100%;min-height:100%;right:2px;top:0;width:4px}.scroll-wrapper>.scroll-element .scroll-element_outer{opacity:.3}.scroll-wrapper>.scroll-element .scroll-element_size{background-color:rgba(0,0,0,.07);opacity:0}.scroll-wrapper>.scroll-element .scroll-bar{background-color:#697686}.scroll-wrapper>.scroll-element.scroll-x .scroll-bar{bottom:0;height:4px;min-width:24px;top:auto}.scroll-wrapper>.scroll-element.scroll-x .scroll-element_outer{bottom:0;top:auto;left:2px;-webkit-transition:height .2s;transition:height .2s}.scroll-wrapper>.scroll-element.scroll-x .scroll-element_size{left:-4px}.scroll-wrapper>.scroll-element.scroll-y .scroll-bar{left:auto;min-height:24px;right:0;width:4px}.scroll-wrapper>.scroll-element.scroll-y .scroll-element_outer{left:auto;right:0;top:2px;-webkit-transition:all .2s;transition:all .2s}.scroll-wrapper>.scroll-element.scroll-y .scroll-element_size{top:-4px}.scroll-wrapper.auto-hide>.scroll-element .scroll-element_track{display:none}.scroll-wrapper>.scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size{left:-11px}.scroll-wrapper>.scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size{top:-11px}.scroll-wrapper>.scroll-element.scroll-draggable .scroll-element_outer,.scroll-wrapper>.scroll-element:hover .scroll-element_outer{overflow:hidden;opacity:.7}.scroll-wrapper>.scroll-element.scroll-draggable .scroll-element_outer .scroll-element_size,.scroll-wrapper>.scroll-element:hover .scroll-element_outer .scroll-element_size{opacity:1}.scroll-wrapper>.scroll-element.scroll-draggable .scroll-element_outer .scroll-bar,.scroll-wrapper>.scroll-element:hover .scroll-element_outer .scroll-bar{height:100%;width:100%}.scroll-wrapper>.scroll-element.scroll-x.scroll-draggable .scroll-element_outer,.scroll-wrapper>.scroll-element.scroll-x:hover .scroll-element_outer{height:10px;min-height:7px}.scroll-wrapper>.scroll-element.scroll-y.scroll-draggable .scroll-element_outer,.scroll-wrapper>.scroll-element.scroll-y:hover .scroll-element_outer{min-width:7px;width:7px}.container-fluid{padding-left:30px;padding-right:30px}.copyright{padding:25px 0;border-top:1px solid rgba(98,98,98,.07)}.navbar-center,.navbar-center>li{float:none;display:inline-block;vertical-align:top}.navbar-nav li a{min-width:50px}.pager{margin:0}.view-port{position:relative;width:100%;height:100%;display:block;white-space:nowrap;overflow:hidden}.view-port .navbar{border-radius:0;padding-left:0;margin-bottom:0;border-left:0;display:table;width:100%;top:0;border-top:0}.view-port .navbar .navbar-inner{display:table-cell;height:50px;vertical-align:middle}.view-port .navbar .action{position:absolute;top:0;line-height:50px;z-index:1}.view-port .navbar .action.pull-right{right:0}.view-port .navbar .view-heading{font-size:15px;text-align:center}.view-port .navbar>p{line-height:12px;font-size:12px;margin:0}.view-port .navbar.navbar-sm{min-height:35px}.view-port .navbar.navbar-sm .navbar-inner{height:35px}.view-port .navbar.navbar-sm .action{line-height:35px}.view-port .view{display:inline-block;width:100%;height:100%;vertical-align:top;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;-webkit-transition:all .4s ease;transition:all .4s ease}.view-port .view:first-child:before{position:absolute;content:'';width:100%;height:100%;background-color:#000;opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear;z-index:-1}.view-port .view:only-child{margin:0}.view-port.from-top>.view:last-child,.view-port.push>.view:first-child,.view-port.push>.view:last-child{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-ms-transform:translate(-100%,0)}.view-port.push-parrallax>.view:first-child{-webkit-transition:all .4s cubic-bezier(.1,.7,.1,1);transition:all .4s cubic-bezier(.1,.7,.1,1);-webkit-transform:translate3d(-25%,0,0);transform:translate3d(-25%,0,0);-ms-transform:translate(-25%,0)}.view-port.push-parrallax>.view:first-child:before{opacity:0;z-index:100}.view-port.push-parrallax>.view:last-child{-webkit-transition:all .4s cubic-bezier(.1,.7,.1,1);transition:all .4s cubic-bezier(.1,.7,.1,1);-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-ms-transform:translate(-100%,0);box-shadow:0 0 9px rgba(191,191,191,.36)}.panel{box-shadow:none;border-radius:1px;-webkit-border-radius:1px;-moz-border-radius:1px;-webkit-transition:all .2s ease;transition:all .2s ease;position:relative}.panel .panel-heading{background:#fff;border-radius:0;border-bottom:0;padding:20px 20px 7px;position:relative;z-index:3;min-height:48px}.panel .panel-heading.separator:after{content:"";height:1px;background:rgba(0,0,0,.08);left:16px;right:16px;position:absolute;bottom:0}.panel .panel-heading+.panel-body{padding-top:0;height:calc(100% - 50px)}.panel .panel-heading .panel-title{display:inline-block;letter-spacing:.02em;font-size:12px;font-weight:600;margin:0;padding:0;line-height:normal;overflow:hidden;text-overflow:ellipsis;-webkit-text-stroke:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}body,p{letter-spacing:.01em}.panel .panel-heading .panel-controls{float:right;margin-top:-3px}.panel .panel-heading .panel-controls ul{margin:0;padding:0}.panel .panel-heading .panel-controls ul li{display:inline-block;list-style:none;line-height:0}.panel .panel-heading .panel-controls:after{content:"";display:table;clear:both}.panel .panel-heading.panel-heading-hover .panel-title{opacity:.4}.panel .panel-heading.panel-heading-hover:hover .panel-title{opacity:1}.panel.panel-condensed .panel-heading .panel-title,.panel.panel-hover .panel-heading .panel-title{opacity:.4}.panel.panel-default{border:1px solid rgba(0,0,0,.07)}.panel.panel-bordered{border:1px solid rgba(230,230,230,.7)}.panel.panel-condensed .panel-heading{padding:13px 13px 0;min-height:30px}.panel.panel-condensed .panel-body{padding:13px}.panel.panel-hover:hover .panel-heading .panel-title{opacity:1}.panel.panel-transparent{background:0 0;box-shadow:none}.panel.panel-transparent .panel-body{background:0 0}.panel.full-height{height:calc(100%)}.panel.full-height .panel-body{width:100%;height:100%}.panel.panel-featured{box-shadow:-1px 1px 3px 0 rgba(121,129,135,.14);width:calc(100% - 50px);float:right}.panel.panel-featured .panel-title h4{font-size:16px;text-transform:uppercase;color:#f0f0f0}.panel.panel-featured .panel-body h3{line-height:34px;font-size:26px}.panel.panel-featured .footer .username{line-height:8px;padding-top:10px;font-size:16px}.panel.panel-featured .footer .buttons li{display:inline;list-style:none;font-weight:700;margin-left:20px}.panel.panel-featured .footer .buttons li:first-child{margin-left:0}.panel.panel-featured .footer .buttons .heart{color:#f28321}.panel.panel-featured .footer .buttons .comment{color:#8a8c8e}.panel.panel-featured .ribbon{width:38px;height:38px;margin-left:-39px;float:left;box-shadow:inset -3px 0 3px 0 rgba(0,0,0,.14)}.panel.panel-featured .ribbon.blue,.panel.panel-featured .ribbon.green{background:#f28321}.panel.hover-fill:hover{background:#f0f0f0}.panel.hover-stroke:hover{border:1px solid #e6e6e6}.panel .panel-body{padding:20px;height:100%;width:100%}.panel .panel-body.no-padding .row{margin-left:0;margin-right:0}.panel .panel-body.no-bottom-padding{padding-bottom:0}.panel .panel-body.no-top-padding{padding-top:0}.panel .panel-body .title{margin-top:0}.panel .panel-body.scrollable{margin-bottom:20px}.portlet-progress{background:rgba(255,255,255,.8);bottom:0;left:0;position:absolute!important;right:0;top:0;display:none;z-index:2}.portlet-progress>.progress,.portlet-progress>.progress.progress-small{height:3px}.portlet-progress>.portlet-bar-indeterminate,.portlet-progress>.progress-circle-indeterminate{display:block;left:50%;margin-left:-17px;margin-top:-17px;position:absolute;top:50%}.portlet-progress>.progress-circle-indeterminate{width:35px;height:35px}.panel-maximized{position:fixed!important;left:40px;top:59px;bottom:0;right:0;z-index:600;margin:0}.panel .pgn-wrapper{position:absolute;z-index:602}.btn,.btn-file,label.inline{position:relative}.panel-heading a{color:#8a8c8e!important;opacity:.4}address a,body{color:#282829}.panel-heading a.portlet-refresh{-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.panel-heading a.portlet-help,.panel-heading a.portlet-refresh.refreshing,.panel-heading a[data-toggle]:hover{opacity:1}.portlet-icon{-moz-osx-font-smoothing:grayscale;font-family:framework-icon;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.portlet-icon-close:before{content:"\e60a"}.portlet-icon-maximize:before{content:"\e634"}.portlet-icon-refresh:before{content:"\e600"}.portlet-icon-collapse:before{content:"\e62c"}.portlet-icon-settings:before{content:"\e655"}.portlet-icon-refresh-lg-master,.portlet-icon-refresh-lg-white{width:15px;height:15px;display:block;background-size:cover;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.portlet-icon-refresh-lg-master.fade,.portlet-icon-refresh-lg-white.fade{opacity:.1}.portlet-icon-refresh-lg-master{background-image:url(qrc:///assets/img/progress/progress-circle-lg-master-static.svg)}.portlet-icon-refresh-lg-white{background-image:url(qrc:///assets/img/progress/progress-circle-lg-white-static.svg)}.portlet-icon-refresh-lg-master-animated,.portlet-icon-refresh-lg-white-animated{width:15px;height:15px;display:block;background-size:cover;opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.portlet-icon-refresh-lg-master-animated.active,.portlet-icon-refresh-lg-white-animated.active{opacity:1}.portlet-icon-refresh-lg-master-animated{background-image:url(qrc:///assets/img/progress/progress-circle-lg-master.svg)}.portlet-icon-refresh-lg-white-animated{background-image:url(qrc:///assets/img/progress/progress-circle-lg-white.svg)}.panel-scroll{height:100px}.ui-sortable-handle{transition:max-height .3s ease 0s}.btn,a[ng-click]{cursor:pointer}.ui-sortable{min-height:0!important}.ui-sortable-placeholder{border:1px dotted #000;visibility:visible!important;height:100%!important}.sortable-box-placeholder *,.ui-sortable-placeholder *{visibility:hidden}.sortable-box-placeholder{background-color:#f0f0f0;border:1px dashed #e6e6e6;display:block;margin-top:0!important;margin-bottom:24px!important}.sortable .panel{transition:none}.btn,a{transition:color .1s linear 0s,background-color .1s linear 0s,opacity .2s linear 0s!important}.sortable-column{padding-bottom:100px}.demo-portlet-scrollable{height:158px}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{font-family:Montserrat,sans-serif;font-size:13px;font-weight:400}option,select{font-family:sans-serif}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:Montserrat,sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;font-weight:300;color:#2c2c2c}h1{font-size:44px;line-height:55px;letter-spacing:-.08px}h2{font-size:31px;line-height:40px}h3{font-size:27px;line-height:35px}h4{font-size:22px;line-height:31.88px}h5{font-size:18px;line-height:25.88px}h3 small,h4 small,h5 small{font-weight:300}.normal,p{font-weight:400}h1.block,h2.block,h3.block,h4.block,h5.block,h6.block{padding-bottom:10px}a{text-shadow:none!important;color:#f28321}a:active,a:focus{color:#f28321}@media (hover:hover){body:not(.mobile) a:hover{color:#f28321}}a,a:active,a:focus,a:hover{outline:0!important;text-decoration:none}br{line-height:normal;clear:both}code{color:#f84444;background-color:#f0f0f0}code:hover{background-color:#fddddd}p{display:block;font-size:14px;line-height:22px;margin:0 0 10px;white-space:normal}.overflow-ellipsis,.pgn-circle .alert>div>div.pgn-message>div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.small,small{line-height:18px}label.inline{display:inline-block;top:0;font-size:13px}ol>li,ul>li{padding-left:3px;line-height:24px}ol.lg-icon>li,ul.lg-icon>li{font-size:21px}ol.lg-icon>li span,ul.lg-icon>li span{font-size:14px}ol.no-style,ul.no-style{list-style:none;padding-left:5px}address{margin-bottom:0}blockquote{padding:0 0 0 18px;border-left:0}blockquote:before{font-family:FontAwesome;content:"\f10d";margin-right:13px;float:left}blockquote p{font-size:16px}blockquote small{line-height:29px;color:#8b91a0;padding-left:30px}blockquote small:before{content:""}blockquote.pull-right{border-right:0}blockquote.pull-right:before{float:right;font-family:FontAwesome;content:"\f10d";margin-left:13px;margin-right:0}.dropdown-default .dropdown-menu:after,blockquote.pull-right small:after{content:""}blockquote.pull-right small{padding-right:30px}hr{border-color:#e6e6e6}hr.double{border-width:2px}hr.dotted{border-style:dotted none none}.small-text{font-size:12px!important}.normal-text{font-size:13px!important}.large-text{font-size:15px!important}.semi-bold{font-weight:400!important}.bold{font-weight:700!important}.light{font-weight:300!important}.logo{margin:18px 14px}.all-caps{text-transform:uppercase}.muted{color:#e2e2e2}.hint-text{opacity:.7}.no-decoration{text-decoration:none!important}.bg-master{background-color:#8a8c8e}.bg-master-light{background-color:#e6e6e6}.bg-master-lighter{background-color:#f0f0f0}.bg-master-lightest{background-color:#fafafa}.bg-master-dark{background-color:#2c2c2c}.bg-master-darker{background-color:#1a1a1a}.bg-master-darkest{background-color:#121212}.bg-primary{background-color:#fff}.bg-primary-dark{background-color:#382b3f}.bg-primary-darker{background-color:#282829}.bg-primary-light{background-color:#fbaa26}.bg-primary-lighter{background-color:#8a8c8e}.bg-complete{background-color:#f28321}.bg-complete-dark{background-color:#f84444}.bg-complete-darker{background-color:#382b3f}.bg-complete-light{background-color:#f84444}.bg-complete-lighter{background-color:#f9d3d8}.bg-success{background-color:#f28321}.bg-success-dark{background-color:#f84444}.bg-success-darker{background-color:#382b3f}.bg-success-light{background-color:#f84444}.bg-success-lighter{background-color:#f9d3d8}.bg-info{background-color:#382b3f}.bg-info-dark{background-color:#382b3f}.bg-info-darker{background-color:#282829}.bg-info-light{background-color:#626c75}.bg-info-lighter{background-color:#d8dadc}.bg-danger{background-color:#f84444}.bg-danger-dark{background-color:#f84444}.bg-danger-darker{background-color:#f84444}.bg-danger-light{background-color:#f84444}.bg-danger-lighter{background-color:#fddddd}.bg-warning{background-color:#fbaa26}.bg-warning-dark{background-color:#fbaa26}.bg-warning-darker{background-color:#fbaa26}.bg-warning-light{background-color:#fbaa26}.bg-warning-lighter{background-color:#fef6dd}.bg-menu-dark{background-color:#382b3f}.bg-menu{background-color:#382b3f}.bg-menu-light{background-color:#8a8c8e}.gradient-black,.gradient-grey{background:-webkit-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,.8) 75%);background:linear-gradient(to bottom,rgba(0,0,0,0) 0,rgba(0,0,0,.8) 75%)}.bg-white{background-color:#fff}.bg-transparent{background-color:transparent!important}.text-master{color:#8a8c8e!important}.text-master-light{color:#e6e6e6!important}.text-black{color:#282829!important}.text-white{color:#fff!important}.text-complete,.text-success{color:#f28321!important}.text-info{color:#3b4752!important}.text-warning{color:#f8d053!important}.text-warning-dark{color:#c9a843!important}.text-danger{color:#f28321!important}.text-primary{color:#f28321!important}.text-right{text-align:right!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.label{padding:3px 9px;font-size:11px;text-shadow:none;background-color:#e6e6e6;font-weight:600;color:#8a8c8e}.label-success{background-color:#f28321;color:#fff}.label-warning{background-color:#f8d053;color:#fff}.label-danger,.label-important{background-color:#f28321;color:#fff}.label-info{background-color:#f28321;color:#fff}.label-inverse{background-color:#f84444;color:#fff}.label-white{background-color:#fff;color:#8a8c8e}.fs-10{font-size:10px!important}.fs-11{font-size:11px!important}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-15{font-size:15px!important}.fs-16{font-size:16px!important}.lh-normal{line-height:normal}.lh-10{line-height:10px}.lh-11{line-height:11px}.lh-12{line-height:12px}.lh-13{line-height:13px}.lh-14{line-height:14px}.lh-15{line-height:15px}.lh-16{line-height:16px}.font-montserrat{font-family:Montserrat,sans-serif}.font-georgia{font-family:Georgia!important}.font-heading{font-family:Montserrat,sans-serif}.well{background-color:#e6e6e6;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;box-shadow:none!important;border:none;background-image:none}.btn,.btn-group.open .dropdown-toggle,.btn.active,.btn.disabled,.btn:active,.btn:focus,.btn:hover,.btn[disabled],.open .dropdown-toggle,.open.dropdown-default .dropdown-toggle{box-shadow:none}.well.well-large{padding:24px;width:auto}.well.well-small{padding:13px;width:auto}.well.green{background-color:#f28321;color:#fff;border:none}.jumbotron p{font-size:14px;font-weight:400;margin-bottom:inherit}.jumbotron p.small{font-size:85%}@media (max-width:1400px){body,p{font-size:13px;line-height:20px}h1{font-size:33px;line-height:44px;letter-spacing:-.08px}h2{font-size:28px;line-height:40px}h3{font-size:24px;line-height:35.88px}h4{font-size:18px;line-height:33.88px}h5{font-size:16px;line-height:25.88px}.small,small{font-size:89%;line-height:17px}}.windows body,.windows p{font-size:13px;letter-spacing:normal}.windows h1{font-size:33px;line-height:49px}.windows h2{font-size:29px;line-height:40px}.windows h3{font-size:29px;line-height:33px}.windows h4{font-size:23px;line-height:32px}.windows h5{font-size:19px;line-height:28px}.windows h1,.windows h2,.windows h3,.windows h4,.windows h5{font-weight:300;letter-spacing:normal}.windows .jumbotron p{font-size:13px}.windows .jumbotron p.small{font-size:88%}.windows .small,.windows small{font-size:89%}.btn{font-size:14px;font-weight:400;letter-spacing:.01em;margin-bottom:0;border:1px solid #f0f0f0;text-align:center;vertical-align:middle;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:none!important;color:#8a8c8e;background-color:#fff;text-shadow:none;line-height:21px;padding-left:17px;padding-right:17px}@media (hover:hover){body:not(.mobile) .btn:hover{background-color:#fafafa;border:1px solid rgba(98,98,98,.27)}}.btn.active{border-color:#e6e6e6;background:#fff}.btn .caret{margin-left:3px}.btn .caret.single{margin-left:0}.btn-primary,.btn-primary:focus{color:#fff;background-color:#f28321;border-color:#f28321}.btn-primary.active,.btn-primary.active:focus,.btn-primary:active,.btn-primary:active:focus,.btn-primary:active:hover,.open .dropdown-toggle.btn-primary{background-color:#f84444;border-color:#f84444;color:#fff}.open .dropdown-toggle.btn-primary{background-color:#382b3f;border-color:#382b3f;color:#fbaa26}@media (hover:hover){body:not(.mobile) .btn-primary.hover,body:not(.mobile) .btn-primary:hover{background-color:#382b3f;border-color:#382b3f;color:#fbaa26}}.btn-primary.active:hover{background:#f84444;border-color:#f84444}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#f28321;border-color:#f28321}.btn-primary .badge{color:#f28321;background-color:#fff}.btn-success,.btn-success:focus{color:#fff;background-color:#f28321;border-color:#f28321}.btn-success.active,.btn-success.active:focus,.btn-success:active,.btn-success:active:focus,.btn-success:active:hover,.open .dropdown-toggle.btn-success{background-color:#f84444;border-color:#f84444;color:#fff}.btn-success.hover,.btn-success:hover,.open .dropdown-toggle.btn-success{background-color:#f84444;border-color:#f84444;color:#fff}.btn-success.active:hover{background:#f84444;border-color:#f84444}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#f28321;border-color:#f28321}.btn-success .badge{color:#f28321;background-color:#fff}.btn-complete,.btn-complete:focus{color:#fff;background-color:#f28321;border-color:#f28321}.btn-complete.active,.btn-complete.active:focus,.btn-complete:active,.btn-complete:active:focus,.btn-complete:active:hover,.open .dropdown-toggle.btn-complete{background-color:#f84444;border-color:#f84444;color:#fff}.btn-complete.hover,.btn-complete:hover,.open .dropdown-toggle.btn-complete{background-color:#f84444;border-color:#f84444;color:#fff}.btn-complete.active:hover{background:#f84444;border-color:#f84444}.btn-complete.disabled,.btn-complete.disabled.active,.btn-complete.disabled:active,.btn-complete.disabled:focus,.btn-complete.disabled:hover,.btn-complete[disabled],.btn-complete[disabled].active,.btn-complete[disabled]:active,.btn-complete[disabled]:focus,.btn-complete[disabled]:hover,fieldset[disabled] .btn-complete,fieldset[disabled] .btn-complete.active,fieldset[disabled] .btn-complete:active,fieldset[disabled] .btn-complete:focus,fieldset[disabled] .btn-complete:hover{background-color:#f28321;border-color:#f28321}.btn-complete .badge{color:#f28321;background-color:#fff}.btn-info,.btn-info:focus{color:#fff;background-color:#3b4752;border-color:#3b4752}.btn-info.active,.btn-info.active:focus,.btn-info:active,.btn-info:active:focus,.btn-info:active:hover,.open .dropdown-toggle.btn-info{background-color:#303a42;border-color:#303a42;color:#fff}.btn-info.hover,.btn-info:hover,.open .dropdown-toggle.btn-info{background-color:#626c75;border-color:#626c75;color:#fff}.btn-info.active:hover{background:#333d47;border-color:#333d47}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#3b4752;border-color:#3b4752}.btn-info .badge{color:#3b4752;background-color:#fff}.btn-warning,.btn-warning:focus{color:#fff;background-color:#f8d053;border-color:#f8d053}.btn-warning.active,.btn-warning.active:focus,.btn-warning:active,.btn-warning:active:focus,.btn-warning:active:hover,.open .dropdown-toggle.btn-warning{background-color:#c9a843;border-color:#c9a843;color:#fff}.btn-warning.hover,.btn-warning:hover,.open .dropdown-toggle.btn-warning{background-color:#f9d975;border-color:#f9d975;color:#fff}.btn-warning.active:hover{background:#d5b347;border-color:#d5b347}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f8d053;border-color:#f8d053}.btn-warning .badge{color:#f28321;background-color:#fff}.btn-danger,.btn-danger:focus{color:#fff;background-color:#f28321;border-color:#f28321}.btn-danger.active,.btn-danger.active:focus,.btn-danger:active,.btn-danger:active:focus,.btn-danger:active:hover,.open .dropdown-toggle.btn-danger{background-color:#f84444;border-color:#f84444;color:#fff}.open .dropdown-toggle.btn-danger{background-color:#382b3f;border-color:#382b3f;color:#fbaa26}@media (hover:hover){body:not(.mobile) .btn-danger.hover,body:not(.mobile) .btn-danger:hover{background-color:#382b3f;border-color:#382b3f;color:#fbaa26}}.btn-danger.active:hover{background:#d34b47;border-color:#d34b47}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#f28321;border-color:#f28321}.btn-danger .badge{color:#f28321;background-color:#fff}.btn-default,.btn-default:focus{color:#5e5e5e;background-color:#fff;border-color:#f0f0f0}.btn-default.active,.btn-default.active:focus,.btn-default:active,.btn-default:active:focus,.btn-default:active:hover{background-color:#f0f0f0;border-color:#e6e6e6;color:#2c2c2c}.btn-default.hover,.btn-default:hover{background-color:#fafafa;border-color:rgba(98,98,98,.27);color:#1a1a1a}.btn-default.active:hover{background:#f0f0f0}.btn-link{color:#5e5e5e;background-color:transparent;border:none}.btn-link.active,.btn-link.disabled,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled]{background-color:transparent;border:none;text-decoration:none;outline:0}.btn-file{overflow:hidden}.btn-file input[type=file]{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;background:#f84444;cursor:inherit;display:block}.btn-group-lg>.btn,.btn-lg{padding-left:28px;padding-right:28px;line-height:23px}.btn-group-sm>.btn,.btn-sm{padding-left:16px;padding-right:16px;font-size:11.9px;line-height:20px}.btn-group-xs>.btn,.btn-xs{padding:2px 9px;font-size:8.5px}.btn-cons{margin-right:5px;min-width:120px}.btn-group{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-rounded{border-radius:100px}.dropdown-default{display:inline-block}.dropdown-default.open>.btn.dropdown-toggle{border-color:transparent!important;background:0 0!important;z-index:791!important}.dropdown-default.open .dropdown-menu{opacity:1;transform:scale(1,1);z-index:700}.dropdown-default.open .dropdown-menu li{visibility:visible}.dropdown-default.open.dropup>.btn-complete+.dropdown-menu:after,.dropdown-default.open.dropup>.btn-danger+.dropdown-menu:after,.dropdown-default.open.dropup>.btn-info+.dropdown-menu:after,.dropdown-default.open.dropup>.btn-primary+.dropdown-menu:after,.dropdown-default.open.dropup>.btn-success+.dropdown-menu:after,.dropdown-default.open.dropup>.btn-warning+.dropdown-menu:after{top:auto;bottom:0}.dropdown-default.open>.btn-complete+.dropdown-menu:after,.dropdown-default.open>.btn-danger+.dropdown-menu:after,.dropdown-default.open>.btn-info+.dropdown-menu:after,.dropdown-default.open>.btn-primary+.dropdown-menu:after,.dropdown-default.open>.btn-success+.dropdown-menu:after,.dropdown-default.open>.btn-warning+.dropdown-menu:after{top:0;height:42px}.dropdown-default.open>.btn-complete+.dropdown-menu:after,.dropdown-default.open>.btn-primary+.dropdown-menu:after,.dropdown-default.open>.btn-success+.dropdown-menu:after{background-color:#f28321}.dropdown-default.open>.btn-warning+.dropdown-menu:after{background-color:#f8d053}.dropdown-default.open>.btn-danger+.dropdown-menu:after{background-color:#382b3f}.dropdown-default.open>.btn-info+.dropdown-menu:after{background-color:#382b3f}.dropdown-default.dropup .btn.dropdown-toggle.btn-lg+.dropdown-menu{margin-bottom:-47px;padding-bottom:49px}.dropdown-default.dropup .btn.dropdown-toggle.btn-lg+.dropdown-menu:after{bottom:49px}.dropdown-default.dropup .btn.dropdown-toggle.btn-sm+.dropdown-menu{margin-bottom:-34px;padding-bottom:36px}.dropdown-default.dropup .btn.dropdown-toggle.btn-sm+.dropdown-menu:after{bottom:36px}.dropdown-default.dropup .btn.dropdown-toggle.btn-xs+.dropdown-menu{margin-bottom:-29px;padding-bottom:31px}.dropdown-default.dropup .btn.dropdown-toggle.btn-xs+.dropdown-menu:after{bottom:31px}.dropdown-default.dropup .dropdown-menu{margin-bottom:-40px;padding:0 3px 44px 0!important;transform-origin:center bottom 0}.dropdown-default.dropup .dropdown-menu:after{bottom:43px;top:auto!important}.dropdown-default .btn.dropdown-toggle{text-align:left;padding-right:27px}.dropdown-default .btn.dropdown-toggle.btn-lg{padding-right:42px}.dropdown-default .btn.dropdown-toggle.btn-lg .caret{right:26px}.dropdown-default .btn.dropdown-toggle.btn-lg+.dropdown-menu{margin-top:-47px;padding-top:49px}.dropdown-default .btn.dropdown-toggle.btn-lg+.dropdown-menu:after{top:49px}.dropdown-default .btn.dropdown-toggle.btn-sm{padding-right:26px}.dropdown-default .btn.dropdown-toggle.btn-sm .caret{right:16px}.dropdown-default .btn.dropdown-toggle.btn-sm+.dropdown-menu{margin-top:-34px;padding-top:36px}.dropdown-default .btn.dropdown-toggle.btn-sm+.dropdown-menu:after{top:36px}.dropdown-default .btn.dropdown-toggle.btn-xs{padding-right:21px}.dropdown-default .btn.dropdown-toggle.btn-xs .caret{right:8px}.dropdown-default .btn.dropdown-toggle.btn-xs+.dropdown-menu{margin-top:-29px;padding-top:31px}.dropdown-default .btn.dropdown-toggle.btn-xs+.dropdown-menu:after{top:31px}.dropdown-default .btn.dropdown-toggle .caret{position:absolute;right:15px;top:50%;margin-top:-2px}.dropdown-default .btn-rounded{padding-left:17px;padding-right:17px}.dropdown-default .btn-rounded+.dropdown-menu{border-radius:17px}.dropdown-default .dropdown-menu{margin-top:-40px;padding-top:42px;overflow:hidden;backface-visibility:hidden;display:block;opacity:0;transform:scale(1,0);transform-origin:center top 0;-webkit-transition:all 170ms cubic-bezier(.05,.74,.27,.99) 0s;transition:all 170ms cubic-bezier(.05,.74,.27,.99) 0s;z-index:-1}.btn-animated,.btn-animated>span{-webkit-backface-visibility:hidden}.dropdown-default .dropdown-menu:after{position:absolute;height:1px;left:0;top:42px;background:#e6e6e6;width:100%}.dropdown-default .dropdown-menu li{visibility:hidden}.dropdown-menu{position:absolute;display:none;float:left;list-style:none;text-shadow:none;box-shadow:0 0 5px rgba(98,98,98,.2);border:none;border-radius:3px;font-size:13px;margin:0;background:#fafafa;min-width:50px;z-index:700}.dropdown-menu .divider{background-color:#e6e6e6;height:1px;margin:3px 0;border-bottom:0}.btn-animated:before,.btn-animated>span{height:100%;width:100%;-webkit-transition:all .2s ease-in-out}.dropdown-menu>li{padding-left:0}.dropdown-menu>li:first-child{padding-top:9px}.dropdown-menu>li:last-child{padding-bottom:9px}.dropdown-menu>li.dropdown-header{padding:3px 20px}.dropdown-menu>li.active>a,.dropdown-menu>li.active>a:focus,.dropdown-menu>li.active>a:hover{color:#1a1a1a;text-decoration:none;background-color:#f0f0f0;background-image:none}.dropdown-menu>li.disabled>a,.dropdown-menu>li.disabled>a:focus,.dropdown-menu>li.disabled>a:hover{color:#959595}.dropdown-menu>li.disabled>a:focus,.dropdown-menu>li.disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent;background-image:none}.dropdown-menu>li>a{line-height:35px;color:#8a8c8e;padding:0 20px;border-radius:3px;text-align:left}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#382b3f;text-decoration:none;background-color:transparent;background-image:none}.dropdown-backdrop{z-index:600}.btn-animated{overflow:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d}.btn-animated>span{display:inline-block;-moz-backface-visibility:hidden;backface-visibility:hidden;transition:all .2s ease-in-out;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d}.nav-tabs-fillup,.nav-tabs-simple>li:after,.progress-circle{-webkit-backface-visibility:hidden}.btn-animated:before{position:absolute;font-size:100%;line-height:2.5;transition:all .2s ease-in-out}.btn-animated:after{content:'';position:absolute;z-index:-1;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.btn-animated.from-top:before{left:0;top:-100%}.btn-animated.from-top.show-icon:before,.btn-animated.from-top:hover:before{top:0}.btn-animated.from-top.show-icon>span,.btn-animated.from-top:hover>span{-webkit-transform:translateY(300%);-ms-transform:translateY(300%);transform:translateY(300%)}.btn-animated.from-left:before{left:-100%;top:0}.btn-animated.from-left.show-icon:before,.btn-animated.from-left:hover:before{left:0}.btn-animated.from-left.show-icon>span,.btn-animated.from-left:hover>span{-webkit-transform:translateX(200%);-ms-transform:translateX(200%);transform:translateX(200%)}.btn-animated.fa:before{font-family:FontAwesome}.btn-animated.pg:before{font-family:framework-icon}.btn-tag{line-height:17px;border-radius:17px 3px 3px 17px;padding:5px 19px}.btn-tag.hover,.btn-tag:hover{border-color:transparent}.btn-tag.btn-tag-light{background:#fafdff;color:#f28321;border:1px solid #cbe4f0}.btn-tag.btn-tag-light:hover{background:#fff}.btn-tag.btn-tag-dark{background:#e6e6e6;color:#8a8c8e}.btn-tag.btn-tag-dark:hover{background:#ebebeb}.btn-tag.btn-tag-rounded{border-radius:17px}.btn-toolbar .btn{padding-left:14px;padding-right:14px}.pager .disabled>button,.pager .disabled>button:focus,.pager .disabled>button:hover,.pager .disabled>span{cursor:not-allowed;opacity:.5}.checkbox label,.cs-select span,.notification-panel .notification-body .notification-item .heading .thumbnail-wrapper,.notification-positions .position:hover,.radio label{cursor:pointer}.alert{background-image:none;box-shadow:none;text-shadow:none;padding:9px 19px 9px 15px;border-radius:3px;font-size:13px;border-width:0;-webkit-transition:all .2s linear 0s;transition:all .2s linear 0s}.alert.bordered{border-width:1px}.alert .link{color:#ce8f22;font-weight:700}.alert .alert-heading{color:#ce8f22!important;margin-bottom:5px;font-weight:600}.alert .btn-small{position:relative;top:-3.5px}.alert .button-set .btn{position:relative;top:8px}.alert .close{background:url(qrc:///assets/icons/noti-cross.png) -9px -10px no-repeat;width:10px;height:9px;position:relative;opacity:.8;top:4.5px;margin-left:20px;font-size:0}.alert .close:hover,.notification-panel .notification-body .notification-item.unread .heading{opacity:1}.alert-danger,.alert-error{background-color:#fddddd;color:#f84444;border-color:#f84444}.alert-danger .close,.alert-error .close{background-position:-95px -10px!important}.alert-warning{background-color:#fef6dd;color:#957d32;border-color:#957d32}.alert-info,.alert-success{background-color:#f9d3d8;color:#f84444;border-color:#f84444}.alert-info .close{background-position:-67px -10px!important}.alert-success .close{background-position:-38px -10px!important}.alert-default{background-color:#fff;color:#8a8c8e;border-color:#e6e6e6}.alert-default .close{background-position:-67px -10px!important}.badge{text-shadow:none;font-family:Montserrat,sans-serif;font-weight:600;background-color:#e6e6e6;font-size:11px;padding-left:6px;padding-right:6px;padding-bottom:4px;color:#8a8c8e}.badge-success{background-color:#f28321;color:#fff}.badge-warning{background-color:#f8d053;color:#fff}.badge-danger,.badge-important{background-color:#f28321;color:#fff}.badge-info{background-color:#3b4752;color:#fff}.badge-inverse{background-color:#f84444;color:#fff}.badge-white{background-color:#fff;color:#8a8c8e}.badge-disable{background-color:#2c2c2c;color:#8a8c8e}.popover{border:1px solid rgba(0,0,0,.1);box-shadow:0 0 9px rgba(191,191,191,.36);z-index:790}.notification-toggle{top:35px;left:-26px;padding:0}.notification-toggle:after,.notification-toggle:before{border-bottom:0!important}.notification-panel{background-color:#fff;border:1px solid #e6e6e6}.notification-panel .notification-body{height:auto;max-height:350px;position:relative;overflow:hidden}.notification-panel .notification-body .notification-item{position:relative;margin-left:25px;background-color:#fff;padding-right:26px}.notification-panel .notification-body .notification-item.unread .option{background-color:#f9d3d8}.notification-panel .notification-body .notification-item.unread .option .mark{color:#f84444}.notification-panel .notification-body .notification-item .heading{line-height:43px;margin-right:5px;background:#fff;border-bottom:1px solid #e6e6e6;position:relative;float:left;width:100%;font-size:14px;opacity:.7}.notification-panel .notification-body .notification-item .heading:after{content:'';position:absolute;width:5px;height:100%;background-color:#fff;right:0;top:1px}.notification-panel .notification-body .notification-item .heading .thumbnail-wrapper i{-webkit-transition:all .12s linear;transition:all .12s linear}.notification-panel .notification-body .notification-item .heading .time{font-size:11px;margin-right:8px}.notification-panel .notification-body .notification-item .heading.open,.notification-panel .notification-body .notification-item .heading.open .more-details{display:block}.notification-panel .notification-body .notification-item .heading.open .thumbnail-wrapper i{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.notification-panel .notification-body .notification-item .heading .thumbnail-wrapper.d24{line-height:20px}.notification-panel .notification-body .notification-item .more-details{display:none;background-color:#fff;width:100%;height:100%;clear:both;position:relative}.notification-panel .notification-body .notification-item .more-details .more-details-inner{margin-left:10px;padding-left:28px;padding-top:15px;margin-bottom:20px;position:relative;border-left:1px solid rgba(230,230,230,.7)}.notification-panel .notification-body .notification-item .more-details .more-details-inner:after{width:14px;height:14px;position:absolute;content:'';background-color:#fff;left:-7px;top:25px;border:1px solid rgba(230,230,230,.9);border-radius:99px;-webkit-border-radius:99px;-moz-border-radius:99px}.notification-panel .notification-body .notification-item .more-details .more-details-inner:before{color:silver;position:absolute;bottom:0;left:-5px;content:' \25CF';font-size:13px;line-height:5px;background-color:#fff;height:9px}.notification-panel .notification-body .notification-item .more-details .more-details-inner .hint-text{opacity:.44}.notification-panel .notification-body .notification-item .option{font-size:10px;position:absolute;width:26px;right:0;text-align:center;vertical-align:middle;line-height:44px;background-color:#fafafa;height:100%}.notification-panel .notification-body .notification-item .option .mark{background-color:transparent;color:silver}.notification-panel .notification-body .notification-item .option .mark:before{content:' \25CF';font-size:12px}.notification-panel .notification-body .notification-item:last-child .heading{border-bottom:0}.notification-panel .notification-footer{padding:10px;display:block;border-top:1px solid #e6e6e6}.pgn-bar .alert,.pgn-simple .alert{padding-top:13px;padding-bottom:13px}.notification-panel .notification-footer a{color:#8a8c8e;opacity:.54}.notification-panel .notification-footer a:hover{opacity:.74}.alerts-container{position:fixed;width:350px;right:20px;z-index:999;top:80px}.alerts-container[data-placement$='-left']{left:100px;right:auto}.alerts-container[data-placement$='-right']{right:20px;left:auto}.alerts-container[data-placement^=top-]{top:80px;bottom:auto}.alerts-container[data-placement^=bottom-]{top:auto;bottom:20px}.alerts-container[data-placement=bottom-left] .alert:last-child,.alerts-container[data-placement=bottom-right] .alert:last-child{margin-bottom:0}.alerts-container .alert{position:relative}.alerts-container .alert .close{position:absolute;right:9px;top:15px}body.menu-pin>.pgn-wrapper[data-position$='-left'],body.menu-pin>.pgn-wrapper[data-position=bottom],body.menu-pin>.pgn-wrapper[data-position=top]{left:250px}.pgn-wrapper{position:fixed;z-index:1000}.pgn-wrapper[data-position$='-left']{left:30px}.pgn-wrapper[data-position$='-right']{right:20px}.pgn-wrapper[data-position^=top-]{top:20px}.pgn-wrapper[data-position^=bottom-]{bottom:20px}.pgn-wrapper[data-position=top]{top:0;left:0;right:0}.pgn-wrapper[data-position=bottom]{bottom:0;left:0;right:0}.pgn{position:relative;margin:10px}.pgn .alert,.pgn-bar{margin:0}.pgn-simple .alert{max-width:500px;animation:fadeIn .3s cubic-bezier(.05,.74,.27,.99) forwards;-webkit-animation:fadeIn .3s cubic-bezier(.05,.74,.27,.99) forwards;max-height:250px;overflow:hidden}.pgn-bar{overflow:hidden}.pgn-bar .alert{border-radius:0;max-height:91px}.pgn-wrapper[data-position=top] .pgn-bar .alert{animation:slideInFromTop .5s cubic-bezier(.05,.74,.27,.99) forwards;-webkit-animation:slideInFromTop .5s cubic-bezier(.05,.74,.27,.99) forwards;transform-origin:top left;-webkit-transform-origin:top left}.pgn-wrapper[data-position=bottom] .pgn-bar .alert{animation:slideInFromBottom .5s cubic-bezier(.05,.74,.27,.99) forwards;-webkit-animation:slideInFromBottom .5s cubic-bezier(.05,.74,.27,.99) forwards;transform-origin:bottom left;-webkit-transform-origin:bottom left}.pgn-bar .alert span{opacity:0;animation:fadeIn .3s cubic-bezier(.05,.74,.27,.99) forwards;-webkit-animation:fadeIn .3s cubic-bezier(.05,.74,.27,.99) forwards}@keyframes slideInFromTop{0%{transform:translateY(-100%)}100%{transform:translateY(0)}}@-webkit-keyframes slideInFromTop{0%{-webkit-transform:translateY(-100%)}100%{-webkit-transform:translateY(0)}}@keyframes slideInFromBottom{0%{transform:translateY(100%)}100%{transform:translateY(0)}}@-webkit-keyframes slideInFromBottom{0%{-webkit-transform:translateY(100%)}100%{-webkit-transform:translateY(0)}}.pgn-circle .alert{border-radius:300px;animation:fadeInCircle .3s ease forwards,resizeCircle .3s .4s cubic-bezier(.25,.25,.4,1.6) forwards;-webkit-animation:fadeInCircle .3s ease forwards,resizeCircle .3s .4s cubic-bezier(.25,.25,.4,1.6) forwards;height:60px;overflow:hidden;padding:6px 55px 6px 6px;-webkit-transform:translateZ(0);position:relative}.pgn-wrapper[data-position$='-right'] .pgn-circle .alert{float:right}.pgn-wrapper[data-position$='-left'] .pgn-circle .alert{float:left}.pgn-circle .alert>div>div.pgn-thumbnail>div{border-radius:50%;overflow:hidden;width:48px;height:48px}.pgn-circle .alert>div>div.pgn-thumbnail>div>img{width:100%;height:100%}.pgn-circle .alert>div>div.pgn-message>div{opacity:0;height:47px;padding-left:9px;animation:fadeIn .3s .5s ease forwards;-webkit-animation:fadeIn .3s .5s ease forwards;word-break:break-all;word-wrap:break-word}.pgn-circle .alert>div>div.pgn-message>div p:only-child{padding:12px 0}.pgn-circle .alert .close{position:absolute;right:18px;top:50%;opacity:0;animation:fadeIn .3s .5s ease forwards;-webkit-animation:fadeIn .3s .5s ease forwards;margin-top:-4px}.pgn-circle .alert p{margin-bottom:0}.pgn-circle .alert>div{display:table;height:100%}.pgn-circle .alert>div>div{display:table-cell;vertical-align:middle}@keyframes fadeInCircle{0%{opacity:0;width:60px}100%{opacity:1;width:60px}}@-webkit-keyframes fadeInCircle{0%{opacity:0;width:60px}100%{opacity:1;width:60px}}@keyframes resizeCircle{0%{width:60px}100%{width:300px}}@-webkit-keyframes resizeCircle{0%{width:60px}100%{width:300px}}.pgn-wrapper[data-position^=top-] .pgn-flip{top:-30px}.pgn-wrapper[data-position^=bottom-] .pgn-flip{bottom:-30px}.pgn-wrapper[data-position^=bottom-] .pgn-flip .alert{-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.pgn-flip .alert{-webkit-transform-origin:50% 0;transform-origin:50% 0;box-shadow:0 6px 4px -3px rgba(0,0,0,.2);-webkit-animation-name:flipInX;animation-name:flipInX;-webkit-animation-duration:.8s;animation-duration:.8s;border-radius:0;padding:25px 35px;max-width:500px;max-height:250px;overflow:hidden}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-90deg);-webkit-transition-timing-function:ease-in}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,20deg);-webkit-transition-timing-function:ease-out}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-10deg);-webkit-transition-timing-function:ease-in;opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,5deg);-webkit-transition-timing-function:ease-out}100%{-webkit-transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-90deg);transform:perspective(400px) rotate3d(1,0,0,-90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,20deg);transform:perspective(400px) rotate3d(1,0,0,20deg);-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-10deg);transform:perspective(400px) rotate3d(1,0,0,-10deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,5deg);transform:perspective(400px) rotate3d(1,0,0,5deg);-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}body>.pgn-wrapper[data-position=top]{top:60px;left:40px}body>.pgn-wrapper[data-position=bottom]{left:40px}body>.pgn-wrapper[data-position$='-left']{left:90px;right:auto}body>.pgn-wrapper[data-position^=top-]{top:80px;bottom:auto}body>.pgn-wrapper{z-index:900}@media (max-width:979px){body>.pgn-wrapper[data-position=bottom],body>.pgn-wrapper[data-position=top]{left:0}}@media (max-width:767px){body>.pgn-wrapper[data-position$='-left'],body>.pgn-wrapper[data-position$='-right']{left:10px!important;right:10px!important}body>.pgn-wrapper[data-position$='-left'] .alert,body>.pgn-wrapper[data-position$='-right'] .alert{max-width:100%;width:100%}}.notification-positions{border-radius:4px;border:3px dashed #e6e6e6;height:370px;position:relative}.notification-positions>div>.position:not(:only-child){max-width:50%}.notification-positions .position{padding:15px}.notification-positions .position img{border:3px solid transparent;width:100%}.progress,.progress-bar{border-radius:0;box-shadow:none}.notification-positions .position.active img{border-color:#0090d9}.notification-positions .position.pull-bottom,.notification-positions .position.pull-top{left:0;right:0}.progress{height:4px;background-color:rgba(98,98,98,.2);background-image:none}.progress.transparent{background-color:rgba(0,0,0,.28)}.progress.progress-small{height:3px}.progress-bar-indeterminate{background:url(qrc:///assets/img/progress/progress-bar-master.svg) top left no-repeat;width:100%;height:100%;background-size:cover}.progress-bar-indeterminate.progress-bar-primary{background-image:url(qrc:///assets/img/progress/progress-bar-primary.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-complete{background-image:url(qrc:///assets/img/progress/progress-bar-complete.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-success{background-image:url(qrc:///assets/img/progress/progress-bar-success.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-info{background-image:url(qrc:///assets/img/progress/progress-bar-info.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-warning{background-image:url(qrc:///assets/img/progress/progress-bar-warning.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-danger{background-image:url(qrc:///assets/img/progress/progress-bar-danger.svg);background-color:transparent}.progress-bar-indeterminate.progress-bar-master{background-image:url(qrc:///assets/img/progress/progress-bar-master.svg);background-color:transparent}.progress-bar{background-color:#8a8c8e;background-image:none;-webkit-transition:all 1s cubic-bezier(.785,.135,.15,.86);transition:all 1s cubic-bezier(.785,.135,.15,.86);-webkit-transition-timing-function:cubic-bezier(.785,.135,.15,.86);-moz-transition-timing-function:cubic-bezier(.785,.135,.15,.86);-ms-transition-timing-function:cubic-bezier(.785,.135,.15,.86);-o-transition-timing-function:cubic-bezier(.785,.135,.15,.86);transition-timing-function:cubic-bezier(.785,.135,.15,.86)}.progress-bar-complete,.progress-bar-primary,.progress-bar-success{background-color:#f28321;background-image:none}.progress-bar-info{background-color:#3b4752;background-image:none}.progress-bar-warning{background-color:#f8d053;background-image:none}.progress-bar-danger{background-color:#f28321;background-image:none}.progress-bar-white{background-color:#fff;background-image:none}.progress-bar-black{background-color:#282829;background-image:none}.progress .bar-info,.progress-info .bar{background-color:#232b31;background-image:none}.progress .bar-warning,.progress-warning .bar{background-color:#957d32;background-image:none}.progress .bar-danger,.progress-danger .bar{background-color:#f84444;background-image:none}.progress .bar-white,.progress-white .bar{background-color:#fff;background-image:none}.progress-striped .bar-success,.progress-success.progress-striped .bar{background-color:#f28321}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#3b4752}.progress-circle-indeterminate{background:url(qrc:///assets/img/progress/progress-circle-master.svg) top left no-repeat;width:50px;height:50px;background-size:100% auto;margin:0 auto}.progress-circle-indeterminate.progress-circle-warning{background-image:url(qrc:///assets/img/progress/progress-circle-warning.svg)}.progress-circle-indeterminate.progress-circle-danger{background-image:url(qrc:///assets/img/progress/progress-circle-danger.svg)}.progress-circle-indeterminate.progress-circle-info{background-image:url(qrc:///assets/img/progress/progress-circle-info.svg)}.progress-circle-indeterminate.progress-circle-primary{background-image:url(qrc:///assets/img/progress/progress-circle-primary.svg)}.progress-circle-indeterminate.progress-circle-success{background-image:url(qrc:///assets/img/progress/progress-circle-success.svg)}.progress-circle-indeterminate.progress-circle-complete{background-image:url(qrc:///assets/img/progress/progress-circle-complete.svg)}.progress-circle{display:block;height:45px;margin:0 auto;position:relative;width:45px}.progress-circle.progress-circle-warning .pie .half-circle{border-color:#f8d053}.progress-circle.progress-circle-danger .pie .half-circle{border-color:#f28321}.progress-circle.progress-circle-info .pie .half-circle{border-color:#3b4752}.progress-circle.progress-circle-complete .pie .half-circle,.progress-circle.progress-circle-primary .pie .half-circle,.progress-circle.progress-circle-success .pie .half-circle{border-color:#f28321}.progress-circle.progress-circle-thick .pie .half-circle,.progress-circle.progress-circle-thick .spectre{border-width:5px}.progress-circle .pie{clip:rect(0,45px,45px,22.5px);height:45px;position:absolute;width:45px}.progress-circle .pie .half-circle{border:3px solid #8a8c8e;border-radius:50%;clip:rect(0,22.5px,45px,0);height:45px;position:absolute;width:45px}.progress-circle .spectre{border:3px solid rgba(0,0,0,.1);border-radius:50%;height:100%;width:100%}.modal .close:focus{outline:0}.modal .modal-dialog{transition:all .2s!important}.modal .modal-content{border:1px solid #f2f6f7;border-radius:3px;box-shadow:none}.modal.fade.center-scale .modal-content .modal-header,.modal.fade.fill-in .modal-content .modal-header{border-bottom:0}.modal{background:rgba(0,0,0,.4)}.modal .modal-header{text-align:center;border-bottom:0;padding:25px 25px 0}.modal .modal-header p{color:#8b91a0}.modal .modal-body{box-shadow:none;padding:0 25px 25px;white-space:normal}.modal .modal-footer{border-top:none;box-shadow:none;margin-top:0;padding:0 25px 25px}.modal .drop-spectre{box-shadow:0 0 9px rgba(191,191,191,.36)!important}.modal.fade{opacity:1!important}.modal.fade.stick-up .modal-dialog{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);-ms-transform:translate(0,-100%);margin-top:-5px}.modal.fade.stick-up.in .modal-dialog{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0)}.modal.fade.slide-up{height:100%;top:auto}.modal.fade.slide-up.in .modal-dialog{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0)}.modal.fade.slide-up.disable-scroll{overflow:hidden}.modal.fade.slide-up .modal-dialog{display:table;height:100%;-webkit-transform:translate3d(0,75%,0);transform:translate3d(0,75%,0);-ms-transform:translate(0,75%)}.modal.fade.slide-up .modal-content-wrapper{display:table-cell;vertical-align:middle}.modal.fade.center-scale .modal-dialog{display:table;height:100%}.modal.fade.center-scale .modal-content{display:table-cell;vertical-align:middle;border:0;background:0 0}.modal.fade.center-scale.in .modal-dialog{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.modal.fade.center-scale .modal-dialog{opacity:0;-webkit-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6)}.modal.fade.fill-in{background-color:rgba(255,255,255,0);-webkit-transition:background-color .3s;transition:background-color .3s}.modal.fade.fill-in>.close{margin-top:20px;margin-right:20px;opacity:.6}.modal.fade.fill-in>.close>i{font-size:16px}.modal.fade.fill-in .modal-dialog{display:table;height:100%}.modal.fade.fill-in .modal-content{display:table-cell;vertical-align:middle;border:0;background:0 0}.modal.fade.slide-right .modal-content,.nav-tabs>li>a{border-radius:0}.modal.fade.fill-in.in{background-color:rgba(255,255,255,.85)}.modal.fade.fill-in.in .modal-dialog{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.modal.fade.fill-in .modal-dialog{opacity:0;-webkit-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6)}.modal.fade.slide-right .close{position:absolute;top:0;right:0;margin-right:10px;z-index:10}.modal.fade.slide-right.in .modal-dialog{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0)}.modal.fade.slide-right .modal-dialog{position:absolute;right:0;margin:0;height:100%;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-ms-transform:translate(100%,0)}.modal.fade.slide-right .modal-dialog .modal-content,.modal.fade.slide-right .modal-dialog .modal-content-wrapper{height:100%}.fill-in-modal .modal-backdrop{background-color:transparent}.modal-backdrop{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s linear;display:none}.modal-backdrop.in{opacity:.3}@media (max-width:768px){.modal.fill-in .modal-dialog,.modal.slide-up .modal-dialog{width:calc(100% - 20px)}}@media (min-width:768px){.modal.stick-up .modal-dialog{margin:-5px auto}.modal.fill-in .modal-dialog,.modal.slide-up .modal-dialog{margin:0 auto}.modal .modal-content{box-shadow:none}}.nav-tabs>li{padding-left:0;padding-right:0}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{border-color:#e6e6e6;color:#8a8c8e;background-color:#e6e6e6}.nav-tabs>li>a{padding:15px 19px;margin-right:0;min-width:40px;text-transform:uppercase;border-color:transparent;font-weight:bolder;font-size:13px;color:#282829}.nav-tabs>li>a:focus,.nav-tabs>li>a:hover{background:0 0;border-color:transparent;color:#282829}.nav-tabs-simple,.nav-tabs.nav-tabs-left:after,.nav-tabs.nav-tabs-right:after{border-bottom:0}.nav-tabs>li>a .tab-icon{margin-right:6px}.nav-tabs~.tab-content{overflow:hidden;padding:15px}.nav-tabs~.tab-content>.tab-pane.slide-left,.nav-tabs~.tab-content>.tab-pane.slide-right{-webkit-transition:all .3s ease!important;transition:all .3s ease!important}.nav-tabs~.tab-content>.tab-pane.slide-left.sliding,.nav-tabs~.tab-content>.tab-pane.slide-right.sliding{opacity:0!important}.nav-tabs~.tab-content>.tab-pane.slide-left.active,.nav-tabs~.tab-content>.tab-pane.slide-right.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0);opacity:1}.nav-tabs~.tab-content>.tab-pane.slide-left.sliding{-webkit-transform:translate3d(10%,0,0)!important;transform:translate3d(10%,0,0)!important;-ms-transform:translate(10%,0)!important}.nav-tabs~.tab-content>.tab-pane.slide-right.sliding{-webkit-transform:translate3d(-10%,0,0)!important;transform:translate3d(-10%,0,0)!important;-ms-transform:translate(-10%,0)!important}.nav-tabs.nav-tabs-left>li,.nav-tabs.nav-tabs-right>li{float:none}.nav-tabs.nav-tabs-left{float:left}.nav-tabs.nav-tabs-left~.tab-content{border-left:1px solid rgba(0,0,0,.1)}.nav-tabs.nav-tabs-right{float:right}.nav-tabs.nav-tabs-right~.tab-content{border-right:1px solid rgba(0,0,0,.1)}.nav-tabs-simple:after{border-bottom:1px solid rgba(0,0,0,.1);width:100%;position:relative;bottom:3px;z-index:120}.nav-tabs-simple>li{margin-bottom:0}.nav-tabs-simple>li.active:after{-webkit-transition:all .1s linear 0s;transition:all .1s linear 0s;width:100%;display:block;background-color:#f28321;height:0;content:'';z-index:125}.nav-tabs-complete.nav-tabs-simple>li:after,.nav-tabs-primary.nav-tabs-simple>li:after,.nav-tabs-success.nav-tabs-simple>li:after{background-color:#f28321}.nav-tabs-danger.nav-tabs-simple>li:after{background-color:#f28321}.nav-tabs-warning.nav-tabs-simple>li:after{background-color:#f8d053}.nav-tabs-info.nav-tabs-simple>li:after{background-color:#3b4752}.nav-tabs-simple>li.active a,.nav-tabs-simple>li.active a:focus,.nav-tabs-simple>li.active a:hover{background-color:transparent;border-color:transparent;font-weight:bolder;font-size:13px;color:#282829}.nav-tabs-linetriangle,.nav-tabs-simple.nav-tabs-left:after,.nav-tabs-simple.nav-tabs-right:after{border-bottom:0}.nav-tabs-simple>li.active:after,.nav-tabs-simple>li:hover:after{height:3px}.nav-tabs-simple.nav-tabs-left>li:after,.nav-tabs-simple.nav-tabs-right>li:after{width:0;height:100%;top:0;bottom:0;position:absolute}.nav-tabs-simple.nav-tabs-left>li.active:after,.nav-tabs-simple.nav-tabs-left>li:hover:after,.nav-tabs-simple.nav-tabs-right>li.active:after,.nav-tabs-simple.nav-tabs-right>li:hover:after{width:3px}.nav-tabs-simple.nav-tabs-left>li:after{right:0}.nav-tabs-simple.nav-tabs-right>li:after{left:0}.nav-tabs-linetriangle:after{border-bottom:1px solid rgba(0,0,0,.1);width:100%;position:relative;bottom:0}.nav-tabs-linetriangle>li.active>a{background:0 0;box-shadow:none;border-color:transparent}.nav-tabs-linetriangle>li.active>a:active,.nav-tabs-linetriangle>li.active>a:focus,.nav-tabs-linetriangle>li.active>a:hover{border-color:transparent;background-color:transparent}.nav-tabs-linetriangle>li.active>a:after,.nav-tabs-linetriangle>li.active>a:before{border:solid transparent;content:"";height:0;left:50%;pointer-events:none;position:absolute;width:0;z-index:1;top:100%}.nav-tabs-linetriangle>li.active>a:after{border-top-color:#fafafa;border-width:10px;margin-left:-10px}.nav-tabs-linetriangle>li.active>a:before{border-top-color:rgba(0,0,0,.2);border-width:11px;margin-left:-11px}.nav-tabs-linetriangle>li>a span{font-size:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-tabs-linetriangle>li>a,.nav-tabs-linetriangle>li>a:focus,.nav-tabs-linetriangle>li>a:hover{overflow:visible;-webkit-transition:color .2s ease 0s;transition:color .2s ease 0s}.nav-tabs-linetriangle~.tab-content{background:#fff}.nav-tabs-linetriangle.nav-tabs-left.nav-tabs:after{border-bottom:none}.nav-tabs-linetriangle.nav-tabs-left.nav-tabs>li.active>a:before{border-top:11px solid transparent;border-bottom:11px solid transparent;border-left:11px solid rgba(0,0,0,.2)}.nav-tabs-linetriangle.nav-tabs-left.nav-tabs>li.active>a:after{border-top:10px solid transparent;border-bottom:10px solid transparent;border-left:10px solid #fafafa;margin-top:1px;margin-right:2px}.nav-tabs-linetriangle.nav-tabs-left.nav-tabs>li.active>a:after,.nav-tabs-linetriangle.nav-tabs-left.nav-tabs>li.active>a:before{top:auto;right:-23px;left:auto}.nav-tabs-linetriangle.nav-tabs-right.nav-tabs:after{border-bottom:none}.nav-tabs-linetriangle.nav-tabs-right.nav-tabs>li.active>a:before{border-top:11px solid transparent;border-bottom:11px solid transparent;border-right:11px solid rgba(0,0,0,.2)}.nav-tabs-linetriangle.nav-tabs-right.nav-tabs>li.active>a:after{border-top:10px solid transparent;border-bottom:10px solid transparent;border-right:10px solid #fafafa;margin-top:1px;margin-left:-9px}.nav-tabs-linetriangle.nav-tabs-right.nav-tabs>li.active>a:after,.nav-tabs-linetriangle.nav-tabs-right.nav-tabs>li.active>a:before{top:auto;left:-12px;right:auto}@media screen and (max-width:58em){.nav-tabs-linetriangle{font-size:.6em}}.nav-tabs-fillup{-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;-moz-perspective:1000;perspective:1000}.nav-tabs-fillup>li>a,.nav-tabs-fillup>li>a:after{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden}.nav-tabs-fillup>li{overflow:hidden}.nav-tabs-fillup>li>a{backface-visibility:hidden;-webkit-transition:color .3s ease 0s;transition:color .3s ease 0s;background:0 0}.nav-tabs-complete.nav-tabs-fillup>li>a:after,.nav-tabs-fillup>li>a:after,.nav-tabs-primary.nav-tabs-fillup>li>a:after,.nav-tabs-success.nav-tabs-fillup>li>a:after{background:#f28321;border:1px solid #f28321}.nav-tabs-fillup>li>a:after{backface-visibility:hidden;content:"";height:calc(100% + 1px);left:0;position:absolute;top:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .3s ease 0s;transition:transform .3s ease 0s;width:100%;z-index:-1}.form-group-default.focused label,.nav-tabs-fillup>li>a span{-moz-backface-visibility:hidden;-webkit-backface-visibility:hidden}.nav-tabs-warning.nav-tabs-fillup>li>a:after{background:#f8d053;border:1px solid #f8d053}.nav-tabs-danger.nav-tabs-fillup>li>a:after{background:#f28321;border:1px solid #f28321}.nav-tabs-info.nav-tabs-fillup>li>a:after{background:#3b4752;border:1px solid #3b4752}.nav-tabs-fillup>li>a span{backface-visibility:hidden;-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0);-webkit-transition:-webkit-transform .5s ease 0s;transition:transform .5s ease 0s;display:block;font-weight:700;line-height:1.5}.nav-tabs-fillup>li.active{z-index:100}.nav-tabs-fillup>li.active>a,.nav-tabs-fillup>li.active>a:focus,.nav-tabs-fillup>li.active>a:hover{border-color:transparent;background:0 0;color:#fff}.nav-tabs-fillup>li.active>a:after{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0)}.nav-tabs-fillup>li.active .icon:before,.nav-tabs-fillup>li.active>a span{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0);-ms-transform:translate(0,-5px)}.nav-tabs-fillup .icon:before{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0);-ms-transform:translate(0,5px);-webkit-transition:transform .5s ease 0s;transition:transform .5s ease 0s;display:block;margin:0}.nav-tabs-fillup~.tab-content{background:#fff}.nav-tabs-fillup.nav-tabs-left,.nav-tabs-fillup.nav-tabs-left:after,.nav-tabs-fillup.nav-tabs-right,.nav-tabs-fillup.nav-tabs-right:after{border-bottom:none}.nav-tabs-fillup.nav-tabs-left>li>a:after,.nav-tabs-fillup.nav-tabs-right>li>a:after{width:calc(100% + 1px);height:100%}.nav-tabs-fillup.nav-tabs-left>li.active a:after,.nav-tabs-fillup.nav-tabs-right>li.active a:after{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-ms-transform:translate(0,0)}.nav-tabs-fillup.nav-tabs-left>li>a:after{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-ms-transform:translate(100%,0)}.nav-tabs-fillup.nav-tabs-left>li>a span{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0);-ms-transform:translate(5px,0)}.nav-tabs-fillup.nav-tabs-left>li.active .icon:before,.nav-tabs-fillup.nav-tabs-left>li.active a span{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0);-ms-transform:translate(-5px,0)}.nav-tabs-fillup.nav-tabs-right>li>a:after{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-ms-transform:translate(-100%,0);left:-1px}.nav-tabs-fillup.nav-tabs-right>li>a span{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0);-ms-transform:translate(-5px,0)}.nav-tabs-fillup.nav-tabs-right>li.active .icon:before,.nav-tabs-fillup.nav-tabs-right>li.active a span{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0);-ms-transform:translate(5px,0)}.panel-group{margin-bottom:18px}.panel-group .panel-heading{padding:13px 18px 10px 22px}.panel-group .panel-heading.collapsed{background-color:#fff}.panel-group .panel-heading+.panel-collapse .panel-body{border:0}.panel-group .panel-heading .panel-title{width:100%}.panel-group .panel-heading .panel-title>a{color:#8a8c8e;font-size:13px;font-weight:400;display:block;opacity:1}.panel-group .panel-heading .panel-title>a:hover,.panel-group .panel-heading .panel-title>a:hover:after{color:#8a8c8e!important}.panel-group .panel-heading .panel-title>a:after{font-family:FontAwesome;content:"\f056";position:absolute;right:13px;top:36%;color:#8a8c8e}.dd-item>button:before,.dd3-handle:before{font-family:framework-icon}.panel-group .panel-heading .panel-title>a.collapsed{color:rgba(98,98,98,.7);opacity:1}.panel-group .panel-heading .panel-title>a.collapsed:after{content:"\f055";color:rgba(98,98,98,.7)}.panel-group .panel+.panel{margin-top:2px}.panel-group .panel .panel-body{height:auto}.nav-pills>li>a{border-radius:0;color:#8a8c8e}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#8a8c8e;background-color:#e6e6e6}@media (max-width:767px){.nav.nav-tabs.nav-stack-sm li{float:none}.nav.nav-tabs.nav-stack-sm.nav-tabs-linetriangle>li.active>a:after,.nav.nav-tabs.nav-stack-sm.nav-tabs-linetriangle>li.active>a:before{display:none}}.irs-bar,.irs-bar-edge,.irs-line-left,.irs-line-mid,.irs-line-right,.irs-slider{background-image:none}.irs-bar{background:#f28321}.irs-wrapper .irs-line{background-color:#e6e6e6}.irs-wrapper .irs-diapason,.irs-wrapper .irs-line-left,.irs-wrapper .irs-line-mid,.irs-wrapper .irs-line-right,.irs-wrapper .irs-slider{background:0 0}.irs-wrapper .irs-diapason{background-color:#f28321;-webkit-transition:all .3s ease;transition:all .3s ease}.irs-wrapper .irs-from,.irs-wrapper .irs-single,.irs-wrapper .irs-to{background:#f28321}.irs-wrapper .irs-slider.from:before,.irs-wrapper .irs-slider.single:before,.irs-wrapper .irs-slider.to:before{top:-2%;left:37%;width:16%;height:100%;background:rgba(0,0,0,0);background-color:#f28321}.irs-wrapper.primary .irs-from,.irs-wrapper.primary .irs-single,.irs-wrapper.primary .irs-to,.irs-wrapper.success .irs-from,.irs-wrapper.success .irs-single,.irs-wrapper.success .irs-to{background:#f28321}.irs-wrapper.primary .irs-bar,.irs-wrapper.primary .irs-diapason,.irs-wrapper.primary .irs-slider.from:before,.irs-wrapper.primary .irs-slider.single:before,.irs-wrapper.primary .irs-slider.to:before,.irs-wrapper.success .irs-bar,.irs-wrapper.success .irs-diapason,.irs-wrapper.success .irs-slider.from:before,.irs-wrapper.success .irs-slider.single:before,.irs-wrapper.success .irs-slider.to:before{background-color:#f28321}.irs-wrapper .irs-from:after,.irs-wrapper .irs-single:after,.irs-wrapper .irs-to:after{border-top-color:#f28321}.irs-wrapper.primary .irs-from:after,.irs-wrapper.primary .irs-single:after,.irs-wrapper.primary .irs-to:after,.irs-wrapper.success .irs-from:after,.irs-wrapper.success .irs-single:after,.irs-wrapper.success .irs-to:after{border-top-color:#f28321}.irs-wrapper.warning .irs-bar,.irs-wrapper.warning .irs-diapason,.irs-wrapper.warning .irs-slider.from:before,.irs-wrapper.warning .irs-slider.single:before,.irs-wrapper.warning .irs-slider.to:before{background-color:#f8d053}.irs-wrapper.warning .irs-from,.irs-wrapper.warning .irs-single,.irs-wrapper.warning .irs-to{background:#f8d053}.irs-wrapper.warning .irs-from:after,.irs-wrapper.warning .irs-single:after,.irs-wrapper.warning .irs-to:after{border-top-color:#f8d053}.irs-wrapper.complete .irs-bar,.irs-wrapper.complete .irs-diapason,.irs-wrapper.complete .irs-slider.from:before,.irs-wrapper.complete .irs-slider.single:before,.irs-wrapper.complete .irs-slider.to:before{background-color:#f28321}.irs-wrapper.complete .irs-from,.irs-wrapper.complete .irs-single,.irs-wrapper.complete .irs-to{background:#f28321}.irs-wrapper.complete .irs-from:after,.irs-wrapper.complete .irs-single:after,.irs-wrapper.complete .irs-to:after{border-top-color:#f28321}.irs-wrapper.danger .irs-bar,.irs-wrapper.danger .irs-diapason,.irs-wrapper.danger .irs-slider.from:before,.irs-wrapper.danger .irs-slider.single:before,.irs-wrapper.danger .irs-slider.to:before{background-color:#f28321}.irs-wrapper.danger .irs-from,.irs-wrapper.danger .irs-single,.irs-wrapper.danger .irs-to{background:#f28321}.irs-wrapper.danger .irs-from:after,.irs-wrapper.danger .irs-single:after,.irs-wrapper.danger .irs-to:after{border-top-color:#f28321}.noUi-target{border-radius:0;border:0;box-shadow:none}.noUi-target.bg-complete .noUi-connect,.noUi-target.bg-success .noUi-connect{background-color:#f28321}.noUi-target.bg-warning .noUi-connect{background-color:#f8d053}.noUi-target.bg-danger .noUi-connect{background-color:#f84444}.noUi-target.bg-info .noUi-connect{background-color:#3b4752}.noUi-target.bg-primary .noUi-connect{background-color:#f28321}.noUi-target.noUi-connect{box-shadow:none}.noUi-handle{border-radius:999px;box-shadow:none}.noUi-handle:after,.noUi-handle:before{display:none}.noUi-horizontal{height:4px}.noUi-horizontal .noUi-handle{width:18px;height:18px;left:-15px;border:1px solid #dbdbdb;top:-7px;-webkit-transition:all .2s ease;transition:all .2s ease}.noUi-horizontal .noUi-handle:hover{border:1px solid silver}.noUi-horizontal .noUi-handle:active,.noUi-horizontal .noUi-handle:focus{-webkit-transform:scale(1.3);-ms-transform:scale(1.3);transform:scale(1.3);border:1px solid #dbdbdb}.disable-hover-scale .noUi-handle:active,.disable-hover-scale .noUi-handle:focus{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.vertical-slider{height:150px}.noUi-vertical{width:4px}.noUi-vertical .noUi-handle{width:18px;height:18px;border:1px solid #dbdbdb;-webkit-transition:all .2s ease;transition:all .2s ease}.noUi-vertical .noUi-handle:hover{border:1px solid silver}.noUi-vertical .noUi-handle:active,.noUi-vertical .noUi-handle:focus{-webkit-transform:scale(1.3);-ms-transform:scale(1.3);transform:scale(1.3);border:1px solid #dbdbdb}.dd-handle,.dd3-content{border-color:rgba(230,230,230,.7)}.noUi-base{padding:5px 0}.noUi-origin{border-radius:0;bottom:5px}.noUi-connect{box-shadow:none}.noUi-background{background:#ececec;box-shadow:none}span.dynatree-active a{color:#2c2c2c!important;background-color:transparent!important}span.dynatree-selected a{color:#2c2c2c!important;font-style:normal}span.dynatree-focused a:link,ul.dynatree-container,ul.dynatree-container a:focus{background-color:transparent}ul.dynatree-container a:hover{color:#8a8c8e;opacity:.7;background-color:transparent}ul.dynatree-container a{color:#8a8c8e}#dynatree-drop-marker,span.dynatree-checkbox,span.dynatree-connector,span.dynatree-drag-helper-img,span.dynatree-empty,span.dynatree-expander,span.dynatree-icon,span.dynatree-radio,span.dynatree-vline{height:17px;position:relative;top:3px}.dd-handle{color:#8a8c8e}.dd-handle:hover{background-color:#fafafa}.dark .dd-handle{color:#8a8c8e;background:#f0f0f0}.dark .dd-handle:hover{background-color:#fafafa}.dark .dd-placeholder{background-color:#e6e6e6}.dd3-content{background:#fff;color:#8a8c8e}.dd3-content:hover{background-color:#fafafa}.dd3-handle{background:0 0;text-indent:9999px}.dd3-handle:before{color:#8a8c8e;content:"\e660";font-size:11px;top:5px}.dd-placeholder{background:#f0f0f0;border-color:rgba(98,98,98,.35)}.dd-empty{background:#f0f0f0;border-color:rgba(98,98,98,.5)}.dd-item>button{font-size:11px}.dd-item>button:before{content:"\e63b"}.dd-item>button[data-action=collapse]:before{font-family:framework-icon;content:"\e635"}@media only screen and (min-width:700px){.dd{width:100%}}button,input,label,select,textarea{font-size:14px;font-weight:400;line-height:20px}input[type=checkbox],input[type=radio]{margin-top:1px 0 0;line-height:normal;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}select[multiple],select[size]{height:auto!important}input:focus,input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus,select:focus,textarea:focus{outline:0;box-shadow:none}form legend{margin:15px 0 10px}.form-control{background-color:#f0f1f3;background-image:none;border:1px solid rgba(0,0,0,.07);-webkit-appearance:none;color:#2c2c2c;outline:0;height:35px;padding:9px 12px;line-height:normal;font-size:14px;font-weight:400;vertical-align:middle;min-height:35px;box-shadow:none;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-transition:background .2s linear 0s;transition:background .2s linear 0s}.form-control:focus{border-color:rgba(0,0,0,.1);background-color:#f0f0f0;outline:0!important;box-shadow:none}.form-control:focus::-moz-placeholder{color:inherit;opacity:.7}.form-control:focus:-ms-input-placeholder{color:inherit;opacity:.7}.form-control:focus::-webkit-input-placeholder{color:inherit;opacity:.7}.form-control::-moz-placeholder{color:inherit;opacity:.33}.form-control:-ms-input-placeholder{color:inherit;opacity:.33}.form-control::-webkit-input-placeholder{color:inherit;opacity:.33}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background:#f8f8f8;color:rgba(98,98,98,.23)}.form-horizontal .form-group-sm .form-control,.input-sm{font-size:13px;min-height:32px;height:32px;padding:8px 9px}.form-horizontal .form-group-lg .form-control,.input-lg{border-radius:3px;font-size:18px;height:45px;padding:11px 13px}.input-xlg{height:51px;font-size:18px;line-height:22px}.checkbox,.radio{margin-bottom:10px;margin-top:10px;padding-left:0}.checkbox label,.radio label{display:inline-block;position:relative;padding-left:25px!important;margin-right:15px;font-size:13px}.checkbox label:before,.radio label:before{content:"";display:inline-block;width:17px;height:17px;margin-right:10px;position:absolute;left:0;background-color:#f0f1f3;border:1px solid rgba(0,0,0,.07)}.checkbox input[type=checkbox]:focus+label:before,.checkbox input[type=radio][disabled]+label:after,.radio input[type=radio]:focus+label:before{background-color:#e6e6e6}.radio label{margin-bottom:6px}.radio label:before{bottom:2.5px;border-radius:99px;-webkit-transition:border .3s 0s cubic-bezier(.455,.03,.215,1.33);transition:border .3s 0s cubic-bezier(.455,.03,.215,1.33)}.checkbox label,.checkbox label::after,.checkbox label:before{transition:border .2s linear 0s,color .2s linear 0s}.radio input[type=radio]:checked+label:before{border-width:5px}.radio input[type=radio]:focus+label{color:#2c2c2c}.radio input[type=radio]{opacity:0;width:0;height:0}.radio input[type=radio][disabled]+label{opacity:.65}.radio.radio-primary input[type=radio]:checked+label:before,.radio.radio-success input[type=radio]:checked+label:before{border-color:#f28321}.radio.radio-info input[type=radio]:checked+label:before{border-color:#3b4752}.radio.radio-warning input[type=radio]:checked+label:before{border-color:#f8d053}.radio.radio-danger input[type=radio]:checked+label:before{border-color:#f84444}.checkbox.check-complete input[type=checkbox]:checked+label:before,.checkbox.check-primary input[type=checkbox]:checked+label:before,.checkbox.check-success input[type=checkbox]:checked+label:before,.radio.radio-complete input[type=radio]:checked+label:before{border-color:#f28321}.checkbox label{white-space:nowrap}.checkbox label:before{top:1.4px;border-radius:3px}.checkbox label::after{display:inline-block;width:16px;height:16px;position:absolute;left:3.2px;top:0;font-size:11px}.checkbox label:after{border-radius:3px}.checkbox input[type=checkbox]{opacity:0;width:0;height:0}.checkbox.checkbox-circle label:after,.checkbox.checkbox-circle label:before{border-radius:99px}.checkbox input[type=checkbox]:checked+label:before{border-width:8.5px}.checkbox input[type=checkbox]:checked+label::after{font-family:FontAwesome;content:"\F00C";color:#fff}.checkbox input[type=checkbox]:focus+label{color:#2c2c2c}.checkbox input[type=checkbox][disabled]+label{opacity:.65}.checkbox input[type=checkbox][disabled]+label:before{background-color:#eceff3}.checkbox.right label{margin-right:35px;padding-left:0!important}.checkbox.right label:before{right:-35px;left:auto}.checkbox.right input[type=checkbox]:checked+label{position:relative}.checkbox.right input[type=checkbox]:checked+label::after{font-family:FontAwesome;content:"\F00C";position:absolute;right:-27px;left:auto}.checkbox.check-warning input[type=checkbox]:checked+label:before{border-color:#f8d053}.checkbox.check-danger input[type=checkbox]:checked+label:before{border-color:#f28321}.checkbox.check-info input[type=checkbox]:checked+label:before{border-color:#3b4752}.checkbox.check-complete input[type=checkbox]:checked+label::after,.checkbox.check-danger input[type=checkbox]:checked+label::after,.checkbox.check-info input[type=checkbox]:checked+label::after,.checkbox.check-primary input[type=checkbox]:checked+label::after,.checkbox.check-success input[type=checkbox]:checked+label::after,.checkbox.check-warning input[type=checkbox]:checked+label::after{color:#fff}.input-group.transparent .input-group-addon{background-color:transparent;border-color:rgba(0,0,0,.07)}@media only screen and (min-width:768px){form .row{margin-left:0;margin-right:0}form .row [class*=col-]:not(:first-child),form .row [class*=col-]:not(:last-child){padding-right:7px;padding-left:7px}form .row [class*=col-]:first-child{padding-left:0}form .row [class*=col-]:last-child{padding-right:0}}@media (min-width:768px) and (max-width:991px){form .row [class*=col-md-]:not(:first-child),form .row [class*=col-md-]:not(:last-child){padding-right:0;padding-left:0}}.form-horizontal .form-group{border-bottom:1px solid #f0f1f3;padding-top:19px;padding-bottom:19px;margin-bottom:0}.form-horizontal .form-group:last-child{border-bottom:none}.form-horizontal .form-group:hover .control-label{opacity:.8}.form-horizontal .form-group.focused .control-label{opacity:1}.form-horizontal .form-group .control-label{text-align:left;opacity:.66;-webkit-transition:opacity ease .3s;transition:opacity ease .3s}.form-group-attached .form-group.form-group-default{border-radius:0;margin-bottom:0}.form-group-attached>div{margin:0}.form-group-attached>div:first-child.row>[class*=col-]:first-child .form-group-default{border-top-left-radius:2px}.form-group-attached>div:first-child.row>[class*=col-]:last-child .form-group-default{border-top-right-radius:2px}.form-group-attached>div:first-child.form-group-default{border-top-left-radius:2px;border-top-right-radius:2px}.form-group-attached>div:last-child.row>[class*=col-]:first-child .form-group-default{border-bottom-left-radius:2px}.form-group-attached>div:last-child.row>[class*=col-]:last-child .form-group-default{border-bottom-right-radius:2px}.form-group-attached>div:last-child.form-group-default{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.form-group-attached>div.row>[class*=col-]{padding-right:0!important;padding-left:0!important}.form-group-attached>div.row>[class*=col-]>.form-group-default{display:table;width:100%}.form-group-attached>div.row>[class*=col-]:not(:only-child):not(:last-child)>.form-group-default{border-right-color:transparent}.form-group-attached>div:not(:last-child) .form-group-default,.form-group-attached>div:not(:last-child).form-group-default{border-bottom-color:transparent}@media (max-width:767px){.form-group-attached .form-group-default{border-right-color:rgba(0,0,0,.07)!important}}@media only screen and (min-width:768px){.form-group-attached>div.row{display:table;width:100%}.form-group-attached>div.row>[class*=col-]{display:table-cell;height:100%;float:none;vertical-align:top}.form-group-attached>div.row>[class*=col-] .form-group{height:100%;width:100%}}.form-group{margin-bottom:10px}.form-group label:not(.error){font-size:11px;text-transform:uppercase;font-weight:600}.form-group label .help{margin-left:8px}.form-group .help{font-size:12px;color:rgba(98,98,98,.55)}.form-group-default{background-color:#fff;position:relative;border:1px solid rgba(0,0,0,.07);border-radius:2px;overflow:hidden;-webkit-transition:background-color .2s ease;transition:background-color .2s ease;padding:7px 12px 4px}.form-group-default.required:after{color:#f28321;content:"*";font-family:arial;font-size:20px;position:absolute;right:15px;top:9px}.form-group-default.disabled{background:#f8f8f8;color:rgba(98,98,98,.23)}.form-group-default.disabled input{opacity:.6}.form-group-default.disabled.focused{background:#f8f8f8}.form-group-default.disabled.focused label{opacity:1}.form-group-default.focused{border-color:rgba(0,0,0,.1)!important;background-color:#f0f0f0}.form-group-default.focused label{opacity:.4;backface-visibility:hidden}.form-group-default.has-error{background-color:rgba(245,87,83,.1)}.form-group-default.has-error .form-control-feedback,.form-group-default.has-success .form-control-feedback{display:none!important}.form-group-default.has-error .form-control,.form-group-default.has-error .form-control:focus,.form-group-default.has-success .form-control,.form-group-default.has-success .form-control:focus{border:none;box-shadow:none}.form-group-default.input-group{padding:0}.form-group-default.input-group>label{margin-top:6px;padding-left:12px}.form-group-default.input-group>.form-control{margin-top:-2px;margin-bottom:3px;padding-left:12px}.form-group-default.input-group .input-group-addon{height:calc(50px);min-width:calc(50px);border-radius:0;border:none}.form-group-default.input-group.focused .input-group-addon{border-color:rgba(0,0,0,.1)}.form-group-default .form-control{border:none;height:25px;min-height:25px;padding:0;margin-top:-4px;background:0 0}.form-group-default .form-control.error{color:#2c2c2c}.form-group-default .form-control:focus{background:0 0}.form-group-default textarea.form-control{padding-top:5px}.form-group-default label{margin:0;display:block;opacity:1;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.form-group-default label.label-lg{font-size:13px;left:13px;top:9px}.form-group-default label.label-sm{font-size:11px;left:11px;top:6px}.form-group-default label.highlight{opacity:1}.form-group-default label.fade{opacity:.5;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden}.form-group-default>.input-lg{height:29px;min-height:29px;padding-left:1px}.form-group-default>.input-sm{min-height:18px;height:18px}.form-group-default.form-group-default-select{overflow:visible}.form-group-default.form-group-default-select .ui-select-container.ui-select-bootstrap.dropdown .ui-select-match{padding-top:6px;height:23px}.form-group-default.form-group-default-select2{padding:0}.form-group-default.form-group-default-select2>label{position:absolute;z-index:10;padding:7px 12px 0}.form-group-default.form-group-default-select2>label.label-lg,.form-group-default.form-group-default-select2>label.label-sm{left:0;top:0}.form-group-default.form-group-default-select2 .select2-container .select2-choice{padding-top:20px;height:52px}.form-group-default.form-group-default-select2 .select2-container .select2-choice .select2-arrow b:before{top:20px}.form-group-default.form-group-default-select2 .select2-container .select2-choice .select2-chosen{padding-left:3px;padding-top:1px}.form-group-default.form-group-default-select2 .select2-container .select2-choices{padding-top:20px;height:52px;border:0}.form-group-default.form-group-default-select2>.input-lg{height:auto;padding:0}.form-group-default.form-group-default-select2>.input-lg .select2-choice{padding-top:20px;height:56px}.form-group-default.form-group-default-select2>.input-sm{height:auto;padding:0}.form-group-default.form-group-default-select2>.input-sm .select2-choice{padding-top:20px;height:46px}.form-group-default.form-group-default-selectFx{padding:0}.form-group-default.form-group-default-selectFx>label{position:absolute;z-index:10;padding:7px 12px 0}.form-group-default.form-group-default-selectFx>label.label-lg,.form-group-default.form-group-default-selectFx>label.label-sm{left:0;top:0}.form-group-default.form-group-default-selectFx .cs-wrapper .cs-placeholder{padding-top:28px;height:52px;padding-left:12px}.form-group-default.form-group-default-selectFx .cs-wrapper .cs-select{height:auto}.form-group-default.form-group-default-selectFx .cs-wrapper .cs-select .cs-selected span:after,.form-group-default.form-group-default-selectFx .cs-wrapper .cs-select>span:after{top:39px}.form-group-default.form-group-default-selectFx .cs-wrapper .cs-select.input-lg .cs-placeholder{height:60px}.form-group-default.form-group-default-selectFx .cs-wrapper .cs-select.input-sm .cs-placeholder{height:50px}.datepicker table tr td,.datepicker thead tr th{width:31px;height:29px}.form-group-default.form-group-default-selectFx .cs-wrapper .dropdown-placeholder{vertical-align:top}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline{color:#f84444}.has-success .form-control{border-color:#f84444;box-shadow:none}.has-success .form-control:focus{border-color:#f84444;box-shadow:none}.has-success .input-group-addon{background:#f0f0f0;border:1px solid rgba(0,0,0,.07);color:rgba(98,98,98,.47)}.has-success .form-control-feedback{color:#f84444}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline{color:#c9a843}.has-warning .form-control{border-color:#c9a843;box-shadow:none}.has-warning .form-control:focus{border-color:#a98b31;box-shadow:none}.has-warning .input-group-addon{background:#f0f0f0;border:1px solid rgba(0,0,0,.07);color:rgba(98,98,98,.47)}.has-warning .form-control-feedback{color:#c9a843}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline{color:#f28321}.has-error .form-control{border-color:#f28321;box-shadow:none}.has-error .form-control:focus{border-color:#f84444;box-shadow:none}.has-error .input-group-addon,.input-group-addon{background:#f0f0f0;border:1px solid rgba(0,0,0,.07)}.has-error .input-group-addon{color:rgba(98,98,98,.47)}.error,.has-error .form-control-feedback{color:#f28321}.error{font-size:12px;display:block}.input-group-addon{color:rgba(98,98,98,.47);font-size:14px;padding:6px 9px;display:table-cell;border-radius:3px;transition:border .2s linear 0s,box-shadow .2s linear 0s,color .2s linear 0s,box-shadow .2s linear 0s,background .2s linear 0s}.input-group-addon i{position:relative;top:1px}.input-group-addon.primary{background-color:#f28321;border:1px solid #f28321;color:#fff}.input-group-addon.primary .arrow{color:#f28321}.input-group-addon.success{background-color:#f28321;color:#fff}.input-group-addon.success .arrow{color:#f28321}.input-group-addon.info{background-color:#1f3853;color:#fff}.input-group-addon.info .arrow{color:#1f3853}.input-group-addon.warning{background-color:#fbb05e;color:#fff}.input-group-addon.warning .arrow{color:#fbb05e}.input-group-addon.danger{background-color:#f35958;color:#fff}.input-group-addon.danger .arrow{color:#f35958}.input-group-addon .arrow{position:relative;right:-6px;color:#d1dade;z-index:100}.input-group-addon .arrow:before,.input-group-addon:last-child .arrow:before{font-size:23px;position:absolute;top:-2px;font-family:FontAwesome}.input-group-addon .arrow:before{content:"\f0da";left:17px}.input-group-addon:last-child .arrow:before{content:"\f0d9";left:-23px}.input-group-addon:last-child input{border-left:0}.datepicker{padding:16px 25px;border-radius:2px;font-size:12px}.datepicker:after{border-bottom-color:#fafafa}.datepicker thead tr .datepicker-switch{color:#6f7b8a;font-size:13px}.datepicker thead tr .next,.datepicker thead tr .prev{color:#f28321;content:'';font-size:0}.datepicker thead tr .next:before,.datepicker thead tr .prev:before{color:#f28321;font-family:FontAwesome;font-size:10px}.datepicker thead tr .prev:before{content:"\f053"}.datepicker thead tr .next:before{content:"\f054"}.datepicker thead tr .dow{color:#f28321;text-transform:uppercase;font-size:11px}.datepicker tbody tr .odd{color:#d0d3d8}.datepicker table tr td.new,.datepicker table tr td.old{color:#e6e6e6}.datepicker table tr td.day:hover{background:#f0f0f0}.datepicker table tr td.active{background-color:#f28321!important}.datepicker table tr td.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active:hover{background-image:none;text-shadow:none;font-weight:600}.datepicker table tr td.today,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today:hover{background-color:#f0f0f0;background-image:none;color:#fff}.datepicker table tr td span{border-radius:4px;width:42px;height:42px;line-height:42px}.datepicker table tr td span.active{background-color:#f28321!important}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{background-image:none;border:none;text-shadow:none}.datepicker.dropdown-menu{border-color:#e6e6e6;color:#8a8c8e}.datepicker.datepicker-dropdown.datepicker-orient-bottom:before{border-color:#e6e6e6}.datepicker-inline{width:auto}.input-daterange .input-group-addon{text-shadow:none;border:0}.bootstrap-timepicker-widget table td a i{font-size:12px}.bootstrap-timepicker-widget .bootstrap-timepicker-widget input,.bootstrap-timepicker-widget a.btn{border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.bootstrap-timepicker-widget.dropdown-menu,.daterangepicker{background:#fff}.daterangepicker .calendar .calendar-date{border:1px solid rgba(0,0,0,.07)}.daterangepicker .calendar .next,.daterangepicker .calendar .prev,.daterangepicker .calendar th{color:#f28321;text-transform:uppercase;font-size:11px}.daterangepicker .calendar .month{color:#6f7b8a;font-size:13px}.daterangepicker td.active,.daterangepicker td.active:hover{background-color:#f28321;border-color:#f28321}.form-group-default .select2-container .select2-choice,.select2-container-multi .select2-choices{border-color:transparent}.select2-container .select2-choice{background-image:none;border-radius:2px;border:1px solid rgba(0,0,0,.07);padding:3px 9px;transition:border .2s linear 0s;height:35px}.select2-container .select2-choice .select2-arrow{background:0 0;border-left:0;-webkit-transition:all .3s ease;transition:all .3s ease}.select2-container .select2-choice .select2-arrow b:before{font-family:FontAwesome;content:"\f0d7";position:relative;top:2px;right:5px;font-size:12px}.select2-container.select2-drop-above .select2-choice{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.select2-container .select2-choice .select2-arrow b,.select2-container .select2-choice abbr,.select2-search input,.select2-search-choice-close{background-image:none!important}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{background-image:none!important;border:1px solid rgba(0,0,0,.07);background:#f0f0f0}.select2-dropdown-open .select2-choice .select2-arrow{-webkit-transform:scale(scale(1,-1));-ms-transform:scale(scale(1,-1));transform:scale(scale(1,-1))}.select2-drop.select2-drop-above{border-top-left-radius:2px;border-top-right-radius:2px;box-shadow:none}.select2-drop.select2-drop-above.select2-drop-active{border:1px solid rgba(0,0,0,.07);border-bottom:none;border-radius:2px;padding-top:0}.select2-container-active .select2-choice,.select2-container-active .select2-choices{box-shadow:none;border:1px solid rgba(0,0,0,.07);background:#f0f0f0;border-top-left-radius:2px;border-top-right-radius:2px}.select2-search{padding-left:8px;padding-right:8px;padding-top:4px}.select2-search input{background:#fff!important;vertical-align:baseline;line-height:28px;border-radius:2px;border:none;font-size:12px;border:1px solid rgba(0,0,0,.07)}.select2-results{margin:3px 10px 10px 3px}.select2-results li{color:#8a8c8e}.select2-results li.select2-result-with-children>.select2-result-label{color:#2c2c2c}.select2-results li.select2-result-with-children>.select2-result-label:first-child{padding-top:8px}.select2-results .select2-highlighted{background:#f0f0f0;border-radius:3px}.select2-results .select2-highlighted .select2-result-label{color:#8a8c8e}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background:0 0;color:#8a8c8e;font-size:12px;padding-left:8px;padding-top:0;position:relative;top:-5px}.select2-drop-active{border:1px solid rgba(0,0,0,.07);border-bottom:none;border-top:none;border-bottom-right-radius:2px;border-bottom-left-radius:2px;padding-top:5px;z-index:790}.select2-container-multi .select2-choices{background-image:none;border:1px solid rgba(0,0,0,.07);border-radius:2px}.select2-container-multi .select2-choices .select2-search-choice{background-color:#e6e6e6;background-image:none;border:none;box-shadow:none;color:inherit;border-radius:8px;margin:8px -5px 7px 10px;padding:4px 8px 4px 21px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid rgba(0,0,0,.07);box-shadow:none}.select2-container-multi.select2-container-active .select2-search-choice{background-color:#fff!important}.select2-container-multi .select2-search-choice-close{left:6px}.select2-search-choice-close{background:0 0;top:4px;right:0}.select2-search-choice-close:hover{text-decoration:none}.select2-search-choice-close:before{font-family:FontAwesome;content:"\f00d";font-size:12px;color:#8a8c8e}.select2-drop-multi .select2-results .select2-no-results,.select2-drop-multi .select2-results .select2-searching,.select2-drop-multi .select2-results .select2-selection-limit{top:0}.select2.form-control{padding:0;box-shadow:none;border:0}.select2-drop-mask{z-index:700}.ui-select-bootstrap .ui-select-choices-row.active>a{background:#f0f0f0;border-radius:3px;color:#8a8c8e}.ui-select-bootstrap>.ui-select-choices{background-color:#fff}.ui-select-choices-group-label{color:#2c2c2c;font-weight:700}.modal-open .select2-drop-active{z-index:1051}.modal-open .cs-skin-slide.cs-active,.modal-open .select2-drop-mask{z-index:1050}.dropdown-placeholder{display:inline-block;vertical-align:middle}.dropdown-mask{bottom:0;display:none;left:0;outline:0;overflow:hidden;position:fixed;right:0;top:0;z-index:600}.form-group-default .bootstrap-tagsinput{border:0;padding-left:0}.bootstrap-tagsinput{background-color:transparent;border:1px solid rgba(0,0,0,.07);border-radius:4px;padding-bottom:5px;box-shadow:none;width:100%;-webkit-transition:background .2s linear 0s;transition:background .2s linear 0s}.bootstrap-tagsinput.active-element{background-color:#e6e6e6}.bootstrap-tagsinput input{border:none;margin-bottom:0;min-height:25px;min-width:10em!important}.bootstrap-tagsinput .tag{vertical-align:middle;padding:6px 6px 6px 9px;border-radius:3px;line-height:30px}.bootstrap-tagsinput .tag[data-role=remove]{margin-left:4px}.bootstrap-tagsinput .tag [data-role=remove]:hover,.bootstrap-tagsinput .tag[data-role=remove]:hover:active{box-shadow:none}.bootstrap-tagsinput .tag [data-role=remove]:after{font-family:framework-icon;content:"\e60a";padding:0}.wysiwyg5-wrapper{position:relative}.wysiwyg5-wrapper .wysihtml5-toolbar{position:absolute;bottom:0;left:0;right:0;background:#f0f0f0;border-top:1px solid #e6e6e6}.wysiwyg5-wrapper .wysihtml5-toolbar .btn{background:rgba(0,0,0,0);border-color:transparent #e6e6e6 transparent transparent;color:#a5a5a5;font-size:16px;font-weight:600;height:50px;line-height:50px;padding:0 5px;border-width:1px;border-radius:0!important;box-shadow:none!important}.wysiwyg5-wrapper .wysihtml5-toolbar .btn:hover .editor-icon{opacity:.8}.wysiwyg5-wrapper .wysihtml5-toolbar .btn.active .editor-icon{opacity:1}.wysiwyg5-wrapper .wysihtml5-toolbar .btn.dropdown-toggle{padding-left:10px;padding-right:20px}.wysiwyg5-wrapper .wysihtml5-toolbar .btn.dropdown-toggle .current-font{opacity:.5;font-size:14px}.wysiwyg5-wrapper .wysihtml5-toolbar>li{margin:0;padding:0}.wysiwyg5-wrapper .wysiwyg{width:100%;min-height:200px;font-size:14px;line-height:18px;padding-bottom:50px!important;border:0}.wysiwyg5-wrapper .wysiwyg:focus{background-color:#fafafa;outline:0!important;box-shadow:none}.wysiwyg5-wrapper .expand-wysiwyg{bottom:0;color:#a5a5a5;font-size:20px;font-weight:600;height:50px;line-height:50px;padding:0 15px;position:absolute;right:0}.wysiwyg5-wrapper .wysihtml5-sandbox{border:none!important;padding:16px 16px 50px!important;width:100%!important}.wysiwyg5-wrapper .wysihtml5-sandbox.expanded{height:100%!important}.toggle-wysiwyg{position:absolute;right:15px;top:0}.toggle-wysiwyg li{display:inline-block;font-weight:600}.editor-icon{display:inline-block;height:40px;margin-top:5px;opacity:.4;vertical-align:top;width:40px}.editor-icon-headline{background-position:0 0;width:31px}.editor-icon-bold{background-position:-40px 0}.editor-icon-italic{background-position:-80px 0}.editor-icon-underline{background-position:-120px 0}.editor-icon-link{background-position:-160px 0}.editor-icon-quote{background-position:-200px 0}.editor-icon-ul{background-position:-240px 0}.editor-icon-ol{background-position:-250px 0}.editor-icon-outdent{background-position:-320px 0}.editor-icon-indent{background-position:-360px 0}.editor-icon-image{background-position:-400px 0}.editor-icon-html{background-position:-440px 0}.summernote-wrapper .note-editor{border-color:#e6e6e6}.summernote-wrapper .note-editor .note-toolbar{padding:0;background-color:#f0f0f0;border-bottom:none}.summernote-wrapper .note-editor .note-toolbar .btn-group{margin:0 -1px 0 0}.summernote-wrapper .note-editor .note-toolbar .btn-group .btn{font-size:12px;font-weight:600;height:50px;min-width:47px;line-height:50px;padding:0 5px;border-radius:0;background-color:#f0f0f0;border-color:transparent #e6e6e6 #e6e6e6 transparent;color:#8a8c8e}.summernote-wrapper .note-editor .note-toolbar .btn-group .btn.active,.summernote-wrapper .note-editor .note-toolbar .btn-group .btn:active{background-color:#e6e6e6}.summernote-wrapper .note-editor .note-toolbar .btn-group .btn.dropdown-toggle{min-width:61px}.summernote-wrapper .note-editor .note-toolbar .btn-group .btn:not(:last-child),.summernote-wrapper .note-editor .note-toolbar .btn-group .btn:not(:only-child){margin-right:1px}.summernote-wrapper .note-editor .note-statusbar{background-color:transparent}.summernote-wrapper .note-editor .note-statusbar .note-resizebar{border-top-color:transparent}.summernote-wrapper .note-editor .note-statusbar .note-resizebar .note-icon-bar{border-top:1px solid #e6e6e6}.summernote-wrapper .note-popover .popover .popover-content .dropdown-menu li a i,.summernote-wrapper .note-toolbar .dropdown-menu li a i{color:#f28321}input,input:focus{-webkit-transition:none!important}input:-webkit-autofill{box-shadow:0 0 0 1000px #fff inset!important}input:-webkit-autofill:focus{box-shadow:0 0 0 1000px #f0f0f0 inset!important}.has-error input:-webkit-autofill,input.error:-webkit-autofill,input.error:-webkit-autofill:focus{box-shadow:0 0 0 1000px #f9e9e9 inset!important}div.cs-select{display:inline-block;vertical-align:middle;position:relative;text-align:left;background:#fff;z-index:700;width:100%;max-width:500px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.cs-select:focus{outline:0}.cs-select select{display:none}.cs-select span{display:block;position:relative;padding:1em;white-space:nowrap;overflow:hidden;text-overflow:initial}.cs-select>span{padding-right:3em}.cs-select .cs-selected span::after,.cs-select>span::after{speak:none;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.cs-select>span::after{content:'\25BE';right:1em}.cs-select .cs-selected span::after{content:'\2713';margin-left:1em}.cs-skin-slide .cs-selected span::after,div.cs-skin-slide::before{content:''}.cs-select.cs-active>span::after{-webkit-transform:translateY(-50%) rotate(180deg);transform:translateY(-50%) rotate(180deg)}.cs-select .cs-options{position:absolute;overflow:hidden;width:100%;background:#fff;visibility:hidden}.cs-select.cs-active .cs-options{visibility:visible}.cs-select ul{list-style:none;margin:0;padding:0;width:100%}.cs-select ul span{padding:1em}.cs-select ul li.cs-focus span{background-color:#ddd}.cs-select li.cs-optgroup ul{padding-left:1em}.cs-select li.cs-optgroup>span{cursor:default}.cursor,.table.table-condensed.table-detailed>tbody>tr>td:hover{cursor:pointer}@media screen and (max-width:30em){div.cs-skin-slide{font-size:1em;width:250px}}div.cs-skin-slide::before{background:#282b30;position:absolute;width:100%;height:100%;top:0;left:0;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .3s;transition:transform .3s}.cs-skin-slide.cs-active::before{-webkit-transform:scale3d(1.1,3.5,1);transform:scale3d(1.1,3.5,1)}.cs-skin-slide>span{height:80px;line-height:32px;-webkit-transition:text-indent .3s,opacity .3s;transition:text-indent .3s,opacity .3s}@media screen and (max-width:30em){.cs-skin-slide>span{height:60px;line-height:28px}}.cs-skin-slide.cs-active>span{text-indent:-290px;opacity:0}.cs-skin-slide.cs-active>span::after{-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.cs-skin-slide .cs-options{background:0 0;width:70%;height:400%;padding:1.9em 0;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}@media screen and (max-width:30em){.cs-skin-slide .cs-options{padding-top:3em}}.cs-skin-slide .cs-options li{opacity:0;-webkit-transform:translate3d(30%,0,0);transform:translate3d(30%,0,0);-webkit-transition:-webkit-transform .3s,opacity .3s;transition:transform .3s,opacity .3s}.cs-skin-slide.cs-active .cs-options li{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.cs-skin-slide.cs-active .cs-options li:first-child{-webkit-transition-delay:50ms;transition-delay:50ms}.cs-skin-slide.cs-active .cs-options li:nth-child(2){-webkit-transition-delay:.1s;transition-delay:.1s}.cs-skin-slide.cs-active .cs-options li:nth-child(3){-webkit-transition-delay:.15s;transition-delay:.15s}.cs-skin-slide.cs-active .cs-options li:nth-child(4){-webkit-transition-delay:.2s;transition-delay:.2s}.cs-skin-slide.cs-active .cs-options li:nth-child(5){-webkit-transition-delay:.25s;transition-delay:.25s}.cs-skin-slide .cs-options li span{text-transform:uppercase;font-weight:500;letter-spacing:2px;font-size:65%;padding:.8em 1em .8em 2.5em}.cs-skin-slide .cs-options li span:hover,.cs-skin-slide .cs-options li.cs-focus span,.cs-skin-slide .cs-options li.cs-selected span{color:#eb7e7f;background:0 0}.cs-select,div.cs-skin-slide:before{background-color:transparent}.form-group-default .cs-skin-slide>span{padding:0 30px 0 0;height:22px;line-height:21px}.form-group-default .cs-wrapper{width:100%}.cs-wrapper{display:inline-block}.form-control.cs-select:not(.cs-active){width:100%!important}.cs-select .cs-placeholder{width:100%}div.cs-skin-slide{width:auto;color:#5e5e5e}div.cs-skin-slide.cs-transparent{background:0 0}div.cs-skin-slide.cs-transparent .cs-backdrop{border-color:transparent;background:0 0}div.cs-skin-slide.cs-transparent.cs-active .cs-backdrop{background:#fafafa}div.cs-skin-slide>span{height:35px;padding:6px 33px 6px 17px;line-height:23px}div.cs-skin-slide.cs-active{z-index:790}div.cs-skin-slide.cs-active:before{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}div.cs-skin-slide.cs-active .cs-backdrop{border:transparent;background:#fafafa;box-shadow:-1px 0 1px #ccc,1px 0 1px #ccc}div.cs-skin-slide.cs-active>span:after,div.cs-skin-slide>span:after{content:"\f0d7";font-family:FontAwesome;color:#5e5e5e}div.cs-skin-slide .cs-options{height:auto;width:auto;padding:10px;max-height:350px;transform:translate3d(1,1,1);overflow:hidden}div.cs-skin-slide .cs-options ul{width:100%;display:table}div.cs-skin-slide .cs-options ul li{display:table-row}div.cs-skin-slide .cs-options ul li span{display:table-cell;font-size:14px;font-weight:400;letter-spacing:normal;padding:5px 0;text-transform:none;max-height:350px;overflow-y:auto}div.cs-skin-slide .cs-options ul li span:hover,div.cs-skin-slide .cs-options ul li.cs-focus span,div.cs-skin-slide .cs-options ul li.cs-selected span{color:#2c2c2c}.cs-backdrop{background:#fff;border:1px solid rgba(0,0,0,.07);bottom:0;left:0;position:absolute;right:0;top:0;z-index:-1;-webkit-transition:all .3s ease;transition:all .3s ease}.table tbody tr td,.table thead tr th{border-bottom:1px solid rgba(230,230,230,.7)}.cs-skin-slide.cs-active .cs-options li:nth-child(6){transition-delay:.3s}.cs-skin-slide.cs-active .cs-options li:nth-child(7){transition-delay:.35s}.cs-skin-slide.cs-active .cs-options li:nth-child(8){transition-delay:.4s}.cs-skin-slide.cs-active .cs-options li:nth-child(9){transition-delay:.45s}.cs-skin-slide.cs-active .cs-options li:nth-child(10){transition-delay:.5s}.cs-skin-slide.cs-active .cs-options li:nth-child(11){transition-delay:.55s}.dropzone[dropzone=dropzone] input[type=file]{visibility:hidden}.table thead tr th{text-transform:uppercase;font-weight:600;font-size:13px;padding-top:14px;padding-bottom:14px;vertical-align:middle;color:#282829}.table thead tr th[class*=sorting_]{color:#2c2c2c}.table thead tr th .btn{margin-top:-20px;margin-bottom:-20px}.table tbody tr td{background:#fff;border-top:0;padding-top:20px;padding-bottom:20px;font-size:11px}.table tbody tr td .btn-tag{background:rgba(44,44,44,.07);display:inline-block;margin:5px;border-radius:4px;padding:5px;color:#62605a!important}.table tbody tr td .btn-tag:hover{background:rgba(44,44,44,.15)}.table tbody tr td[class*=sorting_]{color:#000}.table tbody tr.selected td{background:#f0f1f3}.table.table-hover tbody tr.selected:hover td,.table.table-hover tbody tr:hover td{background:#f0f1f3!important}.table.table-striped tbody tr td{background:#fafafa!important}.table.table-striped tbody tr:nth-child(2n+1) td{background:#fff!important}.table.table-borderless tbody tr td{border-top:0}.table.table-condensed{table-layout:fixed}.table.table-condensed thead tr th{padding-left:20px;padding-right:20px}.table.table-condensed tbody tr td{padding-top:12px;padding-bottom:12px}.table.table-condensed tbody tr td,.table.table-condensed tbody tr td *,.table.table-condensed thead tr th{white-space:nowrap;vertical-align:middle;overflow:hidden;text-overflow:ellipsis}.table.table-condensed.table-detailed>tbody>tr.shown>td{background:#fef6dd}.table.table-condensed.table-detailed>tbody>tr.shown>td:first-child:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.table.table-condensed.table-detailed>tbody>tr.shown+tr>td{background:rgba(250,250,250,.4);padding:0 40px}.table.table-condensed.table-detailed>tbody>tr.shown+tr>td .table-inline{background:0 0}.table.table-condensed.table-detailed>tbody>tr.shown+tr>td .table-inline td,.table.table-condensed.table-detailed>tbody>tr.shown+tr>td .table-inline tr{background:0 0;font-weight:600}.table.table-condensed.table-detailed>tbody>tr.row-details>td:first-child:before{content:''}.table.table-condensed.table-detailed>tbody>tr>td:first-child:before{content:"\f054";display:inline-block;margin-right:8px;font-family:FontAwesome;-webkit-transition:all .12s linear;transition:all .12s linear}.table.table-condensed.table-detailed .table-inline td{border:none;text-align:left}.table.table-borderless>tbody>tr>td{border-bottom:0}.fht-table{margin-bottom:0!important}.table.dataTable.no-footer{border:none}.dataTables_scroll:hover .dataTables_scrollBody:before{content:"";top:0;height:0}.dataTables_scrollBody{overflow-y:auto;border:none!important}.dataTables_scrollBody:before{content:"";position:absolute;left:0;right:0;top:60px;bottom:0;background:0 0}.profile-dropdown:after,.profile-dropdown:before{content:'';position:absolute;display:inline-block}.dataTables_wrapper .dataTables_paginate{margin:0}.dataTables_wrapper .dataTables_paginate ul>li>a{padding:5px 10px;color:#8a8c8e;opacity:.35;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.dataTables_wrapper .dataTables_paginate ul>li>a:hover{opacity:.65}.dataTables_wrapper .dataTables_paginate ul>li.next>a,.dataTables_wrapper .dataTables_paginate ul>li.prev>a{opacity:1}.dataTables_wrapper .dataTables_paginate ul>li.disabled a,.dataTables_wrapper .dataTables_paginate ul>li.disabled a:hover{opacity:.35}.dataTables_paginate.paging_bootstrap.pagination,.dataTables_wrapper .dataTables_info{margin-top:25px}.dataTables_paginate.paging_bootstrap.pagination{padding-top:0;padding-right:20px}.dataTables_wrapper .dataTables_info{clear:none;font-size:12px;padding:0 33px;color:#8a8c8e}.dataTables_wrapper .dataTables_paginate ul>li{display:inline-block;padding-left:0;font-size:11px}.dataTables_scrollHeadInner{padding-right:0!important}.export-options-container{position:relative}.dataTables_wrapper .dataTables_paginate ul>li.active>a{font-weight:700;color:#8a8c8e;opacity:1}.export-options-container a{color:inherit;opacity:1}.exportOptions .DTTT.btn-group a{display:block!important}@media (max-width:991px){.dataTables_wrapper .dataTables_info{float:left}.dataTables_paginate.paging_bootstrap.pagination{float:right}}@media (max-width:480px){.dataTables_paginate.paging_bootstrap.pagination,.dataTables_wrapper .dataTables_info{float:none;text-align:left;clear:both;display:block}}.thumbnail-wrapper{display:inline-block;overflow:hidden;float:left}.thumbnail-wrapper.circular{border-radius:50%;-webkit-border-radius:50%;-moz-border-radius:50%}.thumbnail-wrapper.bordered{border-width:4px;border-style:solid}.thumbnail-wrapper.bordered.d16{width:20px;height:20px}.thumbnail-wrapper.bordered.d16>*{line-height:12px}.thumbnail-wrapper.bordered.d24{width:28px;height:28px}.thumbnail-wrapper.bordered.d24>*{line-height:24px}.thumbnail-wrapper.bordered.d32{width:36px;height:36px}.thumbnail-wrapper.bordered.d32>*{line-height:28px}.thumbnail-wrapper.bordered.d48{width:52px;height:52px}.thumbnail-wrapper.bordered.d48>*{line-height:44px}.thumbnail-wrapper.d16{width:16px;height:16px}.thumbnail-wrapper.d16>*{line-height:16px}.thumbnail-wrapper.d24{width:24px;height:24px}.thumbnail-wrapper.d24>*{line-height:24px}.thumbnail-wrapper.d32{width:32px;height:32px}.thumbnail-wrapper.d32>*{line-height:32px}.thumbnail-wrapper.d39{width:39px;height:39px}.thumbnail-wrapper.d39>*{line-height:39px}.thumbnail-wrapper.d48{width:48px;height:48px}.thumbnail-wrapper.d48>*{line-height:50px}.thumbnail-wrapper>*{vertical-align:middle;width:100%;height:100%;text-align:center}.inherit-height,.inherit-size{height:inherit}.profile-dropdown{background:#fff;padding:0}.profile-dropdown:before{top:-7px;right:15px;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,.2)}.profile-dropdown:after{top:-6px;right:16px;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent}.ar-1-1>div,.ar-1-2>div,.ar-2-1>div,.ar-2-3>div,.ar-3-2>div,.bottom-right{right:0;bottom:0}.ar-1-1:before,.ar-1-2:before,.ar-2-1:before,.ar-2-3:before,.ar-3-2:before{content:""}.profile-dropdown li:last-child{margin-top:11px;padding:0}.profile-dropdown li:last-child>a{padding-top:3px;padding-bottom:3px;padding-right:19px}.profile-dropdown li>a{opacity:.5;-webkit-transition:opacity ease .3s;transition:opacity ease .3s;padding-left:17px;padding-right:37px;min-width:138px}.profile-dropdown li>a>i{margin-right:5px}.profile-dropdown li>a:hover{opacity:1}.profile-dropdown-toggle{background:0 0;border:none}.scrollable{overflow-y:auto;-webkit-overflow-scrolling:touch}.no-padding{padding:0!important}.no-margin{margin:0!important}.no-overflow{overflow:hidden!important}.auto-overflow{overflow:auto}.center-margin{margin-left:auto;margin-right:auto}.inherit-size{width:inherit}.full-width,.image-responsive-height,.overlayer.fullwidth{width:100%}.image-responsive-width{height:100%}.overlayer{position:absolute;display:block;z-index:21}.overlayer-wrapper{position:relative;display:block;z-index:10}.overlay-fixed{position:fixed!important;top:auto!important}.bottom-left,.bottom-right,.pull-bottom,.pull-up,.top-left,.top-right{position:absolute!important}.top-left{top:0;left:0}.top-right{top:1px;right:0}.bottom-left{bottom:1px;left:0}.pull-bottom{bottom:0}.pull-up{top:0}.ar-1-1,.relative{position:relative}.scroll-x-hidden{overflow-x:hidden!important}.ar-1-1,.ar-1-2,.ar-2-1,.ar-2-3,.ar-3-2{overflow:hidden}.p-t-5{padding-top:5px!important}.p-r-5{padding-right:5px!important}.p-l-5{padding-left:5px!important}.p-b-5{padding-bottom:5px!important}.padding-5{padding:5px!important}.p-t-10{padding-top:10px!important}.p-r-10{padding-right:10px!important}.p-l-10{padding-left:10px!important}.p-b-10{padding-bottom:10px!important}.padding-10{padding:10px!important}.p-t-15{padding-top:15px!important}.p-r-15{padding-right:15px!important}.p-l-15{padding-left:15px!important}.p-b-15{padding-bottom:15px!important}.padding-15{padding:15px!important}.p-t-20{padding-top:20px!important}.p-r-20{padding-right:20px!important}.p-l-20{padding-left:20px!important}.p-b-20{padding-bottom:20px!important}.padding-20{padding:20px!important}.p-t-25{padding-top:25px!important}.p-r-25{padding-right:25px!important}.p-l-25{padding-left:25px!important}.p-b-25{padding-bottom:25px!important}.padding-25{padding:25px!important}.p-t-30{padding-top:30px!important}.p-r-30{padding-right:30px!important}.p-l-30{padding-left:30px!important}.p-b-30{padding-bottom:30px!important}.padding-30{padding:30px!important}.p-t-35{padding-top:35px!important}.p-r-35{padding-right:35px!important}.p-l-35{padding-left:35px!important}.p-b-35{padding-bottom:35px!important}.padding-35{padding:35px!important}.p-t-40{padding-top:40px!important}.p-r-40{padding-right:40px!important}.p-l-40{padding-left:40px!important}.p-b-40{padding-bottom:40px!important}.padding-40{padding:40px!important}.p-t-45{padding-top:45px!important}.p-r-45{padding-right:45px!important}.p-l-45{padding-left:45px!important}.p-b-45{padding-bottom:45px!important}.padding-45{padding:45px!important}.p-t-50{padding-top:50px!important}.p-r-50{padding-right:50px!important}.p-l-50{padding-left:50px!important}.p-b-50{padding-bottom:50px!important}.padding-50{padding:50px!important}.p-t-55{padding-top:55px!important}.p-r-55{padding-right:55px!important}.p-l-55{padding-left:55px!important}.p-b-55{padding-bottom:55px!important}.padding-55{padding:55px!important}.p-t-60{padding-top:60px!important}.p-r-60{padding-right:60px!important}.p-l-60{padding-left:60px!important}.p-b-60{padding-bottom:60px!important}.padding-60{padding:60px!important}.p-t-65{padding-top:65px!important}.p-r-65{padding-right:65px!important}.p-l-65{padding-left:65px!important}.p-b-65{padding-bottom:65px!important}.padding-65{padding:65px!important}.p-t-70{padding-top:70px!important}.p-r-70{padding-right:70px!important}.p-l-70{padding-left:70px!important}.p-b-70{padding-bottom:70px!important}.padding-70{padding:70px!important}.p-t-75{padding-top:75px!important}.p-r-75{padding-right:75px!important}.p-l-75{padding-left:75px!important}.p-b-75{padding-bottom:75px!important}.padding-75{padding:75px!important}.p-t-80{padding-top:80px!important}.p-r-80{padding-right:80px!important}.p-l-80{padding-left:80px!important}.p-b-80{padding-bottom:80px!important}.padding-80{padding:80px!important}.p-t-85{padding-top:85px!important}.p-r-85{padding-right:85px!important}.p-l-85{padding-left:85px!important}.p-b-85{padding-bottom:85px!important}.padding-85{padding:85px!important}.p-t-90{padding-top:90px!important}.p-r-90{padding-right:90px!important}.p-l-90{padding-left:90px!important}.p-b-90{padding-bottom:90px!important}.padding-90{padding:90px!important}.p-t-95{padding-top:95px!important}.p-r-95{padding-right:95px!important}.p-l-95{padding-left:95px!important}.p-b-95{padding-bottom:95px!important}.padding-95{padding:95px!important}.p-t-100{padding-top:100px!important}.p-r-100{padding-right:100px!important}.p-l-100{padding-left:100px!important}.p-b-100{padding-bottom:100px!important}.padding-100{padding:100px!important}.m-t-0{margin-top:0}.m-r-0{margin-right:0}.m-l-0{margin-left:0}.m-b-0{margin-bottom:0}.m-t-5{margin-top:5px}.m-r-5{margin-right:5px}.m-l-5{margin-left:5px}.m-b-5{margin-bottom:5px}.m-t-10{margin-top:10px}.m-r-10{margin-right:10px}.m-l-10{margin-left:10px}.m-b-10{margin-bottom:10px}.m-t-15{margin-top:15px}.m-r-15{margin-right:15px}.m-l-15{margin-left:15px}.m-b-15{margin-bottom:15px}.m-t-20{margin-top:20px}.m-r-20{margin-right:20px}.m-l-20{margin-left:20px}.m-b-20{margin-bottom:20px}.m-t-25{margin-top:25px}.m-r-25{margin-right:25px}.m-l-25{margin-left:25px}.m-b-25{margin-bottom:25px}.m-t-30{margin-top:30px}.m-r-30{margin-right:30px}.m-l-30{margin-left:30px}.m-b-30{margin-bottom:30px}.m-t-35{margin-top:35px}.m-r-35{margin-right:35px}.m-l-35{margin-left:35px}.m-b-35{margin-bottom:35px}.m-t-40{margin-top:40px}.m-r-40{margin-right:40px}.m-l-40{margin-left:40px}.m-b-40{margin-bottom:40px}.m-t-45{margin-top:45px}.m-r-45{margin-right:45px}.m-l-45{margin-left:45px}.m-b-45{margin-bottom:45px}.m-t-50{margin-top:50px}.m-r-50{margin-right:50px}.m-l-50{margin-left:50px}.m-b-50{margin-bottom:50px}.m-t-55{margin-top:55px}.m-r-55{margin-right:55px}.m-l-55{margin-left:55px}.m-b-55{margin-bottom:55px}.m-t-60{margin-top:60px}.m-r-60{margin-right:60px}.m-l-60{margin-left:60px}.m-b-60{margin-bottom:60px}.m-t-65{margin-top:65px}.m-r-65{margin-right:65px}.m-l-65{margin-left:65px}.m-b-65{margin-bottom:65px}.m-t-70{margin-top:70px}.m-r-70{margin-right:70px}.m-l-70{margin-left:70px}.m-b-70{margin-bottom:70px}.m-t-75{margin-top:75px}.m-r-75{margin-right:75px}.m-l-75{margin-left:75px}.m-b-75{margin-bottom:75px}.m-t-80{margin-top:80px}.m-r-80{margin-right:80px}.m-l-80{margin-left:80px}.m-b-80{margin-bottom:80px}.m-t-85{margin-top:85px}.m-r-85{margin-right:85px}.m-l-85{margin-left:85px}.m-b-85{margin-bottom:85px}.m-t-90{margin-top:90px}.m-r-90{margin-right:90px}.m-l-90{margin-left:90px}.m-b-90{margin-bottom:90px}.m-t-95{margin-top:95px}.m-r-95{margin-right:95px}.m-l-95{margin-left:95px}.m-b-95{margin-bottom:95px}.m-t-100{margin-top:100px}.m-r-100{margin-right:100px}.m-l-100{margin-left:100px}.m-b-100{margin-bottom:100px}.full-height{height:100%!important}.hide{display:none}.inline{display:inline-block!important}.block{display:block}.b-blank{border-color:#000}.b-a,.b-b,.b-l,.b-r,.b-t{border-style:solid;border-width:0}.b-r{border-right-width:1px}.b-l{border-left-width:1px}.b-t{border-top-width:1px}.b-b{border-bottom-width:1px}.b-a{border-width:1px}.b-dashed{border-style:dashed}.b-thick{border-width:2px}.b-transparent{border-color:rgba(0,0,0,.4)}.b-transparent-white{border-color:rgba(255,255,255,.3)}.b-grey{border-color:#e6e6e6}.b-white{border-color:#fff}.b-complete,.b-primary,.b-success{border-color:#f28321}.b-info{border-color:#3b4752}.b-danger{border-color:#f28321}.b-warning{border-color:#f8d053}.b-rad-sm{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px}.b-rad-md{border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px}.b-rad-lg{border-radius:7px;-webkit-border-radius:7px;-moz-border-radius:7px}.no-border{border:none!important}.profile-img-wrapper{float:left;border-radius:100px;display:inline-block;height:35px;overflow:hidden;width:35px;-webkit-flex:1;-moz-flex:1;flex:1}.profile-img-wrapper.big{height:68px;width:68px}.profile-img-wrapper.with-left-space-custom{margin-left:7px}.icon-set-preview{transition:opacity .1s linear}#icon-list{transition:all .1s ease-in-out}.error-number{font-size:90px;line-height:90px}.error-container-innner{margin-left:auto;margin-right:auto;width:360px}.error-container{margin-top:-100px;margin-left:auto;margin-right:auto;width:38%}.ar-1-1,.ar-1-2,.ar-2-1,.ar-2-3,.ar-3-2{width:100%}.visible-xlg{display:none}.hidden-xlg{display:block}.sm-gutter .row>[class*=col-],.sm-gutter .row>[class^=col-]{padding-left:5px;padding-right:5px}.sm-gutter .row{margin-left:-5px;margin-right:-5px}.ar-1-1 .panel,.ar-1-2 .panel,.ar-2-1 .panel,.ar-2-3 .panel,.ar-3-2 .panel{margin:0}.ar-1-1:before{display:block;padding-top:100%}.ar-1-1>div{position:absolute;top:0;left:0}.ar-2-1{position:relative}.ar-2-1:before{display:block;padding-top:calc(50% - 5px)}.ar-2-1>div{position:absolute;top:0;left:0}.ar-1-2{position:relative}.ar-1-2:before{display:block;padding-top:calc(150% - 5px)}.ar-1-2>div{position:absolute;top:0;left:0}.ar-3-2{position:relative}.ar-3-2:before{display:block;padding-top:calc(75% - 5px)}.ar-3-2>div{position:absolute;top:0;left:0}.ar-2-3{position:relative}.ar-2-3:before{display:block;padding-top:calc(125% - 5px)}.ar-2-3>div{position:absolute;top:0;left:0}.v-align-bottom{vertical-align:bottom}.v-align-top{vertical-align:top}.v-align-middle{vertical-align:middle}.col-top{vertical-align:top}.col-middle{vertical-align:middle}.col-bottom{vertical-align:bottom}.container-xs-height{display:table;padding-left:0;padding-right:0;width:100%;border-collapse:collapse;table-layout:fixed}.row-xs-height{display:table-row}.col-xs-height{display:table-cell;float:none}@media (min-width:768px){.container-sm-height{display:table;padding-left:0;padding-right:0;width:100%;border-collapse:collapse;table-layout:fixed}.row-sm-height{display:table-row}.col-sm-height{display:table-cell!important;float:none!important}}@media (min-width:992px){.container-md-height{display:table;padding-left:0;padding-right:0;width:100%;border-collapse:collapse;table-layout:fixed}.row-md-height{display:table-row}.col-md-height{display:table-cell!important;float:none!important}}@media (min-width:1200px){.container-lg-height{display:table;padding-left:0;padding-right:0;width:100%;border-collapse:collapse;table-layout:fixed}.row-lg-height{display:table-row}.col-lg-height{display:table-cell!important;float:none!important}}@media (min-width:1824px){.col-xlg-1,.col-xlg-10,.col-xlg-11,.col-xlg-12,.col-xlg-2,.col-xlg-3,.col-xlg-4,.col-xlg-5,.col-xlg-6,.col-xlg-7,.col-xlg-8,.col-xlg-9{float:left;min-height:1px;padding-left:15px;padding-right:15px;position:relative}.quickview-wrapper .tab-content #quickview-notes>.inner{width:570px}.container-fluid.container-fixed-lg{width:1700px;margin-right:auto;margin-left:auto}.menu-pin .container-fluid.container-fixed-lg{width:1450px}.visible-xlg{display:block!important}.hidden-xlg{display:none!important}.col-xlg-12{width:100%}.col-xlg-11{width:91.6667%}.col-xlg-10{width:83.3333%}.col-xlg-9{width:75%}.col-xlg-8{width:66.6667%}.col-xlg-7{width:58.3333%}.col-xlg-6{width:50%}.col-xlg-5{width:41.6667%}.col-xlg-4{width:33.3333%}.col-xlg-3{width:25%}.col-xlg-2{width:16.6667%}.col-xlg-1{width:8.33333%}.col-xlg-pull-12{right:100%}.col-xlg-pull-11{right:91.6667%}.col-xlg-pull-10{right:83.3333%}.col-xlg-pull-9{right:75%}.col-xlg-pull-8{right:66.6667%}.col-xlg-pull-7{right:58.3333%}.col-xlg-pull-6{right:50%}.col-xlg-pull-5{right:41.6667%}.col-xlg-pull-4{right:33.3333%}.col-xlg-pull-3{right:25%}.col-xlg-pull-2{right:16.6667%}.col-xlg-pull-1{right:8.33333%}.col-xlg-pull-0{right:0}.col-xlg-push-12{left:100%}.col-xlg-push-11{left:91.6667%}.col-xlg-push-10{left:83.3333%}.col-xlg-push-9{left:75%}.col-xlg-push-8{left:66.6667%}.col-xlg-push-7{left:58.3333%}.col-xlg-push-6{left:50%}.col-xlg-push-5{left:41.6667%}.col-xlg-push-4{left:33.3333%}.col-xlg-push-3{left:25%}.col-xlg-push-2{left:16.6667%}.col-xlg-push-1{left:8.33333%}.col-xlg-push-0{left:0}.col-xlg-offset-12{margin-left:100%}.col-xlg-offset-11{margin-left:91.6667%}.col-xlg-offset-10{margin-left:83.3333%}.col-xlg-offset-9{margin-left:75%}.col-xlg-offset-8{margin-left:66.6667%}.col-xlg-offset-7{margin-left:58.3333%}.col-xlg-offset-6{margin-left:50%}.col-xlg-offset-5{margin-left:41.6667%}.col-xlg-offset-4{margin-left:33.3333%}.col-xlg-offset-3{margin-left:25%}.col-xlg-offset-2{margin-left:16.6667%}.col-xlg-offset-1{margin-left:8.33333%}.col-xlg-offset-0{margin-left:0}}@media only screen and (max-width:1400px){.page-sidebar .page-sidebar-inner .sidebar-slide .sidebar-menu{bottom:50px}.page-sidebar .page-sidebar-inner .sidebar-slide .sidebar-widgets{display:none}.footer-widget{padding:11px 21px!important}}@media only screen and (min-width:0px){body.ie9.menu-pin .page-sidebar{transform:none!important;-webkit-transform:none!important;-ms-transform:none!important}body.menu-pin{overflow-x:hidden}body.menu-pin .header .brand{width:245px}body.menu-pin .page-container{padding-left:0}body.menu-pin .page-container .page-content-wrapper .content{padding-left:250px}body.menu-pin .page-container .page-content-wrapper .footer{left:250px}body .page-container .page-content-wrapper .content{padding-left:40px}body .page-container .page-content-wrapper .footer{left:40px}body.menu-pin [data-toggle-pin=sidebar]>i:before{content:"\f192"}body.menu-pin .page-sidebar{transform:translate(210px,0)!important;-webkit-transform:translate(210px,0)!important;-ms-transform:translate(210px,0)!important;width:250px}body.menu-pin .page-sidebar .sidebar-header .sidebar-header-controls{transform:translateX(18px);-webkit-transform:translateX(18px)}body.menu-pin .page-sidebar .menu-items .icon-thumbnail{transform:translate3d(-14px,0,0);-webkit-transform:-webkit-translate3d(-14px,0,0)}body.menu-behind .page-sidebar{z-index:799}body.menu-behind .header .brand{width:300px;text-align:left;padding-left:20px}body.box-layout{background-color:#fff}body.box-layout>.container{height:100%;padding:0;background-color:#fafafa}body.box-layout .header{background-color:transparent;border:0;padding:0}body.box-layout .header>.container{background-color:#fff;border-bottom:1px solid rgba(230,230,230,.7);padding:0 20px 0 0}body.box-layout .page-sidebar{left:auto;transform:none!important;-webkit-transform:none!important}body.box-layout .page-container .page-content-wrapper .footer{width:auto}.header .brand{position:relative}.notification-panel{width:400px}}@media (min-width:1200px){.row-same-height{overflow:hidden}.row-same-height>[class*=col-lg]{margin-bottom:-99999px;padding-bottom:99999px}}@media (min-width:992px){.row-same-height{overflow:hidden}.row-same-height>[class*=col-md]{margin-bottom:-99999px;padding-bottom:99999px}}@media (min-width:768px){.row-same-height{overflow:hidden}.row-same-height>[class*=col-sm]{margin-bottom:-99999px;padding-bottom:99999px}}@media only screen and (min-device-width:768px) and (max-device-width:1024px) and (orientation:portrait){.page-sidebar .sidebar-menu .menu-items>li>a{padding-left:27px}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li{padding:0 27px 0 31px}.icon-thumbnail{margin-right:21px}.error-page .error-container{width:auto}}@media (max-width:767px){.header,.header .header-inner{height:48px}.header .notification-list,.header .search-link,.header .user-info-wrapper{display:none}.header .search-link{height:19px;width:16px;overflow:hidden}.container-fluid,.jumbotron{padding-left:0;padding-right:0}.sm-pull-bottom,.sm-pull-up{position:relative!important}.sm-p-t-0{padding-top:0!important}.sm-p-r-0{padding-right:0!important}.sm-p-l-0{padding-left:0!important}.sm-p-b-0{padding-bottom:0!important}.sm-padding-0{padding:0!important}.sm-p-t-5{padding-top:5px!important}.sm-p-r-5{padding-right:5px!important}.sm-p-l-5{padding-left:5px!important}.sm-p-b-5{padding-bottom:5px!important}.sm-padding-5{padding:5px!important}.sm-p-t-10{padding-top:10px!important}.sm-p-r-10{padding-right:10px!important}.sm-p-l-10{padding-left:10px!important}.sm-p-b-10{padding-bottom:10px!important}.sm-padding-10{padding:10px!important}.sm-p-t-15{padding-top:15px!important}.sm-p-r-15{padding-right:15px!important}.sm-p-l-15{padding-left:15px!important}.sm-p-b-15{padding-bottom:15px!important}.sm-padding-15{padding:15px!important}.sm-p-t-20{padding-top:20px!important}.sm-p-r-20{padding-right:20px!important}.sm-p-l-20{padding-left:20px!important}.sm-p-b-20{padding-bottom:20px!important}.sm-padding-20{padding:20px!important}.sm-p-t-25{padding-top:25px!important}.sm-p-r-25{padding-right:25px!important}.sm-p-l-25{padding-left:25px!important}.sm-p-b-25{padding-bottom:25px!important}.sm-padding-25{padding:25px!important}.sm-p-t-30{padding-top:30px!important}.sm-p-r-30{padding-right:30px!important}.sm-p-l-30{padding-left:30px!important}.sm-p-b-30{padding-bottom:30px!important}.sm-padding-30{padding:30px!important}.sm-p-t-35{padding-top:35px!important}.sm-p-r-35{padding-right:35px!important}.sm-p-l-35{padding-left:35px!important}.sm-p-b-35{padding-bottom:35px!important}.sm-padding-35{padding:35px!important}.sm-p-t-40{padding-top:40px!important}.sm-p-r-40{padding-right:40px!important}.sm-p-l-40{padding-left:40px!important}.sm-p-b-40{padding-bottom:40px!important}.sm-padding-40{padding:40px!important}.sm-p-t-45{padding-top:45px!important}.sm-p-r-45{padding-right:45px!important}.sm-p-l-45{padding-left:45px!important}.sm-p-b-45{padding-bottom:45px!important}.sm-padding-45{padding:45px!important}.sm-p-t-50{padding-top:50px!important}.sm-p-r-50{padding-right:50px!important}.sm-p-l-50{padding-left:50px!important}.sm-p-b-50{padding-bottom:50px!important}.sm-padding-50{padding:50px!important}.sm-m-t-5{margin-top:5px!important}.sm-m-r-5{margin-right:5px!important}.sm-m-l-5{margin-left:5px!important}.sm-m-b-5{margin-bottom:5px!important}.sm-m-t-10{margin-top:10px!important}.sm-m-r-10{margin-right:10px!important}.sm-m-l-10{margin-left:10px!important}.sm-m-b-10{margin-bottom:10px!important}.sm-m-t-15{margin-top:15px!important}.sm-m-r-15{margin-right:15px!important}.sm-m-l-15{margin-left:15px!important}.sm-m-b-15{margin-bottom:15px!important}.sm-m-t-20{margin-top:20px!important}.sm-m-r-20{margin-right:20px!important}.sm-m-l-20{margin-left:20px!important}.sm-m-b-20{margin-bottom:20px!important}.sm-m-t-25{margin-top:25px!important}.sm-m-r-25{margin-right:25px!important}.sm-m-l-25{margin-left:25px!important}.sm-m-b-25{margin-bottom:25px!important}.sm-m-t-30{margin-top:30px!important}.sm-m-r-30{margin-right:30px!important}.sm-m-l-30{margin-left:30px!important}.sm-m-b-30{margin-bottom:30px!important}.sm-m-t-35{margin-top:35px!important}.sm-m-r-35{margin-right:35px!important}.sm-m-l-35{margin-left:35px!important}.sm-m-b-35{margin-bottom:35px!important}.sm-m-t-40{margin-top:40px!important}.sm-m-r-40{margin-right:40px!important}.sm-m-l-40{margin-left:40px!important}.sm-m-b-40{margin-bottom:40px!important}.sm-m-t-45{margin-top:45px!important}.sm-m-r-45{margin-right:45px!important}.sm-m-l-45{margin-left:45px!important}.sm-m-b-45{margin-bottom:45px!important}.sm-m-t-50{margin-top:50px!important}.sm-m-r-50{margin-right:50px!important}.sm-m-l-50{margin-left:50px!important}.sm-m-b-50{margin-bottom:50px!important}.sm-no-margin{margin:0}.sm-no-padding{padding:0}.sm-text-right{text-align:right!important}.sm-text-left{text-align:left!important}.sm-text-center{text-align:center!important}.sm-pull-right{float:right!important}.sm-pull-left{float:left!important}.sm-pull-reset{float:none!important}.sm-block{display:block}.error-container{width:auto}.sm-image-responsive-height{width:100%;height:auto}}@media (max-width:480px){body{width:100%}body .header{width:100%;height:48px;border-bottom:1px solid rgba(0,0,0,.07)}body .header .header-inner{height:48px;text-align:center}body .header .header-inner .toggle-email-sidebar{font-size:16px;top:12px}body .header .header-inner .toggle-sidebar{left:14px}body .header .header-inner .mark-email{left:35px;top:14px}body .header .header-inner .quickview-link{top:14px}body .header .dropdown-submenu{top:12px}body .header .notification-list,body .header .search-link{display:none}body #overlay-search{font-size:48px;height:118px;line-height:46px}.panel .panel-heading{padding-left:15px}.panel .panel-body{padding:0 15px 15px}.error-page{padding:15px}.error-page .error-container{margin-top:30px;width:auto}.error-page .pull-bottom{position:relative}.map-controls{left:10px}.register-container{height:auto!important}.error-container-innner{width:auto}}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:200/100),only screen and (min-device-pixel-ratio:2){.icon-set{background:url(qrc:///assets/icons/top_tray_2x.png);position:relative;background-size:95px 19px}.editor-icon{background-image:url(qrc:///assets/img/editor_tray_2x.png);background-size:480px 40px}.alert .close{background:url(qrc:///assets/icons/noti-cross-2x.png) -9px -10px no-repeat;width:10px;height:9px;position:relative;opacity:.8;background-size:114px 29px}}.f-off:before{content:""!important} diff --git a/src/qt/res/assets/css/shadow.min.css b/src/qt/res/assets/css/shadow.min.css deleted file mode 100644 index 877021e833..0000000000 --- a/src/qt/res/assets/css/shadow.min.css +++ /dev/null @@ -1 +0,0 @@ -#tooltip,.center-div{text-align:center}#network-alert,.label,.label:empty,.transaction-overview{display:block}#transaction-info,.contact-list ul li .contact-info .contact-name,td{text-overflow:ellipsis;overflow:hidden}@font-face{font-family:"Open Sans";font-weight:300;src:url(qrc:///assets/fonts/OpenSans/OpenSans-Light.ttf)}@font-face{font-family:"Open Sans";font-weight:300;src:url(qrc:///assets/fonts/OpenSans/OpenSans-LightItalic.ttf);font-style:italic}@font-face{font-family:"Open Sans";font-weight:400;src:url(qrc:///assets/fonts/OpenSans/OpenSans-Regular.ttf)}@font-face{font-family:"Open Sans";font-weight:400;src:url(qrc:///assets/fonts/OpenSans/OpenSans-Italic.ttf);font-style:italic}@font-face{font-family:"Open Sans";font-weight:700;src:url(qrc:///assets/fonts/OpenSans/OpenSans-Bold.ttf)}@font-face{font-family:"Open Sans";font-weight:700;src:url(qrc:///assets/fonts/OpenSans/OpenSans-BoldItalic.ttf);font-style:italic}.uppercase{text-transform:uppercase}.fa.green{color:#499749}.fa.red{color:#E3223C}.fa.orange{color:#f39347}.page-content-wrapper{background:#F0F1F3}.panel{border:0 solid transparent}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li:hover>.icon-thumbnail{color:#E3223C}.panel.panel-default{border:1px solid rgba(0,0,0,.07);background:#fff}.nav-sub-menu{background-color:#fff;border:none;-webkit-border-radius:0!important;-moz-border-radius:0!important;border-radius:0!important}#tooltip{font-size:.8em;color:#fff;background:#131218;position:absolute;z-index:99999999;padding:10px;line-height:15px;border-radius:4px}.light-red,.syncing{color:#E3223C}#tooltip:after{width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px solid #131218;content:'';position:absolute;left:50%;bottom:-10px;margin-left:-10px}#tooltip.top:after{border-top-color:transparent;border-bottom:10px solid #131218;top:-20px;bottom:auto}#tooltip.left:after{left:10px;margin:0}#tooltip.right:after{right:10px;left:auto;margin:0}.cents{font-size:15px}.syncing{whitespace:nowrap}.transaction-overview{text-decoration:none;color:#aaa;padding:20px;border-bottom:1px solid #F0F1F3;font-size:13px}.transaction-overview span{color:#131218}.transaction-overview span.date{color:#b9bdbe}.overview_date{letter-spacing:1px}#status{margin-top:5px;padding-top:3px}.network-alerts-icon{margin-right:5px}.warning{font-size:.8em;color:#F51E3E;padding:5px}table.dataTable thead td,table.dataTable thead th{padding:10px 18px;border-bottom:1px solid red}td{max-width:0;white-space:nowrap}table{width:100%}.table{color:#898989}button,input,optgroup,select,textarea{background:transparant;font-size:13px;color:#000}input,optgroup,select,textarea{padding:3px 9px;height:34px;border:1px solid #F0F1F3;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}button{border:1px solid #F0F1F3;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.newval{background:#fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;width:99%}.select-drop-down,.select-drop-down-chat{width:145px;border:none;-webkit-appearance:none;-moz-appearance:none;font-size:13px;height:35px}::-webkit-input-placeholder,:placeholder-shown{color:#626262}.padding-right-forms{margin-right:25px}.select-drop-down{appearance:none;background:url(qrc:///assets/icons/chevron.png) 95% no-repeat #F0F1F3;border:1px solid rgba(0,0,0,.07)}.select-drop-down-chat{appearance:none;background:url(qrc:///assets/icons/chevron.png) 95% no-repeat #fff;border:1px solid rgba(0,0,0,.07)}.select-drop-down-small{width:50px;font-size:13px;border:none;height:35px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:url(qrc:///assets/icons/chevron.png) 95% no-repeat #F0F1F3;border:1px solid rgba(0,0,0,.07)}.form-control-options-page{background-color:#F0F1F3;background-image:none;border:1px solid rgba(0,0,0,.07);font-family:Arial,sans-serif;-webkit-appearance:none;color:#2c2c2c;outline:0;height:35px;line-height:normal;font-size:14px;font-weight:400;min-height:35px;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-transition:background .2s linear 0s;transition:background .2s linear 0s}#qrcode-modal{display:none}#import-key-modal{margin:auto;padding:20px;width:800px;background:#fff;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;box-shadow:0 0 4px rgba(0,0,0,.7);-webkit-box-shadow:0 0 4px rgba(0,0,0,.7);-moz-box-shadow:0 0 4px rgba(0,0,0,.7);display:none;position:absolute}#import-key-modal label{display:inline-block;padding-right:20px;margin:15px 20px 20px;text-align:right;width:200px}#import-key-modal input{width:650px;height:40px;padding:0 10px;margin-bottom:10px}#import-key-modal textarea{width:500px;height:50px;padding:0 10px;margin-bottom:10px}#qrcode{margin:auto;padding-bottom:20px}#qrcode canvas,#qrcode img{display:block;margin:auto}#message-preview img{max-width:90%}#transaction-info{padding-bottom:25px;-webkit-user-select:all;user-select:all}.contact-list{width:285px;overflow:hidden;height:100%}#start-conversation,.group-invite{width:100%;border-bottom:1px solid #ecf0f1;font-weight:700;text-decoration:none}.contact-list.in-conversation{border-right:1px solid #CFCFCF}.contact-list+div+div.contact-discussion{display:none}.contact-list.in-conversation+div+div.contact-discussion,.group-invite{display:block}#start-conversation{display:block;padding:10px;color:#000;background-color:#fff}#start-conversation:hover{background-color:#F0F1F3}.group-invite{padding:10px 10px 10px 20px;color:#fff;background-color:#131218}.group-invite:hover{color:#fff}.group-invite-label{display:inline-block;width:70%;padding-left:10px}.group-invite-check{padding:3%;color:#fff}.group-invite-check:hover{padding:3%;color:green}.group-invite-close{padding:3%;color:#fff}.group-invite-close:hover{padding:3%;color:red}.contact-list ul{list-style:none;margin:0;padding:0}.contact-list ul li{display:block;padding:20px;border-bottom:1px solid #ecf0f1;background-color:#fff;-webkit-transition:all .15s ease;transition:all .15s ease}.contact-list ul li.selected{background-color:#F0F1F3}.contact-list ul li:hover{cursor:pointer}.contact-list ul li img{height:40px;border-radius:100%;float:left}.contact-list ul li .contact-info{display:block;height:50px}.contact-list ul li .contact-info .contact-name{display:block;font-family:"Open Sans",sans-serif;color:#5b6a78;font-size:14px;white-space:nowrap;margin-top:1px;width:85%}.contact-list ul li .contact-info .contact-address,.contact-list ul li .contact-info .contact-message{font-size:13px;font-style:italic;color:#92a0ad;width:100%;display:block;padding-bottom:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-list ul li .contact-options{display:block;width:80px;float:right;position:relative;top:-50px}.contact-list ul li .contact-options span{float:right;margin-right:4px}.contact-list ul li .contact-options .message-notifications{background:#E3223C;border-radius:100%;font-size:10px;width:22px;height:22px;display:inline-block;text-align:center;color:#fff;font-weight:700}.contact-list ul li .contact-options .favorite{background-image:url(qrc:///icons/favorite);height:16px;width:16px}.contact-list ul li .contact-options .favorite.favorited{background-image:url(qrc:///icons/favorited)}.contact-list ul li .contact-options .message-notifications.empty{display:none}#contact-chat{margin-left:0}.verified-mark{color:#fff;background-color:green;border-radius:15px;padding:3px}.verified-mark:hover{border-radius:10px;padding-left:10px;padding-right:10px}.contributor-mark{color:#fff;background-color:#f11426;border-radius:15px;padding:5px}.contributor-mark:hover{border-radius:10px;padding-left:10px;padding-right:10px}.shadowteam-mark{color:#fff;background-color:#04043d;border-radius:15px;padding:3px}.shadowteam-mark:hover{border-radius:10px;padding-left:10px;padding-right:10px}.contact-discussion{height:300px;width:100%;z-index:0;overflow:hidden;background:#fff}.contact-discussion .delete:hover{color:#E3223C}.contact-discussion ul{list-style:none;padding:0;margin:0;width:100%;text-align:left}.contact-discussion ul li{line-height:15px;padding-left:0}.contact-discussion ul li .info{position:absolute;left:0;display:block;-moz-border-radius:.2rem;-webkit-border-radius:.2rem;border-radius:.2rem;width:40px;height:40px;background-size:cover;margin-top:4px}.contact-discussion ul li.user-message .info{color:red}.contact-discussion ul li .info canvas,.contact-discussion ul li .info img{width:40px;float:left;margin-bottom:5px}.contact-discussion ul li .user-name{font-weight:900;padding-right:.25rem;color:#3d3c40!important;margin-left:0;font-style:normal;text-decoration:none}.contact-discussion ul li .message-content .timestamp{text-align:left;display:inline;position:relative;top:0;left:0;color:#babbbf;font-size:12px;line-height:1.2rem;width:36px;margin-right:5px;margin-left:0}.contact-discussion ul li.user-message .message-content .timestamp{text-align:right}.contact-discussion ul li .message-content .message-text{color:#8b898f;display:block;min-height:1rem;line-height:24px}.contact-discussion ul .message-wrapper{position:relative;padding:10px 2rem 10px 3rem;min-height:36px;margin-left:25px}.chat .chat-history .my-message{background:#86BB71}.chat .chat-history .other-message{background:#94C2ED}.chat .chat-history .other-message:after{border-bottom-color:#94C2ED}.contact-discussion ul li .message-content .message-text img{max-width:100%;border-radius:3px}textarea{resize:none;display:block;height:60px;border:1px solid #ededed;width:100%}.input-list input[type=textedarea]{display:block;margin:0;width:100%;font-family:sans-serif;font-size:18px;appearance:none;box-shadow:none;border-radius:none}.input-list input[type=textaddrea]:focus{outline:0}.chat input{-webkit-appearance:none;border-radius:0}.chat-body .answer{bottom:0;padding:20px;background:#fff;border-top:solid 1px #ededed;width:100%}.chat-body .answer a{color:#131218}.emoji{width:32px;height:32px;display:inline-block;margin-bottom:-.25em}.global-chat-btn{border:1px solid #ededed;margin-right:-15px;padding:10px 25px 5px 10px;margin-left:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.global-chat-btn .fa{color:#2c2c2c;font-size:16px;position:absolute}.heading-deselected,.heading-selected{font-size:1em;font-family:"Open Sans",sans-serif;text-decoration:none;cursor:pointer}.global-chat-btn:hover .fa{color:#E3223C}.chat-header .fa{display:none}.chat-header:hover .fa{display:inline-block}#remove-on-send{padding:20px}.iScrollVerticalScrollbar{position:absolute;z-index:9999;bottom:0;top:0;right:0;overflow:hidden;background:#a7b0b1;width:10px}.iScrollIndicator{width:100%;background:#697172}.default-scroll{display:block;height:auto;width:auto}#syncProgressBar{height:11px;display:block;-webkit-appearance:none;-moz-appearance:none;border:none;margin-bottom:2px}.chat-icon,.connect-1,.connect-2,.connect-3,.connect-4,.connect-5,.connect-6,.encryption,.encryption-stake,.i2p,.no-encryption,.no-i2p,.no-syncing,.no-tor,.not-staking,.staking,.syncing-spinner,.tor{height:16px}progress::-webkit-progress-bar{background:#131218;border-radius:50px;padding:2px;box-shadow:0 1px 0 0 rgba(255,255,255,.2)}progress::-webkit-progress-value{border-radius:50px;box-shadow:inset 0 1px 1px 0 rgba(255,255,255,.4);background:-webkit-linear-gradient(45deg,transparent,transparent 33%,rgba(0,0,0,.1) 33%,rgba(0,0,0,.1) 66%,transparent 66%),-webkit-linear-gradient(top,rgba(255,255,255,.25),rgba(0,0,0,.2)),-webkit-linear-gradient(left,#e5203d,#e41c39);background-size:25px 14px,100% 100%,100% 100%;-webkit-animation:animateprogress 5s linear 0 infinite;animation:animateprogress 5s linear 0 infinite}@-webkit-keyframes animateprogress{0%{background-position:0 0,0 0,0 0}100%{background-position:-100px 0,0 0,0 0}}.staking{background:url(qrc:///assets/icons/staking.png);width:26px}.not-staking{background:url(qrc:///assets/icons/staking_off.png);width:26px}.encryption{background:url(qrc:///assets/icons/lock.png);width:26px}.no-encryption{background:url(qrc:///assets/icons/lock_off.png);width:26px}.encryption-stake{background:url(qrc:///assets/icons/lock_stake.png);width:26px}.i2p{background:url(qrc:///assets/icons/i2p.png);width:26px}.no-i2p{background:url(qrc:///assets/icons/i2p_off.png);width:26px}.tor{background:url(qrc:///assets/icons/tor.png);width:26px}.no-tor{background:url(qrc:///assets/icons/tor_off.png);width:26px}.connect-0{background:url(qrc:///assets/icons/connect_0.png);height:16px;width:26px}.connect-1{background:url(qrc:///assets/icons/connect_1.png);width:26px}.connect-2{background:url(qrc:///assets/icons/connect_2.png);width:26px}.connect-3{background:url(qrc:///assets/icons/connect_3.png);width:26px}.connect-4{background:url(qrc:///assets/icons/connect_4.png);width:26px}.connect-5{background:url(qrc:///assets/icons/connect_5.png);width:26px}.connect-6{background:url(qrc:///assets/icons/connect_6.png);width:26px}.no-syncing{background:url(qrc:///assets/icons/synced.png);width:26px}.syncing-spinner{background:url(qrc:///assets/icons/syncing.gif);width:16px}.chat-icon{background:url(qrc:///assets/icons/chat_bubble.png);width:26px}.heading-selected{margin:0;color:#313131}.heading-deselected{margin:0;color:#999}.wizardback:before{float:left}.wizardfwd{display:block;position:fixed;float:right;bottom:0;cursor:pointer;z-index:999999999999;top:430px;right:20px}.footable.breakpoint>tbody>tr>td>span.footable-toggle,.footable>thead>tr>th>span.footable-sort-indicator{display:inline-block;font-family:footable;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased}.wizardfwd:after{float:left}.green-circle{color:#19e2b4}.red-circle{color:#F51E3E}.footable{width:100%}.footable.breakpoint>tbody>tr.footable-detail-show>td{border-bottom:none}.footable.breakpoint>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e001"}.footable.breakpoint>tbody>tr:hover:not(.footable-row-detail){cursor:pointer}.footable.breakpoint>tbody>tr>td.footable-cell-detail{background:#eee;border-top:none}.footable.breakpoint>tbody>tr>td>span.footable-toggle{padding-right:5px;font-size:14px;color:#888}.footable.breakpoint>tbody>tr>td>span.footable-toggle:before{content:"\e000"}.footable.breakpoint.toggle-circle>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e005"}.footable.breakpoint.toggle-circle>tbody>tr>td>span.footable-toggle:before{content:"\e004"}.footable.breakpoint.toggle-circle-filled>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e003"}.footable.breakpoint.toggle-circle-filled>tbody>tr>td>span.footable-toggle:before{content:"\e002"}.footable.breakpoint.toggle-square>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e007"}.footable.breakpoint.toggle-square>tbody>tr>td>span.footable-toggle:before{content:"\e006"}.footable.breakpoint.toggle-square-filled>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e009"}.footable.breakpoint.toggle-square-filled>tbody>tr>td>span.footable-toggle:before{content:"\e008"}.footable.breakpoint.toggle-arrow>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e00f"}.footable.breakpoint.toggle-arrow>tbody>tr>td>span.footable-toggle:before{content:"\e011"}.footable.breakpoint.toggle-arrow-small>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e013"}.footable.breakpoint.toggle-arrow-small>tbody>tr>td>span.footable-toggle:before{content:"\e015"}.footable.breakpoint.toggle-arrow-circle>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e01b"}.footable.breakpoint.toggle-arrow-circle>tbody>tr>td>span.footable-toggle:before{content:"\e01d"}.footable.breakpoint.toggle-arrow-circle-filled>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e00b"}.footable.breakpoint.toggle-arrow-circle-filled>tbody>tr>td>span.footable-toggle:before{content:"\e00d"}.footable.breakpoint.toggle-arrow-tiny>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e01f"}.footable.breakpoint.toggle-arrow-tiny>tbody>tr>td>span.footable-toggle:before{content:"\e021"}.footable.breakpoint.toggle-arrow-alt>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e017"}.footable.breakpoint.toggle-arrow-alt>tbody>tr>td>span.footable-toggle:before{content:"\e019"}.footable.breakpoint.toggle-medium>tbody>tr>td>span.footable-toggle{font-size:18px}.footable.breakpoint.toggle-large>tbody>tr>td>span.footable-toggle{font-size:24px}.footable>thead>tr>th{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.footable>thead>tr>th.footable-sortable:hover{cursor:pointer}.footable>thead>tr>th.footable-sorted>span.footable-sort-indicator:before{content:"\e013"}.footable>thead>tr>th.footable-sorted-desc>span.footable-sort-indicator:before{content:"\e012"}.footable>thead>tr>th>span.footable-sort-indicator{padding-left:5px}.footable>thead>tr>th>span.footable-sort-indicator:before{content:"\e022"}.footable>tfoot .pagination{margin:0}.footable.no-paging .hide-if-no-paging{display:none}.footable-row-detail-inner{display:table}.footable-row-detail-row{display:table-row;line-height:1.5em}.footable-row-detail-group{display:block;line-height:2em;font-size:1.2em;font-weight:700}.footable-row-detail-name{display:table-cell;font-weight:700;padding-right:.5em}.footable-row-detail-value{display:table-cell}.footable-odd{background-color:#f7f7f7}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:18px}@font-face{font-family:footable;src:url(qrc:///assets/fonts/Footable/footable.eot);src:url(qrc:///assets/fonts/Footable/footable.eot?#iefix) format('embedded-opentype'),url(qrc:///assets/fonts/Footable/footable.woff) format('woff'),url(qrc:///assets/fonts/Footable/Footable/footable.ttf) format('truetype'),url(qrc:///assets/fonts/Footable/footable.svg#footable) format('svg');font-weight:400;font-style:normal}@media screen and (-webkit-min-device-pixel-ratio:0){@font-face{font-family:footable;src:url(qrc:///assets/fonts/Footable/footable.svg#footable) format('svg');font-weight:400;font-style:normal}}@media (max-width:700px){.padding-right-forms{margin-right:0}.chat-body .answer-add{height:152px}.hide-this-icon{display:none}}@media (max-width:600px){.trans-nar,.trans-status,.trans-type{display:none}.btn{width:100%;min-width:50px;max-width:300px;margin-top:15px}}.none{display:none!important}.radio label.form-controlring_size:before{display:none} diff --git a/src/qt/res/assets/css/spectre.min.css b/src/qt/res/assets/css/spectre.min.css new file mode 100644 index 0000000000..8d03dbe742 --- /dev/null +++ b/src/qt/res/assets/css/spectre.min.css @@ -0,0 +1 @@ +#tooltip,.center-div{text-align:center}.label,.label:empty,.transaction-overview{display:block}#transaction-info ul li .contact-info .contact-name,td{text-overflow:ellipsis;overflow:hidden}.uppercase{text-transform:uppercase}.flex-container{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap;align-content:center;margin-right:-15px}.flex-container>div:first-child{flex-grow:1}.flex-container>div{padding-right:15px}.fa.black{color:#282829}.fa.green{color:#499749}.fa.grey{color:#8a8c8e}.fa.red{color:#f84444}.fa.yellow{color:#fbaa26}.fa.lightgreen{color:#85bb0b}.fa.lightred{color:#ff4b00}.fa.orange{color:#f28321}.btn-danger>i,.btn-primary i{padding-right:.18em}span.staking{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMjMxRjIwO30KCS5zdDF7ZmlsbDojRjM5MzQ3O30KCS5zdDJ7ZmlsbDojRkZGRkZGO30KCS5zdDN7ZmlsbDojRjM4MjIwO30KCS5zdDR7b3BhY2l0eTowLjM7fQoJLnN0NXtvcGFjaXR5OjAuNTt9Cgkuc3Q2e2ZpbGw6bm9uZTt9Cgkuc3Q3e29wYWNpdHk6MC4zNjt9Cgkuc3Q4e2ZpbGw6bm9uZTtzdHJva2U6I0YzODIyMDtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cjwvc3R5bGU+CjxnPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM1LjUsOGMtNy4yLTAuMS0xMy42LDIuMy0xNC4yLDUuNWMtMC4zLDEuNSwwLjcsMi44LDIuNSwzLjlMMzUuMiw5bDguMSw4LjhjMi4zLTEsMy44LTIuMyw0LjEtMy44CgkJQzQ4LjEsMTAuOCw0Mi43LDguMSwzNS41LDh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjcuMywxOC43YzEuNywwLjUsMy43LDAuNyw1LjksMC44YzIuMSwwLDQuMi0wLjEsNi0wLjVsLTUtNS40TDI3LjMsMTguN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNi4zLDRjLTEyLjItMC4yLTIyLjksMy45LTI0LDkuM2MtMS4xLDUuNCw4LDkuOSwyMC4yLDEwLjJjMTIuMiwwLjIsMjIuOS0zLjksMjQtOS4zCgkJQzU3LjUsOC44LDQ4LjUsNC4yLDM2LjMsNHogTTMyLjgsMjEuNmMtOS44LTAuMi0xNy4xLTMuOS0xNi4yLTguMmMwLjktNC4zLDkuNS03LjcsMTkuMy03LjVTNTMsOS44LDUyLjEsMTQuMQoJCUM1MS4zLDE4LjQsNDIuNiwyMS43LDMyLjgsMjEuNnoiLz4KPC9nPgo8Zz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik00OS40LDQ0di02LjhjLTEuMSwwLjctMi4zLDEuMy0zLjYsMS45djdDNDcuMSw0NS41LDQ4LjQsNDQuOCw0OS40LDQ0eiIvPgoJPHBhdGggY2xhc3M9InN0NiIgZD0iTTQ0LDQ2Ljl2LTdjLTEuMSwwLjQtMi40LDAuOC0zLjYsMS4xVjQ4QzQxLjcsNDcuNyw0Mi45LDQ3LjMsNDQsNDYuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik01MS4xLDQyLjVjMS41LTEuNSwyLjMtMy4yLDIuMy00Ljl2LTMuOGMtMC43LDAuOC0xLjUsMS42LTIuNSwyLjNoMC4yVjQyLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNNi42LDM2LjJjLTAuOS0wLjgtMS43LTEuNi0yLjMtMi40djMuOWMwLDEuNywwLjgsMy40LDIuMyw0LjlMNi42LDM2LjJMNi42LDM2LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMzQuMiwyLjJDMjAuOSwyLjIsOS42LDcuNyw5LjYsMTQuMXMxMS4zLDExLjksMjQuNiwxMS45YzEzLjMsMCwyNC42LTUuNCwyNC42LTExLjlTNDcuNSwyLjIsMzQuMiwyLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNOC4zLDM3LjRWNDRjMSwwLjgsMi4zLDEuNSwzLjYsMi4xdi02LjhDMTAuNiwzOC43LDkuNCwzOC4xLDguMywzNy40eiIvPgoJPHBhdGggY2xhc3M9InN0NiIgZD0iTTIyLjYsNDkuMXYtN2MtMS4yLTAuMi0yLjQtMC4zLTMuNi0wLjZ2N0MyMC4yLDQ4LjcsMjEuNCw0OC45LDIyLjYsNDkuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0zOS42LDQ4LjJoLTAuOXYtNi45Yy0xLjIsMC4zLTIuNCwwLjUtMy42LDAuNmwwLDcuMUMzNi42LDQ4LjksMzguMSw0OC42LDM5LjYsNDguMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0yOCw0OS41di03LjFjLTEuMiwwLTIuNC0wLjEtMy42LTAuMnY3QzI1LjUsNDkuNCwyNi43LDQ5LjQsMjgsNDkuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0zMy4zLDQ5LjN2LTcuMWMtMS4yLDAuMS0yLjQsMC4yLTMuNiwwLjJ2Ny4xQzMwLjksNDkuNCwzMi4xLDQ5LjQsMzMuMyw0OS4zeiIvPgoJPHBhdGggY2xhc3M9InN0NiIgZD0iTTkuNiwxOXYwLjJjMCwwLDAuMSwwLDAuMSwwQzkuNywxOS4xLDkuNiwxOS4xLDkuNiwxOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0yNC4zLDI2Ljd2N2MxLjIsMC4zLDIuNSwwLjUsMy43LDAuNmwtMC4xLTdDMjYuNywyNy4yLDI1LjUsMjcsMjQuMywyNi43eiIvPgoJPHBhdGggY2xhc3M9InN0NiIgZD0iTTI5LjcsMjcuNXY3YzEuMiwwLjEsMi40LDAuMiwzLjYsMC4ydi03LjFDMzIuMSwyNy43LDMwLjksMjcuNiwyOS43LDI3LjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMTksMjUuM3Y2LjljMS4xLDAuNCwyLjMsMC44LDMuNiwxLjJ2LTdDMjEuMywyNiwyMC4xLDI1LjcsMTksMjUuM3oiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik01Ni40LDIxLjVMNTYuNCwyMS41bDAuMSw2LjNjMS41LTEuNSwyLjMtMy4yLDIuMy00LjlWMTlDNTguMSwxOS45LDU3LjMsMjAuNyw1Ni40LDIxLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMTMuNiwyMi43djYuNmMxLDAuNywyLjIsMS40LDMuNSwyLjFsMC4xLTYuOEMxNS45LDI0LDE0LjcsMjMuNCwxMy42LDIyLjd6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMTEuOSwyMS41Yy0wLjMtMC4zLTAuNi0wLjUtMC45LTAuOGMtMC41LDAuMy0xLDAuNS0xLjQsMC44djEuNGMwLDEuNywwLjgsMy40LDIuMyw0LjlMMTEuOSwyMS41TDExLjksMjEuNXoiCgkJLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik00NS44LDI2LjN2N2MxLjMtMC4zLDIuNS0wLjcsMy42LTEuMnYtNi45QzQ4LjIsMjUuNyw0NywyNiw0NS44LDI2LjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNNTEuMSwyNC42djYuOGMxLjQtMC42LDIuNi0xLjMsMy42LTIuMXYtNi42QzUzLjcsMjMuNCw1Mi40LDI0LDUxLjEsMjQuNnoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0zNS4xLDI3Ljd2Ny4xYzEuMiwwLDIuNC0wLjEsMy42LTAuMnYtN0MzNy41LDI3LjYsMzYuMywyNy43LDM1LjEsMjcuN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik00MC40LDI3LjNsLTAuMSw3YzEuMy0wLjIsMi41LTAuNCwzLjctMC42bDAtN0M0Mi45LDI3LDQxLjYsMjcuMiw0MC40LDI3LjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMTcuMyw0OHYtN2MtMS4zLTAuMy0yLjUtMC43LTMuNi0xLjF2Ni45QzE0LjgsNDcuMywxNiw0Ny43LDE3LjMsNDh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNNC4zLDI4LjhjMCw2LjQsMTEuMywxMS45LDI0LjYsMTEuOWM5LjYsMCwxOS0zLjUsMjMuMS03LjhjLTQuNywyLjItMTAuOSwzLjYtMTcuOCwzLjYKCQljLTE0LjUsMC0yNi4zLTYuMS0yNi4zLTEzLjZ2LTAuMkM1LjYsMjQuNiw0LjMsMjYuNyw0LjMsMjguOHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjcsMTkuMkM5LjcsMTkuMiw5LjYsMTkuMiw5LjcsMTkuMmwtMC4xLDIuM2MwLjQtMC4zLDAuOS0wLjYsMS40LTAuOEMxMC41LDIwLjIsMTAuMSwxOS43LDkuNywxOS4yeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQuMywyOC44YzAtMi4xLDEuMy00LjIsMy42LTYuMXYtMi41Yy0zLjQsMi4yLTUuMSw1LTUuMyw3LjloMS43VjI4Ljh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjguOCw0MC43Yy0xMy4zLDAtMjQuNi01LjQtMjQuNi0xMS45djQuOWMwLjYsMC45LDEuNCwxLjcsMi4zLDIuNGgxLjd2MS4yYzEuMSwwLjcsMi4zLDEuMywzLjYsMS45di0wLjRoMS43CgkJVjQwYzEuMSwwLjQsMi4zLDAuOCwzLjYsMS4xdi0wLjlIMTl2MS4zYzEuMiwwLjIsMi40LDAuNCwzLjYsMC42di0wLjVoMS43djAuN2MxLjIsMC4xLDIuNCwwLjIsMy42LDAuMnYtMC45aDEuN3YwLjkKCQljMS4yLDAsMi40LTAuMSwzLjYtMC4ydi0wLjZoMS43bDAsMC41YzEuMi0wLjIsMi40LTAuNCwzLjYtMC42di0xLjJoMS43VjQxYzEuMy0wLjMsMi41LTAuNywzLjYtMS4xdi0xaDEuN3YwLjMKCQljMS4zLTAuNiwyLjUtMS4yLDMuNi0xLjl2LTEuMWgxLjVjMS0wLjcsMS44LTEuNSwyLjUtMi4zdi0xLjNjLTAuMS0wLjEtMC4yLTAuMS0wLjQtMC4yYy0wLjMsMC4yLTAuNywwLjQtMS4xLDAuNQoJCUM0Ny44LDM3LjIsMzguNSw0MC43LDI4LjgsNDAuN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC44LDQ5LjVjMC4zLDAsMC42LDAsMC45LDB2LTcuMWMtMC4zLDAtMC42LDAtMC45LDBjLTAuMywwLTAuNiwwLTAuOSwwdjcuMUMyOC4zLDQ5LjUsMjguNSw0OS41LDI4LjgsNDkuNXoKCQkiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOS43LDQyLjR2LTAuOUgyOHYwLjljMC4zLDAsMC42LDAsMC45LDBDMjkuMSw0Mi40LDI5LjQsNDIuNCwyOS43LDQyLjR6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzUsNDkuMWwwLTcuMWMtMC42LDAuMS0xLjIsMC4xLTEuNywwLjJ2Ny4xQzMzLjksNDkuMiwzNC41LDQ5LjIsMzUsNDkuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNS4xLDQxLjZoLTEuN3YwLjZjMC42LTAuMSwxLjItMC4xLDEuNy0wLjJMMzUuMSw0MS42eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM5LjYsNDguMmMwLjMtMC4xLDAuNi0wLjEsMC45LTAuMlY0MWMtMC42LDAuMS0xLjIsMC4zLTEuNywwLjRsMC4xLDcuNkwzOS42LDQ4LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDAuNCw0MC4yaC0xLjd2MS4yYzAuNi0wLjEsMS4yLTAuMywxLjctMC40VjQwLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDUuOCw0Ni4xdi03Yy0wLjYsMC4yLTEuMSwwLjUtMS43LDAuN3Y3QzQ0LjYsNDYuNiw0NS4yLDQ2LjQsNDUuOCw0Ni4xeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ1LjgsMzguOUg0NHYxYzAuNi0wLjIsMS4yLTAuNSwxLjctMC43VjM4Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTEuMSw0Mi41di02LjNoLTAuMmMtMC41LDAuNC0xLDAuNy0xLjUsMS4xVjQ0QzUwLDQzLjUsNTAuNiw0Myw1MS4xLDQyLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCwzNi4ydjEuMWMwLjUtMC4zLDEuMS0wLjcsMS41LTEuMUg0OS40eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE5LDQ4LjR2LTdjLTAuNi0wLjEtMS4yLTAuMi0xLjctMC40djdDMTcuOCw0OC4yLDE4LjQsNDguMywxOSw0OC40eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE5LDQwLjJoLTEuN3YwLjljMC42LDAuMSwxLjIsMC4zLDEuNywwLjRWNDAuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yNC40LDQ5LjN2LTdjLTAuNi0wLjEtMS4yLTAuMS0xLjctMC4ydjdDMjMuMiw0OS4yLDIzLjgsNDkuMiwyNC40LDQ5LjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjQuNCw0MS42aC0xLjdWNDJjMC42LDAuMSwxLjIsMC4xLDEuNywwLjJWNDEuNnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02LjYsMzYuMkw2LjYsMzYuMmwtMC4xLDYuM0M3LDQzLDcuNiw0My41LDguMyw0NHYtNi42QzcuNywzNyw3LjEsMzYuNiw2LjYsMzYuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04LjMsMzYuMkg2LjZjMC41LDAuNCwxLjEsMC44LDEuNywxLjJWMzYuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMy42LDQwYy0wLjYtMC4yLTEuMi0wLjQtMS43LTAuN2wwLDcuM2MwLjYsMC4zLDEuMiwwLDEuOCwwLjJWNDB6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTMuNiwzOC45aC0xLjd2MC40YzAuNiwwLjIsMS4xLDAuNSwxLjcsMC43VjM4Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMjguOCw1MS4yYy0xLjEsMC0yLjEsMC0zLjEtMC4xYzIuNywwLjQsNS42LDAuNiw4LjUsMC42YzEzLjMsMCwyNC42LTUuNCwyNC42LTExLjhjMC0yLjItMS4zLTQuMy0zLjYtNi4xCgkJdjMuOUM1NS4yLDQ1LjEsNDMuNCw1MS4yLDI4LjgsNTEuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik01Ni40LDQ3LjJMNTYuNCw0Ny4ybDAuMSw2LjNjMS41LTEuNSwyLjMtMy4yLDIuMy00Ljl2LTMuOUM1OC4xLDQ1LjcsNTcuMyw0Ni41LDU2LjQsNDcuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik01MS4xLDUwLjN2Ni44YzEuNC0wLjYsMi42LTEuMywzLjYtMi4xdi02LjZDNTMuNyw0OS4xLDUyLjQsNDkuOCw1MS4xLDUwLjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNNDAuNCw1My4xbC0wLjEsN2MxLjMtMC4yLDIuNi0wLjQsMy44LTAuN2wtMC4xLTdDNDIuOSw1Mi44LDQxLjcsNTMsNDAuNCw1My4xeiIvPgoJPHBhdGggY2xhc3M9InN0NiIgZD0iTTQ1LjgsNTIuMXY3YzEuMy0wLjMsMi41LTAuNywzLjYtMS4yVjUxQzQ4LjIsNTEuNSw0Nyw1MS44LDQ1LjgsNTIuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0zNS4xLDUzLjV2Ny4xYzEuMiwwLDIuNC0wLjEsMy42LTAuMnYtN0MzNy41LDUzLjQsMzYuMyw1My40LDM1LjEsNTMuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0xOSw1MXY2LjljMS4xLDAuNCwyLjMsMC44LDMuNiwxLjJ2LTdDMjEuMyw1MS44LDIwLjEsNTEuNCwxOSw1MXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0yNC4zLDUyLjV2N2MxLjEsMC4yLDIuMiwwLjQsMy40LDAuNmwwLjItN0MyNi43LDUyLjksMjUuNSw1Mi43LDI0LjMsNTIuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0xNC44LDQ5LjFjLTAuNC0wLjEtMC44LTAuMy0xLjItMC40djYuNGMxLDAuNywyLjIsMS40LDMuNSwybDAuMS02LjhDMTYuNCw0OS45LDE1LjYsNDkuNSwxNC44LDQ5LjF6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMjkuNyw1My4zdjcuMWMxLjIsMC4xLDIuNCwwLjIsMy42LDAuMnYtNy4xQzMyLjEsNTMuNCwzMC45LDUzLjQsMjkuNyw1My4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM0LjIsNTMuNWMtMC4zLDAtMC42LDAtMC45LDB2Ny4xYzAuMywwLDAuNiwwLDAuOSwwYzAuMywwLDAuNiwwLDAuOSwwdi03LjFDMzQuOCw1My41LDM0LjUsNTMuNSwzNC4yLDUzLjV6IgoJCS8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzguNyw1My4zdjdjMC41LTAuMSwxLjEtMC4xLDEuNi0wLjJsMC4xLTdDMzkuOCw1My4yLDM5LjMsNTMuMiwzOC43LDUzLjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDQsNTIuNWwwLjEsN2MwLjYtMC4xLDEuMS0wLjMsMS43LTAuNHYtN0M0NS4yLDUyLjMsNDQuNiw1Mi40LDQ0LDUyLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCw1MXY2LjljMC42LTAuMiwxLjItMC41LDEuNy0wLjd2LTYuOEM1MC42LDUwLjYsNTAsNTAuOCw0OS40LDUxeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU2LjQsNDcuMmMtMC41LDAuNC0xLjEsMC44LTEuNywxLjJ2Ni42YzAuNy0wLjUsMS4yLTEsMS43LTEuNUw1Ni40LDQ3LjJMNTYuNCw0Ny4yeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIyLjYsNTIuMXY3YzAuNiwwLjIsMS4yLDAuMywxLjcsMC40di03QzIzLjcsNTIuNCwyMy4yLDUyLjIsMjIuNiw1Mi4xeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI3LjksNTMuMWwtMC4yLDdjMC42LDAuMSwxLjMsMC4yLDEuOSwwLjJ2LTcuMUMyOS4xLDUzLjIsMjguNSw1My4yLDI3LjksNTMuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik05LjYsNDYuOXYxLjhjMCwxLjcsMC44LDMuNCwyLjMsNC45VjQ4QzExLjEsNDcuNywxMC4zLDQ3LjMsOS42LDQ2Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTMuNiw0OC43YzAuNCwwLjEsMC44LDAuMywxLjIsMC40Yy0wLjQtMC4yLTAuOC0wLjUtMS4yLTAuN1Y0OC43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE0LjEsNDcuM2MwLjksMC42LDIsMS4xLDMuMSwxLjZWNDhjLTEuMy0wLjMtMi41LTAuNy0zLjYtMS4ydjEuNGgwdjAuMkwxNC4xLDQ3LjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjIuNiw1MC41di0xLjVjLTEuMi0wLjItMi40LTAuNC0zLjYtMC42djEuMUMyMC4xLDQ5LjksMjEuMyw1MC4zLDIyLjYsNTAuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjYsNDYuOWMwLjcsMC40LDEuNSwwLjgsMi4zLDEuMXYtMC44aDB2LTEuMWMtMS40LTAuNi0yLjYtMS4zLTMuNi0yLjF2MC4ySDYuNXYtMS43CgkJYy0xLjUtMS41LTIuMy0zLjItMi4zLTQuOXYtMy45Yy0xLjEtMS41LTEuNy0zLjItMS43LTQuOXY4LjhjMCwzLjEsMiw2LDUuNSw4LjNoMS42VjQ2Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMi41LDI4LjJ2MC43QzIuNSwyOC42LDIuNSwyOC40LDIuNSwyOC4yTDIuNSwyOC4yeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU0LjEsMzNjLTAuMiwwLjMtMC40LDAuNi0wLjYsMC44djMuOGMwLDEuNy0wLjgsMy40LTIuMyw0Ljl2MS43aC0xLjdWNDRjLTEsMC44LTIuMywxLjUtMy42LDIuMXYwLjhINDR2MAoJCWMtMS4xLDAuNC0yLjMsMC44LTMuNiwxLjJ2MC4yaC0wLjljLTEuNCwwLjMtMywwLjYtNC41LDAuOGwwLDEuMmwtMS43LDAuNnYtMS43Yy0xLjIsMC4xLTIuNCwwLjItMy42LDAuMnYxLjVIMjh2LTEuNQoJCWMtMS4yLDAtMi40LTAuMS0zLjYtMC4ydjEuNmMwLjQsMC4xLDAuOSwwLjIsMS40LDAuMmMxLDAuMSwyLjEsMC4xLDMuMSwwLjFjMTQuNSwwLDI2LjMtNi4xLDI2LjMtMTMuNnYtMy45CgkJQzU0LjgsMzMuNSw1NC40LDMzLjIsNTQuMSwzM0w1NC4xLDMzeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQuMywyOC44di0wLjdIMi41YzAsMC4yLDAsMC40LDAsMC43YzAsMS44LDAuNiwzLjQsMS43LDQuOVYyOC44eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU0LDMzYy0wLjItMC4xLTAuNC0wLjMtMC42LTAuNHYxLjNDNTMuNiwzMy42LDUzLjksMzMuMyw1NCwzM0w1NCwzM3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOCw0OS41djEuNWgxLjd2LTEuNWMtMC4zLDAtMC42LDAtMC45LDBTMjguMyw0OS41LDI4LDQ5LjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzMuMyw1MC45bDEuNy0wLjZsMC0xLjJjLTAuNiwwLjEtMS4xLDAuMS0xLjcsMC4yVjUwLjl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDAuNCw0OC4yVjQ4Yy0wLjMsMC4xLTAuNiwwLjEtMC45LDAuMkg0MC40eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ0LDQ2LjloMS43di0wLjhDNDUuMiw0Ni40LDQ0LjYsNDYuNiw0NCw0Ni45TDQ0LDQ2Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCw0NHYwLjJoMS43di0xLjdDNTAuNiw0Myw1MCw0My41LDQ5LjQsNDR6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTksNDkuNXYtMS4xYy0wLjYtMC4xLTEuMi0wLjMtMS43LTAuNHYwLjlDMTcuOCw0OS4xLDE4LjQsNDkuMywxOSw0OS41eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIyLjYsNTAuNWMwLjYsMC4xLDEuMiwwLjIsMS43LDAuM3YtMS42Yy0wLjYtMC4xLTEuMi0wLjEtMS43LTAuMlY1MC41eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTYuNSw0Mi41djEuN2gxLjdWNDRDNy42LDQzLjUsNyw0Myw2LjUsNDIuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMy42LDQ4LjJMMTMuNiw0OC4ybDAtMS40Yy0wLjYtMC4yLTEuMi0wLjUtMS43LTAuN3YxLjFoMS43VjQ4LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTMuNSwzMi4yaDEuNnYxLjZjMi4zLDEuOCwzLjYsNCwzLjYsNi4xdi0wLjdoMS43Yy0wLjMtMi45LTIuMy01LjYtNS43LTcuOUM1NC40LDMxLjYsNTMuOSwzMS45LDUzLjUsMzIuMgoJCUw1My41LDMyLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTMuNCwzMi42di0wLjRoMC4xbDAtMC4xYy0wLjEsMC4xLTAuMywwLjItMC40LDAuMkM1My4yLDMyLjQsNTMuMywzMi41LDUzLjQsMzIuNnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy43LDQ5LjljLTEtMC4yLTItMC41LTIuOS0wLjhjMC44LDAuNCwxLjYsMC44LDIuNCwxLjJsMC0wLjRIMTcuN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNC4yLDUxLjdjLTIuOSwwLTUuOC0wLjItOC41LTAuNmMtMC43LDAtMS41LTAuMS0yLjItMC4yaC0wLjl2LTAuMWMtMS4zLTAuMi0yLjUtMC40LTMuNi0wLjZWNTEKCQljMS4xLDAuNCwyLjQsMC44LDMuNiwxLjF2LTAuOGgxLjd2MS4yYzEuMiwwLjIsMi40LDAuNCwzLjYsMC42bDAtMC41aDEuN3YwLjdjMS4yLDAuMSwyLjQsMC4yLDMuNiwwLjJ2LTAuOGgxLjd2MC45CgkJYzEuMiwwLDIuNC0wLjEsMy42LTAuMnYtMC43aDEuN2wwLDAuNWMxLjMtMC4yLDIuNS0wLjMsMy42LTAuNmwwLTEuM2gxLjd2MC45YzEuMy0wLjMsMi41LTAuNywzLjYtMS4xdi0xLjFoMS43djAuNAoJCWMxLjMtMC42LDIuNS0xLjIsMy42LTEuOXYtMS4yaDEuN2MwLjktMC44LDEuNy0xLjYsMi40LTIuNHYtNC45QzU4LjgsNDYuMyw0Ny41LDUxLjcsMzQuMiw1MS43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIyLjYsNTAuOWgwLjlDMjMuMiw1MC45LDIyLjksNTAuOSwyMi42LDUwLjlMMjIuNiw1MC45eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM1LjEsNTMuNXYtMC45aC0xLjd2MC44YzAuMywwLDAuNiwwLDAuOSwwQzM0LjUsNTMuNSwzNC44LDUzLjUsMzUuMSw1My41eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQwLjQsNTIuNmgtMS43djAuN2MwLjYsMCwxLjItMC4xLDEuNy0wLjJMNDAuNCw1Mi42eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ1LjgsNTEuM0g0NGwwLDEuM2MwLjYtMC4xLDEuMi0wLjMsMS43LTAuNFY1MS4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTUxLjEsNDkuOWgtMS43VjUxYzAuNi0wLjIsMS4yLTAuNSwxLjctMC43VjQ5Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTQuNyw0Ny4ydjEuMmMwLjYtMC40LDEuMS0wLjgsMS43LTEuMkg1NC43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI0LjMsNTEuM2gtMS43djAuOGMwLjYsMC4xLDEuMiwwLjMsMS43LDAuNFY1MS4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI5LjcsNTIuNkgyOGwwLDAuNWMwLjYsMC4xLDEuMiwwLjEsMS44LDAuMlY1Mi42eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU1LjIsMzMuOHYtMS42aC0xLjZMNTQsMzNDNTQuNCwzMy4yLDU0LjgsMzMuNSw1NS4yLDMzLjh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTMuNCwzMi42YzAuMiwwLjEsMC40LDAuMywwLjYsMC40bC0wLjUtMC44aC0wLjFWMzIuNnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yMy41LDUwLjljMC43LDAuMSwxLjUsMC4yLDIuMiwwLjJjLTAuNS0wLjEtMC45LTAuMS0xLjQtMC4ydjBIMjMuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xOSw0OS41TDE5LDQ5LjVsLTEuNywwdi0wLjdjLTEuMS0wLjUtMi4yLTEtMy4xLTEuNmwtMC41LDEuMXYwYzAuNCwwLjIsMC44LDAuNSwxLjIsMC43CgkJYzAuOSwwLjMsMS45LDAuNiwyLjksMC44SDE5djAuM2MxLjIsMC4yLDIuNCwwLjUsMy42LDAuNnYtMC4zQzIxLjMsNTAuMywyMC4xLDQ5LjksMTksNDkuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy4zLDQ5LjZIMTl2MGMtMC42LTAuMi0xLjItMC40LTEuNy0wLjdWNDkuNnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yMi42LDUwLjhjMC4zLDAsMC42LDAuMSwwLjksMC4xaDAuOHYwYy0wLjYtMC4xLTEuMi0wLjItMS43LTAuM1Y1MC44eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTYwLjUsMzkuMkw2MC41LDM5LjJjMCwwLjIsMCwwLjQsMCwwLjdWMzkuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01OC44LDQ4LjdjMCwxLjctMC44LDMuNC0yLjMsNC45djEuN2gtMS43di0wLjJjLTEsMC44LTIuMywxLjUtMy42LDIuMVY1OGgtMS43djBjLTEuMSwwLjQtMi4zLDAuOC0zLjYsMS4yCgkJdjAuMmwtMS42LDAuOWwwLTAuN2MtMS4yLDAuMy0yLjUsMC41LTMuOCwwLjdsMCwwLjdMMzguNyw2MnYtMS43Yy0xLjIsMC4xLTIuNCwwLjItMy42LDAuMlY2MmgtMS43di0xLjVjLTEuMiwwLTIuNC0wLjEtMy42LTAuMgoJCVY2MmwtMi0wLjhsMC0xLjFjLTEuMi0wLjItMi4zLTAuNC0zLjQtMC42djEuMWgtMS43di0xLjZjLTEuMy0wLjMtMi41LTAuNy0zLjYtMS4ydjEuNGwtMS45LTAuOWwwLTEuM2MtMS4zLTAuNi0yLjUtMS4zLTMuNS0ydjAuMgoJCWgtMS43di0xLjdjLTEuNS0xLjUtMi4zLTMuMi0yLjMtNC45di0xLjhjLTAuNi0wLjMtMS4xLTAuNi0xLjYtMUg3Ljl2Mi44YzAsNy41LDExLjgsMTMuNiwyNi4zLDEzLjZjMTQuNSwwLDI2LjMtNi4xLDI2LjMtMTMuNgoJCXYtOC44YzAsMS44LTAuNiwzLjQtMS43LDQuOVY0OC43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTMzLjMsNjAuNVY2MmgxLjd2LTEuNWMtMC4zLDAtMC42LDAtMC45LDBDMzMuOSw2MC41LDMzLjYsNjAuNSwzMy4zLDYwLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzguNyw2MmwxLjYtMS4xbDAtMC43Yy0wLjUsMC4xLTEuMSwwLjEtMS42LDAuMlY2MnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00NC4xLDYwLjJsMS42LTAuOXYtMC4yYy0wLjUsMC4xLTEuMSwwLjMtMS43LDAuNEw0NC4xLDYwLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCw1OGgxLjd2LTAuOEM1MC42LDU3LjQsNTAsNTcuNyw0OS40LDU4TDQ5LjQsNTh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTQuNyw1NS4xdjAuMmgxLjd2LTEuN0M1Niw1NC4xLDU1LjQsNTQuNiw1NC43LDU1LjF6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjIuNiw2MC42aDEuN3YtMS4xYy0wLjYtMC4xLTEuMi0wLjMtMS43LTAuNFY2MC42eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI3LjcsNjEuMmwyLDAuOHYtMS43Yy0wLjctMC4xLTEuMy0wLjEtMS45LTAuMkwyNy43LDYxLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOS42LDQ1LjlIOGMwLjUsMC4zLDEuMSwwLjcsMS42LDFWNDUuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01OC44LDM5Ljl2NC45YzEuMS0xLjUsMS43LTMuMiwxLjctNC45YzAtMC4yLDAtMC40LDAtMC43aC0xLjdWMzkuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMi41LDQ4LjJoLTAuNlY0OGMwLDAsMCwwLDAsMHY1LjZjMC41LDAuNSwxLjEsMSwxLjcsMS41di02LjRDMTMuMiw0OC42LDEyLjgsNDguNCwxMi41LDQ4LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTEuOSw0OC4yaDAuNmMtMC4yLTAuMS0wLjQtMC4xLTAuNi0wLjJWNDguMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMS45LDQ3LjJMMTEuOSw0Ny4ybDAsMC44YzAsMCwwLDAsMCwwVjQ3LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTMuNiw0OC40TDEzLjYsNDguNGwwLTAuMmgtMS4yYzAuNCwwLjIsMC44LDAuMywxLjIsMC41TDEzLjYsNDguNEMxMy42LDQ4LjQsMTMuNiw0OC40LDEzLjYsNDguNHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMi41LDQ4LjJoMS4ydi0xaC0xLjdWNDhDMTIuMSw0OC4xLDEyLjMsNDguMiwxMi41LDQ4LjJ6Ii8+Cgk8cG9seWdvbiBjbGFzcz0ic3QzIiBwb2ludHM9IjEzLjYsNDguNCAxMy42LDQ4LjQgMTMuNiw0OC40IAkiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMS45LDU1LjNoMS43di0wLjJjLTAuNy0wLjUtMS4yLTEtMS43LTEuNVY1NS4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE3LjIsNTAuM2wtMC4xLDYuOGMwLjYsMC4zLDEuMiwwLjUsMS44LDAuOFY1MUMxOC40LDUwLjgsMTcuOCw1MC42LDE3LjIsNTAuM3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy4yLDQ5LjlsMCwwLjRjMC42LDAuMiwxLjEsMC41LDEuNywwLjd2LTAuOGMtMC40LTAuMS0wLjktMC4yLTEuMy0wLjNIMTcuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy43LDQ5LjljMC40LDAuMSwwLjksMC4yLDEuMywwLjN2LTAuM0gxNy43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE3LjEsNTguNGwxLjksMC45di0xLjRjLTAuNi0wLjItMS4zLTAuNS0xLjgtMC44TDE3LjEsNTguNHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjYsMTQuMWMwLTYuNCwxMS4zLTExLjksMjQuNi0xMS45YzEzLjMsMCwyNC42LDUuNCwyNC42LDExLjl2LTAuN2gxLjdjLTAuNy03LjMtMTItMTIuOS0yNi4zLTEyLjkKCQlDMTkuOSwwLjUsOC41LDYuMSw3LjksMTMuNGgxLjdWMTQuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNC4yLDI1LjljLTEzLjMsMC0yNC42LTUuNC0yNC42LTExLjlWMTljMCwwLDAuMSwwLjEsMC4xLDAuMWMwLjMtMC4yLDAuNi0wLjMsMS0wLjVsMS4zLDEuNQoJCWMtMC4zLDAuMi0wLjYsMC4zLTAuOSwwLjVjMC4zLDAuMywwLjYsMC41LDAuOSwwLjhoMS43djEuMmMxLjEsMC43LDIuMywxLjMsMy42LDEuOWwwLTAuNEgxOXYxLjFjMS4xLDAuNCwyLjMsMC44LDMuNiwxLjF2LTAuOQoJCWgxLjd2MS4zYzEuMiwwLjIsMi40LDAuNCwzLjYsMC42bDAtMC41aDEuN3YwLjdjMS4yLDAuMSwyLjQsMC4yLDMuNiwwLjJ2LTAuOWgxLjd2MC45YzEuMiwwLDIuNC0wLjEsMy42LTAuMnYtMC43aDEuN2wwLDAuNQoJCWMxLjItMC4yLDIuNS0wLjMsMy42LTAuNmwwLTEuM2gxLjd2MC45YzEuMy0wLjMsMi41LTAuNywzLjYtMS4xdi0xLjFoMS43djAuNGMxLjMtMC42LDIuNS0xLjIsMy42LTEuOXYtMS4yaDEuNwoJCWMwLjktMC44LDEuNy0xLjYsMi4zLTIuNHYtNC45QzU4LjgsMjAuNSw0Ny41LDI1LjksMzQuMiwyNS45eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTExLDIwLjdjMC4zLTAuMiwwLjYtMC4zLDAuOS0wLjVsLTEuMy0xLjVjLTAuMywwLjItMC42LDAuMy0xLDAuNUMxMC4xLDE5LjcsMTAuNSwyMC4yLDExLDIwLjd6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTguOCwyMi45YzAsMS43LTAuOCwzLjQtMi4zLDQuOXYxLjdoLTEuN3YtMC4yYy0xLDAuOC0yLjMsMS41LTMuNiwyLjF2MC44aC0xLjd2MGMtMS4xLDAuNC0yLjMsMC44LTMuNiwxLjIKCQl2MC4yTDQ0LDM0LjJsMC0wLjVjLTEuMiwwLjMtMi40LDAuNS0zLjcsMC42bDAsMS4ybC0xLjYsMC42di0xLjdjLTEuMiwwLjEtMi40LDAuMi0zLjYsMC4ydjEuNWgtMS43di0xLjVjLTEuMiwwLTIuNC0wLjEtMy42LTAuMgoJCXYxLjdsLTEuNi0xbDAtMC44Yy0xLjMtMC4yLTIuNS0wLjQtMy43LTAuNnYxLjFoLTEuN3YtMS42Yy0xLjMtMC4zLTIuNS0wLjctMy42LTEuMnYxLjRsLTEuOS0xbDAtMS4xYy0xLjMtMC42LTIuNS0xLjMtMy41LTIuMQoJCXYwLjJoLTEuN3YtMS43Yy0xLjUtMS41LTIuMy0zLjItMi4zLTQuOXYtMS40Yy0wLjYsMC40LTEuMiwwLjgtMS43LDEuMnYwLjJjMCw3LjUsMTEuOCwxMy42LDI2LjMsMTMuNmM2LjksMCwxMy4xLTEuNCwxNy44LTMuNgoJCWMwLjItMC4zLDAuNS0wLjUsMC43LTAuOGMtMC4xLTAuMS0wLjItMC4xLTAuMy0wLjJsMC44LTEuNWMwLjYsMC4zLDEuMSwwLjYsMS42LDAuOWMzLjYtMi4zLDUuNy01LjMsNS43LTguNXYtOC44CgkJYzAsMS44LTAuNiwzLjQtMS43LDQuOVYyMi45eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTYwLjUsMTMuNGMwLDAuMiwwLDAuNCwwLDAuN0w2MC41LDEzLjRMNjAuNSwxMy40eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTcuOSwxMy40djAuN0M3LjksMTMuOSw3LjksMTMuNiw3LjksMTMuNEw3LjksMTMuNHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjYsMTljLTEuMS0xLjUtMS43LTMuMi0xLjctNC45djYuMmMwLjUtMC40LDEuMS0wLjcsMS43LTFWMTl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTIuNywzMi4xYy0wLjIsMC4zLTAuNCwwLjUtMC43LDAuOGMwLjQtMC4yLDAuNy0wLjQsMS4xLTAuNUM1Mi45LDMyLjMsNTIuOCwzMi4yLDUyLjcsMzIuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjYsMjEuNXYtMi4zYy0wLjYsMC4zLTEuMiwwLjctMS43LDF2Mi41QzguNCwyMi4zLDksMjEuOSw5LjYsMjEuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01Mi4zLDMxLjljMC4xLDAuMSwwLjIsMC4xLDAuMywwLjJjMC4yLTAuMiwwLjMtMC40LDAuNS0wLjZsMC40LDAuNmMwLjQtMC4yLDAuOS0wLjUsMS4zLTAuOAoJCWMtMC41LTAuMy0xLTAuNi0xLjYtMC45TDUyLjMsMzEuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01My41LDMyLjFsLTAuNC0wLjZjLTAuMSwwLjItMC4zLDAuNC0wLjUsMC42YzAuMSwwLjEsMC4zLDAuMiwwLjQsMC4yQzUzLjIsMzIuMyw1My4zLDMyLjIsNTMuNSwzMi4xeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU4LjgsMTMuNHYwLjdWMTljMS4xLTEuNSwxLjctMy4yLDEuNy00LjljMC0wLjIsMC0wLjQsMC0wLjdINTguOHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjYsMTQuMXYtMC43SDcuOWMwLDAuMiwwLDAuNCwwLDAuN2MwLDEuOCwwLjYsMy40LDEuNyw0LjlWMTQuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNC4yLDI3LjdjLTAuMywwLTAuNiwwLTAuOSwwdjcuMWMwLjMsMCwwLjYsMCwwLjksMHMwLjYsMCwwLjksMHYtNy4xQzM0LjgsMjcuNywzNC41LDI3LjcsMzQuMiwyNy43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM1LjEsMjcuN3YtMC45aC0xLjd2MC45YzAuMywwLDAuNiwwLDAuOSwwQzM0LjUsMjcuNywzNC44LDI3LjcsMzUuMSwyNy43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTMzLjMsMzQuN3YxLjVoMS43di0xLjVjLTAuMywwLTAuNiwwLTAuOSwwUzMzLjYsMzQuNywzMy4zLDM0Ljd6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzguNywyNy41djdjMC41LTAuMSwxLjEtMC4xLDEuNi0wLjJsMC4xLTdDMzkuOCwyNy40LDM5LjMsMjcuNCwzOC43LDI3LjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDAuNCwyNi44aC0xLjd2MC43YzAuNi0wLjEsMS4yLTAuMSwxLjctMC4yTDQwLjQsMjYuOHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zOC43LDM2LjJsMS42LTAuNmwwLTEuMmMtMC41LDAuMS0xLjEsMC4xLTEuNiwwLjJWMzYuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00NCwyNi43bDAsN2MwLjYtMC4xLDEuMi0wLjMsMS43LTAuNHYtN0M0NS4yLDI2LjUsNDQuNiwyNi42LDQ0LDI2Ljd6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDUuOCwyNS41SDQ0bDAsMS4zYzAuNi0wLjEsMS4yLTAuMiwxLjctMC40VjI1LjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDQsMzQuMmwxLjctMC43di0wLjJjLTAuNiwwLjItMS4xLDAuMy0xLjcsMC40TDQ0LDM0LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCwyNS4zdjYuOWMwLjYtMC4yLDEuMi0wLjUsMS43LTAuN3YtNi44QzUwLjYsMjQuOCw1MCwyNSw0OS40LDI1LjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTEuMSwyNC4xaC0xLjd2MS4xYzAuNi0wLjIsMS4yLTAuNCwxLjctMC43VjI0LjF6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCwzMi4yaDEuN3YtMC44QzUwLjYsMzEuNyw1MCwzMS45LDQ5LjQsMzIuMkw0OS40LDMyLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTYuNCwyMS41Yy0wLjUsMC40LTEuMSwwLjgtMS43LDEuMnY2LjZjMC43LTAuNSwxLjItMSwxLjctMS41TDU2LjQsMjEuNUw1Ni40LDIxLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTQuNywyMS41djEuMmMwLjYtMC40LDEuMi0wLjgsMS43LTEuMkg1NC43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU0LjcsMjkuM3YwLjJoMS43di0xLjdDNTYsMjguMyw1NS40LDI4LjgsNTQuNywyOS4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIyLjYsMjYuM3Y3YzAuNiwwLjIsMS4yLDAuMywxLjcsMC40di03QzIzLjcsMjYuNiwyMy4yLDI2LjUsMjIuNiwyNi4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI0LjMsMjUuNWgtMS43djAuOWMwLjYsMC4xLDEuMiwwLjMsMS43LDAuNFYyNS41eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIyLjYsMzQuOWgxLjd2LTEuMWMtMC42LTAuMS0xLjItMC4zLTEuNy0wLjRWMzQuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOCwyNy4zbDAuMSw3YzAuNSwwLjEsMS4xLDAuMSwxLjYsMC4ydi03QzI5LjEsMjcuNCwyOC41LDI3LjQsMjgsMjcuM3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOS43LDI2LjhIMjhsMCwwLjVjMC42LDAuMSwxLjEsMC4xLDEuNywwLjJWMjYuOHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC4xLDM1LjJsMS42LDF2LTEuN2MtMC41LTAuMS0xLjEtMC4xLTEuNi0wLjJMMjguMSwzNS4yeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTExLjksMjEuNUwxMS45LDIxLjVsLTAuMSw2LjNjMC41LDAuNSwxLjEsMSwxLjcsMS41di02LjZDMTMsMjIuMywxMi41LDIxLjksMTEuOSwyMS41eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEzLjYsMjEuNWgtMS43YzAuNSwwLjQsMS4xLDAuOCwxLjcsMS4yVjIxLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTEuOSwyNy44djEuN2gxLjd2LTAuMkMxMywyOC44LDEyLjQsMjguMywxMS45LDI3Ljh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTcuMiwyNC42bC0wLjEsNi44YzAuNiwwLjMsMS4yLDAuNSwxLjgsMC44di02LjlDMTguNCwyNSwxNy44LDI0LjgsMTcuMiwyNC42eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE5LDI0LjFoLTEuN2wwLDAuNGMwLjYsMC4yLDEuMSwwLjUsMS43LDAuN1YyNC4xeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE3LjEsMzIuNWwxLjksMXYtMS40Yy0wLjYtMC4yLTEuMy0wLjUtMS44LTAuOEwxNy4xLDMyLjV6Ii8+CjwvZz4KPC9zdmc+Cg==)}span.not-staking{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMjMxRjIwO30KCS5zdDF7ZmlsbDojRjM5MzQ3O30KCS5zdDJ7ZmlsbDojRkZGRkZGO30KCS5zdDN7ZmlsbDojRjM4MjIwO30KCS5zdDR7b3BhY2l0eTowLjM7fQoJLnN0NXtvcGFjaXR5OjAuNTt9Cgkuc3Q2e2ZpbGw6bm9uZTt9Cgkuc3Q3e29wYWNpdHk6MC4zNjt9Cgkuc3Q4e2ZpbGw6bm9uZTtzdHJva2U6I0YzODIyMDtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cjwvc3R5bGU+CjxnIGNsYXNzPSJzdDUiPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM1LjUsOGMtNy4yLTAuMS0xMy42LDIuMy0xNC4yLDUuNWMtMC4zLDEuNSwwLjcsMi44LDIuNSwzLjlMMzUuMiw5bDguMSw4LjhjMi4zLTEsMy44LTIuMyw0LjEtMy44CgkJQzQ4LjEsMTAuOCw0Mi43LDguMSwzNS41LDh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjcuMywxOC43YzEuNywwLjUsMy43LDAuNyw1LjksMC44YzIuMSwwLDQuMi0wLjEsNi0wLjVsLTUtNS40TDI3LjMsMTguN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNi4zLDRjLTEyLjItMC4yLTIyLjksMy45LTI0LDkuM2MtMS4xLDUuNCw4LDkuOSwyMC4yLDEwLjJjMTIuMiwwLjIsMjIuOS0zLjksMjQtOS4zCgkJQzU3LjUsOC44LDQ4LjUsNC4yLDM2LjMsNHogTTMyLjgsMjEuNmMtOS44LTAuMi0xNy4xLTMuOS0xNi4yLTguMmMwLjktNC4zLDkuNS03LjcsMTkuMy03LjVTNTMsOS44LDUyLjEsMTQuMQoJCUM1MS4zLDE4LjQsNDIuNiwyMS43LDMyLjgsMjEuNnoiLz4KPC9nPgo8ZyBjbGFzcz0ic3Q1Ij4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik00OS40LDQ0di02LjhjLTEuMSwwLjctMi4zLDEuMy0zLjYsMS45djdDNDcuMSw0NS41LDQ4LjQsNDQuOCw0OS40LDQ0eiIvPgoJPHBhdGggY2xhc3M9InN0NiIgZD0iTTQ0LDQ2Ljl2LTdjLTEuMSwwLjQtMi40LDAuOC0zLjYsMS4xVjQ4QzQxLjcsNDcuNyw0Mi45LDQ3LjMsNDQsNDYuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik01MS4xLDQyLjVjMS41LTEuNSwyLjMtMy4yLDIuMy00Ljl2LTMuOGMtMC43LDAuOC0xLjUsMS42LTIuNSwyLjNoMC4yVjQyLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNNi42LDM2LjJjLTAuOS0wLjgtMS43LTEuNi0yLjMtMi40djMuOWMwLDEuNywwLjgsMy40LDIuMyw0LjlMNi42LDM2LjJMNi42LDM2LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMzQuMiwyLjJDMjAuOSwyLjIsOS42LDcuNyw5LjYsMTQuMXMxMS4zLDExLjksMjQuNiwxMS45YzEzLjMsMCwyNC42LTUuNCwyNC42LTExLjlTNDcuNSwyLjIsMzQuMiwyLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNOC4zLDM3LjRWNDRjMSwwLjgsMi4zLDEuNSwzLjYsMi4xdi02LjhDMTAuNiwzOC43LDkuNCwzOC4xLDguMywzNy40eiIvPgoJPHBhdGggY2xhc3M9InN0NiIgZD0iTTIyLjYsNDkuMXYtN2MtMS4yLTAuMi0yLjQtMC4zLTMuNi0wLjZ2N0MyMC4yLDQ4LjcsMjEuNCw0OC45LDIyLjYsNDkuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0zOS42LDQ4LjJoLTAuOXYtNi45Yy0xLjIsMC4zLTIuNCwwLjUtMy42LDAuNmwwLDcuMUMzNi42LDQ4LjksMzguMSw0OC42LDM5LjYsNDguMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0yOCw0OS41di03LjFjLTEuMiwwLTIuNC0wLjEtMy42LTAuMnY3QzI1LjUsNDkuNCwyNi43LDQ5LjQsMjgsNDkuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0zMy4zLDQ5LjN2LTcuMWMtMS4yLDAuMS0yLjQsMC4yLTMuNiwwLjJ2Ny4xQzMwLjksNDkuNCwzMi4xLDQ5LjQsMzMuMyw0OS4zeiIvPgoJPHBhdGggY2xhc3M9InN0NiIgZD0iTTkuNiwxOXYwLjJjMCwwLDAuMSwwLDAuMSwwQzkuNywxOS4xLDkuNiwxOS4xLDkuNiwxOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0yNC4zLDI2Ljd2N2MxLjIsMC4zLDIuNSwwLjUsMy43LDAuNmwtMC4xLTdDMjYuNywyNy4yLDI1LjUsMjcsMjQuMywyNi43eiIvPgoJPHBhdGggY2xhc3M9InN0NiIgZD0iTTI5LjcsMjcuNXY3YzEuMiwwLjEsMi40LDAuMiwzLjYsMC4ydi03LjFDMzIuMSwyNy43LDMwLjksMjcuNiwyOS43LDI3LjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMTksMjUuM3Y2LjljMS4xLDAuNCwyLjMsMC44LDMuNiwxLjJ2LTdDMjEuMywyNiwyMC4xLDI1LjcsMTksMjUuM3oiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik01Ni40LDIxLjVMNTYuNCwyMS41bDAuMSw2LjNjMS41LTEuNSwyLjMtMy4yLDIuMy00LjlWMTlDNTguMSwxOS45LDU3LjMsMjAuNyw1Ni40LDIxLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMTMuNiwyMi43djYuNmMxLDAuNywyLjIsMS40LDMuNSwyLjFsMC4xLTYuOEMxNS45LDI0LDE0LjcsMjMuNCwxMy42LDIyLjd6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMTEuOSwyMS41Yy0wLjMtMC4zLTAuNi0wLjUtMC45LTAuOGMtMC41LDAuMy0xLDAuNS0xLjQsMC44djEuNGMwLDEuNywwLjgsMy40LDIuMyw0LjlMMTEuOSwyMS41TDExLjksMjEuNXoiCgkJLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik00NS44LDI2LjN2N2MxLjMtMC4zLDIuNS0wLjcsMy42LTEuMnYtNi45QzQ4LjIsMjUuNyw0NywyNiw0NS44LDI2LjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNNTEuMSwyNC42djYuOGMxLjQtMC42LDIuNi0xLjMsMy42LTIuMXYtNi42QzUzLjcsMjMuNCw1Mi40LDI0LDUxLjEsMjQuNnoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0zNS4xLDI3Ljd2Ny4xYzEuMiwwLDIuNC0wLjEsMy42LTAuMnYtN0MzNy41LDI3LjYsMzYuMywyNy43LDM1LjEsMjcuN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik00MC40LDI3LjNsLTAuMSw3YzEuMy0wLjIsMi41LTAuNCwzLjctMC42bDAtN0M0Mi45LDI3LDQxLjYsMjcuMiw0MC40LDI3LjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMTcuMyw0OHYtN2MtMS4zLTAuMy0yLjUtMC43LTMuNi0xLjF2Ni45QzE0LjgsNDcuMywxNiw0Ny43LDE3LjMsNDh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNNC4zLDI4LjhjMCw2LjQsMTEuMywxMS45LDI0LjYsMTEuOWM5LjYsMCwxOS0zLjUsMjMuMS03LjhjLTQuNywyLjItMTAuOSwzLjYtMTcuOCwzLjYKCQljLTE0LjUsMC0yNi4zLTYuMS0yNi4zLTEzLjZ2LTAuMkM1LjYsMjQuNiw0LjMsMjYuNyw0LjMsMjguOHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjcsMTkuMkM5LjcsMTkuMiw5LjYsMTkuMiw5LjcsMTkuMmwtMC4xLDIuM2MwLjQtMC4zLDAuOS0wLjYsMS40LTAuOEMxMC41LDIwLjIsMTAuMSwxOS43LDkuNywxOS4yeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQuMywyOC44YzAtMi4xLDEuMy00LjIsMy42LTYuMXYtMi41Yy0zLjQsMi4yLTUuMSw1LTUuMyw3LjloMS43VjI4Ljh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjguOCw0MC43Yy0xMy4zLDAtMjQuNi01LjQtMjQuNi0xMS45djQuOWMwLjYsMC45LDEuNCwxLjcsMi4zLDIuNGgxLjd2MS4yYzEuMSwwLjcsMi4zLDEuMywzLjYsMS45di0wLjRoMS43CgkJVjQwYzEuMSwwLjQsMi4zLDAuOCwzLjYsMS4xdi0wLjlIMTl2MS4zYzEuMiwwLjIsMi40LDAuNCwzLjYsMC42di0wLjVoMS43djAuN2MxLjIsMC4xLDIuNCwwLjIsMy42LDAuMnYtMC45aDEuN3YwLjkKCQljMS4yLDAsMi40LTAuMSwzLjYtMC4ydi0wLjZoMS43bDAsMC41YzEuMi0wLjIsMi40LTAuNCwzLjYtMC42di0xLjJoMS43VjQxYzEuMy0wLjMsMi41LTAuNywzLjYtMS4xdi0xaDEuN3YwLjMKCQljMS4zLTAuNiwyLjUtMS4yLDMuNi0xLjl2LTEuMWgxLjVjMS0wLjcsMS44LTEuNSwyLjUtMi4zdi0xLjNjLTAuMS0wLjEtMC4yLTAuMS0wLjQtMC4yYy0wLjMsMC4yLTAuNywwLjQtMS4xLDAuNQoJCUM0Ny44LDM3LjIsMzguNSw0MC43LDI4LjgsNDAuN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC44LDQ5LjVjMC4zLDAsMC42LDAsMC45LDB2LTcuMWMtMC4zLDAtMC42LDAtMC45LDBjLTAuMywwLTAuNiwwLTAuOSwwdjcuMUMyOC4zLDQ5LjUsMjguNSw0OS41LDI4LjgsNDkuNXoKCQkiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOS43LDQyLjR2LTAuOUgyOHYwLjljMC4zLDAsMC42LDAsMC45LDBDMjkuMSw0Mi40LDI5LjQsNDIuNCwyOS43LDQyLjR6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzUsNDkuMWwwLTcuMWMtMC42LDAuMS0xLjIsMC4xLTEuNywwLjJ2Ny4xQzMzLjksNDkuMiwzNC41LDQ5LjIsMzUsNDkuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNS4xLDQxLjZoLTEuN3YwLjZjMC42LTAuMSwxLjItMC4xLDEuNy0wLjJMMzUuMSw0MS42eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM5LjYsNDguMmMwLjMtMC4xLDAuNi0wLjEsMC45LTAuMlY0MWMtMC42LDAuMS0xLjIsMC4zLTEuNywwLjRsMC4xLDcuNkwzOS42LDQ4LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDAuNCw0MC4yaC0xLjd2MS4yYzAuNi0wLjEsMS4yLTAuMywxLjctMC40VjQwLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDUuOCw0Ni4xdi03Yy0wLjYsMC4yLTEuMSwwLjUtMS43LDAuN3Y3QzQ0LjYsNDYuNiw0NS4yLDQ2LjQsNDUuOCw0Ni4xeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ1LjgsMzguOUg0NHYxYzAuNi0wLjIsMS4yLTAuNSwxLjctMC43VjM4Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTEuMSw0Mi41di02LjNoLTAuMmMtMC41LDAuNC0xLDAuNy0xLjUsMS4xVjQ0QzUwLDQzLjUsNTAuNiw0Myw1MS4xLDQyLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCwzNi4ydjEuMWMwLjUtMC4zLDEuMS0wLjcsMS41LTEuMUg0OS40eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE5LDQ4LjR2LTdjLTAuNi0wLjEtMS4yLTAuMi0xLjctMC40djdDMTcuOCw0OC4yLDE4LjQsNDguMywxOSw0OC40eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE5LDQwLjJoLTEuN3YwLjljMC42LDAuMSwxLjIsMC4zLDEuNywwLjRWNDAuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yNC40LDQ5LjN2LTdjLTAuNi0wLjEtMS4yLTAuMS0xLjctMC4ydjdDMjMuMiw0OS4yLDIzLjgsNDkuMiwyNC40LDQ5LjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjQuNCw0MS42aC0xLjdWNDJjMC42LDAuMSwxLjIsMC4xLDEuNywwLjJWNDEuNnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02LjYsMzYuMkw2LjYsMzYuMmwtMC4xLDYuM0M3LDQzLDcuNiw0My41LDguMyw0NHYtNi42QzcuNywzNyw3LjEsMzYuNiw2LjYsMzYuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04LjMsMzYuMkg2LjZjMC41LDAuNCwxLjEsMC44LDEuNywxLjJWMzYuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMy42LDQwYy0wLjYtMC4yLTEuMi0wLjQtMS43LTAuN2wwLDcuM2MwLjYsMC4zLDEuMiwwLDEuOCwwLjJWNDB6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTMuNiwzOC45aC0xLjd2MC40YzAuNiwwLjIsMS4xLDAuNSwxLjcsMC43VjM4Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMjguOCw1MS4yYy0xLjEsMC0yLjEsMC0zLjEtMC4xYzIuNywwLjQsNS42LDAuNiw4LjUsMC42YzEzLjMsMCwyNC42LTUuNCwyNC42LTExLjhjMC0yLjItMS4zLTQuMy0zLjYtNi4xCgkJdjMuOUM1NS4yLDQ1LjEsNDMuNCw1MS4yLDI4LjgsNTEuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik01Ni40LDQ3LjJMNTYuNCw0Ny4ybDAuMSw2LjNjMS41LTEuNSwyLjMtMy4yLDIuMy00Ljl2LTMuOUM1OC4xLDQ1LjcsNTcuMyw0Ni41LDU2LjQsNDcuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik01MS4xLDUwLjN2Ni44YzEuNC0wLjYsMi42LTEuMywzLjYtMi4xdi02LjZDNTMuNyw0OS4xLDUyLjQsNDkuOCw1MS4xLDUwLjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNNDAuNCw1My4xbC0wLjEsN2MxLjMtMC4yLDIuNi0wLjQsMy44LTAuN2wtMC4xLTdDNDIuOSw1Mi44LDQxLjcsNTMsNDAuNCw1My4xeiIvPgoJPHBhdGggY2xhc3M9InN0NiIgZD0iTTQ1LjgsNTIuMXY3YzEuMy0wLjMsMi41LTAuNywzLjYtMS4yVjUxQzQ4LjIsNTEuNSw0Nyw1MS44LDQ1LjgsNTIuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0zNS4xLDUzLjV2Ny4xYzEuMiwwLDIuNC0wLjEsMy42LTAuMnYtN0MzNy41LDUzLjQsMzYuMyw1My40LDM1LjEsNTMuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0xOSw1MXY2LjljMS4xLDAuNCwyLjMsMC44LDMuNiwxLjJ2LTdDMjEuMyw1MS44LDIwLjEsNTEuNCwxOSw1MXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0yNC4zLDUyLjV2N2MxLjEsMC4yLDIuMiwwLjQsMy40LDAuNmwwLjItN0MyNi43LDUyLjksMjUuNSw1Mi43LDI0LjMsNTIuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik0xNC44LDQ5LjFjLTAuNC0wLjEtMC44LTAuMy0xLjItMC40djYuNGMxLDAuNywyLjIsMS40LDMuNSwybDAuMS02LjhDMTYuNCw0OS45LDE1LjYsNDkuNSwxNC44LDQ5LjF6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMjkuNyw1My4zdjcuMWMxLjIsMC4xLDIuNCwwLjIsMy42LDAuMnYtNy4xQzMyLjEsNTMuNCwzMC45LDUzLjQsMjkuNyw1My4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM0LjIsNTMuNWMtMC4zLDAtMC42LDAtMC45LDB2Ny4xYzAuMywwLDAuNiwwLDAuOSwwYzAuMywwLDAuNiwwLDAuOSwwdi03LjFDMzQuOCw1My41LDM0LjUsNTMuNSwzNC4yLDUzLjV6IgoJCS8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzguNyw1My4zdjdjMC41LTAuMSwxLjEtMC4xLDEuNi0wLjJsMC4xLTdDMzkuOCw1My4yLDM5LjMsNTMuMiwzOC43LDUzLjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDQsNTIuNWwwLjEsN2MwLjYtMC4xLDEuMS0wLjMsMS43LTAuNHYtN0M0NS4yLDUyLjMsNDQuNiw1Mi40LDQ0LDUyLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCw1MXY2LjljMC42LTAuMiwxLjItMC41LDEuNy0wLjd2LTYuOEM1MC42LDUwLjYsNTAsNTAuOCw0OS40LDUxeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU2LjQsNDcuMmMtMC41LDAuNC0xLjEsMC44LTEuNywxLjJ2Ni42YzAuNy0wLjUsMS4yLTEsMS43LTEuNUw1Ni40LDQ3LjJMNTYuNCw0Ny4yeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIyLjYsNTIuMXY3YzAuNiwwLjIsMS4yLDAuMywxLjcsMC40di03QzIzLjcsNTIuNCwyMy4yLDUyLjIsMjIuNiw1Mi4xeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI3LjksNTMuMWwtMC4yLDdjMC42LDAuMSwxLjMsMC4yLDEuOSwwLjJ2LTcuMUMyOS4xLDUzLjIsMjguNSw1My4yLDI3LjksNTMuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik05LjYsNDYuOXYxLjhjMCwxLjcsMC44LDMuNCwyLjMsNC45VjQ4QzExLjEsNDcuNywxMC4zLDQ3LjMsOS42LDQ2Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTMuNiw0OC43YzAuNCwwLjEsMC44LDAuMywxLjIsMC40Yy0wLjQtMC4yLTAuOC0wLjUtMS4yLTAuN1Y0OC43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE0LjEsNDcuM2MwLjksMC42LDIsMS4xLDMuMSwxLjZWNDhjLTEuMy0wLjMtMi41LTAuNy0zLjYtMS4ydjEuNGgwdjAuMkwxNC4xLDQ3LjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjIuNiw1MC41di0xLjVjLTEuMi0wLjItMi40LTAuNC0zLjYtMC42djEuMUMyMC4xLDQ5LjksMjEuMyw1MC4zLDIyLjYsNTAuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjYsNDYuOWMwLjcsMC40LDEuNSwwLjgsMi4zLDEuMXYtMC44aDB2LTEuMWMtMS40LTAuNi0yLjYtMS4zLTMuNi0yLjF2MC4ySDYuNXYtMS43CgkJYy0xLjUtMS41LTIuMy0zLjItMi4zLTQuOXYtMy45Yy0xLjEtMS41LTEuNy0zLjItMS43LTQuOXY4LjhjMCwzLjEsMiw2LDUuNSw4LjNoMS42VjQ2Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMi41LDI4LjJ2MC43QzIuNSwyOC42LDIuNSwyOC40LDIuNSwyOC4yTDIuNSwyOC4yeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU0LjEsMzNjLTAuMiwwLjMtMC40LDAuNi0wLjYsMC44djMuOGMwLDEuNy0wLjgsMy40LTIuMyw0Ljl2MS43aC0xLjdWNDRjLTEsMC44LTIuMywxLjUtMy42LDIuMXYwLjhINDR2MAoJCWMtMS4xLDAuNC0yLjMsMC44LTMuNiwxLjJ2MC4yaC0wLjljLTEuNCwwLjMtMywwLjYtNC41LDAuOGwwLDEuMmwtMS43LDAuNnYtMS43Yy0xLjIsMC4xLTIuNCwwLjItMy42LDAuMnYxLjVIMjh2LTEuNQoJCWMtMS4yLDAtMi40LTAuMS0zLjYtMC4ydjEuNmMwLjQsMC4xLDAuOSwwLjIsMS40LDAuMmMxLDAuMSwyLjEsMC4xLDMuMSwwLjFjMTQuNSwwLDI2LjMtNi4xLDI2LjMtMTMuNnYtMy45CgkJQzU0LjgsMzMuNSw1NC40LDMzLjIsNTQuMSwzM0w1NC4xLDMzeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQuMywyOC44di0wLjdIMi41YzAsMC4yLDAsMC40LDAsMC43YzAsMS44LDAuNiwzLjQsMS43LDQuOVYyOC44eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU0LDMzYy0wLjItMC4xLTAuNC0wLjMtMC42LTAuNHYxLjNDNTMuNiwzMy42LDUzLjksMzMuMyw1NCwzM0w1NCwzM3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOCw0OS41djEuNWgxLjd2LTEuNWMtMC4zLDAtMC42LDAtMC45LDBTMjguMyw0OS41LDI4LDQ5LjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzMuMyw1MC45bDEuNy0wLjZsMC0xLjJjLTAuNiwwLjEtMS4xLDAuMS0xLjcsMC4yVjUwLjl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDAuNCw0OC4yVjQ4Yy0wLjMsMC4xLTAuNiwwLjEtMC45LDAuMkg0MC40eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ0LDQ2LjloMS43di0wLjhDNDUuMiw0Ni40LDQ0LjYsNDYuNiw0NCw0Ni45TDQ0LDQ2Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCw0NHYwLjJoMS43di0xLjdDNTAuNiw0Myw1MCw0My41LDQ5LjQsNDR6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTksNDkuNXYtMS4xYy0wLjYtMC4xLTEuMi0wLjMtMS43LTAuNHYwLjlDMTcuOCw0OS4xLDE4LjQsNDkuMywxOSw0OS41eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIyLjYsNTAuNWMwLjYsMC4xLDEuMiwwLjIsMS43LDAuM3YtMS42Yy0wLjYtMC4xLTEuMi0wLjEtMS43LTAuMlY1MC41eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTYuNSw0Mi41djEuN2gxLjdWNDRDNy42LDQzLjUsNyw0Myw2LjUsNDIuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMy42LDQ4LjJMMTMuNiw0OC4ybDAtMS40Yy0wLjYtMC4yLTEuMi0wLjUtMS43LTAuN3YxLjFoMS43VjQ4LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTMuNSwzMi4yaDEuNnYxLjZjMi4zLDEuOCwzLjYsNCwzLjYsNi4xdi0wLjdoMS43Yy0wLjMtMi45LTIuMy01LjYtNS43LTcuOUM1NC40LDMxLjYsNTMuOSwzMS45LDUzLjUsMzIuMgoJCUw1My41LDMyLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTMuNCwzMi42di0wLjRoMC4xbDAtMC4xYy0wLjEsMC4xLTAuMywwLjItMC40LDAuMkM1My4yLDMyLjQsNTMuMywzMi41LDUzLjQsMzIuNnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy43LDQ5LjljLTEtMC4yLTItMC41LTIuOS0wLjhjMC44LDAuNCwxLjYsMC44LDIuNCwxLjJsMC0wLjRIMTcuN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNC4yLDUxLjdjLTIuOSwwLTUuOC0wLjItOC41LTAuNmMtMC43LDAtMS41LTAuMS0yLjItMC4yaC0wLjl2LTAuMWMtMS4zLTAuMi0yLjUtMC40LTMuNi0wLjZWNTEKCQljMS4xLDAuNCwyLjQsMC44LDMuNiwxLjF2LTAuOGgxLjd2MS4yYzEuMiwwLjIsMi40LDAuNCwzLjYsMC42bDAtMC41aDEuN3YwLjdjMS4yLDAuMSwyLjQsMC4yLDMuNiwwLjJ2LTAuOGgxLjd2MC45CgkJYzEuMiwwLDIuNC0wLjEsMy42LTAuMnYtMC43aDEuN2wwLDAuNWMxLjMtMC4yLDIuNS0wLjMsMy42LTAuNmwwLTEuM2gxLjd2MC45YzEuMy0wLjMsMi41LTAuNywzLjYtMS4xdi0xLjFoMS43djAuNAoJCWMxLjMtMC42LDIuNS0xLjIsMy42LTEuOXYtMS4yaDEuN2MwLjktMC44LDEuNy0xLjYsMi40LTIuNHYtNC45QzU4LjgsNDYuMyw0Ny41LDUxLjcsMzQuMiw1MS43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIyLjYsNTAuOWgwLjlDMjMuMiw1MC45LDIyLjksNTAuOSwyMi42LDUwLjlMMjIuNiw1MC45eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM1LjEsNTMuNXYtMC45aC0xLjd2MC44YzAuMywwLDAuNiwwLDAuOSwwQzM0LjUsNTMuNSwzNC44LDUzLjUsMzUuMSw1My41eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQwLjQsNTIuNmgtMS43djAuN2MwLjYsMCwxLjItMC4xLDEuNy0wLjJMNDAuNCw1Mi42eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ1LjgsNTEuM0g0NGwwLDEuM2MwLjYtMC4xLDEuMi0wLjMsMS43LTAuNFY1MS4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTUxLjEsNDkuOWgtMS43VjUxYzAuNi0wLjIsMS4yLTAuNSwxLjctMC43VjQ5Ljl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTQuNyw0Ny4ydjEuMmMwLjYtMC40LDEuMS0wLjgsMS43LTEuMkg1NC43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI0LjMsNTEuM2gtMS43djAuOGMwLjYsMC4xLDEuMiwwLjMsMS43LDAuNFY1MS4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI5LjcsNTIuNkgyOGwwLDAuNWMwLjYsMC4xLDEuMiwwLjEsMS44LDAuMlY1Mi42eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU1LjIsMzMuOHYtMS42aC0xLjZMNTQsMzNDNTQuNCwzMy4yLDU0LjgsMzMuNSw1NS4yLDMzLjh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTMuNCwzMi42YzAuMiwwLjEsMC40LDAuMywwLjYsMC40bC0wLjUtMC44aC0wLjFWMzIuNnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yMy41LDUwLjljMC43LDAuMSwxLjUsMC4yLDIuMiwwLjJjLTAuNS0wLjEtMC45LTAuMS0xLjQtMC4ydjBIMjMuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xOSw0OS41TDE5LDQ5LjVsLTEuNywwdi0wLjdjLTEuMS0wLjUtMi4yLTEtMy4xLTEuNmwtMC41LDEuMXYwYzAuNCwwLjIsMC44LDAuNSwxLjIsMC43CgkJYzAuOSwwLjMsMS45LDAuNiwyLjksMC44SDE5djAuM2MxLjIsMC4yLDIuNCwwLjUsMy42LDAuNnYtMC4zQzIxLjMsNTAuMywyMC4xLDQ5LjksMTksNDkuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy4zLDQ5LjZIMTl2MGMtMC42LTAuMi0xLjItMC40LTEuNy0wLjdWNDkuNnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yMi42LDUwLjhjMC4zLDAsMC42LDAuMSwwLjksMC4xaDAuOHYwYy0wLjYtMC4xLTEuMi0wLjItMS43LTAuM1Y1MC44eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTYwLjUsMzkuMkw2MC41LDM5LjJjMCwwLjIsMCwwLjQsMCwwLjdWMzkuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01OC44LDQ4LjdjMCwxLjctMC44LDMuNC0yLjMsNC45djEuN2gtMS43di0wLjJjLTEsMC44LTIuMywxLjUtMy42LDIuMVY1OGgtMS43djBjLTEuMSwwLjQtMi4zLDAuOC0zLjYsMS4yCgkJdjAuMmwtMS42LDAuOWwwLTAuN2MtMS4yLDAuMy0yLjUsMC41LTMuOCwwLjdsMCwwLjdMMzguNyw2MnYtMS43Yy0xLjIsMC4xLTIuNCwwLjItMy42LDAuMlY2MmgtMS43di0xLjVjLTEuMiwwLTIuNC0wLjEtMy42LTAuMgoJCVY2MmwtMi0wLjhsMC0xLjFjLTEuMi0wLjItMi4zLTAuNC0zLjQtMC42djEuMWgtMS43di0xLjZjLTEuMy0wLjMtMi41LTAuNy0zLjYtMS4ydjEuNGwtMS45LTAuOWwwLTEuM2MtMS4zLTAuNi0yLjUtMS4zLTMuNS0ydjAuMgoJCWgtMS43di0xLjdjLTEuNS0xLjUtMi4zLTMuMi0yLjMtNC45di0xLjhjLTAuNi0wLjMtMS4xLTAuNi0xLjYtMUg3Ljl2Mi44YzAsNy41LDExLjgsMTMuNiwyNi4zLDEzLjZjMTQuNSwwLDI2LjMtNi4xLDI2LjMtMTMuNgoJCXYtOC44YzAsMS44LTAuNiwzLjQtMS43LDQuOVY0OC43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTMzLjMsNjAuNVY2MmgxLjd2LTEuNWMtMC4zLDAtMC42LDAtMC45LDBDMzMuOSw2MC41LDMzLjYsNjAuNSwzMy4zLDYwLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzguNyw2MmwxLjYtMS4xbDAtMC43Yy0wLjUsMC4xLTEuMSwwLjEtMS42LDAuMlY2MnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00NC4xLDYwLjJsMS42LTAuOXYtMC4yYy0wLjUsMC4xLTEuMSwwLjMtMS43LDAuNEw0NC4xLDYwLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCw1OGgxLjd2LTAuOEM1MC42LDU3LjQsNTAsNTcuNyw0OS40LDU4TDQ5LjQsNTh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTQuNyw1NS4xdjAuMmgxLjd2LTEuN0M1Niw1NC4xLDU1LjQsNTQuNiw1NC43LDU1LjF6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjIuNiw2MC42aDEuN3YtMS4xYy0wLjYtMC4xLTEuMi0wLjMtMS43LTAuNFY2MC42eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI3LjcsNjEuMmwyLDAuOHYtMS43Yy0wLjctMC4xLTEuMy0wLjEtMS45LTAuMkwyNy43LDYxLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOS42LDQ1LjlIOGMwLjUsMC4zLDEuMSwwLjcsMS42LDFWNDUuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01OC44LDM5Ljl2NC45YzEuMS0xLjUsMS43LTMuMiwxLjctNC45YzAtMC4yLDAtMC40LDAtMC43aC0xLjdWMzkuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMi41LDQ4LjJoLTAuNlY0OGMwLDAsMCwwLDAsMHY1LjZjMC41LDAuNSwxLjEsMSwxLjcsMS41di02LjRDMTMuMiw0OC42LDEyLjgsNDguNCwxMi41LDQ4LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTEuOSw0OC4yaDAuNmMtMC4yLTAuMS0wLjQtMC4xLTAuNi0wLjJWNDguMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMS45LDQ3LjJMMTEuOSw0Ny4ybDAsMC44YzAsMCwwLDAsMCwwVjQ3LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTMuNiw0OC40TDEzLjYsNDguNGwwLTAuMmgtMS4yYzAuNCwwLjIsMC44LDAuMywxLjIsMC41TDEzLjYsNDguNEMxMy42LDQ4LjQsMTMuNiw0OC40LDEzLjYsNDguNHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMi41LDQ4LjJoMS4ydi0xaC0xLjdWNDhDMTIuMSw0OC4xLDEyLjMsNDguMiwxMi41LDQ4LjJ6Ii8+Cgk8cG9seWdvbiBjbGFzcz0ic3QzIiBwb2ludHM9IjEzLjYsNDguNCAxMy42LDQ4LjQgMTMuNiw0OC40IAkiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMS45LDU1LjNoMS43di0wLjJjLTAuNy0wLjUtMS4yLTEtMS43LTEuNVY1NS4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE3LjIsNTAuM2wtMC4xLDYuOGMwLjYsMC4zLDEuMiwwLjUsMS44LDAuOFY1MUMxOC40LDUwLjgsMTcuOCw1MC42LDE3LjIsNTAuM3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy4yLDQ5LjlsMCwwLjRjMC42LDAuMiwxLjEsMC41LDEuNywwLjd2LTAuOGMtMC40LTAuMS0wLjktMC4yLTEuMy0wLjNIMTcuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy43LDQ5LjljMC40LDAuMSwwLjksMC4yLDEuMywwLjN2LTAuM0gxNy43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE3LjEsNTguNGwxLjksMC45di0xLjRjLTAuNi0wLjItMS4zLTAuNS0xLjgtMC44TDE3LjEsNTguNHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjYsMTQuMWMwLTYuNCwxMS4zLTExLjksMjQuNi0xMS45YzEzLjMsMCwyNC42LDUuNCwyNC42LDExLjl2LTAuN2gxLjdjLTAuNy03LjMtMTItMTIuOS0yNi4zLTEyLjkKCQlDMTkuOSwwLjUsOC41LDYuMSw3LjksMTMuNGgxLjdWMTQuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNC4yLDI1LjljLTEzLjMsMC0yNC42LTUuNC0yNC42LTExLjlWMTljMCwwLDAuMSwwLjEsMC4xLDAuMWMwLjMtMC4yLDAuNi0wLjMsMS0wLjVsMS4zLDEuNQoJCWMtMC4zLDAuMi0wLjYsMC4zLTAuOSwwLjVjMC4zLDAuMywwLjYsMC41LDAuOSwwLjhoMS43djEuMmMxLjEsMC43LDIuMywxLjMsMy42LDEuOWwwLTAuNEgxOXYxLjFjMS4xLDAuNCwyLjMsMC44LDMuNiwxLjF2LTAuOQoJCWgxLjd2MS4zYzEuMiwwLjIsMi40LDAuNCwzLjYsMC42bDAtMC41aDEuN3YwLjdjMS4yLDAuMSwyLjQsMC4yLDMuNiwwLjJ2LTAuOWgxLjd2MC45YzEuMiwwLDIuNC0wLjEsMy42LTAuMnYtMC43aDEuN2wwLDAuNQoJCWMxLjItMC4yLDIuNS0wLjMsMy42LTAuNmwwLTEuM2gxLjd2MC45YzEuMy0wLjMsMi41LTAuNywzLjYtMS4xdi0xLjFoMS43djAuNGMxLjMtMC42LDIuNS0xLjIsMy42LTEuOXYtMS4yaDEuNwoJCWMwLjktMC44LDEuNy0xLjYsMi4zLTIuNHYtNC45QzU4LjgsMjAuNSw0Ny41LDI1LjksMzQuMiwyNS45eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTExLDIwLjdjMC4zLTAuMiwwLjYtMC4zLDAuOS0wLjVsLTEuMy0xLjVjLTAuMywwLjItMC42LDAuMy0xLDAuNUMxMC4xLDE5LjcsMTAuNSwyMC4yLDExLDIwLjd6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTguOCwyMi45YzAsMS43LTAuOCwzLjQtMi4zLDQuOXYxLjdoLTEuN3YtMC4yYy0xLDAuOC0yLjMsMS41LTMuNiwyLjF2MC44aC0xLjd2MGMtMS4xLDAuNC0yLjMsMC44LTMuNiwxLjIKCQl2MC4yTDQ0LDM0LjJsMC0wLjVjLTEuMiwwLjMtMi40LDAuNS0zLjcsMC42bDAsMS4ybC0xLjYsMC42di0xLjdjLTEuMiwwLjEtMi40LDAuMi0zLjYsMC4ydjEuNWgtMS43di0xLjVjLTEuMiwwLTIuNC0wLjEtMy42LTAuMgoJCXYxLjdsLTEuNi0xbDAtMC44Yy0xLjMtMC4yLTIuNS0wLjQtMy43LTAuNnYxLjFoLTEuN3YtMS42Yy0xLjMtMC4zLTIuNS0wLjctMy42LTEuMnYxLjRsLTEuOS0xbDAtMS4xYy0xLjMtMC42LTIuNS0xLjMtMy41LTIuMQoJCXYwLjJoLTEuN3YtMS43Yy0xLjUtMS41LTIuMy0zLjItMi4zLTQuOXYtMS40Yy0wLjYsMC40LTEuMiwwLjgtMS43LDEuMnYwLjJjMCw3LjUsMTEuOCwxMy42LDI2LjMsMTMuNmM2LjksMCwxMy4xLTEuNCwxNy44LTMuNgoJCWMwLjItMC4zLDAuNS0wLjUsMC43LTAuOGMtMC4xLTAuMS0wLjItMC4xLTAuMy0wLjJsMC44LTEuNWMwLjYsMC4zLDEuMSwwLjYsMS42LDAuOWMzLjYtMi4zLDUuNy01LjMsNS43LTguNXYtOC44CgkJYzAsMS44LTAuNiwzLjQtMS43LDQuOVYyMi45eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTYwLjUsMTMuNGMwLDAuMiwwLDAuNCwwLDAuN0w2MC41LDEzLjRMNjAuNSwxMy40eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTcuOSwxMy40djAuN0M3LjksMTMuOSw3LjksMTMuNiw3LjksMTMuNEw3LjksMTMuNHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjYsMTljLTEuMS0xLjUtMS43LTMuMi0xLjctNC45djYuMmMwLjUtMC40LDEuMS0wLjcsMS43LTFWMTl6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTIuNywzMi4xYy0wLjIsMC4zLTAuNCwwLjUtMC43LDAuOGMwLjQtMC4yLDAuNy0wLjQsMS4xLTAuNUM1Mi45LDMyLjMsNTIuOCwzMi4yLDUyLjcsMzIuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjYsMjEuNXYtMi4zYy0wLjYsMC4zLTEuMiwwLjctMS43LDF2Mi41QzguNCwyMi4zLDksMjEuOSw5LjYsMjEuNXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01Mi4zLDMxLjljMC4xLDAuMSwwLjIsMC4xLDAuMywwLjJjMC4yLTAuMiwwLjMtMC40LDAuNS0wLjZsMC40LDAuNmMwLjQtMC4yLDAuOS0wLjUsMS4zLTAuOAoJCWMtMC41LTAuMy0xLTAuNi0xLjYtMC45TDUyLjMsMzEuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01My41LDMyLjFsLTAuNC0wLjZjLTAuMSwwLjItMC4zLDAuNC0wLjUsMC42YzAuMSwwLjEsMC4zLDAuMiwwLjQsMC4yQzUzLjIsMzIuMyw1My4zLDMyLjIsNTMuNSwzMi4xeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU4LjgsMTMuNHYwLjdWMTljMS4xLTEuNSwxLjctMy4yLDEuNy00LjljMC0wLjIsMC0wLjQsMC0wLjdINTguOHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjYsMTQuMXYtMC43SDcuOWMwLDAuMiwwLDAuNCwwLDAuN2MwLDEuOCwwLjYsMy40LDEuNyw0LjlWMTQuMXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNC4yLDI3LjdjLTAuMywwLTAuNiwwLTAuOSwwdjcuMWMwLjMsMCwwLjYsMCwwLjksMHMwLjYsMCwwLjksMHYtNy4xQzM0LjgsMjcuNywzNC41LDI3LjcsMzQuMiwyNy43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM1LjEsMjcuN3YtMC45aC0xLjd2MC45YzAuMywwLDAuNiwwLDAuOSwwQzM0LjUsMjcuNywzNC44LDI3LjcsMzUuMSwyNy43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTMzLjMsMzQuN3YxLjVoMS43di0xLjVjLTAuMywwLTAuNiwwLTAuOSwwUzMzLjYsMzQuNywzMy4zLDM0Ljd6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzguNywyNy41djdjMC41LTAuMSwxLjEtMC4xLDEuNi0wLjJsMC4xLTdDMzkuOCwyNy40LDM5LjMsMjcuNCwzOC43LDI3LjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDAuNCwyNi44aC0xLjd2MC43YzAuNi0wLjEsMS4yLTAuMSwxLjctMC4yTDQwLjQsMjYuOHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zOC43LDM2LjJsMS42LTAuNmwwLTEuMmMtMC41LDAuMS0xLjEsMC4xLTEuNiwwLjJWMzYuMnoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00NCwyNi43bDAsN2MwLjYtMC4xLDEuMi0wLjMsMS43LTAuNHYtN0M0NS4yLDI2LjUsNDQuNiwyNi42LDQ0LDI2Ljd6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDUuOCwyNS41SDQ0bDAsMS4zYzAuNi0wLjEsMS4yLTAuMiwxLjctMC40VjI1LjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDQsMzQuMmwxLjctMC43di0wLjJjLTAuNiwwLjItMS4xLDAuMy0xLjcsMC40TDQ0LDM0LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCwyNS4zdjYuOWMwLjYtMC4yLDEuMi0wLjUsMS43LTAuN3YtNi44QzUwLjYsMjQuOCw1MCwyNSw0OS40LDI1LjN6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTEuMSwyNC4xaC0xLjd2MS4xYzAuNi0wLjIsMS4yLTAuNCwxLjctMC43VjI0LjF6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNCwzMi4yaDEuN3YtMC44QzUwLjYsMzEuNyw1MCwzMS45LDQ5LjQsMzIuMkw0OS40LDMyLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTYuNCwyMS41Yy0wLjUsMC40LTEuMSwwLjgtMS43LDEuMnY2LjZjMC43LTAuNSwxLjItMSwxLjctMS41TDU2LjQsMjEuNUw1Ni40LDIxLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTQuNywyMS41djEuMmMwLjYtMC40LDEuMi0wLjgsMS43LTEuMkg1NC43eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU0LjcsMjkuM3YwLjJoMS43di0xLjdDNTYsMjguMyw1NS40LDI4LjgsNTQuNywyOS4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIyLjYsMjYuM3Y3YzAuNiwwLjIsMS4yLDAuMywxLjcsMC40di03QzIzLjcsMjYuNiwyMy4yLDI2LjUsMjIuNiwyNi4zeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI0LjMsMjUuNWgtMS43djAuOWMwLjYsMC4xLDEuMiwwLjMsMS43LDAuNFYyNS41eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIyLjYsMzQuOWgxLjd2LTEuMWMtMC42LTAuMS0xLjItMC4zLTEuNy0wLjRWMzQuOXoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOCwyNy4zbDAuMSw3YzAuNSwwLjEsMS4xLDAuMSwxLjYsMC4ydi03QzI5LjEsMjcuNCwyOC41LDI3LjQsMjgsMjcuM3oiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOS43LDI2LjhIMjhsMCwwLjVjMC42LDAuMSwxLjEsMC4xLDEuNywwLjJWMjYuOHoiLz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC4xLDM1LjJsMS42LDF2LTEuN2MtMC41LTAuMS0xLjEtMC4xLTEuNi0wLjJMMjguMSwzNS4yeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTExLjksMjEuNUwxMS45LDIxLjVsLTAuMSw2LjNjMC41LDAuNSwxLjEsMSwxLjcsMS41di02LjZDMTMsMjIuMywxMi41LDIxLjksMTEuOSwyMS41eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEzLjYsMjEuNWgtMS43YzAuNSwwLjQsMS4xLDAuOCwxLjcsMS4yVjIxLjV6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTEuOSwyNy44djEuN2gxLjd2LTAuMkMxMywyOC44LDEyLjQsMjguMywxMS45LDI3Ljh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTcuMiwyNC42bC0wLjEsNi44YzAuNiwwLjMsMS4yLDAuNSwxLjgsMC44di02LjlDMTguNCwyNSwxNy44LDI0LjgsMTcuMiwyNC42eiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE5LDI0LjFoLTEuN2wwLDAuNGMwLjYsMC4yLDEuMSwwLjUsMS43LDAuN1YyNC4xeiIvPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE3LjEsMzIuNWwxLjksMXYtMS40Yy0wLjYtMC4yLTEuMy0wLjUtMS44LTAuOEwxNy4xLDMyLjV6Ii8+CjwvZz4KPC9zdmc+Cg==)}span.encryption{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMjMxRjIwO30KCS5zdDF7ZmlsbDojRjM5MzQ3O30KCS5zdDJ7ZmlsbDojRkZGRkZGO30KCS5zdDN7ZmlsbDojRjM4MjIwO30KCS5zdDR7b3BhY2l0eTowLjM7fQoJLnN0NXtvcGFjaXR5OjAuNTt9Cgkuc3Q2e29wYWNpdHk6MC4zNjt9Cgkuc3Q3e2ZpbGw6bm9uZTtzdHJva2U6I0YzODIyMDtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cjwvc3R5bGU+CjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01NS43LDYwLjJjMCwyLjEtMS43LDMuOC0zLjgsMy44SDExLjZjLTIuMSwwLTMuOC0xLjctMy44LTMuOFYzMi4zYzAtMi4xLDEuNy0zLjgsMy44LTMuOEg1MgoJYzIuMSwwLDMuOCwxLjcsMy44LDMuOFY2MC4yeiIvPgo8Y2lyY2xlIGNsYXNzPSJzdDIiIGN4PSIzMS45IiBjeT0iNDEuNSIgcj0iNCIvPgo8cGF0aCBjbGFzcz0ic3QyIiBkPSJNMzMuOSw1NC40aC00Yy0wLjMsMC0wLjYtMC4zLTAuNi0wLjZWNDEuOGMwLTAuMywwLjMtMC42LDAuNi0wLjZoNGMwLjMsMCwwLjYsMC4zLDAuNiwwLjZ2MTEuOQoJQzM0LjUsNTQuMSwzNC4zLDU0LjQsMzMuOSw1NC40eiIvPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy40LDI4LjljLTAuMiwwLTAuNi0wLjEtMS40LTAuMmMtMC44LTAuMS0xLjYtMC4yLTIuNS0wLjJjMC0wLjEsMC0wLjMsMC0wLjVjMC0wLjIsMC0wLjMsMC0wLjUKCQkJYzAtNC42LDAuNi04LjYsMS43LTEyLjJjMS4xLTMuNiwyLjctNi41LDQuOS04LjdjMS41LTEuNiwzLjItMi44LDUuMy0zLjhzNC40LTEuNCw3LTEuNGMyLjQsMCw0LjUsMC41LDYuNSwxLjQKCQkJQzQwLjgsMy44LDQyLjUsNSw0NCw2LjRjMi4xLDIuMSwzLjgsNSw1LDguN2MxLjIsMy42LDEuOSw3LjUsMS45LDExLjZjMCwwLjIsMCwwLjQsMCwwLjdjMCwwLjMsMCwwLjQsMCwwLjYKCQkJYy0wLjMsMC0wLjgsMC4xLTEuNiwwLjFjLTAuNywwLjEtMS41LDAuMS0yLjMsMC4yYzAtMC4yLDAtMC4zLDAtMC41czAtMC4zLDAtMC41YzAtMi4zLTAuMi00LjgtMC43LTcuM2MtMC41LTIuNS0xLjItNC43LTIuMi02LjUKCQkJYy0xLjMtMi40LTMtNC4yLTUtNS40Yy0yLTEuMy00LjItMS45LTYuNi0xLjljLTIuNCwwLTQuNywwLjYtNi43LDEuN2MtMiwxLjEtMy43LDIuOS01LDUuNGMtMS4xLDItMS45LDQuMy0yLjQsNi44CgkJCWMtMC41LDIuNS0wLjgsNS0wLjgsNy41YzAsMC4xLDAsMC4zLDAsMC41QzE3LjQsMjguNCwxNy40LDI4LjYsMTcuNCwyOC45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xOC41LDMwbC0xLjItMC4xYy0wLjIsMC0wLjYtMC4xLTEuNC0wLjJjLTAuOC0wLjEtMS42LTAuMi0yLjQtMC4ybC0wLjktMC4xdi0xLjljMC00LjYsMC42LTguOCwxLjctMTIuNQoJCQljMS4yLTMuNywyLjktNi43LDUuMS05LjFjMS41LTEuNywzLjQtMyw1LjYtNGMyLjItMSw0LjctMS41LDcuNC0xLjVjMi41LDAsNC44LDAuNSw2LjksMS41YzIsMSwzLjksMi4yLDUuNCwzLjgKCQkJYzIuMiwyLjIsNCw1LjMsNS4yLDljMS4zLDMuNywxLjksNy43LDEuOSwxMS45djIuMkw1MC45LDI5Yy0wLjMsMC0wLjgsMC4xLTEuNSwwLjFjLTAuNywwLjEtMS41LDAuMS0yLjMsMC4yTDQ2LDI5LjR2LTIKCQkJYzAtMi4zLTAuMi00LjYtMC43LTcuMWMtMC41LTIuNC0xLjItNC41LTIuMS02LjJjLTEuMi0yLjItMi44LTMuOS00LjctNS4xYy0xLjktMS4yLTMuOS0xLjgtNi4xLTEuOGMtMi4zLDAtNC40LDAuNS02LjIsMS42CgkJCWMtMS44LDEtMy40LDIuNy00LjcsNWMtMS4xLDEuOS0xLjksNC4xLTIuMyw2LjVjLTAuNSwyLjQtMC43LDQuOS0wLjcsNy4zdjAuNWMwLDAuMiwwLDAuNSwwLDAuN0wxOC41LDMweiBNMTQuNiwyNy42CgkJCWMwLjYsMC4xLDEuMSwwLjEsMS42LDAuMmMwLjEsMCwwLjIsMCwwLjMsMHYtMC4yYzAtMi41LDAuMy01LjEsMC44LTcuNmMwLjUtMi42LDEuNC01LDIuNi03LjFjMS40LTIuNiwzLjMtNC42LDUuNC01LjgKCQkJYzIuMS0xLjIsNC42LTEuOCw3LjItMS44YzIuNSwwLDQuOSwwLjcsNy4xLDIuMWMyLjIsMS40LDQsMy4zLDUuNCw1LjhjMSwxLjksMS44LDQuMiwyLjMsNi44YzAuNSwyLjUsMC44LDUsMC44LDcuNAoJCQljMC40LDAsMC45LTAuMSwxLjMtMC4xYzAuMiwwLDAuNSwwLDAuNy0wLjF2LTAuNGMwLTQtMC42LTcuOC0xLjgtMTEuM2MtMS4yLTMuNS0yLjgtNi4zLTQuOC04LjNjLTEuNC0xLjQtMy0yLjUtNC44LTMuNAoJCQljLTEuOC0wLjktMy44LTEuMy02LjEtMS4zYy0yLjUsMC00LjcsMC40LTYuNiwxLjNjLTEuOSwwLjktMy42LDIuMS01LDMuNWMtMiwyLjItMy42LDUtNC42LDguNEMxNS4xLDE5LjEsMTQuNiwyMy4xLDE0LjYsMjcuNgoJCQlMMTQuNiwyNy42eiIvPgoJPC9nPgo8L2c+Cjwvc3ZnPgo=)}span.no-encryption{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMjMxRjIwO30KCS5zdDF7ZmlsbDojRjM5MzQ3O30KCS5zdDJ7ZmlsbDojRkZGRkZGO30KCS5zdDN7ZmlsbDojRjM4MjIwO30KCS5zdDR7b3BhY2l0eTowLjM7fQoJLnN0NXtvcGFjaXR5OjAuNTt9Cgkuc3Q2e29wYWNpdHk6MC4zNjt9Cgkuc3Q3e2ZpbGw6bm9uZTtzdHJva2U6I0YzODIyMDtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cjwvc3R5bGU+CjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01NS43LDYwLjJjMCwyLjEtMS43LDMuOC0zLjgsMy44SDExLjZjLTIuMSwwLTMuOC0xLjctMy44LTMuOFYzMi4zYzAtMi4xLDEuNy0zLjgsMy44LTMuOEg1MgoJYzIuMSwwLDMuOCwxLjcsMy44LDMuOFY2MC4yeiIvPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00My4yLDEzLjFjMSwxLjgsMS43LDMuOCwyLjIsNi4zYzEuMywwLDIuNiwwLDMuOSwwYy0wLjMtMS42LTAuNy0zLjItMS4yLTQuOGMtMS4yLTMuNS0yLjgtNi4zLTQuOC04LjQKCQkJYy0xLjQtMS40LTMuMS0yLjYtNC45LTMuNWMtMS45LTAuOS00LTEuMy02LjMtMS4zYy0yLjUsMC00LjgsMC40LTYuOCwxLjNjLTIsMC45LTMuNywyLjEtNS4xLDMuN2MtMi4xLDIuMi0zLjYsNS00LjcsOC41CgkJCWMtMS4xLDMuNC0xLjYsMTYuNy0xLjYsMjEuMnYxYzAuOSwwLjEsMS43LDAuMSwyLjQsMC4yYzAuNywwLjEsMS4yLDAuMSwxLjMsMC4xYzAtMC4zLDAtMC41LDAtMC44di0wLjVjMC0yLjQsMC4yLTE0LjIsMC43LTE2LjYKCQkJYzAuNS0yLjQsMS4zLTQuNiwyLjQtNi42YzEuMy0yLjQsMi45LTQuMSw0LjktNS4yQzI3LjQsNi41LDI5LjYsNiwzMS45LDZjMi4zLDAsNC40LDAuNiw2LjQsMS44UzQxLjksMTAuOCw0My4yLDEzLjF6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE4LjUsMzguNGwtMS4xLTAuMWMtMC4yLDAtMC42LTAuMS0xLjMtMC4xYy0wLjctMC4xLTEuNS0wLjItMi40LTAuMmwtMC45LTAuMVYzNmMwLTMuOSwwLjUtMTcuNywxLjctMjEuNAoJCQljMS4xLTMuNiwyLjgtNi41LDQuOS04LjhjMS41LTEuNiwzLjMtMi45LDUuNC0zLjljMi4xLTAuOSw0LjUtMS40LDcuMi0xLjRjMi40LDAsNC43LDAuNSw2LjcsMS40YzIsMC45LDMuNywyLjIsNS4yLDMuNwoJCQljMi4xLDIuMiwzLjgsNS4xLDUuMSw4LjdjMC42LDEuNiwxLDMuMiwxLjMsNWwwLjIsMS4xbC0xLjEsMGMtMS41LDAtMi44LDAtMy45LDBsLTAuOCwwbC0wLjItMC44Yy0wLjUtMi4zLTEuMi00LjMtMi4xLTYKCQkJYy0xLjItMi4xLTIuNy0zLjgtNC41LTQuOUMzNiw3LjUsMzQsNi45LDMxLjksNi45Yy0yLjIsMC00LjIsMC41LTYsMS41Yy0xLjgsMS0zLjMsMi43LTQuNSw0LjljLTEsMS45LTEuOCw0LTIuMyw2LjMKCQkJYy0wLjUsMi4yLTAuNywxMy43LTAuNywxNi40djAuNWMwLDAuMiwwLDAuNCwwLDAuN0wxOC41LDM4LjR6IE0xNC43LDM2LjFjMC41LDAsMS4xLDAuMSwxLjYsMC4yYzAuMSwwLDAuMiwwLDAuMywwdi0wLjIKCQkJYzAtMS45LDAuMi0xNC4xLDAuOC0xNi44YzAuNS0yLjUsMS4zLTQuOCwyLjUtNi44QzIxLjEsOS45LDIyLjksOCwyNSw2LjhDMjcuMSw1LjYsMjkuNCw1LDMxLjksNWMyLjUsMCw0LjgsMC43LDYuOSwyCgkJCWMyLjEsMS4zLDMuOCwzLjIsNS4yLDUuNmwwLDBjMC45LDEuNiwxLjYsMy42LDIuMSw1LjhjMC42LDAsMS4zLDAsMiwwYy0wLjMtMS4yLTAuNi0yLjQtMS0zLjZjLTEuMS0zLjQtMi43LTYuMS00LjYtOAoJCQljLTEuMy0xLjMtMi45LTIuNC00LjctMy4zYy0xLjgtMC44LTMuNy0xLjItNS45LTEuMmMtMi40LDAtNC42LDAuNC02LjQsMS4zYy0xLjksMC44LTMuNSwyLTQuOCwzLjRjLTIsMi4xLTMuNSw0LjgtNC41LDguMQoJCQlDMTUuMywxOC40LDE0LjcsMzEuNCwxNC43LDM2LjFMMTQuNywzNi4xeiIvPgoJPC9nPgo8L2c+CjxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjMxLjkiIGN5PSI0MS41IiByPSI0Ii8+CjxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik0zMy45LDU0LjRoLTRjLTAuMywwLTAuNi0wLjMtMC42LTAuNlY0MS44YzAtMC4zLDAuMy0wLjYsMC42LTAuNmg0YzAuMywwLDAuNiwwLjMsMC42LDAuNnYxMS45CglDMzQuNSw1NC4xLDM0LjMsNTQuNCwzMy45LDU0LjR6Ii8+Cjwvc3ZnPgo=)}span.encryption-stake{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMjMxRjIwO30KCS5zdDF7ZmlsbDojRjM5MzQ3O30KCS5zdDJ7ZmlsbDojRkZGRkZGO30KCS5zdDN7ZmlsbDojRjM4MjIwO30KCS5zdDR7b3BhY2l0eTowLjM7fQoJLnN0NXtvcGFjaXR5OjAuNTt9Cgkuc3Q2e29wYWNpdHk6MC4zNjt9Cgkuc3Q3e2ZpbGw6bm9uZTtzdHJva2U6I0YzODIyMDtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cjwvc3R5bGU+CjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01NS45LDYwLjJjMCwyLjEtMS43LDMuOC0zLjgsMy44SDExLjhjLTIuMSwwLTMuOC0xLjctMy44LTMuOFYzMi4zYzAtMi4xLDEuNy0zLjgsMy44LTMuOGg0MC40CgljMi4xLDAsMy44LDEuNywzLjgsMy44VjYwLjJ6Ii8+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQzLjIsMTMuMWMxLDEuOCwxLjcsMy44LDIuMiw2LjNjMS4zLDAsMi42LDAsMy45LDBjLTAuMy0xLjYtMC43LTMuMi0xLjItNC44Yy0xLjItMy41LTIuOC02LjMtNC44LTguNAoJCQljLTEuNC0xLjQtMy4xLTIuNi00LjktMy41Yy0xLjktMC45LTQtMS4zLTYuMy0xLjNjLTIuNSwwLTQuOCwwLjQtNi44LDEuM2MtMiwwLjktMy43LDIuMS01LjEsMy43Yy0yLjEsMi4yLTMuNiw1LTQuNyw4LjUKCQkJYy0xLjEsMy40LTEuNiwxNi43LTEuNiwyMS4ydjFjMC45LDAuMSwxLjcsMC4xLDIuNCwwLjJjMC43LDAuMSwxLjIsMC4xLDEuMywwLjFjMC0wLjMsMC0wLjUsMC0wLjh2LTAuNWMwLTIuNCwwLjItMTQuMiwwLjctMTYuNgoJCQljMC41LTIuNCwxLjMtNC42LDIuNC02LjZjMS4zLTIuNCwyLjktNC4xLDQuOS01LjJDMjcuNCw2LjUsMjkuNiw2LDMxLjksNmMyLjMsMCw0LjQsMC42LDYuNCwxLjhTNDEuOSwxMC44LDQzLjIsMTMuMXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTguNSwzOC40bC0xLjEtMC4xYy0wLjIsMC0wLjYtMC4xLTEuMy0wLjFjLTAuNy0wLjEtMS41LTAuMi0yLjQtMC4ybC0wLjktMC4xVjM2YzAtMy45LDAuNS0xNy43LDEuNy0yMS40CgkJCWMxLjEtMy42LDIuOC02LjUsNC45LTguOGMxLjUtMS42LDMuMy0yLjksNS40LTMuOWMyLjEtMC45LDQuNS0xLjQsNy4yLTEuNGMyLjQsMCw0LjcsMC41LDYuNywxLjRjMiwwLjksMy43LDIuMiw1LjIsMy43CgkJCWMyLjEsMi4yLDMuOCw1LjEsNS4xLDguN2MwLjYsMS42LDEsMy4yLDEuMyw1bDAuMiwxLjFsLTEuMSwwYy0xLjUsMC0yLjgsMC0zLjksMGwtMC44LDBsLTAuMi0wLjhjLTAuNS0yLjMtMS4yLTQuMy0yLjEtNgoJCQljLTEuMi0yLjEtMi43LTMuOC00LjUtNC45QzM2LDcuNSwzNCw2LjksMzEuOSw2LjljLTIuMiwwLTQuMiwwLjUtNiwxLjVjLTEuOCwxLTMuMywyLjctNC41LDQuOWMtMSwxLjktMS44LDQtMi4zLDYuMwoJCQljLTAuNSwyLjItMC43LDEzLjctMC43LDE2LjR2MC41YzAsMC4yLDAsMC40LDAsMC43TDE4LjUsMzguNHogTTE0LjcsMzYuMWMwLjUsMCwxLjEsMC4xLDEuNiwwLjJjMC4xLDAsMC4yLDAsMC4zLDB2LTAuMgoJCQljMC0xLjksMC4yLTE0LjEsMC44LTE2LjhjMC41LTIuNSwxLjMtNC44LDIuNS02LjhDMjEuMSw5LjksMjIuOSw4LDI1LDYuOEMyNy4xLDUuNiwyOS40LDUsMzEuOSw1YzIuNSwwLDQuOCwwLjcsNi45LDIKCQkJYzIuMSwxLjMsMy44LDMuMiw1LjIsNS42bDAsMGMwLjksMS42LDEuNiwzLjYsMi4xLDUuOGMwLjYsMCwxLjMsMCwyLDBjLTAuMy0xLjItMC42LTIuNC0xLTMuNmMtMS4xLTMuNC0yLjctNi4xLTQuNi04CgkJCWMtMS4zLTEuMy0yLjktMi40LTQuNy0zLjNjLTEuOC0wLjgtMy43LTEuMi01LjktMS4yYy0yLjQsMC00LjYsMC40LTYuNCwxLjNjLTEuOSwwLjgtMy41LDItNC44LDMuNGMtMiwyLjEtMy41LDQuOC00LjUsOC4xCgkJCUMxNS4zLDE4LjQsMTQuNywzMS40LDE0LjcsMzYuMUwxNC43LDM2LjF6Ii8+Cgk8L2c+CjwvZz4KPGNpcmNsZSBjbGFzcz0ic3QyIiBjeD0iMzEuOSIgY3k9IjQxLjUiIHI9IjQiLz4KPHBhdGggY2xhc3M9InN0MiIgZD0iTTMzLjksNTQuNGgtNGMtMC4zLDAtMC42LTAuMy0wLjYtMC42VjQxLjhjMC0wLjMsMC4zLTAuNiwwLjYtMC42aDRjMC4zLDAsMC42LDAuMywwLjYsMC42djExLjkKCUMzNC41LDU0LjEsMzQuMyw1NC40LDMzLjksNTQuNHoiLz4KPGc+Cgk8ZWxsaXBzZSBjbGFzcz0ic3QyIiBjeD0iMzIiIGN5PSI0Ny4xIiByeD0iMTQuOCIgcnk9IjE0LjQiLz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMiwzN2MtNS41LDAtOS45LDQuNS05LjksOS45YzAsMi41LDAuOSw0LjgsMi41LDYuNmw3LjQtMTQuN2w3LjUsMTQuOGMxLjYtMS44LDIuNi00LjEsMi42LTYuNwoJCQlDNDEuOSw0MS40LDM3LjUsMzcsMzIsMzd6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI3LjQsNTUuN2MxLjQsMC43LDIuOSwxLjEsNC42LDEuMWMxLjYsMCwzLjEtMC40LDQuNS0xLjFsLTQuNi05LjFMMjcuNCw1NS43eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMiwzMC4xYy05LjMsMC0xNi44LDcuNS0xNi44LDE2LjhjMCw5LjMsNy41LDE2LjgsMTYuOCwxNi44YzkuMywwLDE2LjgtNy41LDE2LjgtMTYuOAoJCQlDNDguOCwzNy42LDQxLjMsMzAuMSwzMiwzMC4xeiBNMzIsNjAuNWMtNy41LDAtMTMuNS02LjEtMTMuNS0xMy41UzI0LjUsMzMuNCwzMiwzMy40czEzLjUsNi4xLDEzLjUsMTMuNVMzOS41LDYwLjUsMzIsNjAuNXoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K)}span.tor{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMjMxRjIwO30KCS5zdDF7ZmlsbDojRjM5MzQ3O30KCS5zdDJ7ZmlsbDojRkZGRkZGO30KCS5zdDN7ZmlsbDojRjM4MjIwO30KCS5zdDR7b3BhY2l0eTowLjM7fQoJLnN0NXtvcGFjaXR5OjAuMzY7fQoJLnN0NntmaWxsOm5vbmU7c3Ryb2tlOiNGMzgyMjA7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQo8L3N0eWxlPgo8cmVjdCB4PSIyNi44IiB5PSItMjE3LjIiIGNsYXNzPSJzdDAiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIvPgo8cGF0aCBjbGFzcz0ic3QxIiBkPSJNLTE4LjgtMzM1LjljMCwwLjUtMC40LDAuOS0wLjksMC45SC0yOWMtMC41LDAtMC45LTAuNC0wLjktMC45di02LjVjMC0wLjUsMC40LTAuOSwwLjktMC45aDkuNAoJYzAuNSwwLDAuOSwwLjQsMC45LDAuOVYtMzM1Ljl6Ii8+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTS0yNy42LTM0Mi44YzAsMC0wLjEsMC0wLjMsMGMtMC4yLDAtMC40LDAtMC42LTAuMWMwLDAsMC0wLjEsMC0wLjFjMCwwLDAtMC4xLDAtMC4xYzAtMSwwLjEtMS45LDAuNC0yLjcKCQkJYzAuMy0wLjgsMC42LTEuNSwxLjEtMmMwLjMtMC40LDAuNy0wLjYsMS4yLTAuOHMxLTAuMywxLjYtMC4zYzAuNSwwLDEsMC4xLDEuNSwwLjNjMC40LDAuMiwwLjgsMC41LDEuMSwwLjgKCQkJYzAuNSwwLjUsMC44LDEuMSwxLjEsMS45YzAuMywwLjgsMC40LDEuNywwLjQsMi42YzAsMCwwLDAuMSwwLDAuMmMwLDAuMSwwLDAuMSwwLDAuMWMtMC4xLDAtMC4yLDAtMC40LDBjLTAuMiwwLTAuMywwLTAuNSwwCgkJCWMwLDAsMC0wLjEsMC0wLjFjMCwwLDAtMC4xLDAtMC4xYzAtMC41LTAuMS0xLjEtMC4yLTEuNmMtMC4xLTAuNi0wLjMtMS0wLjUtMS41Yy0wLjMtMC41LTAuNy0wLjktMS4xLTEuMmMtMC41LTAuMy0xLTAuNC0xLjUtMC40CgkJCWMtMC42LDAtMS4xLDAuMS0xLjUsMC40Yy0wLjUsMC4zLTAuOCwwLjctMS4xLDEuMmMtMC4zLDAuNS0wLjQsMS0wLjYsMS41Yy0wLjEsMC42LTAuMiwxLjEtMC4yLDEuN2MwLDAsMCwwLjEsMCwwLjEKCQkJQy0yNy43LTM0Mi45LTI3LjctMzQyLjktMjcuNi0zNDIuOHoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNLTI3LjQtMzQyLjZsLTAuMywwYzAsMC0wLjEsMC0wLjMsMGMtMC4yLDAtMC40LDAtMC41LTAuMWwtMC4yLDB2LTAuNGMwLTEsMC4xLTIsMC40LTIuOAoJCQljMC4zLTAuOCwwLjYtMS41LDEuMS0yYzAuMy0wLjQsMC44LTAuNywxLjMtMC45YzAuNS0wLjIsMS0wLjMsMS43LTAuM2MwLjYsMCwxLjEsMC4xLDEuNSwwLjNjMC41LDAuMiwwLjksMC41LDEuMiwwLjkKCQkJYzAuNSwwLjUsMC45LDEuMiwxLjIsMmMwLjMsMC44LDAuNCwxLjcsMC40LDIuN3YwLjVsLTAuMiwwYy0wLjEsMC0wLjIsMC0wLjMsMGMtMC4yLDAtMC4zLDAtMC41LDBsLTAuMiwwdi0wLjUKCQkJYzAtMC41LTAuMS0xLTAuMi0xLjZjLTAuMS0wLjUtMC4zLTEtMC41LTEuNGMtMC4zLTAuNS0wLjYtMC45LTEuMS0xLjFjLTAuNC0wLjMtMC45LTAuNC0xLjQtMC40Yy0wLjUsMC0xLDAuMS0xLjQsMC40CgkJCWMtMC40LDAuMi0wLjgsMC42LTEuMSwxLjFjLTAuMiwwLjQtMC40LDAuOS0wLjUsMS41Yy0wLjEsMC41LTAuMiwxLjEtMC4yLDEuNnYwLjFjMCwwLjEsMCwwLjEsMCwwLjJMLTI3LjQtMzQyLjZ6IE0tMjguMy0zNDMuMQoJCQljMC4xLDAsMC4yLDAsMC40LDBjMCwwLDAsMCwwLjEsMHYtMC4xYzAtMC42LDAuMS0xLjEsMC4yLTEuN2MwLjEtMC42LDAuMy0xLjEsMC42LTEuNmMwLjMtMC42LDAuNy0xLDEuMi0xLjMKCQkJYzAuNS0wLjMsMS0wLjQsMS42LTAuNGMwLjYsMCwxLjEsMC4yLDEuNiwwLjVjMC41LDAuMywwLjksMC43LDEuMiwxLjNjMC4yLDAuNCwwLjQsMC45LDAuNSwxLjVjMC4xLDAuNiwwLjIsMS4xLDAuMiwxLjcKCQkJYzAuMSwwLDAuMiwwLDAuMywwYzAuMSwwLDAuMSwwLDAuMiwwdi0wLjFjMC0wLjktMC4xLTEuOC0wLjQtMi41Yy0wLjMtMC44LTAuNi0xLjQtMS4xLTEuOWMtMC4zLTAuMy0wLjctMC42LTEuMS0wLjgKCQkJYy0wLjQtMC4yLTAuOS0wLjMtMS40LTAuM2MtMC42LDAtMS4xLDAuMS0xLjUsMC4zYy0wLjQsMC4yLTAuOCwwLjUtMS4xLDAuOGMtMC41LDAuNS0wLjgsMS4xLTEsMS45CgkJCUMtMjguMi0zNDUtMjguMy0zNDQuMS0yOC4zLTM0My4xTC0yOC4zLTM0My4xeiIvPgoJPC9nPgo8L2c+CjxjaXJjbGUgY2xhc3M9InN0MiIgY3g9Ii0yNC4zIiBjeT0iLTM0MC4yIiByPSIwLjkiLz4KPHBhdGggY2xhc3M9InN0MiIgZD0iTS0yNC4zLTMzNy4yTC0yNC4zLTMzNy4yYy0wLjMsMC0wLjYtMC4zLTAuNi0wLjZ2LTEuOWMwLTAuMywwLjMtMC42LDAuNi0wLjZsMCwwYzAuMywwLDAuNiwwLjMsMC42LDAuNnYxLjkKCUMtMjMuNy0zMzcuNS0yNC0zMzcuMi0yNC4zLTMzNy4yeiIvPgo8Zz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMzUtMjE3LjdjMCwwLjUtMC40LDAuOS0wLjksMC45aC05LjRjLTAuNSwwLTAuOS0wLjQtMC45LTAuOXYtNi41YzAtMC41LDAuNC0wLjksMC45LTAuOWg5LjQKCQljMC41LDAsMC45LDAuNCwwLjksMC45Vi0yMTcuN3oiLz4KCTxnPgoJCTxnPgoJCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQzLjktMjI0LjZjMCwwLTAuMSwwLTAuMywwYy0wLjIsMC0wLjQsMC0wLjYtMC4xYzAsMCwwLTAuMSwwLTAuMWMwLDAsMC0wLjEsMC0wLjFjMC0xLDAuMS0xLjksMC40LTIuNwoJCQkJYzAuMy0wLjgsMC42LTEuNSwxLjEtMmMwLjMtMC40LDAuNy0wLjYsMS4yLTAuOGMwLjUtMC4yLDEtMC4zLDEuNi0wLjNjMC41LDAsMSwwLjEsMS41LDAuM2MwLjQsMC4yLDAuOCwwLjUsMS4xLDAuOAoJCQkJYzAuNSwwLjUsMC44LDEuMSwxLjEsMS45YzAuMywwLjgsMC40LDEuNywwLjQsMi42YzAsMCwwLDAuMSwwLDAuMmMwLDAuMSwwLDAuMSwwLDAuMWMtMC4xLDAtMC4yLDAtMC40LDBjLTAuMiwwLTAuMywwLTAuNSwwCgkJCQljMCwwLDAtMC4xLDAtMC4xYzAsMCwwLTAuMSwwLTAuMWMwLTAuNS0wLjEtMS4xLTAuMi0xLjZjLTAuMS0wLjYtMC4zLTEtMC41LTEuNWMtMC4zLTAuNS0wLjctMC45LTEuMS0xLjIKCQkJCWMtMC41LTAuMy0xLTAuNC0xLjUtMC40Yy0wLjYsMC0xLjEsMC4xLTEuNSwwLjRjLTAuNSwwLjMtMC44LDAuNy0xLjEsMS4yYy0wLjMsMC41LTAuNCwxLTAuNiwxLjVjLTAuMSwwLjYtMC4yLDEuMS0wLjIsMS43CgkJCQljMCwwLDAsMC4xLDAsMC4xQy00My45LTIyNC43LTQzLjktMjI0LjctNDMuOS0yMjQuNnoiLz4KCQkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00My42LTIyNC40bC0wLjMsMGMwLDAtMC4xLDAtMC4zLDBjLTAuMiwwLTAuNCwwLTAuNS0wLjFsLTAuMiwwdi0wLjRjMC0xLDAuMS0yLDAuNC0yLjgKCQkJCWMwLjMtMC44LDAuNi0xLjUsMS4xLTJjMC4zLTAuNCwwLjgtMC43LDEuMy0wLjljMC41LTAuMiwxLTAuMywxLjctMC4zYzAuNiwwLDEuMSwwLjEsMS41LDAuM2MwLjUsMC4yLDAuOSwwLjUsMS4yLDAuOQoJCQkJYzAuNSwwLjUsMC45LDEuMiwxLjIsMmMwLjMsMC44LDAuNCwxLjcsMC40LDIuN3YwLjVsLTAuMiwwYy0wLjEsMC0wLjIsMC0wLjMsMGMtMC4yLDAtMC4zLDAtMC41LDBsLTAuMiwwdi0wLjUKCQkJCWMwLTAuNS0wLjEtMS0wLjItMS42Yy0wLjEtMC41LTAuMy0xLTAuNS0xLjRjLTAuMy0wLjUtMC42LTAuOS0xLjEtMS4xYy0wLjQtMC4zLTAuOS0wLjQtMS40LTAuNGMtMC41LDAtMSwwLjEtMS40LDAuNAoJCQkJYy0wLjQsMC4yLTAuOCwwLjYtMS4xLDEuMWMtMC4yLDAuNC0wLjQsMC45LTAuNSwxLjVjLTAuMSwwLjUtMC4yLDEuMS0wLjIsMS42djAuMWMwLDAuMSwwLDAuMSwwLDAuMkwtNDMuNi0yMjQuNHogTS00NC41LTIyNC45CgkJCQljMC4xLDAsMC4yLDAsMC40LDBjMCwwLDAsMCwwLjEsMHYtMC4xYzAtMC42LDAuMS0xLjEsMC4yLTEuN2MwLjEtMC42LDAuMy0xLjEsMC42LTEuNmMwLjMtMC42LDAuNy0xLDEuMi0xLjMKCQkJCWMwLjUtMC4zLDEtMC40LDEuNi0wLjRjMC42LDAsMS4xLDAuMiwxLjYsMC41YzAuNSwwLjMsMC45LDAuNywxLjIsMS4zYzAuMiwwLjQsMC40LDAuOSwwLjUsMS41YzAuMSwwLjYsMC4yLDEuMSwwLjIsMS43CgkJCQljMC4xLDAsMC4yLDAsMC4zLDBjMC4xLDAsMC4xLDAsMC4yLDB2LTAuMWMwLTAuOS0wLjEtMS44LTAuNC0yLjVjLTAuMy0wLjgtMC42LTEuNC0xLjEtMS45Yy0wLjMtMC4zLTAuNy0wLjYtMS4xLTAuOAoJCQkJYy0wLjQtMC4yLTAuOS0wLjMtMS40LTAuM2MtMC42LDAtMS4xLDAuMS0xLjUsMC4zYy0wLjQsMC4yLTAuOCwwLjUtMS4xLDAuOGMtMC41LDAuNS0wLjgsMS4xLTEsMS45CgkJCQlDLTQ0LjQtMjI2LjgtNDQuNS0yMjUuOS00NC41LTIyNC45TC00NC41LTIyNC45eiIvPgoJCTwvZz4KCTwvZz4KCTxjaXJjbGUgY2xhc3M9InN0MiIgY3g9Ii00MC41IiBjeT0iLTIyMiIgcj0iMC45Ii8+Cgk8cGF0aCBjbGFzcz0ic3QyIiBkPSJNLTQwLjUtMjE5TC00MC41LTIxOWMtMC4zLDAtMC42LTAuMy0wLjYtMC42di0xLjljMC0wLjMsMC4zLTAuNiwwLjYtMC42bDAsMGMwLjMsMCwwLjYsMC4zLDAuNiwwLjZ2MS45CgkJQy0zOS45LTIxOS4zLTQwLjItMjE5LTQwLjUtMjE5eiIvPgo8L2c+CjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMTQuNi0yMTcuN2MwLDAuNS0wLjQsMC45LTAuOSwwLjloLTkuNGMtMC41LDAtMC45LTAuNC0wLjktMC45di02LjVjMC0wLjUsMC40LTAuOSwwLjktMC45aDkuNAoJYzAuNSwwLDAuOSwwLjQsMC45LDAuOVYtMjE3Ljd6Ii8+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xNy41LTIyOC42YzAuMiwwLjQsMC40LDAuOSwwLjUsMS41YzAuMywwLDAuNiwwLDAuOSwwYy0wLjEtMC40LTAuMi0wLjctMC4zLTEuMWMtMC4zLTAuOC0wLjctMS41LTEuMS0xLjkKCQkJYy0wLjMtMC4zLTAuNy0wLjYtMS4xLTAuOGMtMC40LTAuMi0wLjktMC4zLTEuNS0wLjNjLTAuNiwwLTEuMSwwLjEtMS42LDAuM2MtMC41LDAuMi0wLjksMC41LTEuMiwwLjhjLTAuNSwwLjUtMC44LDEuMi0xLjEsMgoJCQljLTAuMywwLjgtMC40LDMuOS0wLjQsNC45djAuMmMwLjIsMCwwLjQsMCwwLjYsMC4xYzAuMiwwLDAuMywwLDAuMywwYzAtMC4xLDAtMC4xLDAtMC4ydi0wLjFjMC0wLjYsMC4xLTMuMywwLjItMy45CgkJCWMwLjEtMC42LDAuMy0xLjEsMC42LTEuNWMwLjMtMC42LDAuNy0xLDEuMS0xLjJjMC41LTAuMywxLTAuNCwxLjUtMC40YzAuNSwwLDEsMC4xLDEuNSwwLjRDLTE4LjItMjI5LjUtMTcuOC0yMjkuMS0xNy41LTIyOC42eiIKCQkJLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTIzLjItMjIyLjdsLTAuMywwYzAsMC0wLjEsMC0wLjMsMGMtMC4yLDAtMC40LDAtMC41LTAuMWwtMC4yLDB2LTAuNGMwLTAuOSwwLjEtNC4xLDAuNC01CgkJCWMwLjMtMC44LDAuNi0xLjUsMS4xLTJjMC4zLTAuNCwwLjgtMC43LDEuMy0wLjljMC41LTAuMiwxLTAuMywxLjctMC4zYzAuNiwwLDEuMSwwLjEsMS41LDAuM2MwLjUsMC4yLDAuOSwwLjUsMS4yLDAuOQoJCQljMC41LDAuNSwwLjksMS4yLDEuMiwyYzAuMSwwLjQsMC4yLDAuOCwwLjMsMS4ybDAsMC4zbC0wLjMsMGMtMC40LDAtMC42LDAtMC45LDBsLTAuMiwwbDAtMC4yYy0wLjEtMC41LTAuMy0xLTAuNS0xLjQKCQkJYy0wLjMtMC41LTAuNi0wLjktMS4xLTEuMWMtMC40LTAuMy0wLjktMC40LTEuNC0wLjRjLTAuNSwwLTEsMC4xLTEuNCwwLjRjLTAuNCwwLjItMC44LDAuNi0xLjEsMS4xYy0wLjIsMC40LTAuNCwwLjktMC41LDEuNQoJCQljLTAuMSwwLjUtMC4yLDMuMi0wLjIsMy44djAuMWMwLDAuMSwwLDAuMSwwLDAuMkwtMjMuMi0yMjIuN3ogTS0yNC4xLTIyMy4zYzAuMSwwLDAuMiwwLDAuNCwwYzAsMCwwLDAsMC4xLDB2LTAuMQoJCQljMC0wLjQsMC4xLTMuMywwLjItMy45YzAuMS0wLjYsMC4zLTEuMSwwLjYtMS42YzAuMy0wLjYsMC43LTEsMS4yLTEuM2MwLjUtMC4zLDEtMC40LDEuNi0wLjRjMC42LDAsMS4xLDAuMiwxLjYsMC41CgkJCWMwLjUsMC4zLDAuOSwwLjcsMS4yLDEuM2wwLDBjMC4yLDAuNCwwLjQsMC44LDAuNSwxLjNjMC4xLDAsMC4zLDAsMC41LDBjLTAuMS0wLjMtMC4xLTAuNi0wLjItMC44Yy0wLjMtMC44LTAuNi0xLjQtMS4xLTEuOQoJCQljLTAuMy0wLjMtMC43LTAuNi0xLjEtMC44Yy0wLjQtMC4yLTAuOS0wLjMtMS40LTAuM2MtMC42LDAtMS4xLDAuMS0xLjUsMC4zYy0wLjQsMC4yLTAuOCwwLjUtMS4xLDAuOGMtMC41LDAuNS0wLjgsMS4xLTEsMS45CgkJCUMtMjQtMjI3LjQtMjQuMS0yMjQuNC0yNC4xLTIyMy4zTC0yNC4xLTIyMy4zeiIvPgoJPC9nPgo8L2c+CjxjaXJjbGUgY2xhc3M9InN0MiIgY3g9Ii0yMC4xIiBjeT0iLTIyMiIgcj0iMC45Ii8+CjxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik0tMjAuMS0yMTlMLTIwLjEtMjE5Yy0wLjMsMC0wLjYtMC4zLTAuNi0wLjZ2LTEuOWMwLTAuMywwLjMtMC42LDAuNi0wLjZsMCwwYzAuMywwLDAuNiwwLjMsMC42LDAuNnYxLjkKCUMtMTkuNS0yMTkuMy0xOS44LTIxOS0yMC4xLTIxOXoiLz4KPHBhdGggY2xhc3M9InN0MyIgZD0iTTQuMi0yMTcuN2MwLDAuNS0wLjQsMC45LTAuOSwwLjlILTZjLTAuNSwwLTAuOS0wLjQtMC45LTAuOXYtNi41YzAtMC41LDAuNC0wLjksMC45LTAuOWg5LjQKCWMwLjUsMCwwLjksMC40LDAuOSwwLjlWLTIxNy43eiIvPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xLjMtMjI4LjdjMC4yLDAuNCwwLjQsMC45LDAuNSwxLjVjMC4zLDAsMC42LDAsMC45LDBjLTAuMS0wLjQtMC4yLTAuNy0wLjMtMS4xYy0wLjMtMC44LTAuNy0xLjUtMS4xLTEuOQoJCQljLTAuMy0wLjMtMC43LTAuNi0xLjEtMC44Yy0wLjQtMC4yLTAuOS0wLjMtMS41LTAuM2MtMC42LDAtMS4xLDAuMS0xLjYsMC4zYy0wLjUsMC4yLTAuOSwwLjUtMS4yLDAuOGMtMC41LDAuNS0wLjgsMS4yLTEuMSwyCgkJCWMtMC4zLDAuOC0wLjQsMy45LTAuNCw0Ljl2MC4yYzAuMiwwLDAuNCwwLDAuNiwwLjFjMC4yLDAsMC4zLDAsMC4zLDBjMC0wLjEsMC0wLjEsMC0wLjJ2LTAuMWMwLTAuNiwwLjEtMy4zLDAuMi0zLjkKCQkJYzAuMS0wLjYsMC4zLTEuMSwwLjYtMS41YzAuMy0wLjYsMC43LTEsMS4xLTEuMmMwLjUtMC4zLDEtMC40LDEuNS0wLjRjMC41LDAsMSwwLjEsMS41LDAuNEMwLjYtMjI5LjYsMS0yMjkuMiwxLjMtMjI4Ljd6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00LjQtMjIyLjhsLTAuMywwYzAsMC0wLjEsMC0wLjMsMGMtMC4yLDAtMC40LDAtMC41LTAuMWwtMC4yLDB2LTAuNGMwLTAuOSwwLjEtNC4xLDAuNC01CgkJCWMwLjMtMC44LDAuNi0xLjUsMS4xLTJjMC4zLTAuNCwwLjgtMC43LDEuMy0wLjljMC41LTAuMiwxLTAuMywxLjctMC4zYzAuNiwwLDEuMSwwLjEsMS41LDAuM2MwLjUsMC4yLDAuOSwwLjUsMS4yLDAuOQoJCQljMC41LDAuNSwwLjksMS4yLDEuMiwyYzAuMSwwLjQsMC4yLDAuOCwwLjMsMS4ybDAsMC4zbC0wLjMsMGMtMC40LDAtMC42LDAtMC45LDBsLTAuMiwwbDAtMC4yYy0wLjEtMC41LTAuMy0xLTAuNS0xLjQKCQkJYy0wLjMtMC41LTAuNi0wLjktMS4xLTEuMWMtMC40LTAuMy0wLjktMC40LTEuNC0wLjRjLTAuNSwwLTEsMC4xLTEuNCwwLjRjLTAuNCwwLjItMC44LDAuNi0xLjEsMS4xYy0wLjIsMC40LTAuNCwwLjktMC41LDEuNQoJCQljLTAuMSwwLjUtMC4yLDMuMi0wLjIsMy44djAuMWMwLDAuMSwwLDAuMSwwLDAuMkwtNC40LTIyMi44eiBNLTUuMy0yMjMuM2MwLjEsMCwwLjIsMCwwLjQsMGMwLDAsMCwwLDAuMSwwdi0wLjEKCQkJYzAtMC40LDAuMS0zLjMsMC4yLTMuOWMwLjEtMC42LDAuMy0xLjEsMC42LTEuNmMwLjMtMC42LDAuNy0xLDEuMi0xLjNjMC41LTAuMywxLTAuNCwxLjYtMC40YzAuNiwwLDEuMSwwLjIsMS42LDAuNQoJCQljMC41LDAuMywwLjksMC43LDEuMiwxLjNsMCwwYzAuMiwwLjQsMC40LDAuOCwwLjUsMS4zYzAuMSwwLDAuMywwLDAuNSwwYy0wLjEtMC4zLTAuMS0wLjYtMC4yLTAuOGMtMC4zLTAuOC0wLjYtMS40LTEuMS0xLjkKCQkJYy0wLjMtMC4zLTAuNy0wLjYtMS4xLTAuOGMtMC40LTAuMi0wLjktMC4zLTEuNC0wLjNjLTAuNiwwLTEuMSwwLjEtMS41LDAuM2MtMC40LDAuMi0wLjgsMC41LTEuMSwwLjhjLTAuNSwwLjUtMC44LDEuMS0xLDEuOQoJCQlDLTUuMi0yMjcuNS01LjMtMjI0LjQtNS4zLTIyMy4zTC01LjMtMjIzLjN6Ii8+Cgk8L2c+CjwvZz4KPHBhdGggY2xhc3M9InN0MyIgZD0iTTExLTM4OS44Yy00LjEsMC03LjUsMy4zLTcuNSw3LjVjMCwxLjksMC43LDMuNiwxLjksNC45bDUuNS0xMWw1LjYsMTEuMWMxLjItMS4zLDEuOS0zLjEsMS45LTUKCUMxOC41LTM4Ni41LDE1LjEtMzg5LjgsMTEtMzg5Ljh6Ii8+CjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjUtMzc5LjdMOS41LTM3OS43TDguMi0zNzdoMGwtMC42LDEuMmMxLDAuNSwyLjIsMC44LDMuNSwwLjhjMS4yLDAsMi40LTAuMywzLjQtMC44bC0zLjQtNi44TDkuNS0zNzkuN3oiLz4KPHBhdGggY2xhc3M9InN0MyIgZD0iTTExLTM5NWMtNywwLTEyLjYsNS42LTEyLjYsMTIuNmMwLDcsNS42LDEyLjYsMTIuNiwxMi42YzcsMCwxMi42LTUuNiwxMi42LTEyLjZDMjMuNi0zODkuNCwxOC0zOTUsMTEtMzk1egoJIE0xMS0zNzIuMmMtNS42LDAtMTAuMi00LjYtMTAuMi0xMC4yYzAtNS42LDQuNi0xMC4yLDEwLjItMTAuMnMxMC4yLDQuNiwxMC4yLDEwLjJDMjEuMi0zNzYuOCwxNi42LTM3Mi4yLDExLTM3Mi4yeiIvPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxwYXRoIGlkPSJYTUxJRF8xN18iIGNsYXNzPSJzdDMiIGQ9Ik0tNDQuMy0zMDQuNmwwLjQsMC4yYzAsMC4zLDAsMC45LDAuMywxLjFjMS4zLDAuOCwyLjUsMS43LDMsMi42YzEuNywzLjEtMS4yLDYtMy44LDUuNwoJCWMxLjQtMSwxLjgtMy4xLDEuMy01LjRjLTAuMi0wLjktMC41LTEuNy0xLjEtMi42Qy00NC4zLTMwMy40LTQ0LjMtMzAzLjktNDQuMy0zMDQuNnoiLz4KCTxwYXRoIGlkPSJYTUxJRF8xNl8iIGNsYXNzPSJzdDMiIGQ9Ik0tNDMuOC0zMDcuOWwtMC40LDEuNWMwLjUtMS4xLDEuNC0xLjksMi40LTIuNmMtMC43LDAuOC0xLjQsMS43LTEuOCwyLjUKCQljMC43LTAuOSwxLjYtMS41LDIuNi0xLjhjLTEuNCwxLjItMi40LDIuNS0zLjMsMy44bC0wLjctMC4zQy00NC43LTMwNS44LTQ0LjQtMzA2LjktNDMuOC0zMDcuOXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8xNV8iIGNsYXNzPSJzdDMiIGQ9Ik0tNDEuOC0zMDljLTAuNSwwLjUtMS4zLDEuNC0xLjgsMi4yYy0wLjQsMC43LTAuNywxLjMtMC44LDEuN2MtMC4xLDAuMy0wLjUsMC4zLTAuNC0wLjJsMCwwCgkJYzAuMS0wLjMsMC40LTAuOCwwLjYtMS4zbDAuNC0xLjRjLTAuMiwwLjYtMC40LDEuMS0wLjYsMS44YzAsMC0wLjMsMC42LTAuMywwLjhjMCwwLjEsMCwwLjEtMC4xLDAuMmwwLDBjMCwwLjEtMC4xLDAuMS0wLjEsMC4yCgkJYzAsMCwwLDAsMCwwYzAsMC4xLDAsMC4yLDAsMC4yYzAuMSwwLjEsMC43LDAuMywwLjcsMC4zYzAuOC0xLjMsMS45LTIuNiwzLjMtMy44Yy0xLDAuMy0xLjksMC45LTIuNiwxLjgKCQlDLTQzLjItMzA3LjMtNDIuNS0zMDguMi00MS44LTMwOXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8xNF8iIGNsYXNzPSJzdDMiIGQ9Ik0tNDQuMy0zMDQuNmwwLjEsMC4xYzAuOC0xLjMsMS45LTIuNiwzLjMtMy44Yy0wLjgsMC42LTEuOCwxLjUtMi4zLDIuMWMtMC42LDAuNy0wLjIsMC0wLjIsMAoJCXMwLjMtMC44LDAuOC0xLjJjLTAuMywwLjEtMC44LDAuOC0wLjksMC45YzAsMC0wLjQsMC44LTAuNiwxLjVDLTQ0LjItMzA0LjktNDQuMy0zMDQuNi00NC4zLTMwNC42eiIvPgoJPHBhdGggaWQ9IlhNTElEXzEzXyIgY2xhc3M9InN0MyIgZD0iTS00NC41LTMwNC42bDAuOSwwLjFjLTAuMywwLjksMC41LDEuNSwwLjgsMS43YzAuNiwwLjMsMS4yLDAuNywxLjYsMS4xYzAuOSwwLjgsMS4zLDEuOSwxLjMsMwoJCWMwLDEuMS0wLjUsMi4zLTEuNCwzYy0wLjgsMC43LTIsMS0zLjEsMWMtMC43LDAtMS4zLDAtMi0wLjNjLTEuNS0wLjUtMi43LTEuOC0yLjgtMy40Yy0wLjEtMS4yLDAuMi0yLjIsMS4xLTMuMgoJCWMwLjUtMC41LDEuNS0xLjEsMi4yLTEuNmMwLjMtMC4yLDAuNy0wLjksMC0yLjFsMC4xLTAuMWwxLDAuN2wtMC45LTAuNGMwLjEsMC4xLDAuMywwLjYsMC4zLDAuN2MwLjEsMC40LDAuMSwwLjgsMCwwLjkKCQljLTAuNCwwLjgtMS4yLDEtMS43LDEuNGMtMC45LDAuOC0yLDEuNC0xLjksMy41YzAuMSwxLjEsMC45LDIuMywyLjEsMi45YzAuNywwLjMsMS41LDAuNSwyLjMsMC41YzAuNywwLDIuMS0wLjQsMi45LTEKCQljMC44LTAuNywxLjMtMS43LDEuMy0yLjdjMC0xLjEtMC40LTIuMS0xLjItMi44Yy0wLjUtMC40LTEuMi0wLjktMS43LTEuMmMtMC41LTAuMy0xLTEtMC45LTEuN0wtNDQuNS0zMDQuNnoiLz4KCTxwYXRoIGlkPSJYTUxJRF8xMl8iIGNsYXNzPSJzdDMiIGQ9Ik0tNDQuOC0zMDMuMWMtMC4xLDAuNS0wLjIsMS40LTAuNiwxLjdjLTAuMiwwLjEtMC40LDAuMy0wLjUsMC40Yy0wLjgsMC41LTEuNSwxLTEuOSwyLjIKCQljLTAuMSwwLjMsMCwwLjUsMC4xLDAuOGMwLjIsMC44LDAuNywxLjYsMS4xLDIuMWMwLDAsMC4xLDAuMSwwLjEsMC4xYzAuMywwLjQsMC41LDAuNSwxLjgsMC44bDAsMC4xYy0wLjgtMC4yLTEuNC0wLjQtMS45LTAuOQoJCWMwLDAtMC4xLTAuMS0wLjEtMC4xYy0wLjQtMC41LTEtMS4zLTEuMi0yLjFjLTAuMS0wLjMtMC4xLTAuNi0wLjEtMC45YzAuNC0xLjMsMS4xLTEuOCwxLjktMi4zYzAuMi0wLjEsMC40LTAuMiwwLjYtMC40CgkJQy00NS4xLTMwMS43LTQ1LTMwMi41LTQ0LjgtMzAzLjF6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMTFfIiBjbGFzcz0ic3QzIiBkPSJNLTQ0LjQtMzAxLjFjMCwwLjUsMCwwLjgsMC4xLDEuMmMwLjEsMC4yLDAuNCwwLjUsMC41LDAuOWMwLjEsMC40LDAuMiwwLjksMC4yLDEuMQoJCWMwLDAuMywwLDAuOS0wLjIsMS41Yy0wLjEsMC41LTAuMywxLTAuNywxLjJjLTAuNC0wLjEtMC45LTAuMi0xLjItMC41Yy0wLjYtMC41LTEuMS0xLjMtMS4xLTJjLTAuMS0wLjYsMC41LTEuNCwxLjItMS45CgkJYzAuNi0wLjQsMC44LTAuOCwwLjktMS41Yy0wLjIsMC42LTAuNCwxLjEtMSwxLjRjLTAuOSwwLjUtMS4zLDEuMi0xLjMsMmMwLjEsMC45LDAuNCwxLjYsMS4yLDIuMWMwLjMsMC4yLDAuOSwwLjUsMS4zLDAuNXYwCgkJYzAuMy0wLjEsMC42LTAuNSwwLjgtMS4xYzAuMi0wLjYsMC4yLTEuMywwLjItMS43YzAtMC4zLTAuMS0wLjgtMC4zLTEuNGMtMC4xLTAuMy0wLjMtMC42LTAuNC0wLjgKCQlDLTQ0LjQtMzAwLjEtNDQuNC0zMDAuNi00NC40LTMwMS4xeiIvPgoJPHBhdGggaWQ9IlhNTElEXzEwXyIgY2xhc3M9InN0MyIgZD0iTS00NC41LTI5OWMwLDAuNCwwLjIsMC44LDAuMiwxLjNjMC4xLDAuNCwwLDAuNywwLDFjMCwwLjQtMC4xLDEtMC4zLDEuMwoJCWMtMC4yLTAuMS0wLjItMC4yLTAuMy0wLjNjLTAuMS0wLjItMC4yLTAuNC0wLjMtMC42Yy0wLjEtMC4yLTAuMS0wLjMtMC4yLTAuNWMwLTAuMywwLTAuOCwwLjMtMS4zCgkJQy00NC43LTI5OC40LTQ0LjctMjk4LjUtNDQuNS0yOTljLTAuMiwwLjUtMC4zLDAuNS0wLjYsMC45Yy0wLjMsMC40LTAuNCwwLjktMC40LDEuNGMwLDAuMiwwLjEsMC40LDAuMSwwLjYKCQljMC4xLDAuMiwwLjIsMC40LDAuMywwLjZjMC4yLDAuMywwLjQsMC40LDAuNSwwLjRoMGwwLDB2MGMwLjItMC4yLDAuMy0wLjUsMC40LTAuN2MwLjEtMC4zLDAuMS0wLjUsMC4xLTAuOWMwLTAuMywwLTAuNi0wLjEtMQoJCUMtNDQuMy0yOTguMi00NC40LTI5OC43LTQ0LjUtMjk5eiIvPgoJPHBhdGggaWQ9IlhNTElEXzlfIiBjbGFzcz0ic3QzIiBkPSJNLTQ0LjUtMzAzLjVjMCwwLjUsMC4xLDEuNiwwLjIsMmMwLDAuMSwwLjQsMC43LDAuNywxLjVjMC4yLDAuNSwwLjIsMSwwLjMsMS4xCgkJYzAuMSwwLjYsMCwxLjYtMC4yLDIuNmMtMC4xLDAuNS0wLjUsMS4yLTAuOSwxLjRsLTAuMSwwLjFjMC4yLDAsMC44LTAuNiwxLTEuM2MwLjMtMS4yLDAuNS0xLjcsMC4zLTNjMC0wLjEtMC4xLTAuNi0wLjMtMQoJCWMtMC4zLTAuNy0wLjctMS40LTAuOC0xLjVDLTQ0LjMtMzAxLjktNDQuNS0zMDIuOS00NC41LTMwMy41eiIvPgoJPHBhdGggaWQ9IlhNTElEXzhfIiBjbGFzcz0ic3QzIiBkPSJNLTQ0LjMtMzA0LjNjMCwwLjYsMCwwLjgsMC4xLDEuMmMwLjEsMC41LDAuNywxLjEsMC45LDEuOWMwLjUsMS40LDAuMywzLjMsMCw0LjgKCQljLTAuMSwwLjUtMC43LDEuMy0xLjMsMS41bDAuNCwwLjFjMC4yLDAsMC45LTAuNiwxLjEtMS4zYzAuNC0xLDAuNS0yLjMsMC4zLTMuNmMwLTAuMS0wLjItMS4zLTAuNC0xLjdjLTAuMy0wLjctMC44LTEuMy0wLjgtMS41CgkJQy00NC4xLTMwMy4xLTQ0LjMtMzAzLjYtNDQuMy0zMDQuM3oiLz4KCTxwYXRoIGlkPSJYTUxJRF83XyIgY2xhc3M9InN0MyIgZD0iTS00NC42LTMwNC43YzAsMCwwLDAuMywwLDAuN2MwLDAuNSwwLDEuMiwwLDIuMWMwLDAuOSwwLDIsMCwzLjFjMCwxLjIsMCwyLjQsMCwzLjdoMAoJCWMwLTEuMiwwLTIuNCwwLTMuNWMwLTEuMSwwLTIuMiwwLTNzMC0xLjYsMC0yLjJTLTQ0LjYtMzA0LjYtNDQuNi0zMDQuN0MtNDQuNi0zMDQuNy00NC42LTMwNC43LTQ0LjYtMzA0LjcKCQlDLTQ0LjYtMzA0LjctNDQuNi0zMDQuNy00NC42LTMwNC43YzAsMC4xLDAsMC40LDAuMSwxYzAsMC41LDAsMS4zLDAsMi4yYzAsMC45LDAsMS45LDAsMy4xYzAsMS4xLDAsMi4zLDAsMy41YzAsMC0wLjEsMC0wLjEsMAoJCWMwLTEuMywwLTIuNiwwLTMuN2MwLTEuMiwwLTIuMywwLTMuMmMwLTAuOSwwLTEuNiwwLTIuMUMtNDQuNi0zMDQuNC00NC42LTMwNC43LTQ0LjYtMzA0Ljd6Ii8+CjwvZz4KPGc+Cgk8cGF0aCBpZD0iWE1MSURfMjJfIiBjbGFzcz0ic3QzIiBkPSJNLTI4LjktMzA0LjZsMC40LDAuMmMwLDAuMywwLDAuOSwwLjMsMS4xYzEuMywwLjgsMi41LDEuNywzLDIuNmMxLjcsMy4xLTEuMiw2LTMuOCw1LjcKCQljMS40LTEsMS44LTMuMSwxLjMtNS40Yy0wLjItMC45LTAuNS0xLjctMS4xLTIuNkMtMjktMzAzLjQtMjguOS0zMDMuOS0yOC45LTMwNC42eiIvPgoJPHBhdGggaWQ9IlhNTElEXzIxXyIgY2xhc3M9InN0MyIgZD0iTS0yOC40LTMwNy45bC0wLjQsMS41YzAuNS0xLjEsMS40LTEuOSwyLjQtMi42Yy0wLjcsMC44LTEuNCwxLjctMS44LDIuNQoJCWMwLjctMC45LDEuNi0xLjUsMi42LTEuOGMtMS40LDEuMi0yLjQsMi41LTMuMywzLjhsLTAuNy0wLjNDLTI5LjQtMzA1LjgtMjktMzA2LjktMjguNC0zMDcuOXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8yMF8iIGNsYXNzPSJzdDMiIGQ9Ik0tMjYuNC0zMDljLTAuNSwwLjUtMS4zLDEuNC0xLjgsMi4yYy0wLjQsMC43LTAuNywxLjMtMC44LDEuN2MtMC4xLDAuMy0wLjUsMC4zLTAuNC0wLjJsMCwwCgkJYzAuMS0wLjMsMC40LTAuOCwwLjYtMS4zbDAuNC0xLjRjLTAuMiwwLjYtMC40LDEuMS0wLjYsMS44YzAsMC0wLjMsMC42LTAuMywwLjhjMCwwLjEsMCwwLjEtMC4xLDAuMmwwLDBjMCwwLjEtMC4xLDAuMS0wLjEsMC4yCgkJYzAsMCwwLDAsMCwwYzAsMC4xLDAsMC4yLDAsMC4yYzAuMSwwLjEsMC43LDAuMywwLjcsMC4zYzAuOC0xLjMsMS45LTIuNiwzLjMtMy44Yy0xLDAuMy0xLjksMC45LTIuNiwxLjgKCQlDLTI3LjgtMzA3LjMtMjcuMS0zMDguMi0yNi40LTMwOXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8xOV8iIGNsYXNzPSJzdDMiIGQ9Ik0tMjktMzA0LjZsMC4xLDAuMWMwLjgtMS4zLDEuOS0yLjYsMy4zLTMuOGMtMC44LDAuNi0xLjgsMS41LTIuMywyLjFjLTAuNiwwLjctMC4yLDAtMC4yLDAKCQlzMC4zLTAuOCwwLjgtMS4yYy0wLjMsMC4xLTAuOCwwLjgtMC45LDAuOWMwLDAtMC40LDAuOC0wLjYsMS41Qy0yOC45LTMwNC45LTI5LTMwNC42LTI5LTMwNC42eiIvPgoJPHBhdGggaWQ9IlhNTElEXzE4XyIgY2xhc3M9InN0MyIgZD0iTS0yOS4xLTMwNC42bDAuOSwwLjFjLTAuMywwLjksMC41LDEuNSwwLjgsMS43YzAuNiwwLjMsMS4yLDAuNywxLjYsMS4xYzAuOSwwLjgsMS4zLDEuOSwxLjMsMwoJCWMwLDEuMS0wLjUsMi4zLTEuNCwzYy0wLjgsMC43LTIsMS0zLjEsMWMtMC43LDAtMS4zLDAtMi0wLjNjLTEuNS0wLjUtMi43LTEuOC0yLjgtMy40Yy0wLjEtMS4yLDAuMi0yLjIsMS4xLTMuMgoJCWMwLjUtMC41LDEuNS0xLjEsMi4yLTEuNmMwLjMtMC4yLDAuNy0wLjksMC0yLjFsMC4xLTAuMWwxLDAuN2wtMC45LTAuNGMwLjEsMC4xLDAuMywwLjYsMC4zLDAuN2MwLjEsMC40LDAuMSwwLjgsMCwwLjkKCQljLTAuNCwwLjgtMS4yLDEtMS43LDEuNGMtMC45LDAuOC0yLDEuNC0xLjksMy41YzAuMSwxLjEsMC45LDIuMywyLjEsMi45YzAuNywwLjMsMS41LDAuNSwyLjMsMC41YzAuNywwLDIuMS0wLjQsMi45LTEKCQljMC44LTAuNywxLjMtMS43LDEuMy0yLjdjMC0xLjEtMC40LTIuMS0xLjItMi44Yy0wLjUtMC40LTEuMi0wLjktMS43LTEuMmMtMC41LTAuMy0xLTEtMC45LTEuN0wtMjkuMS0zMDQuNnoiLz4KCTxwYXRoIGlkPSJYTUxJRF82XyIgY2xhc3M9InN0MyIgZD0iTS0yOS40LTMwMy4xYy0wLjEsMC41LTAuMiwxLjQtMC42LDEuN2MtMC4yLDAuMS0wLjQsMC4zLTAuNSwwLjRjLTAuOCwwLjUtMS41LDEtMS45LDIuMgoJCWMtMC4xLDAuMywwLDAuNSwwLjEsMC44YzAuMiwwLjgsMC43LDEuNiwxLjEsMi4xYzAsMCwwLjEsMC4xLDAuMSwwLjFjMC4zLDAuNCwwLjUsMC41LDEuOCwwLjhsMCwwLjFjLTAuOC0wLjItMS40LTAuNC0xLjktMC45CgkJYzAsMC0wLjEtMC4xLTAuMS0wLjFjLTAuNC0wLjUtMS0xLjMtMS4yLTIuMWMtMC4xLTAuMy0wLjEtMC42LTAuMS0wLjljMC40LTEuMywxLjEtMS44LDEuOS0yLjNjMC4yLTAuMSwwLjQtMC4yLDAuNi0wLjQKCQlDLTI5LjgtMzAxLjctMjkuNi0zMDIuNS0yOS40LTMwMy4xeiIvPgoJPHBhdGggaWQ9IlhNTElEXzVfIiBjbGFzcz0ic3QzIiBkPSJNLTI5LjEtMzAxLjFjMCwwLjUsMCwwLjgsMC4xLDEuMmMwLjEsMC4yLDAuNCwwLjUsMC41LDAuOWMwLjEsMC40LDAuMiwwLjksMC4yLDEuMQoJCWMwLDAuMywwLDAuOS0wLjIsMS41Yy0wLjEsMC41LTAuMywxLTAuNywxLjJjLTAuNC0wLjEtMC45LTAuMi0xLjItMC41Yy0wLjYtMC41LTEuMS0xLjMtMS4xLTJjLTAuMS0wLjYsMC41LTEuNCwxLjItMS45CgkJYzAuNi0wLjQsMC44LTAuOCwwLjktMS41Yy0wLjIsMC42LTAuNCwxLjEtMSwxLjRjLTAuOSwwLjUtMS4zLDEuMi0xLjMsMmMwLjEsMC45LDAuNCwxLjYsMS4yLDIuMWMwLjMsMC4yLDAuOSwwLjUsMS4zLDAuNXYwCgkJYzAuMy0wLjEsMC42LTAuNSwwLjgtMS4xYzAuMi0wLjYsMC4yLTEuMywwLjItMS43YzAtMC4zLTAuMS0wLjgtMC4zLTEuNGMtMC4xLTAuMy0wLjMtMC42LTAuNC0wLjhDLTI5LTMwMC4xLTI5LTMwMC42LTI5LjEtMzAxLjF6CgkJIi8+Cgk8cGF0aCBpZD0iWE1MSURfNF8iIGNsYXNzPSJzdDMiIGQ9Ik0tMjkuMS0yOTljMCwwLjQsMC4yLDAuOCwwLjIsMS4zYzAuMSwwLjQsMCwwLjcsMCwxYzAsMC40LTAuMSwxLTAuMywxLjMKCQljLTAuMi0wLjEtMC4yLTAuMi0wLjMtMC4zYy0wLjEtMC4yLTAuMi0wLjQtMC4zLTAuNmMtMC4xLTAuMi0wLjEtMC4zLTAuMi0wLjVjMC0wLjMsMC0wLjgsMC4zLTEuMwoJCUMtMjkuNC0yOTguNC0yOS4zLTI5OC41LTI5LjEtMjk5Yy0wLjIsMC41LTAuMywwLjUtMC42LDAuOWMtMC4zLDAuNC0wLjQsMC45LTAuNCwxLjRjMCwwLjIsMC4xLDAuNCwwLjEsMC42CgkJYzAuMSwwLjIsMC4yLDAuNCwwLjMsMC42YzAuMiwwLjMsMC40LDAuNCwwLjUsMC40aDBsMCwwdjBjMC4yLTAuMiwwLjMtMC41LDAuNC0wLjdjMC4xLTAuMywwLjEtMC41LDAuMS0wLjljMC0wLjMsMC0wLjYtMC4xLTEKCQlDLTI4LjktMjk4LjItMjkuMS0yOTguNy0yOS4xLTI5OXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8zXyIgY2xhc3M9InN0MyIgZD0iTS0yOS4xLTMwMy41YzAsMC41LDAuMSwxLjYsMC4yLDJjMCwwLjEsMC40LDAuNywwLjcsMS41YzAuMiwwLjUsMC4yLDEsMC4zLDEuMQoJCWMwLjEsMC42LDAsMS42LTAuMiwyLjZjLTAuMSwwLjUtMC41LDEuMi0wLjksMS40bC0wLjEsMC4xYzAuMiwwLDAuOC0wLjYsMS0xLjNjMC4zLTEuMiwwLjUtMS43LDAuMy0zYzAtMC4xLTAuMS0wLjYtMC4zLTEKCQljLTAuMy0wLjctMC43LTEuNC0wLjgtMS41Qy0yOC45LTMwMS45LTI5LjEtMzAyLjktMjkuMS0zMDMuNXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8yXyIgY2xhc3M9InN0MyIgZD0iTS0yOC45LTMwNC4zYzAsMC42LDAsMC44LDAuMSwxLjJjMC4xLDAuNSwwLjcsMS4xLDAuOSwxLjljMC41LDEuNCwwLjMsMy4zLDAsNC44CgkJYy0wLjEsMC41LTAuNywxLjMtMS4zLDEuNWwwLjQsMC4xYzAuMiwwLDAuOS0wLjYsMS4xLTEuM2MwLjQtMSwwLjUtMi4zLDAuMy0zLjZjMC0wLjEtMC4yLTEuMy0wLjQtMS43Yy0wLjMtMC43LTAuOC0xLjMtMC44LTEuNQoJCUMtMjguNy0zMDMuMS0yOC45LTMwMy42LTI4LjktMzA0LjN6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMV8iIGNsYXNzPSJzdDMiIGQ9Ik0tMjkuMi0zMDQuN2MwLDAsMCwwLjMsMCwwLjdjMCwwLjUsMCwxLjIsMCwyLjFjMCwwLjksMCwyLDAsMy4xYzAsMS4yLDAsMi40LDAsMy43aDAKCQljMC0xLjIsMC0yLjQsMC0zLjVjMC0xLjEsMC0yLjIsMC0zczAtMS42LDAtMi4yQy0yOS4yLTMwNC4yLTI5LjItMzA0LjYtMjkuMi0zMDQuN0MtMjkuMi0zMDQuNy0yOS4yLTMwNC43LTI5LjItMzA0LjcKCQlDLTI5LjItMzA0LjctMjkuMi0zMDQuNy0yOS4yLTMwNC43YzAsMC4xLDAsMC40LDAuMSwxYzAsMC41LDAsMS4zLDAsMi4yYzAsMC45LDAsMS45LDAsMy4xYzAsMS4xLDAsMi4zLDAsMy41YzAsMC0wLjEsMC0wLjEsMAoJCWMwLTEuMywwLTIuNiwwLTMuN2MwLTEuMiwwLTIuMywwLTMuMmMwLTAuOSwwLTEuNiwwLTIuMUMtMjkuMi0zMDQuNC0yOS4yLTMwNC43LTI5LjItMzA0Ljd6Ii8+CjwvZz4KPGc+Cgk8cGF0aCBpZD0iWE1MSURfMzNfIiBjbGFzcz0ic3QzIiBkPSJNMzIuMSwyMC4ybDIsMWMtMC4yLDEuMywwLjEsNC4xLDEuNCw0LjljNS43LDMuNSwxMS4xLDcuNCwxMy4yLDExLjMKCQljNy41LDEzLjYtNS4zLDI2LjItMTYuNCwyNWM2LTQuNSw3LjgtMTMuNiw1LjUtMjMuNmMtMC45LTMuOS0yLjMtNy41LTQuOS0xMS41QzMxLjgsMjUuNCwzMi4xLDIyLjksMzIuMSwyMC4yeiIvPgoJPHBhdGggaWQ9IlhNTElEXzMyXyIgY2xhc3M9InN0MyIgZD0iTTM0LjIsNS41bC0xLjcsNi42QzM0LjksNy41LDM4LjcsNCw0Mi45LDAuOWMtMy4xLDMuNi02LDcuMy03LjcsMTAuOWMyLjktNC4xLDYuOS02LjQsMTEuNC04CgkJYy01LjksNS4zLTEwLjYsMTEtMTQuMiwxNi43bC0yLjktMS4yQzMwLDE0LjcsMzEuNywxMCwzNC4yLDUuNXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8zMV8iIGNsYXNzPSJzdDMiIGQ9Ik00Mi45LDAuOWMtMi4xLDIuMy01LjgsNi4zLTcuOCw5LjdjLTEuNywzLTIuOCw1LjYtMy41LDcuNGMtMC40LDEuMS0yLjEsMS4xLTEuNi0wLjhsMC0wLjEKCQljMC42LTEuNSwxLjYtMy42LDIuNi01LjVsMS41LTYuMmMtMC44LDIuNi0xLjgsNS0yLjUsNy43YzAsMC0xLjIsMi43LTEuNSwzLjRjLTAuMSwwLjItMC4yLDAuNS0wLjMsMC43bDAsMAoJCWMtMC4xLDAuMy0wLjIsMC42LTAuMywwLjljMCwwLDAsMC4xLDAsMC4xYy0wLjEsMC40LTAuMSwwLjctMC4xLDAuN2MwLjUsMC40LDIuOCwxLjQsMi44LDEuNGMzLjYtNS43LDguMy0xMS40LDE0LjItMTYuNwoJCWMtNC41LDEuNS04LjQsMy44LTExLjQsOEMzNyw4LjEsMzkuOCw0LjUsNDIuOSwwLjl6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMzBfIiBjbGFzcz0ic3QzIiBkPSJNMzEuOCwyMC4xbDAuNSwwLjRjMy42LTUuNyw4LjMtMTEuNCwxNC4yLTE2LjdjLTMuNCwyLjgtOCw2LjYtOS45LDkuMmMtMi40LDMuMi0xLDAuMi0xLDAuMgoJCXMxLjMtMy40LDMuNi01LjVjLTEuMywwLjYtMy42LDMuNS00LDQuMWMwLDAtMS43LDMuMy0yLjcsNi40QzMyLjMsMTksMzEuOCwyMC4xLDMxLjgsMjAuMXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8yOV8iIGNsYXNzPSJzdDMiIGQ9Ik0zMS4xLDE5LjlsNCwwLjZjLTEuMiw0LDIuMyw2LjcsMy41LDcuNGMyLjYsMS40LDUuMSwyLjksNyw0LjdjMy43LDMuNCw1LjgsOC4yLDUuOCwxMy4yCgkJYzAsNS0yLjMsOS44LTYuMiwxMy4xYy0zLjYsMy04LjYsNC4zLTEzLjUsNC4zYy0zLDAtNS44LTAuMS04LjctMS4xYy02LjctMi4zLTExLjctOC0xMi4xLTE0LjljLTAuNC01LjQsMC44LTkuNSw1LTEzLjgKCQljMi4yLTIuMyw2LjUtNC44LDkuNS02LjljMS41LTEsMy0zLjksMC05LjJsMC42LTAuNWw0LjQsM2wtMy43LTEuNWMwLjMsMC41LDEuMiwyLjUsMS40LDMuMWMwLjQsMS43LDAuMiwzLjQtMC4xLDQuMQoJCWMtMS45LDMuNC01LjEsNC4zLTcuNSw2LjNjLTQuMSwzLjQtOC42LDYuMS04LjEsMTUuNWMwLjIsNC42LDMuOCwxMC4yLDkuMiwxMi44YzMsMS41LDYuNSwyLjEsMTAuMSwyLjNjMy4yLDAuMSw5LjItMS43LDEyLjYtNC41CgkJYzMuNS0yLjksNS41LTcuNCw1LjUtMTJjMC00LjYtMS44LTktNS4zLTEyLjFjLTItMS44LTUuMi00LTcuMy01LjFjLTItMS4yLTQuNi00LjQtMy43LTcuNUwzMS4xLDE5Ljl6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMjhfIiBjbGFzcz0ic3QzIiBkPSJNMjkuOSwyNi43Yy0wLjQsMi4xLTAuOSw1LjktMi43LDcuNGMtMC44LDAuNi0xLjYsMS4xLTIuNCwxLjdjLTMuMywyLjMtNi42LDQuNC04LjEsOS44CgkJYy0wLjMsMS4yLDAsMi40LDAuMiwzLjVjMC44LDMuMywzLjIsNi45LDUsOWMwLDAuMSwwLjQsMC4zLDAuNCwwLjRjMS41LDEuOCwyLDIuMyw3LjcsMy42bC0wLjEsMC42Yy0zLjUtMC45LTYuMy0xLjctOC4xLTMuOAoJCWMwLDAtMC4zLTAuNC0wLjMtMC40Yy0xLjktMi4yLTQuMy01LjktNS4yLTkuM2MtMC4zLTEuNC0wLjYtMi40LTAuMi0zLjljMS42LTUuNiw1LTcuOCw4LjQtMTAuMmMwLjgtMC41LDEuNy0xLDIuNC0xLjYKCQlDMjguMywzMi41LDI5LjEsMjkuMywyOS45LDI2Ljd6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMjdfIiBjbGFzcz0ic3QzIiBkPSJNMzEuMywzNS40YzAsMi40LTAuMiwzLjYsMC40LDUuM2MwLjQsMSwxLjYsMi40LDIsMy43YzAuNSwxLjgsMS4xLDMuOCwxLDUKCQljMCwxLjQtMC4xLDQtMC43LDYuN2MtMC41LDIuMy0xLjUsNC4yLTMuMyw1LjNjLTEuOC0wLjQtMy45LTEtNS4yLTIuMWMtMi40LTIuMS00LjYtNS43LTQuOS04LjdjLTAuMi0yLjUsMi4xLTYuMyw1LjQtOC4xCgkJYzIuOC0xLjYsMy40LTMuNCw0LTYuNGMtMC44LDIuNi0xLjYsNC43LTQuMyw2LjFjLTMuOSwyLTUuOCw1LjQtNS43LDguNmMwLjMsNC4xLDEuOSw2LjksNS4yLDkuMmMxLjQsMSw0LDIsNS42LDIuM3YtMC4yCgkJYzEuMi0wLjIsMi44LTIuMiwzLjYtNC45YzAuNy0yLjQsMS01LjYsMC45LTcuNWMwLTEuMi0wLjYtMy42LTEuNS01LjljLTAuNS0xLjItMS4zLTIuNS0xLjgtMy40QzMxLjYsMzkuNSwzMS42LDM3LjYsMzEuMywzNS40eiIKCQkvPgoJPHBhdGggaWQ9IlhNTElEXzI2XyIgY2xhc3M9InN0MyIgZD0iTTMxLjEsNDQuNWMwLDEuNiwwLjcsMy43LDEsNS44YzAuMiwxLjYsMC4xLDMuMSwwLjEsNC41YzAsMS42LTAuNiw0LjUtMS4zLDUuOQoJCWMtMC43LTAuMy0xLTAuNy0xLjQtMS4zYy0wLjYtMC44LTAuOS0xLjYtMS4zLTIuNWMtMC4zLTAuNy0wLjYtMS41LTAuNy0yLjRjLTAuMi0xLjQtMC4xLTMuNSwxLjQtNS43YzEuMi0xLjcsMS41LTEuOSwxLjktMy45CgkJYy0wLjYsMS44LTEsMi0yLjMsMy41Yy0xLjQsMS43LTEuNyw0LjEtMS43LDYuMWMwLDAuOCwwLjMsMS43LDAuNywyLjZjMC40LDAuOSwwLjcsMS44LDEuMiwyLjVjMC44LDEuMSwxLjcsMS44LDIuMiwxLjloMGwwLDAKCQl2LTAuMWMwLjktMSwxLjQtMiwxLjYtM2MwLjItMS4yLDAuMy0yLjQsMC40LTMuOGMwLjEtMS4yLDAtMi44LTAuMy00LjVDMzIuMiw0OCwzMS40LDQ1LjksMzEuMSw0NC41eiIvPgoJPHBhdGggaWQ9IlhNTElEXzI1XyIgY2xhc3M9InN0MyIgZD0iTTMxLjIsMjQuOGMwLDIuNCwwLjIsNi45LDAuOSw4LjZjMC4yLDAuNiwxLjksMy4yLDMuMSw2LjRjMC44LDIuMiwxLDQuMiwxLjIsNC44CgkJYzAuNiwyLjYtMC4xLDctMS4xLDExLjJjLTAuNSwyLjMtMiw1LjEtMy44LDYuMmwtMC40LDAuNmMxLDAsMy41LTIuNSw0LjQtNS41YzEuNS01LjIsMi4xLTcuNSwxLjQtMTMuM2MtMC4xLTAuNi0wLjMtMi40LTEuMi00LjUKCQljLTEuMy0zLjEtMy4xLTYtMy40LTYuNkMzMS44LDMxLjgsMzEuMywyNy42LDMxLjIsMjQuOHoiLz4KCTxwYXRoIGlkPSJYTUxJRF8yNF8iIGNsYXNzPSJzdDMiIGQ9Ik0zMi4xLDIxLjVjLTAuMSwyLjUtMC4yLDMuNCwwLjMsNS4yYzAuNSwyLDMuMSw0LjgsNC4xLDguMWMyLDYuMywxLjUsMTQuNCwwLDIwLjgKCQljLTAuNiwyLjMtMy4yLDUuNS01LjgsNi42bDEuOSwwLjVjMS4xLDAsMy44LTIuNiw0LjgtNS41YzEuNy00LjYsMi0xMCwxLjMtMTUuN2MwLTAuNi0xLTUuNS0xLjgtNy41Yy0xLjItMy4xLTMuNS01LjgtMy43LTYuNAoJCUMzMi45LDI2LjUsMzIsMjQuNCwzMi4xLDIxLjV6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMjNfIiBjbGFzcz0ic3QzIiBkPSJNMzAuNiwxOS44YzAsMCwwLDEuMSwwLjEsMy4yYzAsMi4xLDAsNS4zLDAsOS4yYzAsMy45LDAsOC42LDAsMTMuN2MwLDUuMSwwLDEwLjcsMCwxNi4yaDAKCQljMC01LjIsMC0xMC41LDAtMTUuM2MwLTQuOSwwLTkuNCwwLTEzLjNzMC03LjEsMC05LjRjMC0yLjMsMC0zLjgsMC00LjNDMzAuNywxOS44LDMwLjYsMTkuOCwzMC42LDE5LjhjMCwwLDAuMSwwLDAuMiwwCgkJYzAsMC41LDAsMS45LDAsNC4zYzAsMi4zLDAsNS42LDAsOS41YzAsMy45LDAsOC40LDAsMTMuNGMwLDQuOSwwLDEwLjIsMCwxNS41Yy0wLjEsMC0wLjIsMC0wLjMsMGMwLTUuNiwwLTExLjEsMC0xNi4zCgkJYzAtNS4xLDAtOS45LDAtMTMuOGMwLTMuOSwwLTcuMSwwLTkuMkMzMC42LDIwLjksMzAuNiwxOS44LDMwLjYsMTkuOHoiLz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMTktMjU0LjZjLTEuNiwwLTMsMC41LTMuMiwxLjJjLTAuMSwwLjMsMC4yLDAuNiwwLjYsMC45bDIuNS0xLjlsMS44LDJjMC41LTAuMiwwLjktMC41LDAuOS0wLjgKCQkJQy0xNi4yLTI1My45LTE3LjQtMjU0LjUtMTktMjU0LjZ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0yMC45LTI1Mi4yYzAuNCwwLjEsMC44LDAuMiwxLjMsMC4yYzAuNSwwLDAuOSwwLDEuMy0wLjFsLTEuMS0xLjJMLTIwLjktMjUyLjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xOC45LTI1NS41Yy0yLjctMC4xLTUuMSwwLjktNS40LDIuMWMtMC4yLDEuMiwxLjgsMi4yLDQuNSwyLjNjMi43LDAuMSw1LjEtMC45LDUuNC0yLjEKCQkJUy0xNi4xLTI1NS40LTE4LjktMjU1LjV6IE0tMTkuNi0yNTEuNWMtMi4yLDAtMy44LTAuOS0zLjYtMS44YzAuMi0xLDIuMS0xLjcsNC4zLTEuN3MzLjgsMC45LDMuNiwxLjhTLTE3LjQtMjUxLjUtMTkuNi0yNTEuNXoiLz4KCTwvZz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMjAuNS0yNDYuOWMtMy4zLDAtNS45LTEuMy01LjktM2MwLTAuOSwwLjctMS43LDEuOS0yLjJsMC4yLDAuNGMtMS4xLDAuNS0xLjcsMS4yLTEuNywxLjkKCQkJYzAsMS40LDIuNSwyLjYsNS41LDIuNmMyLjQsMCw0LjUtMC43LDUuMi0xLjhsMC4zLDAuMkMtMTUuOC0yNDcuNy0xOC0yNDYuOS0yMC41LTI0Ni45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMjAuNS0yNDQuOWMtMy4yLDAtNS45LTEuNC01LjktM3YtMi4xaDAuNHYyLjFjMCwxLjQsMi41LDIuNiw1LjUsMi42czUuNS0xLjIsNS41LTIuNnYtMS4yaDAuNHYxLjIKCQkJQy0xNC43LTI0Ni4zLTE3LjMtMjQ0LjktMjAuNS0yNDQuOXoiLz4KCQk8Zz4KCQkJPHJlY3QgeD0iLTIwLjciIHk9Ii0yNDcuMSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTE5LjUiIHk9Ii0yNDcuMSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTE4LjMiIHk9Ii0yNDcuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTE3LjEiIHk9Ii0yNDcuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTE1LjkiIHk9Ii0yNDguMyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTIzLjEiIHk9Ii0yNDcuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTIxLjkiIHk9Ii0yNDcuMSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTI1LjUiIHk9Ii0yNDguMyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTI0LjMiIHk9Ii0yNDcuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQk8L2c+Cgk8L2c+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTE5LjMtMjQ0LjJjLTEuOCwwLTMuNS0wLjQtNC42LTEuMWwwLjItMC4zYzEuMSwwLjcsMi42LDEuMSw0LjQsMS4xYzMsMCw1LjUtMS4yLDUuNS0yLjYKCQkJYzAtMC42LTAuNS0xLjMtMS40LTEuOGwwLjItMC4zYzEuMSwwLjYsMS42LDEuMywxLjYsMi4xQy0xMy41LTI0NS41LTE2LTI0NC4yLTE5LjMtMjQ0LjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xOS4zLTI0Mi4yYy0zLjIsMC01LjktMS40LTUuOS0zdi0wLjZoMC40djAuNmMwLDEuNCwyLjUsMi42LDUuNSwyLjZzNS41LTEuMiw1LjUtMi42di0yLjFoMC40djIuMQoJCQlDLTEzLjUtMjQzLjYtMTYuMS0yNDIuMi0xOS4zLTI0Mi4yeiIvPgoJCTxnPgoJCQk8cmVjdCB4PSItMTkuNSIgeT0iLTI0NC40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMTguMyIgeT0iLTI0NC40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMTcuMSIgeT0iLTI0NC43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMTUuOSIgeT0iLTI0NSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTE0LjciIHk9Ii0yNDUuNiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTIxLjkiIHk9Ii0yNDQuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTIwLjciIHk9Ii0yNDQuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTI0LjMiIHk9Ii0yNDUuNiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTIzLjEiIHk9Ii0yNDUiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJPC9nPgoJPC9nPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xOS4zLTI1MC4yYy0zLjMsMC01LjktMS4zLTUuOS0zYzAtMS43LDIuNi0zLDUuOS0zYzMuMywwLDUuOSwxLjMsNS45LDNDLTEzLjUtMjUxLjUtMTYtMjUwLjItMTkuMy0yNTAuMnoKCQkJIE0tMTkuMy0yNTUuOGMtMywwLTUuNSwxLjItNS41LDIuNmMwLDEuNCwyLjUsMi42LDUuNSwyLjZjMywwLDUuNS0xLjIsNS41LTIuNkMtMTMuOS0yNTQuNi0xNi40LTI1NS44LTE5LjMtMjU1Ljh6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xOS4zLTI0OC4yYy0zLjIsMC01LjktMS40LTUuOS0zdi0yLjFoMC40djIuMWMwLDEuNCwyLjUsMi42LDUuNSwyLjZzNS41LTEuMiw1LjUtMi42di0yLjFoMC40djIuMQoJCQlDLTEzLjUtMjQ5LjYtMTYuMS0yNDguMi0xOS4zLTI0OC4yeiIvPgoJCTxnPgoJCQk8cmVjdCB4PSItMTkuNSIgeT0iLTI1MC40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMTguMyIgeT0iLTI1MC40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMTcuMSIgeT0iLTI1MC43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMTUuOSIgeT0iLTI1MSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTE0LjciIHk9Ii0yNTEuNiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTIxLjkiIHk9Ii0yNTAuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTIwLjciIHk9Ii0yNTAuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTI0LjMiIHk9Ii0yNTEuNiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTIzLjEiIHk9Ii0yNTEiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJPC9nPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00My4zLTYzLjZjLTEuNiwwLTMsMC41LTMuMiwxLjJjLTAuMSwwLjMsMC4yLDAuNiwwLjYsMC45bDIuNS0xLjlsMS44LDJjMC41LTAuMiwwLjktMC41LDAuOS0wLjgKCQkJQy00MC41LTYyLjktNDEuNy02My41LTQzLjMtNjMuNnoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQ1LjItNjEuMmMwLjQsMC4xLDAuOCwwLjIsMS4zLDAuMmMwLjUsMCwwLjksMCwxLjMtMC4xbC0xLjEtMS4yTC00NS4yLTYxLjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00My4yLTY0LjVjLTIuNy0wLjEtNS4xLDAuOS01LjQsMi4xczEuOCwyLjIsNC41LDIuM2MyLjcsMC4xLDUuMS0wLjksNS40LTIuMQoJCQlDLTM4LjQtNjMuNC00MC40LTY0LjQtNDMuMi02NC41eiBNLTQzLjktNjAuNWMtMi4yLDAtMy44LTAuOS0zLjYtMS44YzAuMi0xLDIuMS0xLjcsNC4zLTEuN2MyLjIsMCwzLjgsMC45LDMuNiwxLjgKCQkJQy0zOS44LTYxLjItNDEuNy02MC41LTQzLjktNjAuNXoiLz4KCTwvZz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDQuOC01NS45Yy0zLjMsMC01LjktMS4zLTUuOS0zYzAtMC45LDAuNy0xLjcsMS45LTIuMmwwLjIsMC40Yy0xLjEsMC41LTEuNywxLjItMS43LDEuOQoJCQljMCwxLjQsMi41LDIuNiw1LjUsMi42YzIuNCwwLDQuNS0wLjcsNS4yLTEuOGwwLjMsMC4yQy00MC4xLTU2LjctNDIuMy01NS45LTQ0LjgtNTUuOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQ0LjgtNTMuOWMtMy4yLDAtNS45LTEuNC01LjktM3YtMi4xaDAuNHYyLjFjMCwxLjQsMi41LDIuNiw1LjUsMi42czUuNS0xLjIsNS41LTIuNnYtMS4yaDAuNHYxLjIKCQkJQy0zOC45LTU1LjMtNDEuNi01My45LTQ0LjgtNTMuOXoiLz4KCQk8Zz4KCQkJPHJlY3QgeD0iLTQ1IiB5PSItNTYuMSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTQzLjgiIHk9Ii01Ni4xIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDIuNiIgeT0iLTU2LjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii00MS40IiB5PSItNTYuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQwLjIiIHk9Ii01Ny4zIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItNDcuNCIgeT0iLTU2LjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii00Ni4yIiB5PSItNTYuMSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTQ5LjgiIHk9Ii01Ny4zIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItNDguNiIgeT0iLTU2LjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJPC9nPgoJPC9nPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00My42LTUzLjJjLTEuOCwwLTMuNS0wLjQtNC42LTEuMWwwLjItMC4zYzEuMSwwLjcsMi42LDEuMSw0LjQsMS4xYzMsMCw1LjUtMS4yLDUuNS0yLjYKCQkJYzAtMC42LTAuNS0xLjMtMS40LTEuOGwwLjItMC4zYzEuMSwwLjYsMS42LDEuMywxLjYsMi4xQy0zNy44LTU0LjUtNDAuMy01My4yLTQzLjYtNTMuMnoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQzLjYtNTEuMmMtMy4yLDAtNS45LTEuNC01LjktM3YtMC42aDAuNHYwLjZjMCwxLjQsMi41LDIuNiw1LjUsMi42YzMsMCw1LjUtMS4yLDUuNS0yLjZ2LTIuMWgwLjR2Mi4xCgkJCUMtMzcuOC01Mi42LTQwLjQtNTEuMi00My42LTUxLjJ6Ii8+CgkJPGc+CgkJCTxyZWN0IHg9Ii00My44IiB5PSItNTMuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTQyLjYiIHk9Ii01My40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDEuNCIgeT0iLTUzLjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii00MC4yIiB5PSItNTQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii0zOSIgeT0iLTU0LjYiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii00Ni4yIiB5PSItNTMuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTQ1IiB5PSItNTMuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTQ4LjYiIHk9Ii01NC42IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItNDcuNCIgeT0iLTU0IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCTwvZz4KCTwvZz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDMuNi01OS4yYy0zLjMsMC01LjktMS4zLTUuOS0zYzAtMS43LDIuNi0zLDUuOS0zYzMuMywwLDUuOSwxLjMsNS45LDNDLTM3LjgtNjAuNS00MC4zLTU5LjItNDMuNi01OS4yegoJCQkgTS00My42LTY0LjhjLTMsMC01LjUsMS4yLTUuNSwyLjZjMCwxLjQsMi41LDIuNiw1LjUsMi42YzMsMCw1LjUtMS4yLDUuNS0yLjZDLTM4LjEtNjMuNi00MC43LTY0LjgtNDMuNi02NC44eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDMuNi01Ny4yYy0zLjIsMC01LjktMS40LTUuOS0zdi0yLjFoMC40djIuMWMwLDEuNCwyLjUsMi42LDUuNSwyLjZjMywwLDUuNS0xLjIsNS41LTIuNnYtMi4xaDAuNHYyLjEKCQkJQy0zNy44LTU4LjYtNDAuNC01Ny4yLTQzLjYtNTcuMnoiLz4KCQk8Zz4KCQkJPHJlY3QgeD0iLTQzLjgiIHk9Ii01OS40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDIuNiIgeT0iLTU5LjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii00MS40IiB5PSItNTkuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQwLjIiIHk9Ii02MCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTM5IiB5PSItNjAuNiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQ2LjIiIHk9Ii01OS43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDUiIHk9Ii01OS40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDguNiIgeT0iLTYwLjYiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii00Ny40IiB5PSItNjAiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJPC9nPgoJPC9nPgo8L2c+CjxnPgoJPGcgY2xhc3M9InN0NSI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0zOC44LTI1NC45Yy0xLjYsMC0zLDAuNS0zLjIsMS4yYy0wLjEsMC4zLDAuMiwwLjYsMC42LDAuOWwyLjUtMS45bDEuOCwyYzAuNS0wLjIsMC45LTAuNSwwLjktMC44CgkJCUMtMzYtMjU0LjMtMzcuMS0yNTQuOS0zOC44LTI1NC45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDAuNi0yNTIuNWMwLjQsMC4xLDAuOCwwLjIsMS4zLDAuMmMwLjUsMCwwLjksMCwxLjMtMC4xbC0xLjEtMS4yTC00MC42LTI1Mi41eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMzguNi0yNTUuOGMtMi43LTAuMS01LjEsMC45LTUuNCwyLjFjLTAuMiwxLjIsMS44LDIuMiw0LjUsMi4zYzIuNywwLjEsNS4xLTAuOSw1LjQtMi4xCgkJCUMtMzMuOC0yNTQuNy0zNS45LTI1NS44LTM4LjYtMjU1Ljh6IE0tMzkuNC0yNTEuOWMtMi4yLDAtMy44LTAuOS0zLjYtMS44YzAuMi0xLDIuMS0xLjcsNC4zLTEuN2MyLjIsMCwzLjgsMC45LDMuNiwxLjgKCQkJUy0zNy4yLTI1MS45LTM5LjQtMjUxLjl6Ii8+Cgk8L2c+Cgk8ZyBjbGFzcz0ic3Q1Ij4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQwLjItMjQ3LjJjLTMuMywwLTUuOS0xLjMtNS45LTNjMC0wLjksMC43LTEuNywxLjktMi4ybDAuMiwwLjRjLTEuMSwwLjUtMS43LDEuMi0xLjcsMS45CgkJCWMwLDEuNCwyLjUsMi42LDUuNSwyLjZjMi40LDAsNC41LTAuNyw1LjItMS44bDAuMywwLjJDLTM1LjUtMjQ4LjEtMzcuNy0yNDcuMi00MC4yLTI0Ny4yeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDAuMi0yNDUuM2MtMy4yLDAtNS45LTEuNC01LjktM3YtMi4xaDAuNHYyLjFjMCwxLjQsMi41LDIuNiw1LjUsMi42czUuNS0xLjIsNS41LTIuNnYtMS4yaDAuNHYxLjIKCQkJQy0zNC40LTI0Ni42LTM3LTI0NS4zLTQwLjItMjQ1LjN6Ii8+CgkJPGc+CgkJCTxyZWN0IHg9Ii00MC40IiB5PSItMjQ3LjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii0zOS4yIiB5PSItMjQ3LjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii0zOCIgeT0iLTI0Ny43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMzYuOSIgeT0iLTI0OCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTM1LjciIHk9Ii0yNDguNiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQyLjgiIHk9Ii0yNDcuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTQxLjYiIHk9Ii0yNDcuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTQ1LjIiIHk9Ii0yNDguNiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQ0IiB5PSItMjQ4IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCTwvZz4KCTwvZz4KCTxnIGNsYXNzPSJzdDUiPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMzkuMS0yNDQuNmMtMS44LDAtMy41LTAuNC00LjYtMS4xbDAuMi0wLjNjMS4xLDAuNywyLjYsMS4xLDQuNCwxLjFjMywwLDUuNS0xLjIsNS41LTIuNgoJCQljMC0wLjYtMC41LTEuMy0xLjQtMS44bDAuMi0wLjNjMS4xLDAuNiwxLjYsMS4zLDEuNiwyLjFDLTMzLjItMjQ1LjktMzUuOC0yNDQuNi0zOS4xLTI0NC42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMzktMjQyLjZjLTMuMiwwLTUuOS0xLjQtNS45LTN2LTAuNmgwLjR2MC42YzAsMS40LDIuNSwyLjYsNS41LDIuNnM1LjUtMS4yLDUuNS0yLjZ2LTIuMWgwLjR2Mi4xCgkJCUMtMzMuMi0yNDQtMzUuOC0yNDIuNi0zOS0yNDIuNnoiLz4KCQk8Zz4KCQkJPHJlY3QgeD0iLTM5LjIiIHk9Ii0yNDQuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTM4IiB5PSItMjQ0LjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii0zNi45IiB5PSItMjQ1IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMzUuNyIgeT0iLTI0NS4zIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMzQuNSIgeT0iLTI0NS45IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItNDEuNiIgeT0iLTI0NSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTQwLjQiIHk9Ii0yNDQuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTQ0IiB5PSItMjQ1LjkiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii00Mi44IiB5PSItMjQ1LjMiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJPC9nPgoJPC9nPgoJPGcgY2xhc3M9InN0NSI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0zOS4xLTI1MC41Yy0zLjMsMC01LjktMS4zLTUuOS0zczIuNi0zLDUuOS0zYzMuMywwLDUuOSwxLjMsNS45LDNTLTM1LjgtMjUwLjUtMzkuMS0yNTAuNXogTS0zOS4xLTI1Ni4yCgkJCWMtMywwLTUuNSwxLjItNS41LDIuNnMyLjUsMi42LDUuNSwyLjZjMywwLDUuNS0xLjIsNS41LTIuNlMtMzYuMS0yNTYuMi0zOS4xLTI1Ni4yeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMzktMjQ4LjZjLTMuMiwwLTUuOS0xLjQtNS45LTN2LTIuMWgwLjR2Mi4xYzAsMS40LDIuNSwyLjYsNS41LDIuNnM1LjUtMS4yLDUuNS0yLjZ2LTIuMWgwLjR2Mi4xCgkJCUMtMzMuMi0yNDkuOS0zNS44LTI0OC42LTM5LTI0OC42eiIvPgoJCTxnPgoJCQk8cmVjdCB4PSItMzkuMiIgeT0iLTI1MC43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMzgiIHk9Ii0yNTAuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTM2LjkiIHk9Ii0yNTEiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii0zNS43IiB5PSItMjUxLjMiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii0zNC41IiB5PSItMjUxLjkiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii00MS42IiB5PSItMjUxIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDAuNCIgeT0iLTI1MC43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDQiIHk9Ii0yNTEuOSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQyLjgiIHk9Ii0yNTEuMyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPHRleHQgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMSAtNjMuNDgxNCAtMjk2LjI5ODIpIj48dHNwYW4geD0iMCIgeT0iMCIgc3R5bGU9ImZvbnQtZmFtaWx5OidNb250c2VycmF0LUJvbGQnOyBmb250LXNpemU6My40OTA3cHg7Ij5UT1I8L3RzcGFuPjx0c3BhbiB4PSItMTMuNSIgeT0iMjYiIHN0eWxlPSJmb250LWZhbWlseTonTW9udHNlcnJhdC1Cb2xkJzsgZm9udC1zaXplOjMuNDkwN3B4OyI+Q29ubmVjdGlvbjwvdHNwYW4+PHRzcGFuIHg9Ii0yMSIgeT0iNTIiIHN0eWxlPSJmb250LWZhbWlseTonTW9udHNlcnJhdC1Cb2xkJzsgZm9udC1zaXplOjMuNDkwN3B4OyI+U3Rha2luZyAob2ZmL29uKTwvdHNwYW4+PHRzcGFuIHg9Ii0yNC42IiB5PSI3OCIgc3R5bGU9ImZvbnQtZmFtaWx5OidNb250c2VycmF0LUJvbGQnOyBmb250LXNpemU6My40OTA3cHg7Ij5Mb2NrZWQvVW5sb2NrZWQ8L3RzcGFuPjx0c3BhbiB4PSItNyIgeT0iMTA0IiBzdHlsZT0iZm9udC1mYW1pbHk6J01vbnRzZXJyYXQtQm9sZCc7IGZvbnQtc2l6ZTozLjQ5MDdweDsiPlN5bmNpbmc8L3RzcGFuPjx0c3BhbiB4PSItNS43IiB5PSIxMzAiIHN0eWxlPSJmb250LWZhbWlseTonTW9udHNlcnJhdC1Cb2xkJzsgZm9udC1zaXplOjMuNDkwN3B4OyI+U3luY2VkPC90c3Bhbj48L3RleHQ+Cjx0ZXh0IHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgLTk2LjA0MDQgLTEzOS41NDY3KSI+PHRzcGFuIHg9IjAiIHk9IjAiIHN0eWxlPSJmb250LWZhbWlseTonTW9udHNlcnJhdC1Cb2xkJzsgZm9udC1zaXplOjMuNDkwN3B4OyI+VHJhbnNhY3Rpb24gdHlwZXM6PC90c3Bhbj48dHNwYW4geD0iMjEuOSIgeT0iMjEiIHN0eWxlPSJmb250LWZhbWlseTonTW9udHNlcnJhdC1Cb2xkJzsgZm9udC1zaXplOjMuNDkwN3B4OyI+LSBTZW5kPC90c3Bhbj48dHNwYW4geD0iMTQuNCIgeT0iNDIiIHN0eWxlPSJmb250LWZhbWlseTonTW9udHNlcnJhdC1Cb2xkJzsgZm9udC1zaXplOjMuNDkwN3B4OyI+LSBSZWNlaXZlZDwvdHNwYW4+PHRzcGFuIHg9IjE4LjciIHk9IjYzIiBzdHlsZT0iZm9udC1mYW1pbHk6J01vbnRzZXJyYXQtQm9sZCc7IGZvbnQtc2l6ZTozLjQ5MDdweDsiPi0gSW4tL291dDwvdHNwYW4+PHRzcGFuIHg9IjIwLjgiIHk9Ijg0IiBzdHlsZT0iZm9udC1mYW1pbHk6J01vbnRzZXJyYXQtQm9sZCc7IGZvbnQtc2l6ZTozLjQ5MDdweDsiPi0gU3Rha2U8L3RzcGFuPjwvdGV4dD4KPGc+Cgk8ZWxsaXBzZSBjbGFzcz0ic3QyIiBjeD0iLTEuNCIgY3k9Ii0yMjAuOSIgcng9IjMuMSIgcnk9IjMiLz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMS40LTIyM2MtMS4xLDAtMi4xLDAuOS0yLjEsMi4xYzAsMC41LDAuMiwxLDAuNSwxLjRsMS41LTNsMS41LDMuMWMwLjMtMC40LDAuNS0wLjgsMC41LTEuNAoJCQlDMC42LTIyMi4xLTAuMy0yMjMtMS40LTIyM3oiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTIuNC0yMTkuMWMwLjMsMC4xLDAuNiwwLjIsMSwwLjJjMC4zLDAsMC42LTAuMSwwLjktMC4ybC0wLjktMS45TC0yLjQtMjE5LjF6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xLjQtMjI0LjRjLTEuOSwwLTMuNSwxLjYtMy41LDMuNWMwLDEuOSwxLjYsMy41LDMuNSwzLjVjMS45LDAsMy41LTEuNiwzLjUtMy41CgkJCUMyLTIyMi45LDAuNS0yMjQuNC0xLjQtMjI0LjR6IE0tMS40LTIxOC4xYy0xLjUsMC0yLjgtMS4zLTIuOC0yLjhjMC0xLjUsMS4zLTIuOCwyLjgtMi44czIuOCwxLjMsMi44LDIuOAoJCQlDMS40LTIxOS40LDAuMS0yMTguMS0xLjQtMjE4LjF6Ii8+Cgk8L2c+CjwvZz4KPHBvbHlnb24gY2xhc3M9InN0MyIgcG9pbnRzPSItNTAuNiwtMTI2LjggLTUwLjYsLTEyMy4yIC00My40LC0xMTkuNiAtNTAuNywtMTE1LjkgLTUwLjcsLTExMi40IC0zNi4zLC0xMTkuNyAiLz4KPHBvbHlnb24gY2xhc3M9InN0MyIgcG9pbnRzPSItMzYuNCwtOTIuNSAtMzYuMywtOTYuMSAtNDMuNSwtOTkuNyAtMzYuMywtMTAzLjMgLTM2LjMsLTEwNi45IC01MC43LC05OS42ICIvPgo8cG9seWdvbiBjbGFzcz0ic3QzIiBwb2ludHM9Ii01MC40LC04NS40IC01MC40LC04Mi44IC00NS4yLC04MC4yIC01MC40LC03Ny42IC01MC40LC03NSAtNDAsLTgwLjMgIi8+Cjxwb2x5Z29uIGNsYXNzPSJzdDMiIHBvaW50cz0iLTM2LjgsLTY5LjcgLTM2LjgsLTcyLjMgLTQyLC03NC45IC0zNi43LC03Ny42IC0zNi43LC04MC4xIC00Ny4xLC03NC45ICIvPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMDAuNC0xNzUuMWMtMS4zLDAtMi41LDAuNC0yLjYsMWMtMC4xLDAuMywwLjEsMC41LDAuNSwwLjdsMi4xLTEuNWwxLjUsMS42YzAuNC0wLjIsMC43LTAuNCwwLjgtMC43CgkJCUMxMDIuNy0xNzQuNiwxMDEuNy0xNzUuMSwxMDAuNC0xNzUuMXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOTguOS0xNzMuMmMwLjMsMC4xLDAuNywwLjEsMS4xLDAuMWMwLjQsMCwwLjgsMCwxLjEtMC4xbC0wLjktMUw5OC45LTE3My4yeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMDAuNS0xNzUuOWMtMi4yLDAtNC4yLDAuNy00LjQsMS43Yy0wLjIsMSwxLjQsMS44LDMuNywxLjhjMi4yLDAsNC4yLTAuNyw0LjQtMS43UzEwMi43LTE3NS44LDEwMC41LTE3NS45egoJCQkgTTk5LjktMTcyLjdjLTEuOCwwLTMuMS0wLjctMy0xLjVjMC4yLTAuOCwxLjctMS40LDMuNS0xLjRjMS44LDAsMy4xLDAuNywzLDEuNUMxMDMuMi0xNzMuMiwxMDEuNy0xNzIuNiw5OS45LTE3Mi43eiIvPgoJPC9nPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTk5LjItMTY4LjljLTIuNywwLTQuOC0xLjEtNC44LTIuNWMwLTAuNywwLjYtMS40LDEuNi0xLjhsMC4xLDAuM2MtMC45LDAuNC0xLjQsMS0xLjQsMS41CgkJCWMwLDEuMiwyLDIuMiw0LjUsMi4yYzEuOSwwLDMuNi0wLjYsNC4zLTEuNWwwLjMsMC4yQzEwMy0xNjkuNSwxMDEuMi0xNjguOSw5OS4yLTE2OC45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05OS4yLTE2Ny4zYy0yLjYsMC00LjgtMS4xLTQuOC0yLjV2LTEuN2gwLjN2MS43YzAsMS4yLDIsMi4yLDQuNSwyLjJzNC41LTEsNC41LTIuMnYtMWgwLjN2MQoJCQlDMTA0LTE2OC40LDEwMS44LTE2Ny4zLDk5LjItMTY3LjN6Ii8+CgkJPGc+CgkJCTxyZWN0IHg9Ijk5IiB5PSItMTY5IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCQk8cmVjdCB4PSIxMDAiIHk9Ii0xNjkiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS43Ii8+CgkJCTxyZWN0IHg9IjEwMSIgeT0iLTE2OS4zIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNSIvPgoJCQk8cmVjdCB4PSIxMDEuOSIgeT0iLTE2OS41IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNSIvPgoJCQk8cmVjdCB4PSIxMDIuOSIgeT0iLTE3MCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjUiLz4KCQkJPHJlY3QgeD0iOTcuMSIgeT0iLTE2OS4zIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCQk8cmVjdCB4PSI5OCIgeT0iLTE2OSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjciLz4KCQkJPHJlY3QgeD0iOTUuMSIgeT0iLTE3MCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjUiLz4KCQkJPHJlY3QgeD0iOTYuMSIgeT0iLTE2OS41IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCTwvZz4KCTwvZz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMDAuMS0xNjYuN2MtMS41LDAtMi44LTAuMy0zLjctMC45bDAuMi0wLjNjMC45LDAuNiwyLjIsMC45LDMuNiwwLjljMi40LDAsNC41LTEsNC41LTIuMgoJCQljMC0wLjUtMC40LTEtMS4yLTEuNGwwLjEtMC4zYzAuOSwwLjUsMS4zLDEuMSwxLjMsMS43QzEwNC45LTE2Ny44LDEwMi44LTE2Ni43LDEwMC4xLTE2Ni43eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMDAuMS0xNjUuMWMtMi42LDAtNC44LTEuMS00LjgtMi41di0wLjVoMC4zdjAuNWMwLDEuMiwyLDIuMiw0LjUsMi4yczQuNS0xLDQuNS0yLjJ2LTEuN2gwLjN2MS43CgkJCUMxMDQuOS0xNjYuMiwxMDIuOC0xNjUuMSwxMDAuMS0xNjUuMXoiLz4KCQk8Zz4KCQkJPHJlY3QgeD0iMTAwIiB5PSItMTY2LjgiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS43Ii8+CgkJCTxyZWN0IHg9IjEwMSIgeT0iLTE2Ni44IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCQk8cmVjdCB4PSIxMDEuOSIgeT0iLTE2Ny4xIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNSIvPgoJCQk8cmVjdCB4PSIxMDIuOSIgeT0iLTE2Ny4zIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNSIvPgoJCQk8cmVjdCB4PSIxMDMuOSIgeT0iLTE2Ny44IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNSIvPgoJCQk8cmVjdCB4PSI5OCIgeT0iLTE2Ny4xIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCQk8cmVjdCB4PSI5OSIgeT0iLTE2Ni44IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCQk8cmVjdCB4PSI5Ni4xIiB5PSItMTY3LjgiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS41Ii8+CgkJCTxyZWN0IHg9Ijk3LjEiIHk9Ii0xNjcuMyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjciLz4KCQk8L2c+Cgk8L2c+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTAwLjEtMTcxLjZjLTIuNywwLTQuOC0xLjEtNC44LTIuNXMyLjEtMi41LDQuOC0yLjVjMi43LDAsNC44LDEuMSw0LjgsMi41UzEwMi44LTE3MS42LDEwMC4xLTE3MS42egoJCQkgTTEwMC4xLTE3Ni4yYy0yLjQsMC00LjUsMS00LjUsMi4yczIsMi4yLDQuNSwyLjJjMi40LDAsNC41LTEsNC41LTIuMlMxMDIuNi0xNzYuMiwxMDAuMS0xNzYuMnoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTAwLjEtMTcwYy0yLjYsMC00LjgtMS4xLTQuOC0yLjV2LTEuN2gwLjN2MS43YzAsMS4yLDIsMi4yLDQuNSwyLjJzNC41LTEsNC41LTIuMnYtMS43aDAuM3YxLjcKCQkJQzEwNC45LTE3MS4xLDEwMi44LTE3MCwxMDAuMS0xNzB6Ii8+CgkJPGc+CgkJCTxyZWN0IHg9IjEwMCIgeT0iLTE3MS43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCQk8cmVjdCB4PSIxMDEiIHk9Ii0xNzEuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjciLz4KCQkJPHJlY3QgeD0iMTAxLjkiIHk9Ii0xNzIiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS41Ii8+CgkJCTxyZWN0IHg9IjEwMi45IiB5PSItMTcyLjIiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS41Ii8+CgkJCTxyZWN0IHg9IjEwMy45IiB5PSItMTcyLjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS41Ii8+CgkJCTxyZWN0IHg9Ijk4IiB5PSItMTcyIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCQk8cmVjdCB4PSI5OSIgeT0iLTE3MS43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCQk8cmVjdCB4PSI5Ni4xIiB5PSItMTcyLjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS41Ii8+CgkJCTxyZWN0IHg9Ijk3LjEiIHk9Ii0xNzIuMiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjciLz4KCQk8L2c+Cgk8L2c+Cgk8bGluZSBjbGFzcz0ic3Q2IiB4MT0iOTQuOCIgeTE9Ii0xNzUuMSIgeDI9IjkzIiB5Mj0iLTE3Ni40Ii8+Cgk8bGluZSBjbGFzcz0ic3Q2IiB4MT0iOTciIHkxPSItMTc2LjciIHgyPSI5Ni4xIiB5Mj0iLTE3OC44Ii8+Cgk8bGluZSBjbGFzcz0ic3Q2IiB4MT0iOTkuOSIgeTE9Ii0xNzcuMyIgeDI9Ijk5LjkiIHkyPSItMTc5LjUiLz4KCTxsaW5lIGNsYXNzPSJzdDYiIHgxPSIxMDUuMyIgeTE9Ii0xNzUuMiIgeDI9IjEwNy4yIiB5Mj0iLTE3Ni41Ii8+Cgk8bGluZSBjbGFzcz0ic3Q2IiB4MT0iMTAzLjEiIHkxPSItMTc2LjkiIHgyPSIxMDQuMSIgeTI9Ii0xNzguOSIvPgo8L2c+CjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMTA5LjctMTA4LjdjLTAuNy0wLjktMS42LTEuNC0yLjctMS43Yy0wLjYtMC4xLTEuMi0wLjItMS44LDBjMS4zLDEuMiwyLDIuNiwyLjIsNC4zbDEuMSwwbC0xLjYsMy4zbC0xLjctMy4zCglsMC45LDBjLTAuMS0xLjYtMS4yLTMuMy0zLjEtNC4xYy0yLjEtMC44LTQuNSwwLTUuNywxLjhjLTEuMywxLjgtMS4xLDQuMywwLjQsNmMwLjgsMC44LDEuNywxLjMsMi44LDEuNWMwLjUsMC4xLDEuMSwwLjEsMS42LDAKCWMtMC43LTAuNi0xLjMtMS4zLTEuNi0yLjJjLTAuMy0wLjctMC41LTEuMy0wLjYtMi4xbC0xLDBsMS42LTMuM2wxLjcsMy4zbC0wLjksMGMwLjIsMS41LDEuMSwzLjIsMy4xLDRjMiwwLjgsNC40LDAuMSw1LjctMS43CglDLTEwOC4yLTEwNC41LTEwOC4yLTEwNy0xMDkuNy0xMDguN3oiLz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQzLjctMjc1LjljMC4zLTAuNSwwLjgtMSwxLjQtMS40bC0xLjMtMi4zYy0wLjksMC42LTEuNywxLjQtMi4zLDIuM0wtNDMuNy0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMzkuOC0yNzcuOWMwLjcsMCwxLjMsMC4yLDEuOCwwLjVsMS4zLTIuM2MtMC45LTAuNS0yLTAuOC0zLjItMC44Vi0yNzcuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDItMjc3LjRjMC42LTAuMywxLjItMC41LDEuOS0wLjVsMC0yLjdjLTEuMSwwLTIuMiwwLjMtMy4yLDAuOEwtNDItMjc3LjR6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTM2LjMtMjcxLjJjLTAuMywwLjUtMC44LDEtMS40LDEuNGwxLjMsMi4zYzAuOS0wLjYsMS43LTEuNCwyLjMtMi4zTC0zNi4zLTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00My43LTI3MS4ybC0yLjMsMS4zYzAuNiwwLjksMS40LDEuNywyLjMsMi4zbDEuMy0yLjNDLTQyLjktMjcwLjItNDMuMy0yNzAuNi00My43LTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0zNi4zLTI3NS45bDIuMy0xLjNjLTAuNi0wLjktMS40LTEuNy0yLjMtMi4zbC0xLjMsMi4zQy0zNy4xLTI3Ni45LTM2LjYtMjc2LjQtMzYuMy0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDQuMy0yNzMuN2MwLTAuNywwLjItMS4zLDAuNS0xLjhsLTIuMy0xLjNjLTAuNSwwLjktMC44LDItMC44LDMuMkgtNDQuM3oiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMzUuNi0yNzMuM2MwLDAuNy0wLjIsMS4zLTAuNSwxLjhsMi4zLDEuM2MwLjUtMC45LDAuOC0yLDAuOC0zLjJILTM1LjZ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTM2LjEtMjc1LjZjMC4zLDAuNiwwLjUsMS4yLDAuNSwxLjhoMi43YzAtMS4xLTAuMy0yLjItMC44LTMuMkwtMzYuMS0yNzUuNnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMzcuOS0yNjkuN2MtMC42LDAuMy0xLjIsMC41LTEuOCwwLjV2Mi43YzEuMSwwLDIuMi0wLjMsMy4yLTAuOEwtMzcuOS0yNjkuN3oiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDMuOC0yNzEuNWMtMC4zLTAuNi0wLjUtMS4yLTAuNS0xLjhILTQ3YzAsMS4xLDAuMywyLjIsMC44LDMuMkwtNDMuOC0yNzEuNXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDAuMi0yNjkuMmMtMC43LDAtMS4zLTAuMi0xLjgtMC41bC0xLjMsMi4zYzAuOSwwLjUsMiwwLjgsMy4yLDAuOFYtMjY5LjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTI0LjQtMjc1LjljMC4zLTAuNSwwLjgtMSwxLjQtMS40bC0xLjMtMi4zYy0wLjksMC42LTEuNywxLjQtMi4zLDIuM0wtMjQuNC0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMjAuNi0yNzcuOWMwLjcsMCwxLjMsMC4yLDEuOCwwLjVsMS4zLTIuM2MtMC45LTAuNS0yLTAuOC0zLjItMC44Vi0yNzcuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMjIuOC0yNzcuNGMwLjYtMC4zLDEuMi0wLjUsMS45LTAuNWwwLTIuN2MtMS4xLDAtMi4yLDAuMy0zLjIsMC44TC0yMi44LTI3Ny40eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xNy4xLTI3MS4yYy0wLjMsMC41LTAuOCwxLTEuNCwxLjRsMS4zLDIuM2MwLjktMC42LDEuNy0xLjQsMi4zLTIuM0wtMTcuMS0yNzEuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMjQuNC0yNzEuMmwtMi4zLDEuM2MwLjYsMC45LDEuNCwxLjcsMi4zLDIuM2wxLjMtMi4zQy0yMy42LTI3MC4yLTI0LjEtMjcwLjYtMjQuNC0yNzEuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMTcuMS0yNzUuOWwyLjMtMS4zYy0wLjYtMC45LTEuNC0xLjctMi4zLTIuM2wtMS4zLDIuM0MtMTcuOS0yNzYuOS0xNy40LTI3Ni40LTE3LjEtMjc1Ljl6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTI1LjEtMjczLjdjMC0wLjcsMC4yLTEuMywwLjUtMS44bC0yLjMtMS4zYy0wLjUsMC45LTAuOCwyLTAuOCwzLjJILTI1LjF6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTE2LjQtMjczLjNjMCwwLjctMC4yLDEuMy0wLjUsMS44bDIuMywxLjNjMC41LTAuOSwwLjgtMiwwLjgtMy4ySC0xNi40eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xNi45LTI3NS42YzAuMywwLjYsMC41LDEuMiwwLjUsMS44aDIuN2MwLTEuMS0wLjMtMi4yLTAuOC0zLjJMLTE2LjktMjc1LjZ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTE4LjctMjY5LjdjLTAuNiwwLjMtMS4yLDAuNS0xLjgsMC41djIuN2MxLjEsMCwyLjItMC4zLDMuMi0wLjhMLTE4LjctMjY5Ljd6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTI0LjYtMjcxLjVjLTAuMy0wLjYtMC41LTEuMi0wLjUtMS44aC0yLjdjMCwxLjEsMC4zLDIuMiwwLjgsMy4yTC0yNC42LTI3MS41eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0yMC45LTI2OS4yYy0wLjcsMC0xLjMtMC4yLTEuOC0wLjVsLTEuMywyLjNjMC45LDAuNSwyLDAuOCwzLjIsMC44Vi0yNjkuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNi41LTI3NS45YzAuMy0wLjUsMC44LTEsMS40LTEuNGwtMS4zLTIuM2MtMC45LDAuNi0xLjcsMS40LTIuMywyLjNMLTYuNS0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMi43LTI3Ny45YzAuNywwLDEuMywwLjIsMS44LDAuNWwxLjMtMi4zYy0wLjktMC41LTItMC44LTMuMi0wLjhWLTI3Ny45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00LjktMjc3LjRjMC42LTAuMywxLjItMC41LDEuOS0wLjVsMC0yLjdjLTEuMSwwLTIuMiwwLjMtMy4yLDAuOEwtNC45LTI3Ny40eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTAuOS0yNzEuMmMtMC4zLDAuNS0wLjgsMS0xLjQsMS40bDEuMywyLjNjMC45LTAuNiwxLjctMS40LDIuMy0yLjNMMC45LTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS02LjUtMjcxLjJsLTIuMywxLjNjMC42LDAuOSwxLjQsMS43LDIuMywyLjNsMS4zLTIuM0MtNS43LTI3MC4yLTYuMi0yNzAuNi02LjUtMjcxLjJ6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMC45LTI3NS45bDIuMy0xLjNjLTAuNi0wLjktMS40LTEuNy0yLjMtMi4zbC0xLjMsMi4zQzAtMjc2LjksMC41LTI3Ni40LDAuOS0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNy4yLTI3My43YzAtMC43LDAuMi0xLjMsMC41LTEuOGwtMi4zLTEuM2MtMC41LDAuOS0wLjgsMi0wLjgsMy4ySC03LjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMS41LTI3My4zYzAsMC43LTAuMiwxLjMtMC41LDEuOGwyLjMsMS4zYzAuNS0wLjksMC44LTIsMC44LTMuMkgxLjV6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMS0yNzUuNmMwLjMsMC42LDAuNSwxLjIsMC41LDEuOGgyLjdjMC0xLjEtMC4zLTIuMi0wLjgtMy4yTDEtMjc1LjZ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTAuOC0yNjkuN2MtMC42LDAuMy0xLjIsMC41LTEuOCwwLjV2Mi43YzEuMSwwLDIuMi0wLjMsMy4yLTAuOEwtMC44LTI2OS43eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS02LjctMjcxLjVjLTAuMy0wLjYtMC41LTEuMi0wLjUtMS44aC0yLjdjMCwxLjEsMC4zLDIuMiwwLjgsMy4yTC02LjctMjcxLjV6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTMtMjY5LjJjLTAuNywwLTEuMy0wLjItMS44LTAuNWwtMS4zLDIuM2MwLjksMC41LDIsMC44LDMuMiwwLjhWLTI2OS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEwLjEtMjc1LjljMC4zLTAuNSwwLjgtMSwxLjQtMS40bC0xLjMtMi4zYy0wLjksMC42LTEuNywxLjQtMi4zLDIuM0wxMC4xLTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEzLjktMjc3LjljMC43LDAsMS4zLDAuMiwxLjgsMC41bDEuMy0yLjNjLTAuOS0wLjUtMi0wLjgtMy4yLTAuOFYtMjc3Ljl6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTEuNy0yNzcuNGMwLjYtMC4zLDEuMi0wLjUsMS45LTAuNWwwLTIuN2MtMS4xLDAtMi4yLDAuMy0zLjIsMC44TDExLjctMjc3LjR6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTcuNC0yNzEuMmMtMC4zLDAuNS0wLjgsMS0xLjQsMS40bDEuMywyLjNjMC45LTAuNiwxLjctMS40LDIuMy0yLjNMMTcuNC0yNzEuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMC4xLTI3MS4ybC0yLjMsMS4zYzAuNiwwLjksMS40LDEuNywyLjMsMi4zbDEuMy0yLjNDMTAuOS0yNzAuMiwxMC40LTI3MC42LDEwLjEtMjcxLjJ6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTcuNC0yNzUuOWwyLjMtMS4zYy0wLjYtMC45LTEuNC0xLjctMi4zLTIuM2wtMS4zLDIuM0MxNi42LTI3Ni45LDE3LjEtMjc2LjQsMTcuNC0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05LjQtMjczLjdjMC0wLjcsMC4yLTEuMywwLjUtMS44bC0yLjMtMS4zYy0wLjUsMC45LTAuOCwyLTAuOCwzLjJIOS40eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE4LjEtMjczLjNjMCwwLjctMC4yLDEuMy0wLjUsMS44bDIuMywxLjNjMC41LTAuOSwwLjgtMiwwLjgtMy4ySDE4LjF6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTcuNi0yNzUuNmMwLjMsMC42LDAuNSwxLjIsMC41LDEuOGgyLjdjMC0xLjEtMC4zLTIuMi0wLjgtMy4yTDE3LjYtMjc1LjZ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTUuOC0yNjkuN2MtMC42LDAuMy0xLjIsMC41LTEuOCwwLjV2Mi43YzEuMSwwLDIuMi0wLjMsMy4yLTAuOEwxNS44LTI2OS43eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTkuOS0yNzEuNWMtMC4zLTAuNi0wLjUtMS4yLTAuNS0xLjhINi43YzAsMS4xLDAuMywyLjIsMC44LDMuMkw5LjktMjcxLjV6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTMuNi0yNjkuMmMtMC43LDAtMS4zLTAuMi0xLjgtMC41bC0xLjMsMi4zYzAuOSwwLjUsMiwwLjgsMy4yLDAuOFYtMjY5LjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjguNy0yNzUuOWMwLjMtMC41LDAuOC0xLDEuNC0xLjRsLTEuMy0yLjNjLTAuOSwwLjYtMS43LDEuNC0yLjMsMi4zTDI4LjctMjc1Ljl6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzIuNi0yNzcuOWMwLjcsMCwxLjMsMC4yLDEuOCwwLjVsMS4zLTIuM2MtMC45LTAuNS0yLTAuOC0zLjItMC44Vi0yNzcuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMC40LTI3Ny40YzAuNi0wLjMsMS4yLTAuNSwxLjktMC41bDAtMi43Yy0xLjEsMC0yLjIsMC4zLTMuMiwwLjhMMzAuNC0yNzcuNHoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNi4xLTI3MS4yYy0wLjMsMC41LTAuOCwxLTEuNCwxLjRsMS4zLDIuM2MwLjktMC42LDEuNy0xLjQsMi4zLTIuM0wzNi4xLTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI4LjctMjcxLjJsLTIuMywxLjNjMC42LDAuOSwxLjQsMS43LDIuMywyLjNsMS4zLTIuM0MyOS41LTI3MC4yLDI5LjEtMjcwLjYsMjguNy0yNzEuMnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNi4xLTI3NS45bDIuMy0xLjNjLTAuNi0wLjktMS40LTEuNy0yLjMtMi4zbC0xLjMsMi4zQzM1LjMtMjc2LjksMzUuOC0yNzYuNCwzNi4xLTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI4LTI3My43YzAtMC43LDAuMi0xLjMsMC41LTEuOGwtMi4zLTEuM2MtMC41LDAuOS0wLjgsMi0wLjgsMy4ySDI4eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM2LjgtMjczLjNjMCwwLjctMC4yLDEuMy0wLjUsMS44bDIuMywxLjNjMC41LTAuOSwwLjgtMiwwLjgtMy4ySDM2Ljh6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzYuMy0yNzUuNmMwLjMsMC42LDAuNSwxLjIsMC41LDEuOGgyLjdjMC0xLjEtMC4zLTIuMi0wLjgtMy4yTDM2LjMtMjc1LjZ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzQuNC0yNjkuN2MtMC42LDAuMy0xLjIsMC41LTEuOCwwLjV2Mi43YzEuMSwwLDIuMi0wLjMsMy4yLTAuOEwzNC40LTI2OS43eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI4LjUtMjcxLjVjLTAuMy0wLjYtMC41LTEuMi0wLjUtMS44aC0yLjdjMCwxLjEsMC4zLDIuMiwwLjgsMy4yTDI4LjUtMjcxLjV6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzIuMi0yNjkuMmMtMC43LDAtMS4zLTAuMi0xLjgtMC41bC0xLjMsMi4zYzAuOSwwLjUsMiwwLjgsMy4yLDAuOFYtMjY5LjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDcuOS0yNzUuOWMwLjMtMC41LDAuOC0xLDEuNC0xLjRsLTEuMy0yLjNjLTAuOSwwLjYtMS43LDEuNC0yLjMsMi4zTDQ3LjktMjc1Ljl6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTEuOC0yNzcuOWMwLjcsMCwxLjMsMC4yLDEuOCwwLjVsMS4zLTIuM2MtMC45LTAuNS0yLTAuOC0zLjItMC44Vi0yNzcuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00OS42LTI3Ny40YzAuNi0wLjMsMS4yLTAuNSwxLjktMC41bDAtMi43Yy0xLjEsMC0yLjIsMC4zLTMuMiwwLjhMNDkuNi0yNzcuNHoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01NS4zLTI3MS4yYy0wLjMsMC41LTAuOCwxLTEuNCwxLjRsMS4zLDIuM2MwLjktMC42LDEuNy0xLjQsMi4zLTIuM0w1NS4zLTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ3LjktMjcxLjJsLTIuMywxLjNjMC42LDAuOSwxLjQsMS43LDIuMywyLjNsMS4zLTIuM0M0OC43LTI3MC4yLDQ4LjMtMjcwLjYsNDcuOS0yNzEuMnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01NS4zLTI3NS45bDIuMy0xLjNjLTAuNi0wLjktMS40LTEuNy0yLjMtMi4zbC0xLjMsMi4zQzU0LjUtMjc2LjksNTUtMjc2LjQsNTUuMy0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00Ny4zLTI3My43YzAtMC43LDAuMi0xLjMsMC41LTEuOGwtMi4zLTEuM2MtMC41LDAuOS0wLjgsMi0wLjgsMy4ySDQ3LjN6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTYtMjczLjNjMCwwLjctMC4yLDEuMy0wLjUsMS44bDIuMywxLjNjMC41LTAuOSwwLjgtMiwwLjgtMy4ySDU2eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU1LjUtMjc1LjZjMC4zLDAuNiwwLjUsMS4yLDAuNSwxLjhoMi43YzAtMS4xLTAuMy0yLjItMC44LTMuMkw1NS41LTI3NS42eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTUzLjctMjY5LjdjLTAuNiwwLjMtMS4yLDAuNS0xLjgsMC41djIuN2MxLjEsMCwyLjItMC4zLDMuMi0wLjhMNTMuNy0yNjkuN3oiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00Ny43LTI3MS41Yy0wLjMtMC42LTAuNS0xLjItMC41LTEuOGgtMi43YzAsMS4xLDAuMywyLjIsMC44LDMuMkw0Ny43LTI3MS41eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTUxLjQtMjY5LjJjLTAuNywwLTEuMy0wLjItMS44LTAuNWwtMS4zLDIuM2MwLjksMC41LDIsMC44LDMuMiwwLjhWLTI2OS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTY1LjgtMjc1LjljMC4zLTAuNSwwLjgtMSwxLjQtMS40bC0xLjMtMi4zYy0wLjksMC42LTEuNywxLjQtMi4zLDIuM0w2NS44LTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTY5LjctMjc3LjljMC43LDAsMS4zLDAuMiwxLjgsMC41bDEuMy0yLjNjLTAuOS0wLjUtMi0wLjgtMy4yLTAuOFYtMjc3Ljl6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNjcuNS0yNzcuNGMwLjYtMC4zLDEuMi0wLjUsMS45LTAuNWwwLTIuN2MtMS4xLDAtMi4yLDAuMy0zLjIsMC44TDY3LjUtMjc3LjR6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNzMuMi0yNzEuMmMtMC4zLDAuNS0wLjgsMS0xLjQsMS40bDEuMywyLjNjMC45LTAuNiwxLjctMS40LDIuMy0yLjNMNzMuMi0yNzEuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02NS44LTI3MS4ybC0yLjMsMS4zYzAuNiwwLjksMS40LDEuNywyLjMsMi4zbDEuMy0yLjNDNjYuNi0yNzAuMiw2Ni4yLTI3MC42LDY1LjgtMjcxLjJ6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNzMuMi0yNzUuOWwyLjMtMS4zYy0wLjYtMC45LTEuNC0xLjctMi4zLTIuM2wtMS4zLDIuM0M3Mi40LTI3Ni45LDcyLjktMjc2LjQsNzMuMi0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02NS4yLTI3My43YzAtMC43LDAuMi0xLjMsMC41LTEuOGwtMi4zLTEuM2MtMC41LDAuOS0wLjgsMi0wLjgsMy4ySDY1LjJ6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNzMuOS0yNzMuM2MwLDAuNy0wLjIsMS4zLTAuNSwxLjhsMi4zLDEuM2MwLjUtMC45LDAuOC0yLDAuOC0zLjJINzMuOXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik03My40LTI3NS42YzAuMywwLjYsMC41LDEuMiwwLjUsMS44aDIuN2MwLTEuMS0wLjMtMi4yLTAuOC0zLjJMNzMuNC0yNzUuNnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik03MS42LTI2OS43Yy0wLjYsMC4zLTEuMiwwLjUtMS44LDAuNXYyLjdjMS4xLDAsMi4yLTAuMywzLjItMC44TDcxLjYtMjY5Ljd6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNjUuNy0yNzEuNWMtMC4zLTAuNi0wLjUtMS4yLTAuNS0xLjhoLTIuN2MwLDEuMSwwLjMsMi4yLDAuOCwzLjJMNjUuNy0yNzEuNXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02OS4zLTI2OS4yYy0wLjcsMC0xLjMtMC4yLTEuOC0wLjVsLTEuMywyLjNjMC45LDAuNSwyLDAuOCwzLjIsMC44Vi0yNjkuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04My43LTI3NS45YzAuMy0wLjUsMC44LTEsMS40LTEuNGwtMS4zLTIuM2MtMC45LDAuNi0xLjcsMS40LTIuMywyLjNMODMuNy0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04Ny42LTI3Ny45YzAuNywwLDEuMywwLjIsMS44LDAuNWwxLjMtMi4zYy0wLjktMC41LTItMC44LTMuMi0wLjhWLTI3Ny45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTg1LjQtMjc3LjRjMC42LTAuMywxLjItMC41LDEuOS0wLjVsMC0yLjdjLTEuMSwwLTIuMiwwLjMtMy4yLDAuOEw4NS40LTI3Ny40eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTkxLjEtMjcxLjJjLTAuMywwLjUtMC44LDEtMS40LDEuNGwxLjMsMi4zYzAuOS0wLjYsMS43LTEuNCwyLjMtMi4zTDkxLjEtMjcxLjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODMuNy0yNzEuMmwtMi4zLDEuM2MwLjYsMC45LDEuNCwxLjcsMi4zLDIuM2wxLjMtMi4zQzg0LjUtMjcwLjIsODQuMS0yNzAuNiw4My43LTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTkxLjEtMjc1LjlsMi4zLTEuM2MtMC42LTAuOS0xLjQtMS43LTIuMy0yLjNsLTEuMywyLjNDOTAuMy0yNzYuOSw5MC44LTI3Ni40LDkxLjEtMjc1Ljl6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODMuMS0yNzMuN2MwLTAuNywwLjItMS4zLDAuNS0xLjhsLTIuMy0xLjNjLTAuNSwwLjktMC44LDItMC44LDMuMkg4My4xeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTkxLjgtMjczLjNjMCwwLjctMC4yLDEuMy0wLjUsMS44bDIuMywxLjNjMC41LTAuOSwwLjgtMiwwLjgtMy4ySDkxLjh6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOTEuMy0yNzUuNmMwLjMsMC42LDAuNSwxLjIsMC41LDEuOGgyLjdjMC0xLjEtMC4zLTIuMi0wLjgtMy4yTDkxLjMtMjc1LjZ6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODkuNS0yNjkuN2MtMC42LDAuMy0xLjIsMC41LTEuOCwwLjV2Mi43YzEuMSwwLDIuMi0wLjMsMy4yLTAuOEw4OS41LTI2OS43eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTgzLjYtMjcxLjVjLTAuMy0wLjYtMC41LTEuMi0wLjUtMS44aC0yLjdjMCwxLjEsMC4zLDIuMiwwLjgsMy4yTDgzLjYtMjcxLjV6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODcuMy0yNjkuMmMtMC43LDAtMS4zLTAuMi0xLjgtMC41bC0xLjMsMi4zYzAuOSwwLjUsMiwwLjgsMy4yLDAuOFYtMjY5LjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjUuMS0yOTVjMC4zLTAuNSwwLjgtMSwxLjQtMS40bC0xLjMtMi4zYy0wLjksMC42LTEuNywxLjQtMi4zLDIuM0wyNS4xLTI5NXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC45LTI5N2MwLjcsMCwxLjMsMC4yLDEuOCwwLjVsMS4zLTIuM2MtMC45LTAuNS0yLTAuOC0zLjItMC44Vi0yOTd6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjYuNy0yOTYuNWMwLjYtMC4zLDEuMi0wLjUsMS45LTAuNWwwLTIuN2MtMS4xLDAtMi4yLDAuMy0zLjIsMC44TDI2LjctMjk2LjV6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzIuNC0yOTAuM2MtMC4zLDAuNS0wLjgsMS0xLjQsMS40bDEuMywyLjNjMC45LTAuNiwxLjctMS40LDIuMy0yLjNMMzIuNC0yOTAuM3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yNS4xLTI5MC4zbC0yLjMsMS4zYzAuNiwwLjksMS40LDEuNywyLjMsMi4zbDEuMy0yLjNDMjUuOS0yODkuMywyNS40LTI4OS44LDI1LjEtMjkwLjN6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzIuNC0yOTVsMi4zLTEuM2MtMC42LTAuOS0xLjQtMS43LTIuMy0yLjNsLTEuMywyLjNDMzEuNi0yOTYsMzIuMS0yOTUuNSwzMi40LTI5NXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yNC40LTI5Mi44YzAtMC43LDAuMi0xLjMsMC41LTEuOGwtMi4zLTEuM2MtMC41LDAuOS0wLjgsMi0wLjgsMy4ySDI0LjR6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzMuMS0yOTIuNWMwLDAuNy0wLjIsMS4zLTAuNSwxLjhsMi4zLDEuM2MwLjUtMC45LDAuOC0yLDAuOC0zLjJIMzMuMXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMi42LTI5NC43YzAuMywwLjYsMC41LDEuMiwwLjUsMS44aDIuN2MwLTEuMS0wLjMtMi4yLTAuOC0zLjJMMzIuNi0yOTQuN3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMC44LTI4OC44Yy0wLjYsMC4zLTEuMiwwLjUtMS44LDAuNXYyLjdjMS4xLDAsMi4yLTAuMywzLjItMC44TDMwLjgtMjg4Ljh6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjQuOS0yOTAuNmMtMC4zLTAuNi0wLjUtMS4yLTAuNS0xLjhoLTIuN2MwLDEuMSwwLjMsMi4yLDAuOCwzLjJMMjQuOS0yOTAuNnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC42LTI4OC4zYy0wLjcsMC0xLjMtMC4yLTEuOC0wLjVsLTEuMywyLjNjMC45LDAuNSwyLDAuOCwzLjIsMC44Vi0yODguM3oiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00My43LTI5NWMwLjMtMC41LDAuOC0xLDEuNC0xLjRsLTEuMy0yLjNjLTAuOSwwLjYtMS43LDEuNC0yLjMsMi4zTDQzLjctMjk1eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ3LjYtMjk3YzAuNywwLDEuMywwLjIsMS44LDAuNWwxLjMtMi4zYy0wLjktMC41LTItMC44LTMuMi0wLjhWLTI5N3oiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00NS40LTI5Ni41YzAuNi0wLjMsMS4yLTAuNSwxLjktMC41bDAtMi43Yy0xLjEsMC0yLjIsMC4zLTMuMiwwLjhMNDUuNC0yOTYuNXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01MS4xLTI5MC4zYy0wLjMsMC41LTAuOCwxLTEuNCwxLjRsMS4zLDIuM2MwLjktMC42LDEuNy0xLjQsMi4zLTIuM0w1MS4xLTI5MC4zeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQzLjctMjkwLjNsLTIuMywxLjNjMC42LDAuOSwxLjQsMS43LDIuMywyLjNsMS4zLTIuM0M0NC41LTI4OS4zLDQ0LjEtMjg5LjgsNDMuNy0yOTAuM3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01MS4xLTI5NWwyLjMtMS4zYy0wLjYtMC45LTEuNC0xLjctMi4zLTIuM2wtMS4zLDIuM0M1MC4zLTI5Niw1MC44LTI5NS41LDUxLjEtMjk1eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQzLTI5Mi44YzAtMC43LDAuMi0xLjMsMC41LTEuOGwtMi4zLTEuM2MtMC41LDAuOS0wLjgsMi0wLjgsMy4ySDQzeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTUxLjgtMjkyLjVjMCwwLjctMC4yLDEuMy0wLjUsMS44bDIuMywxLjNjMC41LTAuOSwwLjgtMiwwLjgtMy4ySDUxLjh6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTEuMy0yOTQuN2MwLjMsMC42LDAuNSwxLjIsMC41LDEuOGgyLjdjMC0xLjEtMC4zLTIuMi0wLjgtMy4yTDUxLjMtMjk0Ljd6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDkuNC0yODguOGMtMC42LDAuMy0xLjIsMC41LTEuOCwwLjV2Mi43YzEuMSwwLDIuMi0wLjMsMy4yLTAuOEw0OS40LTI4OC44eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQzLjUtMjkwLjZjLTAuMy0wLjYtMC41LTEuMi0wLjUtMS44aC0yLjdjMCwxLjEsMC4zLDIuMiwwLjgsMy4yTDQzLjUtMjkwLjZ6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDcuMi0yODguM2MtMC43LDAtMS4zLTAuMi0xLjgtMC41bC0xLjMsMi4zYzAuOSwwLjUsMiwwLjgsMy4yLDAuOFYtMjg4LjN6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNjIuOS0yOTVjMC4zLTAuNSwwLjgtMSwxLjQtMS40bC0xLjMtMi4zYy0wLjksMC42LTEuNywxLjQtMi4zLDIuM0w2Mi45LTI5NXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02Ni44LTI5N2MwLjcsMCwxLjMsMC4yLDEuOCwwLjVsMS4zLTIuM2MtMC45LTAuNS0yLTAuOC0zLjItMC44Vi0yOTd6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNjQuNi0yOTYuNWMwLjYtMC4zLDEuMi0wLjUsMS45LTAuNWwwLTIuN2MtMS4xLDAtMi4yLDAuMy0zLjIsMC44TDY0LjYtMjk2LjV6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNzAuMy0yOTAuM2MtMC4zLDAuNS0wLjgsMS0xLjQsMS40bDEuMywyLjNjMC45LTAuNiwxLjctMS40LDIuMy0yLjNMNzAuMy0yOTAuM3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02Mi45LTI5MC4zbC0yLjMsMS4zYzAuNiwwLjksMS40LDEuNywyLjMsMi4zbDEuMy0yLjNDNjMuNy0yODkuMyw2My4zLTI4OS44LDYyLjktMjkwLjN6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNzAuMy0yOTVsMi4zLTEuM2MtMC42LTAuOS0xLjQtMS43LTIuMy0yLjNsLTEuMywyLjNDNjkuNS0yOTYsNzAtMjk1LjUsNzAuMy0yOTV6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNjIuMy0yOTIuOGMwLTAuNywwLjItMS4zLDAuNS0xLjhsLTIuMy0xLjNjLTAuNSwwLjktMC44LDItMC44LDMuMkg2Mi4zeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTcxLTI5Mi41YzAsMC43LTAuMiwxLjMtMC41LDEuOGwyLjMsMS4zYzAuNS0wLjksMC44LTIsMC44LTMuMkg3MXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik03MC41LTI5NC43YzAuMywwLjYsMC41LDEuMiwwLjUsMS44aDIuN2MwLTEuMS0wLjMtMi4yLTAuOC0zLjJMNzAuNS0yOTQuN3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02OC43LTI4OC44Yy0wLjYsMC4zLTEuMiwwLjUtMS44LDAuNXYyLjdjMS4xLDAsMi4yLTAuMywzLjItMC44TDY4LjctMjg4Ljh6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNjIuNy0yOTAuNmMtMC4zLTAuNi0wLjUtMS4yLTAuNS0xLjhoLTIuN2MwLDEuMSwwLjMsMi4yLDAuOCwzLjJMNjIuNy0yOTAuNnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02Ni40LTI4OC4zYy0wLjcsMC0xLjMtMC4yLTEuOC0wLjVsLTEuMywyLjNjMC45LDAuNSwyLDAuOCwzLjIsMC44Vi0yODguM3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04MC44LTI5NWMwLjMtMC41LDAuOC0xLDEuNC0xLjRsLTEuMy0yLjNjLTAuOSwwLjYtMS43LDEuNC0yLjMsMi4zTDgwLjgtMjk1eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTg0LjctMjk3YzAuNywwLDEuMywwLjIsMS44LDAuNWwxLjMtMi4zYy0wLjktMC41LTItMC44LTMuMi0wLjhWLTI5N3oiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04Mi41LTI5Ni41YzAuNi0wLjMsMS4yLTAuNSwxLjktMC41bDAtMi43Yy0xLjEsMC0yLjIsMC4zLTMuMiwwLjhMODIuNS0yOTYuNXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04OC4yLTI5MC4zYy0wLjMsMC41LTAuOCwxLTEuNCwxLjRsMS4zLDIuM2MwLjktMC42LDEuNy0xLjQsMi4zLTIuM0w4OC4yLTI5MC4zeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTgwLjgtMjkwLjNsLTIuMywxLjNjMC42LDAuOSwxLjQsMS43LDIuMywyLjNsMS4zLTIuM0M4MS42LTI4OS4zLDgxLjItMjg5LjgsODAuOC0yOTAuM3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04OC4yLTI5NWwyLjMtMS4zYy0wLjYtMC45LTEuNC0xLjctMi4zLTIuM2wtMS4zLDIuM0M4Ny40LTI5Niw4Ny45LTI5NS41LDg4LjItMjk1eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTgwLjItMjkyLjhjMC0wLjcsMC4yLTEuMywwLjUtMS44bC0yLjMtMS4zYy0wLjUsMC45LTAuOCwyLTAuOCwzLjJIODAuMnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04OC45LTI5Mi41YzAsMC43LTAuMiwxLjMtMC41LDEuOGwyLjMsMS4zYzAuNS0wLjksMC44LTIsMC44LTMuMkg4OC45eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTg4LjQtMjk0LjdjMC4zLDAuNiwwLjUsMS4yLDAuNSwxLjhoMi43YzAtMS4xLTAuMy0yLjItMC44LTMuMkw4OC40LTI5NC43eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTg2LjYtMjg4LjhjLTAuNiwwLjMtMS4yLDAuNS0xLjgsMC41djIuN2MxLjEsMCwyLjItMC4zLDMuMi0wLjhMODYuNi0yODguOHoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04MC43LTI5MC42Yy0wLjMtMC42LTAuNS0xLjItMC41LTEuOGgtMi43YzAsMS4xLDAuMywyLjIsMC44LDMuMkw4MC43LTI5MC42eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTg0LjMtMjg4LjNjLTAuNywwLTEuMy0wLjItMS44LTAuNWwtMS4zLDIuM2MwLjksMC41LDIsMC44LDMuMiwwLjhWLTI4OC4zeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTk4LjctMjk1YzAuMy0wLjUsMC44LTEsMS40LTEuNGwtMS4zLTIuM2MtMC45LDAuNi0xLjcsMS40LTIuMywyLjNMOTguNy0yOTV6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTAyLjYtMjk3YzAuNywwLDEuMywwLjIsMS44LDAuNWwxLjMtMi4zYy0wLjktMC41LTItMC44LTMuMi0wLjhWLTI5N3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMDAuNC0yOTYuNWMwLjYtMC4zLDEuMi0wLjUsMS45LTAuNWwwLTIuN2MtMS4xLDAtMi4yLDAuMy0zLjIsMC44TDEwMC40LTI5Ni41eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEwNi4xLTI5MC4zYy0wLjMsMC41LTAuOCwxLTEuNCwxLjRsMS4zLDIuM2MwLjktMC42LDEuNy0xLjQsMi4zLTIuM0wxMDYuMS0yOTAuM3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05OC43LTI5MC4zbC0yLjMsMS4zYzAuNiwwLjksMS40LDEuNywyLjMsMi4zbDEuMy0yLjNDOTkuNS0yODkuMyw5OS4xLTI4OS44LDk4LjctMjkwLjN6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTA2LjEtMjk1bDIuMy0xLjNjLTAuNi0wLjktMS40LTEuNy0yLjMtMi4zbC0xLjMsMi4zQzEwNS4zLTI5NiwxMDUuOC0yOTUuNSwxMDYuMS0yOTV6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOTguMS0yOTIuOGMwLTAuNywwLjItMS4zLDAuNS0xLjhsLTIuMy0xLjNjLTAuNSwwLjktMC44LDItMC44LDMuMkg5OC4xeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEwNi44LTI5Mi41YzAsMC43LTAuMiwxLjMtMC41LDEuOGwyLjMsMS4zYzAuNS0wLjksMC44LTIsMC44LTMuMkgxMDYuOHoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMDYuMy0yOTQuN2MwLjMsMC42LDAuNSwxLjIsMC41LDEuOGgyLjdjMC0xLjEtMC4zLTIuMi0wLjgtMy4yTDEwNi4zLTI5NC43eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEwNC41LTI4OC44Yy0wLjYsMC4zLTEuMiwwLjUtMS44LDAuNXYyLjdjMS4xLDAsMi4yLTAuMywzLjItMC44TDEwNC41LTI4OC44eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTk4LjYtMjkwLjZjLTAuMy0wLjYtMC41LTEuMi0wLjUtMS44aC0yLjdjMCwxLjEsMC4zLDIuMiwwLjgsMy4yTDk4LjYtMjkwLjZ6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTAyLjMtMjg4LjNjLTAuNywwLTEuMy0wLjItMS44LTAuNWwtMS4zLDIuM2MwLjksMC41LDIsMC44LDMuMiwwLjhWLTI4OC4zeiIvPgoJPC9nPgo8L2c+CjxnPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTS00MS4xLTE2MS42bC00LjYtOC41bDIuOS0wLjFsMS41LDIuN2wyLjktNy43aDMuMUwtNDEuMS0xNjEuNnoiLz4KPC9nPgo8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjAwLjIsM2MtMTYuNCwwLTI5LjcsMTMuMy0yOS43LDI5LjdjMCwxNi40LDEzLjMsMjkuNywyOS43LDI5LjdjMTYuNCwwLDI5LjctMTMuMywyOS43LTI5LjcKCUMyMjkuOSwxNi4zLDIxNi42LDMsMjAwLjIsM3ogTTIwMC4yLDU2LjZjLTEzLjIsMC0yMy45LTEwLjctMjMuOS0yMy45UzE4Nyw4LjgsMjAwLjIsOC44YzEzLjIsMCwyMy45LDEwLjcsMjMuOSwyMy45CglTMjEzLjQsNTYuNiwyMDAuMiw1Ni42eiIvPgo8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODguMSwzMS42Yy0wLjEsMTcuNiwxNCwzMiwzMS42LDMyLjFjMTcuNiwwLjEsMzItMTQsMzIuMS0zMS42YzAuMS0xNy42LTE0LTMyLTMxLjYtMzIuMQoJQzEwMi42LTAuMSw4OC4zLDE0LDg4LjEsMzEuNnogTTE0NS43LDMyLjFjLTAuMSwxNC4yLTExLjcsMjUuNi0yNS45LDI1LjVjLTE0LjItMC4xLTI1LjYtMTEuNy0yNS41LTI1LjkKCWMwLjEtMTQuMiwxMS43LTI1LjYsMjUuOS0yNS41UzE0NS44LDE3LjksMTQ1LjcsMzIuMXoiLz4KPGc+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTE3LjMsNTQuNWwtMTMuNS0yNC45bDguNi0wLjJsNC40LDhsOC40LTIyLjZoOS4yTDExNy4zLDU0LjV6Ii8+CjwvZz4KPGc+Cgk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTcwLjgsMTA5LjFsLTExLjctMjEuNmw3LjUtMC4ybDMuOCw2LjlsNy4zLTE5LjZoNy45TDE3MC44LDEwOS4xeiIvPgo8L2c+CjxjaXJjbGUgY2xhc3M9InN0MyIgY3g9IjIxLjEiIGN5PSItMjA5LjgiIHI9IjEuOSIvPgo8L3N2Zz4K);margin-right:-5px}span.no-tor{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMjMxRjIwO30KCS5zdDF7ZmlsbDojRjM5MzQ3O30KCS5zdDJ7ZmlsbDojRkZGRkZGO30KCS5zdDN7ZmlsbDojRjM4MjIwO30KCS5zdDR7b3BhY2l0eTowLjM7fQoJLnN0NXtvcGFjaXR5OjAuNTt9Cgkuc3Q2e29wYWNpdHk6MC4zNjt9Cgkuc3Q3e2ZpbGw6bm9uZTtzdHJva2U6I0YzODIyMDtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cjwvc3R5bGU+CjxyZWN0IHg9IjI2LjgiIHk9Ii0yMTcuMiIgY2xhc3M9InN0MCIgd2lkdGg9IjE1IiBoZWlnaHQ9IjE1Ii8+CjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0tMTguOC0zMzUuOWMwLDAuNS0wLjQsMC45LTAuOSwwLjlILTI5Yy0wLjUsMC0wLjktMC40LTAuOS0wLjl2LTYuNWMwLTAuNSwwLjQtMC45LDAuOS0wLjloOS40CgljMC41LDAsMC45LDAuNCwwLjksMC45Vi0zMzUuOXoiLz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNLTI3LjYtMzQyLjhjMCwwLTAuMSwwLTAuMywwYy0wLjIsMC0wLjQsMC0wLjYtMC4xYzAsMCwwLTAuMSwwLTAuMWMwLDAsMC0wLjEsMC0wLjFjMC0xLDAuMS0xLjksMC40LTIuNwoJCQljMC4zLTAuOCwwLjYtMS41LDEuMS0yYzAuMy0wLjQsMC43LTAuNiwxLjItMC44czEtMC4zLDEuNi0wLjNjMC41LDAsMSwwLjEsMS41LDAuM2MwLjQsMC4yLDAuOCwwLjUsMS4xLDAuOAoJCQljMC41LDAuNSwwLjgsMS4xLDEuMSwxLjljMC4zLDAuOCwwLjQsMS43LDAuNCwyLjZjMCwwLDAsMC4xLDAsMC4yYzAsMC4xLDAsMC4xLDAsMC4xYy0wLjEsMC0wLjIsMC0wLjQsMGMtMC4yLDAtMC4zLDAtMC41LDAKCQkJYzAsMCwwLTAuMSwwLTAuMWMwLDAsMC0wLjEsMC0wLjFjMC0wLjUtMC4xLTEuMS0wLjItMS42Yy0wLjEtMC42LTAuMy0xLTAuNS0xLjVjLTAuMy0wLjUtMC43LTAuOS0xLjEtMS4yYy0wLjUtMC4zLTEtMC40LTEuNS0wLjQKCQkJYy0wLjYsMC0xLjEsMC4xLTEuNSwwLjRjLTAuNSwwLjMtMC44LDAuNy0xLjEsMS4yYy0wLjMsMC41LTAuNCwxLTAuNiwxLjVjLTAuMSwwLjYtMC4yLDEuMS0wLjIsMS43YzAsMCwwLDAuMSwwLDAuMQoJCQlDLTI3LjctMzQyLjktMjcuNy0zNDIuOS0yNy42LTM0Mi44eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0tMjcuNC0zNDIuNmwtMC4zLDBjMCwwLTAuMSwwLTAuMywwYy0wLjIsMC0wLjQsMC0wLjUtMC4xbC0wLjIsMHYtMC40YzAtMSwwLjEtMiwwLjQtMi44CgkJCWMwLjMtMC44LDAuNi0xLjUsMS4xLTJjMC4zLTAuNCwwLjgtMC43LDEuMy0wLjljMC41LTAuMiwxLTAuMywxLjctMC4zYzAuNiwwLDEuMSwwLjEsMS41LDAuM2MwLjUsMC4yLDAuOSwwLjUsMS4yLDAuOQoJCQljMC41LDAuNSwwLjksMS4yLDEuMiwyYzAuMywwLjgsMC40LDEuNywwLjQsMi43djAuNWwtMC4yLDBjLTAuMSwwLTAuMiwwLTAuMywwYy0wLjIsMC0wLjMsMC0wLjUsMGwtMC4yLDB2LTAuNQoJCQljMC0wLjUtMC4xLTEtMC4yLTEuNmMtMC4xLTAuNS0wLjMtMS0wLjUtMS40Yy0wLjMtMC41LTAuNi0wLjktMS4xLTEuMWMtMC40LTAuMy0wLjktMC40LTEuNC0wLjRjLTAuNSwwLTEsMC4xLTEuNCwwLjQKCQkJYy0wLjQsMC4yLTAuOCwwLjYtMS4xLDEuMWMtMC4yLDAuNC0wLjQsMC45LTAuNSwxLjVjLTAuMSwwLjUtMC4yLDEuMS0wLjIsMS42djAuMWMwLDAuMSwwLDAuMSwwLDAuMkwtMjcuNC0zNDIuNnogTS0yOC4zLTM0My4xCgkJCWMwLjEsMCwwLjIsMCwwLjQsMGMwLDAsMCwwLDAuMSwwdi0wLjFjMC0wLjYsMC4xLTEuMSwwLjItMS43YzAuMS0wLjYsMC4zLTEuMSwwLjYtMS42YzAuMy0wLjYsMC43LTEsMS4yLTEuMwoJCQljMC41LTAuMywxLTAuNCwxLjYtMC40YzAuNiwwLDEuMSwwLjIsMS42LDAuNWMwLjUsMC4zLDAuOSwwLjcsMS4yLDEuM2MwLjIsMC40LDAuNCwwLjksMC41LDEuNWMwLjEsMC42LDAuMiwxLjEsMC4yLDEuNwoJCQljMC4xLDAsMC4yLDAsMC4zLDBjMC4xLDAsMC4xLDAsMC4yLDB2LTAuMWMwLTAuOS0wLjEtMS44LTAuNC0yLjVjLTAuMy0wLjgtMC42LTEuNC0xLjEtMS45Yy0wLjMtMC4zLTAuNy0wLjYtMS4xLTAuOAoJCQljLTAuNC0wLjItMC45LTAuMy0xLjQtMC4zYy0wLjYsMC0xLjEsMC4xLTEuNSwwLjNjLTAuNCwwLjItMC44LDAuNS0xLjEsMC44Yy0wLjUsMC41LTAuOCwxLjEtMSwxLjkKCQkJQy0yOC4yLTM0NS0yOC4zLTM0NC4xLTI4LjMtMzQzLjFMLTI4LjMtMzQzLjF6Ii8+Cgk8L2c+CjwvZz4KPGNpcmNsZSBjbGFzcz0ic3QyIiBjeD0iLTI0LjMiIGN5PSItMzQwLjIiIHI9IjAuOSIvPgo8cGF0aCBjbGFzcz0ic3QyIiBkPSJNLTI0LjMtMzM3LjJMLTI0LjMtMzM3LjJjLTAuMywwLTAuNi0wLjMtMC42LTAuNnYtMS45YzAtMC4zLDAuMy0wLjYsMC42LTAuNmwwLDBjMC4zLDAsMC42LDAuMywwLjYsMC42djEuOQoJQy0yMy43LTMzNy41LTI0LTMzNy4yLTI0LjMtMzM3LjJ6Ii8+CjxnPgoJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0zNS0yMTcuN2MwLDAuNS0wLjQsMC45LTAuOSwwLjloLTkuNGMtMC41LDAtMC45LTAuNC0wLjktMC45di02LjVjMC0wLjUsMC40LTAuOSwwLjktMC45aDkuNAoJCWMwLjUsMCwwLjksMC40LDAuOSwwLjlWLTIxNy43eiIvPgoJPGc+CgkJPGc+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDMuOS0yMjQuNmMwLDAtMC4xLDAtMC4zLDBjLTAuMiwwLTAuNCwwLTAuNi0wLjFjMCwwLDAtMC4xLDAtMC4xYzAsMCwwLTAuMSwwLTAuMWMwLTEsMC4xLTEuOSwwLjQtMi43CgkJCQljMC4zLTAuOCwwLjYtMS41LDEuMS0yYzAuMy0wLjQsMC43LTAuNiwxLjItMC44YzAuNS0wLjIsMS0wLjMsMS42LTAuM2MwLjUsMCwxLDAuMSwxLjUsMC4zYzAuNCwwLjIsMC44LDAuNSwxLjEsMC44CgkJCQljMC41LDAuNSwwLjgsMS4xLDEuMSwxLjljMC4zLDAuOCwwLjQsMS43LDAuNCwyLjZjMCwwLDAsMC4xLDAsMC4yYzAsMC4xLDAsMC4xLDAsMC4xYy0wLjEsMC0wLjIsMC0wLjQsMGMtMC4yLDAtMC4zLDAtMC41LDAKCQkJCWMwLDAsMC0wLjEsMC0wLjFjMCwwLDAtMC4xLDAtMC4xYzAtMC41LTAuMS0xLjEtMC4yLTEuNmMtMC4xLTAuNi0wLjMtMS0wLjUtMS41Yy0wLjMtMC41LTAuNy0wLjktMS4xLTEuMgoJCQkJYy0wLjUtMC4zLTEtMC40LTEuNS0wLjRjLTAuNiwwLTEuMSwwLjEtMS41LDAuNGMtMC41LDAuMy0wLjgsMC43LTEuMSwxLjJjLTAuMywwLjUtMC40LDEtMC42LDEuNWMtMC4xLDAuNi0wLjIsMS4xLTAuMiwxLjcKCQkJCWMwLDAsMCwwLjEsMCwwLjFDLTQzLjktMjI0LjctNDMuOS0yMjQuNy00My45LTIyNC42eiIvPgoJCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQzLjYtMjI0LjRsLTAuMywwYzAsMC0wLjEsMC0wLjMsMGMtMC4yLDAtMC40LDAtMC41LTAuMWwtMC4yLDB2LTAuNGMwLTEsMC4xLTIsMC40LTIuOAoJCQkJYzAuMy0wLjgsMC42LTEuNSwxLjEtMmMwLjMtMC40LDAuOC0wLjcsMS4zLTAuOWMwLjUtMC4yLDEtMC4zLDEuNy0wLjNjMC42LDAsMS4xLDAuMSwxLjUsMC4zYzAuNSwwLjIsMC45LDAuNSwxLjIsMC45CgkJCQljMC41LDAuNSwwLjksMS4yLDEuMiwyYzAuMywwLjgsMC40LDEuNywwLjQsMi43djAuNWwtMC4yLDBjLTAuMSwwLTAuMiwwLTAuMywwYy0wLjIsMC0wLjMsMC0wLjUsMGwtMC4yLDB2LTAuNQoJCQkJYzAtMC41LTAuMS0xLTAuMi0xLjZjLTAuMS0wLjUtMC4zLTEtMC41LTEuNGMtMC4zLTAuNS0wLjYtMC45LTEuMS0xLjFjLTAuNC0wLjMtMC45LTAuNC0xLjQtMC40Yy0wLjUsMC0xLDAuMS0xLjQsMC40CgkJCQljLTAuNCwwLjItMC44LDAuNi0xLjEsMS4xYy0wLjIsMC40LTAuNCwwLjktMC41LDEuNWMtMC4xLDAuNS0wLjIsMS4xLTAuMiwxLjZ2MC4xYzAsMC4xLDAsMC4xLDAsMC4yTC00My42LTIyNC40eiBNLTQ0LjUtMjI0LjkKCQkJCWMwLjEsMCwwLjIsMCwwLjQsMGMwLDAsMCwwLDAuMSwwdi0wLjFjMC0wLjYsMC4xLTEuMSwwLjItMS43YzAuMS0wLjYsMC4zLTEuMSwwLjYtMS42YzAuMy0wLjYsMC43LTEsMS4yLTEuMwoJCQkJYzAuNS0wLjMsMS0wLjQsMS42LTAuNGMwLjYsMCwxLjEsMC4yLDEuNiwwLjVjMC41LDAuMywwLjksMC43LDEuMiwxLjNjMC4yLDAuNCwwLjQsMC45LDAuNSwxLjVjMC4xLDAuNiwwLjIsMS4xLDAuMiwxLjcKCQkJCWMwLjEsMCwwLjIsMCwwLjMsMGMwLjEsMCwwLjEsMCwwLjIsMHYtMC4xYzAtMC45LTAuMS0xLjgtMC40LTIuNWMtMC4zLTAuOC0wLjYtMS40LTEuMS0xLjljLTAuMy0wLjMtMC43LTAuNi0xLjEtMC44CgkJCQljLTAuNC0wLjItMC45LTAuMy0xLjQtMC4zYy0wLjYsMC0xLjEsMC4xLTEuNSwwLjNjLTAuNCwwLjItMC44LDAuNS0xLjEsMC44Yy0wLjUsMC41LTAuOCwxLjEtMSwxLjkKCQkJCUMtNDQuNC0yMjYuOC00NC41LTIyNS45LTQ0LjUtMjI0LjlMLTQ0LjUtMjI0Ljl6Ii8+CgkJPC9nPgoJPC9nPgoJPGNpcmNsZSBjbGFzcz0ic3QyIiBjeD0iLTQwLjUiIGN5PSItMjIyIiByPSIwLjkiLz4KCTxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik0tNDAuNS0yMTlMLTQwLjUtMjE5Yy0wLjMsMC0wLjYtMC4zLTAuNi0wLjZ2LTEuOWMwLTAuMywwLjMtMC42LDAuNi0wLjZsMCwwYzAuMywwLDAuNiwwLjMsMC42LDAuNnYxLjkKCQlDLTM5LjktMjE5LjMtNDAuMi0yMTktNDAuNS0yMTl6Ii8+CjwvZz4KPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xNC42LTIxNy43YzAsMC41LTAuNCwwLjktMC45LDAuOWgtOS40Yy0wLjUsMC0wLjktMC40LTAuOS0wLjl2LTYuNWMwLTAuNSwwLjQtMC45LDAuOS0wLjloOS40CgljMC41LDAsMC45LDAuNCwwLjksMC45Vi0yMTcuN3oiLz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTE3LjUtMjI4LjZjMC4yLDAuNCwwLjQsMC45LDAuNSwxLjVjMC4zLDAsMC42LDAsMC45LDBjLTAuMS0wLjQtMC4yLTAuNy0wLjMtMS4xYy0wLjMtMC44LTAuNy0xLjUtMS4xLTEuOQoJCQljLTAuMy0wLjMtMC43LTAuNi0xLjEtMC44Yy0wLjQtMC4yLTAuOS0wLjMtMS41LTAuM2MtMC42LDAtMS4xLDAuMS0xLjYsMC4zYy0wLjUsMC4yLTAuOSwwLjUtMS4yLDAuOGMtMC41LDAuNS0wLjgsMS4yLTEuMSwyCgkJCWMtMC4zLDAuOC0wLjQsMy45LTAuNCw0Ljl2MC4yYzAuMiwwLDAuNCwwLDAuNiwwLjFjMC4yLDAsMC4zLDAsMC4zLDBjMC0wLjEsMC0wLjEsMC0wLjJ2LTAuMWMwLTAuNiwwLjEtMy4zLDAuMi0zLjkKCQkJYzAuMS0wLjYsMC4zLTEuMSwwLjYtMS41YzAuMy0wLjYsMC43LTEsMS4xLTEuMmMwLjUtMC4zLDEtMC40LDEuNS0wLjRjMC41LDAsMSwwLjEsMS41LDAuNEMtMTguMi0yMjkuNS0xNy44LTIyOS4xLTE3LjUtMjI4LjZ6IgoJCQkvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMjMuMi0yMjIuN2wtMC4zLDBjMCwwLTAuMSwwLTAuMywwYy0wLjIsMC0wLjQsMC0wLjUtMC4xbC0wLjIsMHYtMC40YzAtMC45LDAuMS00LjEsMC40LTUKCQkJYzAuMy0wLjgsMC42LTEuNSwxLjEtMmMwLjMtMC40LDAuOC0wLjcsMS4zLTAuOWMwLjUtMC4yLDEtMC4zLDEuNy0wLjNjMC42LDAsMS4xLDAuMSwxLjUsMC4zYzAuNSwwLjIsMC45LDAuNSwxLjIsMC45CgkJCWMwLjUsMC41LDAuOSwxLjIsMS4yLDJjMC4xLDAuNCwwLjIsMC44LDAuMywxLjJsMCwwLjNsLTAuMywwYy0wLjQsMC0wLjYsMC0wLjksMGwtMC4yLDBsMC0wLjJjLTAuMS0wLjUtMC4zLTEtMC41LTEuNAoJCQljLTAuMy0wLjUtMC42LTAuOS0xLjEtMS4xYy0wLjQtMC4zLTAuOS0wLjQtMS40LTAuNGMtMC41LDAtMSwwLjEtMS40LDAuNGMtMC40LDAuMi0wLjgsMC42LTEuMSwxLjFjLTAuMiwwLjQtMC40LDAuOS0wLjUsMS41CgkJCWMtMC4xLDAuNS0wLjIsMy4yLTAuMiwzLjh2MC4xYzAsMC4xLDAsMC4xLDAsMC4yTC0yMy4yLTIyMi43eiBNLTI0LjEtMjIzLjNjMC4xLDAsMC4yLDAsMC40LDBjMCwwLDAsMCwwLjEsMHYtMC4xCgkJCWMwLTAuNCwwLjEtMy4zLDAuMi0zLjljMC4xLTAuNiwwLjMtMS4xLDAuNi0xLjZjMC4zLTAuNiwwLjctMSwxLjItMS4zYzAuNS0wLjMsMS0wLjQsMS42LTAuNGMwLjYsMCwxLjEsMC4yLDEuNiwwLjUKCQkJYzAuNSwwLjMsMC45LDAuNywxLjIsMS4zbDAsMGMwLjIsMC40LDAuNCwwLjgsMC41LDEuM2MwLjEsMCwwLjMsMCwwLjUsMGMtMC4xLTAuMy0wLjEtMC42LTAuMi0wLjhjLTAuMy0wLjgtMC42LTEuNC0xLjEtMS45CgkJCWMtMC4zLTAuMy0wLjctMC42LTEuMS0wLjhjLTAuNC0wLjItMC45LTAuMy0xLjQtMC4zYy0wLjYsMC0xLjEsMC4xLTEuNSwwLjNjLTAuNCwwLjItMC44LDAuNS0xLjEsMC44Yy0wLjUsMC41LTAuOCwxLjEtMSwxLjkKCQkJQy0yNC0yMjcuNC0yNC4xLTIyNC40LTI0LjEtMjIzLjNMLTI0LjEtMjIzLjN6Ii8+Cgk8L2c+CjwvZz4KPGNpcmNsZSBjbGFzcz0ic3QyIiBjeD0iLTIwLjEiIGN5PSItMjIyIiByPSIwLjkiLz4KPHBhdGggY2xhc3M9InN0MiIgZD0iTS0yMC4xLTIxOUwtMjAuMS0yMTljLTAuMywwLTAuNi0wLjMtMC42LTAuNnYtMS45YzAtMC4zLDAuMy0wLjYsMC42LTAuNmwwLDBjMC4zLDAsMC42LDAuMywwLjYsMC42djEuOQoJQy0xOS41LTIxOS4zLTE5LjgtMjE5LTIwLjEtMjE5eiIvPgo8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNC4yLTIxNy43YzAsMC41LTAuNCwwLjktMC45LDAuOUgtNmMtMC41LDAtMC45LTAuNC0wLjktMC45di02LjVjMC0wLjUsMC40LTAuOSwwLjktMC45aDkuNAoJYzAuNSwwLDAuOSwwLjQsMC45LDAuOVYtMjE3Ljd6Ii8+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEuMy0yMjguN2MwLjIsMC40LDAuNCwwLjksMC41LDEuNWMwLjMsMCwwLjYsMCwwLjksMGMtMC4xLTAuNC0wLjItMC43LTAuMy0xLjFjLTAuMy0wLjgtMC43LTEuNS0xLjEtMS45CgkJCWMtMC4zLTAuMy0wLjctMC42LTEuMS0wLjhjLTAuNC0wLjItMC45LTAuMy0xLjUtMC4zYy0wLjYsMC0xLjEsMC4xLTEuNiwwLjNjLTAuNSwwLjItMC45LDAuNS0xLjIsMC44Yy0wLjUsMC41LTAuOCwxLjItMS4xLDIKCQkJYy0wLjMsMC44LTAuNCwzLjktMC40LDQuOXYwLjJjMC4yLDAsMC40LDAsMC42LDAuMWMwLjIsMCwwLjMsMCwwLjMsMGMwLTAuMSwwLTAuMSwwLTAuMnYtMC4xYzAtMC42LDAuMS0zLjMsMC4yLTMuOQoJCQljMC4xLTAuNiwwLjMtMS4xLDAuNi0xLjVjMC4zLTAuNiwwLjctMSwxLjEtMS4yYzAuNS0wLjMsMS0wLjQsMS41LTAuNGMwLjUsMCwxLDAuMSwxLjUsMC40QzAuNi0yMjkuNiwxLTIyOS4yLDEuMy0yMjguN3oiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQuNC0yMjIuOGwtMC4zLDBjMCwwLTAuMSwwLTAuMywwYy0wLjIsMC0wLjQsMC0wLjUtMC4xbC0wLjIsMHYtMC40YzAtMC45LDAuMS00LjEsMC40LTUKCQkJYzAuMy0wLjgsMC42LTEuNSwxLjEtMmMwLjMtMC40LDAuOC0wLjcsMS4zLTAuOWMwLjUtMC4yLDEtMC4zLDEuNy0wLjNjMC42LDAsMS4xLDAuMSwxLjUsMC4zYzAuNSwwLjIsMC45LDAuNSwxLjIsMC45CgkJCWMwLjUsMC41LDAuOSwxLjIsMS4yLDJjMC4xLDAuNCwwLjIsMC44LDAuMywxLjJsMCwwLjNsLTAuMywwYy0wLjQsMC0wLjYsMC0wLjksMGwtMC4yLDBsMC0wLjJjLTAuMS0wLjUtMC4zLTEtMC41LTEuNAoJCQljLTAuMy0wLjUtMC42LTAuOS0xLjEtMS4xYy0wLjQtMC4zLTAuOS0wLjQtMS40LTAuNGMtMC41LDAtMSwwLjEtMS40LDAuNGMtMC40LDAuMi0wLjgsMC42LTEuMSwxLjFjLTAuMiwwLjQtMC40LDAuOS0wLjUsMS41CgkJCWMtMC4xLDAuNS0wLjIsMy4yLTAuMiwzLjh2MC4xYzAsMC4xLDAsMC4xLDAsMC4yTC00LjQtMjIyLjh6IE0tNS4zLTIyMy4zYzAuMSwwLDAuMiwwLDAuNCwwYzAsMCwwLDAsMC4xLDB2LTAuMQoJCQljMC0wLjQsMC4xLTMuMywwLjItMy45YzAuMS0wLjYsMC4zLTEuMSwwLjYtMS42YzAuMy0wLjYsMC43LTEsMS4yLTEuM2MwLjUtMC4zLDEtMC40LDEuNi0wLjRjMC42LDAsMS4xLDAuMiwxLjYsMC41CgkJCWMwLjUsMC4zLDAuOSwwLjcsMS4yLDEuM2wwLDBjMC4yLDAuNCwwLjQsMC44LDAuNSwxLjNjMC4xLDAsMC4zLDAsMC41LDBjLTAuMS0wLjMtMC4xLTAuNi0wLjItMC44Yy0wLjMtMC44LTAuNi0xLjQtMS4xLTEuOQoJCQljLTAuMy0wLjMtMC43LTAuNi0xLjEtMC44Yy0wLjQtMC4yLTAuOS0wLjMtMS40LTAuM2MtMC42LDAtMS4xLDAuMS0xLjUsMC4zYy0wLjQsMC4yLTAuOCwwLjUtMS4xLDAuOGMtMC41LDAuNS0wLjgsMS4xLTEsMS45CgkJCUMtNS4yLTIyNy41LTUuMy0yMjQuNC01LjMtMjIzLjNMLTUuMy0yMjMuM3oiLz4KCTwvZz4KPC9nPgo8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTEtMzg5LjhjLTQuMSwwLTcuNSwzLjMtNy41LDcuNWMwLDEuOSwwLjcsMy42LDEuOSw0LjlsNS41LTExbDUuNiwxMS4xYzEuMi0xLjMsMS45LTMuMSwxLjktNQoJQzE4LjUtMzg2LjUsMTUuMS0zODkuOCwxMS0zODkuOHoiLz4KPHBhdGggY2xhc3M9InN0MyIgZD0iTTkuNS0zNzkuN0w5LjUtMzc5LjdMOC4yLTM3N2gwbC0wLjYsMS4yYzEsMC41LDIuMiwwLjgsMy41LDAuOGMxLjIsMCwyLjQtMC4zLDMuNC0wLjhsLTMuNC02LjhMOS41LTM3OS43eiIvPgo8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTEtMzk1Yy03LDAtMTIuNiw1LjYtMTIuNiwxMi42YzAsNyw1LjYsMTIuNiwxMi42LDEyLjZjNywwLDEyLjYtNS42LDEyLjYtMTIuNkMyMy42LTM4OS40LDE4LTM5NSwxMS0zOTV6CgkgTTExLTM3Mi4yYy01LjYsMC0xMC4yLTQuNi0xMC4yLTEwLjJjMC01LjYsNC42LTEwLjIsMTAuMi0xMC4yczEwLjIsNC42LDEwLjIsMTAuMkMyMS4yLTM3Ni44LDE2LjYtMzcyLjIsMTEtMzcyLjJ6Ii8+CjxnIGNsYXNzPSJzdDQiPgoJPHBhdGggaWQ9IlhNTElEXzE3XyIgY2xhc3M9InN0MyIgZD0iTS00NC4zLTMwNC42bDAuNCwwLjJjMCwwLjMsMCwwLjksMC4zLDEuMWMxLjMsMC44LDIuNSwxLjcsMywyLjZjMS43LDMuMS0xLjIsNi0zLjgsNS43CgkJYzEuNC0xLDEuOC0zLjEsMS4zLTUuNGMtMC4yLTAuOS0wLjUtMS43LTEuMS0yLjZDLTQ0LjMtMzAzLjQtNDQuMy0zMDMuOS00NC4zLTMwNC42eiIvPgoJPHBhdGggaWQ9IlhNTElEXzE2XyIgY2xhc3M9InN0MyIgZD0iTS00My44LTMwNy45bC0wLjQsMS41YzAuNS0xLjEsMS40LTEuOSwyLjQtMi42Yy0wLjcsMC44LTEuNCwxLjctMS44LDIuNQoJCWMwLjctMC45LDEuNi0xLjUsMi42LTEuOGMtMS40LDEuMi0yLjQsMi41LTMuMywzLjhsLTAuNy0wLjNDLTQ0LjctMzA1LjgtNDQuNC0zMDYuOS00My44LTMwNy45eiIvPgoJPHBhdGggaWQ9IlhNTElEXzE1XyIgY2xhc3M9InN0MyIgZD0iTS00MS44LTMwOWMtMC41LDAuNS0xLjMsMS40LTEuOCwyLjJjLTAuNCwwLjctMC43LDEuMy0wLjgsMS43Yy0wLjEsMC4zLTAuNSwwLjMtMC40LTAuMmwwLDAKCQljMC4xLTAuMywwLjQtMC44LDAuNi0xLjNsMC40LTEuNGMtMC4yLDAuNi0wLjQsMS4xLTAuNiwxLjhjMCwwLTAuMywwLjYtMC4zLDAuOGMwLDAuMSwwLDAuMS0wLjEsMC4ybDAsMGMwLDAuMS0wLjEsMC4xLTAuMSwwLjIKCQljMCwwLDAsMCwwLDBjMCwwLjEsMCwwLjIsMCwwLjJjMC4xLDAuMSwwLjcsMC4zLDAuNywwLjNjMC44LTEuMywxLjktMi42LDMuMy0zLjhjLTEsMC4zLTEuOSwwLjktMi42LDEuOAoJCUMtNDMuMi0zMDcuMy00Mi41LTMwOC4yLTQxLjgtMzA5eiIvPgoJPHBhdGggaWQ9IlhNTElEXzE0XyIgY2xhc3M9InN0MyIgZD0iTS00NC4zLTMwNC42bDAuMSwwLjFjMC44LTEuMywxLjktMi42LDMuMy0zLjhjLTAuOCwwLjYtMS44LDEuNS0yLjMsMi4xYy0wLjYsMC43LTAuMiwwLTAuMiwwCgkJczAuMy0wLjgsMC44LTEuMmMtMC4zLDAuMS0wLjgsMC44LTAuOSwwLjljMCwwLTAuNCwwLjgtMC42LDEuNUMtNDQuMi0zMDQuOS00NC4zLTMwNC42LTQ0LjMtMzA0LjZ6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMTNfIiBjbGFzcz0ic3QzIiBkPSJNLTQ0LjUtMzA0LjZsMC45LDAuMWMtMC4zLDAuOSwwLjUsMS41LDAuOCwxLjdjMC42LDAuMywxLjIsMC43LDEuNiwxLjFjMC45LDAuOCwxLjMsMS45LDEuMywzCgkJYzAsMS4xLTAuNSwyLjMtMS40LDNjLTAuOCwwLjctMiwxLTMuMSwxYy0wLjcsMC0xLjMsMC0yLTAuM2MtMS41LTAuNS0yLjctMS44LTIuOC0zLjRjLTAuMS0xLjIsMC4yLTIuMiwxLjEtMy4yCgkJYzAuNS0wLjUsMS41LTEuMSwyLjItMS42YzAuMy0wLjIsMC43LTAuOSwwLTIuMWwwLjEtMC4xbDEsMC43bC0wLjktMC40YzAuMSwwLjEsMC4zLDAuNiwwLjMsMC43YzAuMSwwLjQsMC4xLDAuOCwwLDAuOQoJCWMtMC40LDAuOC0xLjIsMS0xLjcsMS40Yy0wLjksMC44LTIsMS40LTEuOSwzLjVjMC4xLDEuMSwwLjksMi4zLDIuMSwyLjljMC43LDAuMywxLjUsMC41LDIuMywwLjVjMC43LDAsMi4xLTAuNCwyLjktMQoJCWMwLjgtMC43LDEuMy0xLjcsMS4zLTIuN2MwLTEuMS0wLjQtMi4xLTEuMi0yLjhjLTAuNS0wLjQtMS4yLTAuOS0xLjctMS4yYy0wLjUtMC4zLTEtMS0wLjktMS43TC00NC41LTMwNC42eiIvPgoJPHBhdGggaWQ9IlhNTElEXzEyXyIgY2xhc3M9InN0MyIgZD0iTS00NC44LTMwMy4xYy0wLjEsMC41LTAuMiwxLjQtMC42LDEuN2MtMC4yLDAuMS0wLjQsMC4zLTAuNSwwLjRjLTAuOCwwLjUtMS41LDEtMS45LDIuMgoJCWMtMC4xLDAuMywwLDAuNSwwLjEsMC44YzAuMiwwLjgsMC43LDEuNiwxLjEsMi4xYzAsMCwwLjEsMC4xLDAuMSwwLjFjMC4zLDAuNCwwLjUsMC41LDEuOCwwLjhsMCwwLjFjLTAuOC0wLjItMS40LTAuNC0xLjktMC45CgkJYzAsMC0wLjEtMC4xLTAuMS0wLjFjLTAuNC0wLjUtMS0xLjMtMS4yLTIuMWMtMC4xLTAuMy0wLjEtMC42LTAuMS0wLjljMC40LTEuMywxLjEtMS44LDEuOS0yLjNjMC4yLTAuMSwwLjQtMC4yLDAuNi0wLjQKCQlDLTQ1LjEtMzAxLjctNDUtMzAyLjUtNDQuOC0zMDMuMXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8xMV8iIGNsYXNzPSJzdDMiIGQ9Ik0tNDQuNC0zMDEuMWMwLDAuNSwwLDAuOCwwLjEsMS4yYzAuMSwwLjIsMC40LDAuNSwwLjUsMC45YzAuMSwwLjQsMC4yLDAuOSwwLjIsMS4xCgkJYzAsMC4zLDAsMC45LTAuMiwxLjVjLTAuMSwwLjUtMC4zLDEtMC43LDEuMmMtMC40LTAuMS0wLjktMC4yLTEuMi0wLjVjLTAuNi0wLjUtMS4xLTEuMy0xLjEtMmMtMC4xLTAuNiwwLjUtMS40LDEuMi0xLjkKCQljMC42LTAuNCwwLjgtMC44LDAuOS0xLjVjLTAuMiwwLjYtMC40LDEuMS0xLDEuNGMtMC45LDAuNS0xLjMsMS4yLTEuMywyYzAuMSwwLjksMC40LDEuNiwxLjIsMi4xYzAuMywwLjIsMC45LDAuNSwxLjMsMC41djAKCQljMC4zLTAuMSwwLjYtMC41LDAuOC0xLjFjMC4yLTAuNiwwLjItMS4zLDAuMi0xLjdjMC0wLjMtMC4xLTAuOC0wLjMtMS40Yy0wLjEtMC4zLTAuMy0wLjYtMC40LTAuOAoJCUMtNDQuNC0zMDAuMS00NC40LTMwMC42LTQ0LjQtMzAxLjF6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMTBfIiBjbGFzcz0ic3QzIiBkPSJNLTQ0LjUtMjk5YzAsMC40LDAuMiwwLjgsMC4yLDEuM2MwLjEsMC40LDAsMC43LDAsMWMwLDAuNC0wLjEsMS0wLjMsMS4zCgkJYy0wLjItMC4xLTAuMi0wLjItMC4zLTAuM2MtMC4xLTAuMi0wLjItMC40LTAuMy0wLjZjLTAuMS0wLjItMC4xLTAuMy0wLjItMC41YzAtMC4zLDAtMC44LDAuMy0xLjMKCQlDLTQ0LjctMjk4LjQtNDQuNy0yOTguNS00NC41LTI5OWMtMC4yLDAuNS0wLjMsMC41LTAuNiwwLjljLTAuMywwLjQtMC40LDAuOS0wLjQsMS40YzAsMC4yLDAuMSwwLjQsMC4xLDAuNgoJCWMwLjEsMC4yLDAuMiwwLjQsMC4zLDAuNmMwLjIsMC4zLDAuNCwwLjQsMC41LDAuNGgwbDAsMHYwYzAuMi0wLjIsMC4zLTAuNSwwLjQtMC43YzAuMS0wLjMsMC4xLTAuNSwwLjEtMC45YzAtMC4zLDAtMC42LTAuMS0xCgkJQy00NC4zLTI5OC4yLTQ0LjQtMjk4LjctNDQuNS0yOTl6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfOV8iIGNsYXNzPSJzdDMiIGQ9Ik0tNDQuNS0zMDMuNWMwLDAuNSwwLjEsMS42LDAuMiwyYzAsMC4xLDAuNCwwLjcsMC43LDEuNWMwLjIsMC41LDAuMiwxLDAuMywxLjEKCQljMC4xLDAuNiwwLDEuNi0wLjIsMi42Yy0wLjEsMC41LTAuNSwxLjItMC45LDEuNGwtMC4xLDAuMWMwLjIsMCwwLjgtMC42LDEtMS4zYzAuMy0xLjIsMC41LTEuNywwLjMtM2MwLTAuMS0wLjEtMC42LTAuMy0xCgkJYy0wLjMtMC43LTAuNy0xLjQtMC44LTEuNUMtNDQuMy0zMDEuOS00NC41LTMwMi45LTQ0LjUtMzAzLjV6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfOF8iIGNsYXNzPSJzdDMiIGQ9Ik0tNDQuMy0zMDQuM2MwLDAuNiwwLDAuOCwwLjEsMS4yYzAuMSwwLjUsMC43LDEuMSwwLjksMS45YzAuNSwxLjQsMC4zLDMuMywwLDQuOAoJCWMtMC4xLDAuNS0wLjcsMS4zLTEuMywxLjVsMC40LDAuMWMwLjIsMCwwLjktMC42LDEuMS0xLjNjMC40LTEsMC41LTIuMywwLjMtMy42YzAtMC4xLTAuMi0xLjMtMC40LTEuN2MtMC4zLTAuNy0wLjgtMS4zLTAuOC0xLjUKCQlDLTQ0LjEtMzAzLjEtNDQuMy0zMDMuNi00NC4zLTMwNC4zeiIvPgoJPHBhdGggaWQ9IlhNTElEXzdfIiBjbGFzcz0ic3QzIiBkPSJNLTQ0LjYtMzA0LjdjMCwwLDAsMC4zLDAsMC43YzAsMC41LDAsMS4yLDAsMi4xYzAsMC45LDAsMiwwLDMuMWMwLDEuMiwwLDIuNCwwLDMuN2gwCgkJYzAtMS4yLDAtMi40LDAtMy41YzAtMS4xLDAtMi4yLDAtM3MwLTEuNiwwLTIuMlMtNDQuNi0zMDQuNi00NC42LTMwNC43Qy00NC42LTMwNC43LTQ0LjYtMzA0LjctNDQuNi0zMDQuNwoJCUMtNDQuNi0zMDQuNy00NC42LTMwNC43LTQ0LjYtMzA0LjdjMCwwLjEsMCwwLjQsMC4xLDFjMCwwLjUsMCwxLjMsMCwyLjJjMCwwLjksMCwxLjksMCwzLjFjMCwxLjEsMCwyLjMsMCwzLjVjMCwwLTAuMSwwLTAuMSwwCgkJYzAtMS4zLDAtMi42LDAtMy43YzAtMS4yLDAtMi4zLDAtMy4yYzAtMC45LDAtMS42LDAtMi4xQy00NC42LTMwNC40LTQ0LjYtMzA0LjctNDQuNi0zMDQuN3oiLz4KPC9nPgo8Zz4KCTxwYXRoIGlkPSJYTUxJRF8yMl8iIGNsYXNzPSJzdDMiIGQ9Ik0tMjguOS0zMDQuNmwwLjQsMC4yYzAsMC4zLDAsMC45LDAuMywxLjFjMS4zLDAuOCwyLjUsMS43LDMsMi42YzEuNywzLjEtMS4yLDYtMy44LDUuNwoJCWMxLjQtMSwxLjgtMy4xLDEuMy01LjRjLTAuMi0wLjktMC41LTEuNy0xLjEtMi42Qy0yOS0zMDMuNC0yOC45LTMwMy45LTI4LjktMzA0LjZ6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMjFfIiBjbGFzcz0ic3QzIiBkPSJNLTI4LjQtMzA3LjlsLTAuNCwxLjVjMC41LTEuMSwxLjQtMS45LDIuNC0yLjZjLTAuNywwLjgtMS40LDEuNy0xLjgsMi41CgkJYzAuNy0wLjksMS42LTEuNSwyLjYtMS44Yy0xLjQsMS4yLTIuNCwyLjUtMy4zLDMuOGwtMC43LTAuM0MtMjkuNC0zMDUuOC0yOS0zMDYuOS0yOC40LTMwNy45eiIvPgoJPHBhdGggaWQ9IlhNTElEXzIwXyIgY2xhc3M9InN0MyIgZD0iTS0yNi40LTMwOWMtMC41LDAuNS0xLjMsMS40LTEuOCwyLjJjLTAuNCwwLjctMC43LDEuMy0wLjgsMS43Yy0wLjEsMC4zLTAuNSwwLjMtMC40LTAuMmwwLDAKCQljMC4xLTAuMywwLjQtMC44LDAuNi0xLjNsMC40LTEuNGMtMC4yLDAuNi0wLjQsMS4xLTAuNiwxLjhjMCwwLTAuMywwLjYtMC4zLDAuOGMwLDAuMSwwLDAuMS0wLjEsMC4ybDAsMGMwLDAuMS0wLjEsMC4xLTAuMSwwLjIKCQljMCwwLDAsMCwwLDBjMCwwLjEsMCwwLjIsMCwwLjJjMC4xLDAuMSwwLjcsMC4zLDAuNywwLjNjMC44LTEuMywxLjktMi42LDMuMy0zLjhjLTEsMC4zLTEuOSwwLjktMi42LDEuOAoJCUMtMjcuOC0zMDcuMy0yNy4xLTMwOC4yLTI2LjQtMzA5eiIvPgoJPHBhdGggaWQ9IlhNTElEXzE5XyIgY2xhc3M9InN0MyIgZD0iTS0yOS0zMDQuNmwwLjEsMC4xYzAuOC0xLjMsMS45LTIuNiwzLjMtMy44Yy0wLjgsMC42LTEuOCwxLjUtMi4zLDIuMWMtMC42LDAuNy0wLjIsMC0wLjIsMAoJCXMwLjMtMC44LDAuOC0xLjJjLTAuMywwLjEtMC44LDAuOC0wLjksMC45YzAsMC0wLjQsMC44LTAuNiwxLjVDLTI4LjktMzA0LjktMjktMzA0LjYtMjktMzA0LjZ6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMThfIiBjbGFzcz0ic3QzIiBkPSJNLTI5LjEtMzA0LjZsMC45LDAuMWMtMC4zLDAuOSwwLjUsMS41LDAuOCwxLjdjMC42LDAuMywxLjIsMC43LDEuNiwxLjFjMC45LDAuOCwxLjMsMS45LDEuMywzCgkJYzAsMS4xLTAuNSwyLjMtMS40LDNjLTAuOCwwLjctMiwxLTMuMSwxYy0wLjcsMC0xLjMsMC0yLTAuM2MtMS41LTAuNS0yLjctMS44LTIuOC0zLjRjLTAuMS0xLjIsMC4yLTIuMiwxLjEtMy4yCgkJYzAuNS0wLjUsMS41LTEuMSwyLjItMS42YzAuMy0wLjIsMC43LTAuOSwwLTIuMWwwLjEtMC4xbDEsMC43bC0wLjktMC40YzAuMSwwLjEsMC4zLDAuNiwwLjMsMC43YzAuMSwwLjQsMC4xLDAuOCwwLDAuOQoJCWMtMC40LDAuOC0xLjIsMS0xLjcsMS40Yy0wLjksMC44LTIsMS40LTEuOSwzLjVjMC4xLDEuMSwwLjksMi4zLDIuMSwyLjljMC43LDAuMywxLjUsMC41LDIuMywwLjVjMC43LDAsMi4xLTAuNCwyLjktMQoJCWMwLjgtMC43LDEuMy0xLjcsMS4zLTIuN2MwLTEuMS0wLjQtMi4xLTEuMi0yLjhjLTAuNS0wLjQtMS4yLTAuOS0xLjctMS4yYy0wLjUtMC4zLTEtMS0wLjktMS43TC0yOS4xLTMwNC42eiIvPgoJPHBhdGggaWQ9IlhNTElEXzZfIiBjbGFzcz0ic3QzIiBkPSJNLTI5LjQtMzAzLjFjLTAuMSwwLjUtMC4yLDEuNC0wLjYsMS43Yy0wLjIsMC4xLTAuNCwwLjMtMC41LDAuNGMtMC44LDAuNS0xLjUsMS0xLjksMi4yCgkJYy0wLjEsMC4zLDAsMC41LDAuMSwwLjhjMC4yLDAuOCwwLjcsMS42LDEuMSwyLjFjMCwwLDAuMSwwLjEsMC4xLDAuMWMwLjMsMC40LDAuNSwwLjUsMS44LDAuOGwwLDAuMWMtMC44LTAuMi0xLjQtMC40LTEuOS0wLjkKCQljMCwwLTAuMS0wLjEtMC4xLTAuMWMtMC40LTAuNS0xLTEuMy0xLjItMi4xYy0wLjEtMC4zLTAuMS0wLjYtMC4xLTAuOWMwLjQtMS4zLDEuMS0xLjgsMS45LTIuM2MwLjItMC4xLDAuNC0wLjIsMC42LTAuNAoJCUMtMjkuOC0zMDEuNy0yOS42LTMwMi41LTI5LjQtMzAzLjF6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfNV8iIGNsYXNzPSJzdDMiIGQ9Ik0tMjkuMS0zMDEuMWMwLDAuNSwwLDAuOCwwLjEsMS4yYzAuMSwwLjIsMC40LDAuNSwwLjUsMC45YzAuMSwwLjQsMC4yLDAuOSwwLjIsMS4xCgkJYzAsMC4zLDAsMC45LTAuMiwxLjVjLTAuMSwwLjUtMC4zLDEtMC43LDEuMmMtMC40LTAuMS0wLjktMC4yLTEuMi0wLjVjLTAuNi0wLjUtMS4xLTEuMy0xLjEtMmMtMC4xLTAuNiwwLjUtMS40LDEuMi0xLjkKCQljMC42LTAuNCwwLjgtMC44LDAuOS0xLjVjLTAuMiwwLjYtMC40LDEuMS0xLDEuNGMtMC45LDAuNS0xLjMsMS4yLTEuMywyYzAuMSwwLjksMC40LDEuNiwxLjIsMi4xYzAuMywwLjIsMC45LDAuNSwxLjMsMC41djAKCQljMC4zLTAuMSwwLjYtMC41LDAuOC0xLjFjMC4yLTAuNiwwLjItMS4zLDAuMi0xLjdjMC0wLjMtMC4xLTAuOC0wLjMtMS40Yy0wLjEtMC4zLTAuMy0wLjYtMC40LTAuOEMtMjktMzAwLjEtMjktMzAwLjYtMjkuMS0zMDEuMXoKCQkiLz4KCTxwYXRoIGlkPSJYTUxJRF80XyIgY2xhc3M9InN0MyIgZD0iTS0yOS4xLTI5OWMwLDAuNCwwLjIsMC44LDAuMiwxLjNjMC4xLDAuNCwwLDAuNywwLDFjMCwwLjQtMC4xLDEtMC4zLDEuMwoJCWMtMC4yLTAuMS0wLjItMC4yLTAuMy0wLjNjLTAuMS0wLjItMC4yLTAuNC0wLjMtMC42Yy0wLjEtMC4yLTAuMS0wLjMtMC4yLTAuNWMwLTAuMywwLTAuOCwwLjMtMS4zCgkJQy0yOS40LTI5OC40LTI5LjMtMjk4LjUtMjkuMS0yOTljLTAuMiwwLjUtMC4zLDAuNS0wLjYsMC45Yy0wLjMsMC40LTAuNCwwLjktMC40LDEuNGMwLDAuMiwwLjEsMC40LDAuMSwwLjYKCQljMC4xLDAuMiwwLjIsMC40LDAuMywwLjZjMC4yLDAuMywwLjQsMC40LDAuNSwwLjRoMGwwLDB2MGMwLjItMC4yLDAuMy0wLjUsMC40LTAuN2MwLjEtMC4zLDAuMS0wLjUsMC4xLTAuOWMwLTAuMywwLTAuNi0wLjEtMQoJCUMtMjguOS0yOTguMi0yOS4xLTI5OC43LTI5LjEtMjk5eiIvPgoJPHBhdGggaWQ9IlhNTElEXzNfIiBjbGFzcz0ic3QzIiBkPSJNLTI5LjEtMzAzLjVjMCwwLjUsMC4xLDEuNiwwLjIsMmMwLDAuMSwwLjQsMC43LDAuNywxLjVjMC4yLDAuNSwwLjIsMSwwLjMsMS4xCgkJYzAuMSwwLjYsMCwxLjYtMC4yLDIuNmMtMC4xLDAuNS0wLjUsMS4yLTAuOSwxLjRsLTAuMSwwLjFjMC4yLDAsMC44LTAuNiwxLTEuM2MwLjMtMS4yLDAuNS0xLjcsMC4zLTNjMC0wLjEtMC4xLTAuNi0wLjMtMQoJCWMtMC4zLTAuNy0wLjctMS40LTAuOC0xLjVDLTI4LjktMzAxLjktMjkuMS0zMDIuOS0yOS4xLTMwMy41eiIvPgoJPHBhdGggaWQ9IlhNTElEXzJfIiBjbGFzcz0ic3QzIiBkPSJNLTI4LjktMzA0LjNjMCwwLjYsMCwwLjgsMC4xLDEuMmMwLjEsMC41LDAuNywxLjEsMC45LDEuOWMwLjUsMS40LDAuMywzLjMsMCw0LjgKCQljLTAuMSwwLjUtMC43LDEuMy0xLjMsMS41bDAuNCwwLjFjMC4yLDAsMC45LTAuNiwxLjEtMS4zYzAuNC0xLDAuNS0yLjMsMC4zLTMuNmMwLTAuMS0wLjItMS4zLTAuNC0xLjdjLTAuMy0wLjctMC44LTEuMy0wLjgtMS41CgkJQy0yOC43LTMwMy4xLTI4LjktMzAzLjYtMjguOS0zMDQuM3oiLz4KCTxwYXRoIGlkPSJYTUxJRF8xXyIgY2xhc3M9InN0MyIgZD0iTS0yOS4yLTMwNC43YzAsMCwwLDAuMywwLDAuN2MwLDAuNSwwLDEuMiwwLDIuMWMwLDAuOSwwLDIsMCwzLjFjMCwxLjIsMCwyLjQsMCwzLjdoMAoJCWMwLTEuMiwwLTIuNCwwLTMuNWMwLTEuMSwwLTIuMiwwLTNzMC0xLjYsMC0yLjJDLTI5LjItMzA0LjItMjkuMi0zMDQuNi0yOS4yLTMwNC43Qy0yOS4yLTMwNC43LTI5LjItMzA0LjctMjkuMi0zMDQuNwoJCUMtMjkuMi0zMDQuNy0yOS4yLTMwNC43LTI5LjItMzA0LjdjMCwwLjEsMCwwLjQsMC4xLDFjMCwwLjUsMCwxLjMsMCwyLjJjMCwwLjksMCwxLjksMCwzLjFjMCwxLjEsMCwyLjMsMCwzLjVjMCwwLTAuMSwwLTAuMSwwCgkJYzAtMS4zLDAtMi42LDAtMy43YzAtMS4yLDAtMi4zLDAtMy4yYzAtMC45LDAtMS42LDAtMi4xQy0yOS4yLTMwNC40LTI5LjItMzA0LjctMjkuMi0zMDQuN3oiLz4KPC9nPgo8ZyBjbGFzcz0ic3Q1Ij4KCTxwYXRoIGlkPSJYTUxJRF8zM18iIGNsYXNzPSJzdDMiIGQ9Ik0zMi4xLDIwLjJsMiwxYy0wLjIsMS4zLDAuMSw0LjEsMS40LDQuOWM1LjcsMy41LDExLjEsNy40LDEzLjIsMTEuMwoJCWM3LjUsMTMuNi01LjMsMjYuMi0xNi40LDI1YzYtNC41LDcuOC0xMy42LDUuNS0yMy42Yy0wLjktMy45LTIuMy03LjUtNC45LTExLjVDMzEuOCwyNS40LDMyLjEsMjIuOSwzMi4xLDIwLjJ6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMzJfIiBjbGFzcz0ic3QzIiBkPSJNMzQuMiw1LjVsLTEuNyw2LjZDMzQuOSw3LjUsMzguNyw0LDQyLjksMC45Yy0zLjEsMy42LTYsNy4zLTcuNywxMC45YzIuOS00LjEsNi45LTYuNCwxMS40LTgKCQljLTUuOSw1LjMtMTAuNiwxMS0xNC4yLDE2LjdsLTIuOS0xLjJDMzAsMTQuNywzMS43LDEwLDM0LjIsNS41eiIvPgoJPHBhdGggaWQ9IlhNTElEXzMxXyIgY2xhc3M9InN0MyIgZD0iTTQyLjksMC45Yy0yLjEsMi4zLTUuOCw2LjMtNy44LDkuN2MtMS43LDMtMi44LDUuNi0zLjUsNy40Yy0wLjQsMS4xLTIuMSwxLjEtMS42LTAuOGwwLTAuMQoJCWMwLjYtMS41LDEuNi0zLjYsMi42LTUuNWwxLjUtNi4yYy0wLjgsMi42LTEuOCw1LTIuNSw3LjdjMCwwLTEuMiwyLjctMS41LDMuNGMtMC4xLDAuMi0wLjIsMC41LTAuMywwLjdsMCwwCgkJYy0wLjEsMC4zLTAuMiwwLjYtMC4zLDAuOWMwLDAsMCwwLjEsMCwwLjFjLTAuMSwwLjQtMC4xLDAuNy0wLjEsMC43YzAuNSwwLjQsMi44LDEuNCwyLjgsMS40YzMuNi01LjcsOC4zLTExLjQsMTQuMi0xNi43CgkJYy00LjUsMS41LTguNCwzLjgtMTEuNCw4QzM3LDguMSwzOS44LDQuNSw0Mi45LDAuOXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8zMF8iIGNsYXNzPSJzdDMiIGQ9Ik0zMS44LDIwLjFsMC41LDAuNGMzLjYtNS43LDguMy0xMS40LDE0LjItMTYuN2MtMy40LDIuOC04LDYuNi05LjksOS4yYy0yLjQsMy4yLTEsMC4yLTEsMC4yCgkJczEuMy0zLjQsMy42LTUuNWMtMS4zLDAuNi0zLjYsMy41LTQsNC4xYzAsMC0xLjcsMy4zLTIuNyw2LjRDMzIuMywxOSwzMS44LDIwLjEsMzEuOCwyMC4xeiIvPgoJPHBhdGggaWQ9IlhNTElEXzI5XyIgY2xhc3M9InN0MyIgZD0iTTMxLjEsMTkuOWw0LDAuNmMtMS4yLDQsMi4zLDYuNywzLjUsNy40YzIuNiwxLjQsNS4xLDIuOSw3LDQuN2MzLjcsMy40LDUuOCw4LjIsNS44LDEzLjIKCQljMCw1LTIuMyw5LjgtNi4yLDEzLjFjLTMuNiwzLTguNiw0LjMtMTMuNSw0LjNjLTMsMC01LjgtMC4xLTguNy0xLjFjLTYuNy0yLjMtMTEuNy04LTEyLjEtMTQuOWMtMC40LTUuNCwwLjgtOS41LDUtMTMuOAoJCWMyLjItMi4zLDYuNS00LjgsOS41LTYuOWMxLjUtMSwzLTMuOSwwLTkuMmwwLjYtMC41bDQuNCwzbC0zLjctMS41YzAuMywwLjUsMS4yLDIuNSwxLjQsMy4xYzAuNCwxLjcsMC4yLDMuNC0wLjEsNC4xCgkJYy0xLjksMy40LTUuMSw0LjMtNy41LDYuM2MtNC4xLDMuNC04LjYsNi4xLTguMSwxNS41YzAuMiw0LjYsMy44LDEwLjIsOS4yLDEyLjhjMywxLjUsNi41LDIuMSwxMC4xLDIuM2MzLjIsMC4xLDkuMi0xLjcsMTIuNi00LjUKCQljMy41LTIuOSw1LjUtNy40LDUuNS0xMmMwLTQuNi0xLjgtOS01LjMtMTIuMWMtMi0xLjgtNS4yLTQtNy4zLTUuMWMtMi0xLjItNC42LTQuNC0zLjctNy41TDMxLjEsMTkuOXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8yOF8iIGNsYXNzPSJzdDMiIGQ9Ik0yOS45LDI2LjdjLTAuNCwyLjEtMC45LDUuOS0yLjcsNy40Yy0wLjgsMC42LTEuNiwxLjEtMi40LDEuN2MtMy4zLDIuMy02LjYsNC40LTguMSw5LjgKCQljLTAuMywxLjIsMCwyLjQsMC4yLDMuNWMwLjgsMy4zLDMuMiw2LjksNSw5YzAsMC4xLDAuNCwwLjMsMC40LDAuNGMxLjUsMS44LDIsMi4zLDcuNywzLjZsLTAuMSwwLjZjLTMuNS0wLjktNi4zLTEuNy04LjEtMy44CgkJYzAsMC0wLjMtMC40LTAuMy0wLjRjLTEuOS0yLjItNC4zLTUuOS01LjItOS4zYy0wLjMtMS40LTAuNi0yLjQtMC4yLTMuOWMxLjYtNS42LDUtNy44LDguNC0xMC4yYzAuOC0wLjUsMS43LTEsMi40LTEuNgoJCUMyOC4zLDMyLjUsMjkuMSwyOS4zLDI5LjksMjYuN3oiLz4KCTxwYXRoIGlkPSJYTUxJRF8yN18iIGNsYXNzPSJzdDMiIGQ9Ik0zMS4zLDM1LjRjMCwyLjQtMC4yLDMuNiwwLjQsNS4zYzAuNCwxLDEuNiwyLjQsMiwzLjdjMC41LDEuOCwxLjEsMy44LDEsNQoJCWMwLDEuNC0wLjEsNC0wLjcsNi43Yy0wLjUsMi4zLTEuNSw0LjItMy4zLDUuM2MtMS44LTAuNC0zLjktMS01LjItMi4xYy0yLjQtMi4xLTQuNi01LjctNC45LTguN2MtMC4yLTIuNSwyLjEtNi4zLDUuNC04LjEKCQljMi44LTEuNiwzLjQtMy40LDQtNi40Yy0wLjgsMi42LTEuNiw0LjctNC4zLDYuMWMtMy45LDItNS44LDUuNC01LjcsOC42YzAuMyw0LjEsMS45LDYuOSw1LjIsOS4yYzEuNCwxLDQsMiw1LjYsMi4zdi0wLjIKCQljMS4yLTAuMiwyLjgtMi4yLDMuNi00LjljMC43LTIuNCwxLTUuNiwwLjktNy41YzAtMS4yLTAuNi0zLjYtMS41LTUuOWMtMC41LTEuMi0xLjMtMi41LTEuOC0zLjRDMzEuNiwzOS41LDMxLjYsMzcuNiwzMS4zLDM1LjR6IgoJCS8+Cgk8cGF0aCBpZD0iWE1MSURfMjZfIiBjbGFzcz0ic3QzIiBkPSJNMzEuMSw0NC41YzAsMS42LDAuNywzLjcsMSw1LjhjMC4yLDEuNiwwLjEsMy4xLDAuMSw0LjVjMCwxLjYtMC42LDQuNS0xLjMsNS45CgkJYy0wLjctMC4zLTEtMC43LTEuNC0xLjNjLTAuNi0wLjgtMC45LTEuNi0xLjMtMi41Yy0wLjMtMC43LTAuNi0xLjUtMC43LTIuNGMtMC4yLTEuNC0wLjEtMy41LDEuNC01LjdjMS4yLTEuNywxLjUtMS45LDEuOS0zLjkKCQljLTAuNiwxLjgtMSwyLTIuMywzLjVjLTEuNCwxLjctMS43LDQuMS0xLjcsNi4xYzAsMC44LDAuMywxLjcsMC43LDIuNmMwLjQsMC45LDAuNywxLjgsMS4yLDIuNWMwLjgsMS4xLDEuNywxLjgsMi4yLDEuOWgwbDAsMAoJCXYtMC4xYzAuOS0xLDEuNC0yLDEuNi0zYzAuMi0xLjIsMC4zLTIuNCwwLjQtMy44YzAuMS0xLjIsMC0yLjgtMC4zLTQuNUMzMi4yLDQ4LDMxLjQsNDUuOSwzMS4xLDQ0LjV6Ii8+Cgk8cGF0aCBpZD0iWE1MSURfMjVfIiBjbGFzcz0ic3QzIiBkPSJNMzEuMiwyNC44YzAsMi40LDAuMiw2LjksMC45LDguNmMwLjIsMC42LDEuOSwzLjIsMy4xLDYuNGMwLjgsMi4yLDEsNC4yLDEuMiw0LjgKCQljMC42LDIuNi0wLjEsNy0xLjEsMTEuMmMtMC41LDIuMy0yLDUuMS0zLjgsNi4ybC0wLjQsMC42YzEsMCwzLjUtMi41LDQuNC01LjVjMS41LTUuMiwyLjEtNy41LDEuNC0xMy4zYy0wLjEtMC42LTAuMy0yLjQtMS4yLTQuNQoJCWMtMS4zLTMuMS0zLjEtNi0zLjQtNi42QzMxLjgsMzEuOCwzMS4zLDI3LjYsMzEuMiwyNC44eiIvPgoJPHBhdGggaWQ9IlhNTElEXzI0XyIgY2xhc3M9InN0MyIgZD0iTTMyLjEsMjEuNWMtMC4xLDIuNS0wLjIsMy40LDAuMyw1LjJjMC41LDIsMy4xLDQuOCw0LjEsOC4xYzIsNi4zLDEuNSwxNC40LDAsMjAuOAoJCWMtMC42LDIuMy0zLjIsNS41LTUuOCw2LjZsMS45LDAuNWMxLjEsMCwzLjgtMi42LDQuOC01LjVjMS43LTQuNiwyLTEwLDEuMy0xNS43YzAtMC42LTEtNS41LTEuOC03LjVjLTEuMi0zLjEtMy41LTUuOC0zLjctNi40CgkJQzMyLjksMjYuNSwzMiwyNC40LDMyLjEsMjEuNXoiLz4KCTxwYXRoIGlkPSJYTUxJRF8yM18iIGNsYXNzPSJzdDMiIGQ9Ik0zMC42LDE5LjhjMCwwLDAsMS4xLDAuMSwzLjJjMCwyLjEsMCw1LjMsMCw5LjJjMCwzLjksMCw4LjYsMCwxMy43YzAsNS4xLDAsMTAuNywwLDE2LjJoMAoJCWMwLTUuMiwwLTEwLjUsMC0xNS4zYzAtNC45LDAtOS40LDAtMTMuM3MwLTcuMSwwLTkuNGMwLTIuMywwLTMuOCwwLTQuM0MzMC43LDE5LjgsMzAuNiwxOS44LDMwLjYsMTkuOGMwLDAsMC4xLDAsMC4yLDAKCQljMCwwLjUsMCwxLjksMCw0LjNjMCwyLjMsMCw1LjYsMCw5LjVjMCwzLjksMCw4LjQsMCwxMy40YzAsNC45LDAsMTAuMiwwLDE1LjVjLTAuMSwwLTAuMiwwLTAuMywwYzAtNS42LDAtMTEuMSwwLTE2LjMKCQljMC01LjEsMC05LjksMC0xMy44YzAtMy45LDAtNy4xLDAtOS4yQzMwLjYsMjAuOSwzMC42LDE5LjgsMzAuNiwxOS44eiIvPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xOS0yNTQuNmMtMS42LDAtMywwLjUtMy4yLDEuMmMtMC4xLDAuMywwLjIsMC42LDAuNiwwLjlsMi41LTEuOWwxLjgsMmMwLjUtMC4yLDAuOS0wLjUsMC45LTAuOAoJCQlDLTE2LjItMjUzLjktMTcuNC0yNTQuNS0xOS0yNTQuNnoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTIwLjktMjUyLjJjMC40LDAuMSwwLjgsMC4yLDEuMywwLjJjMC41LDAsMC45LDAsMS4zLTAuMWwtMS4xLTEuMkwtMjAuOS0yNTIuMnoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTE4LjktMjU1LjVjLTIuNy0wLjEtNS4xLDAuOS01LjQsMi4xYy0wLjIsMS4yLDEuOCwyLjIsNC41LDIuM2MyLjcsMC4xLDUuMS0wLjksNS40LTIuMQoJCQlTLTE2LjEtMjU1LjQtMTguOS0yNTUuNXogTS0xOS42LTI1MS41Yy0yLjIsMC0zLjgtMC45LTMuNi0xLjhjMC4yLTEsMi4xLTEuNyw0LjMtMS43czMuOCwwLjksMy42LDEuOFMtMTcuNC0yNTEuNS0xOS42LTI1MS41eiIvPgoJPC9nPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0yMC41LTI0Ni45Yy0zLjMsMC01LjktMS4zLTUuOS0zYzAtMC45LDAuNy0xLjcsMS45LTIuMmwwLjIsMC40Yy0xLjEsMC41LTEuNywxLjItMS43LDEuOQoJCQljMCwxLjQsMi41LDIuNiw1LjUsMi42YzIuNCwwLDQuNS0wLjcsNS4yLTEuOGwwLjMsMC4yQy0xNS44LTI0Ny43LTE4LTI0Ni45LTIwLjUtMjQ2Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0yMC41LTI0NC45Yy0zLjIsMC01LjktMS40LTUuOS0zdi0yLjFoMC40djIuMWMwLDEuNCwyLjUsMi42LDUuNSwyLjZzNS41LTEuMiw1LjUtMi42di0xLjJoMC40djEuMgoJCQlDLTE0LjctMjQ2LjMtMTcuMy0yNDQuOS0yMC41LTI0NC45eiIvPgoJCTxnPgoJCQk8cmVjdCB4PSItMjAuNyIgeT0iLTI0Ny4xIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMTkuNSIgeT0iLTI0Ny4xIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMTguMyIgeT0iLTI0Ny40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMTcuMSIgeT0iLTI0Ny43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMTUuOSIgeT0iLTI0OC4zIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMjMuMSIgeT0iLTI0Ny40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMjEuOSIgeT0iLTI0Ny4xIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMjUuNSIgeT0iLTI0OC4zIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMjQuMyIgeT0iLTI0Ny43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCTwvZz4KCTwvZz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMTkuMy0yNDQuMmMtMS44LDAtMy41LTAuNC00LjYtMS4xbDAuMi0wLjNjMS4xLDAuNywyLjYsMS4xLDQuNCwxLjFjMywwLDUuNS0xLjIsNS41LTIuNgoJCQljMC0wLjYtMC41LTEuMy0xLjQtMS44bDAuMi0wLjNjMS4xLDAuNiwxLjYsMS4zLDEuNiwyLjFDLTEzLjUtMjQ1LjUtMTYtMjQ0LjItMTkuMy0yNDQuMnoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTE5LjMtMjQyLjJjLTMuMiwwLTUuOS0xLjQtNS45LTN2LTAuNmgwLjR2MC42YzAsMS40LDIuNSwyLjYsNS41LDIuNnM1LjUtMS4yLDUuNS0yLjZ2LTIuMWgwLjR2Mi4xCgkJCUMtMTMuNS0yNDMuNi0xNi4xLTI0Mi4yLTE5LjMtMjQyLjJ6Ii8+CgkJPGc+CgkJCTxyZWN0IHg9Ii0xOS41IiB5PSItMjQ0LjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii0xOC4zIiB5PSItMjQ0LjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii0xNy4xIiB5PSItMjQ0LjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii0xNS45IiB5PSItMjQ1IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMTQuNyIgeT0iLTI0NS42IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMjEuOSIgeT0iLTI0NC43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMjAuNyIgeT0iLTI0NC40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMjQuMyIgeT0iLTI0NS42IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMjMuMSIgeT0iLTI0NSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQk8L2c+Cgk8L2c+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTE5LjMtMjUwLjJjLTMuMywwLTUuOS0xLjMtNS45LTNjMC0xLjcsMi42LTMsNS45LTNjMy4zLDAsNS45LDEuMyw1LjksM0MtMTMuNS0yNTEuNS0xNi0yNTAuMi0xOS4zLTI1MC4yegoJCQkgTS0xOS4zLTI1NS44Yy0zLDAtNS41LDEuMi01LjUsMi42YzAsMS40LDIuNSwyLjYsNS41LDIuNmMzLDAsNS41LTEuMiw1LjUtMi42Qy0xMy45LTI1NC42LTE2LjQtMjU1LjgtMTkuMy0yNTUuOHoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTE5LjMtMjQ4LjJjLTMuMiwwLTUuOS0xLjQtNS45LTN2LTIuMWgwLjR2Mi4xYzAsMS40LDIuNSwyLjYsNS41LDIuNnM1LjUtMS4yLDUuNS0yLjZ2LTIuMWgwLjR2Mi4xCgkJCUMtMTMuNS0yNDkuNi0xNi4xLTI0OC4yLTE5LjMtMjQ4LjJ6Ii8+CgkJPGc+CgkJCTxyZWN0IHg9Ii0xOS41IiB5PSItMjUwLjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii0xOC4zIiB5PSItMjUwLjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii0xNy4xIiB5PSItMjUwLjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii0xNS45IiB5PSItMjUxIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMTQuNyIgeT0iLTI1MS42IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMjEuOSIgeT0iLTI1MC43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMjAuNyIgeT0iLTI1MC40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMjQuMyIgeT0iLTI1MS42IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMjMuMSIgeT0iLTI1MSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQzLjMtNjMuNmMtMS42LDAtMywwLjUtMy4yLDEuMmMtMC4xLDAuMywwLjIsMC42LDAuNiwwLjlsMi41LTEuOWwxLjgsMmMwLjUtMC4yLDAuOS0wLjUsMC45LTAuOAoJCQlDLTQwLjUtNjIuOS00MS43LTYzLjUtNDMuMy02My42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDUuMi02MS4yYzAuNCwwLjEsMC44LDAuMiwxLjMsMC4yYzAuNSwwLDAuOSwwLDEuMy0wLjFsLTEuMS0xLjJMLTQ1LjItNjEuMnoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQzLjItNjQuNWMtMi43LTAuMS01LjEsMC45LTUuNCwyLjFzMS44LDIuMiw0LjUsMi4zYzIuNywwLjEsNS4xLTAuOSw1LjQtMi4xCgkJCUMtMzguNC02My40LTQwLjQtNjQuNC00My4yLTY0LjV6IE0tNDMuOS02MC41Yy0yLjIsMC0zLjgtMC45LTMuNi0xLjhjMC4yLTEsMi4xLTEuNyw0LjMtMS43YzIuMiwwLDMuOCwwLjksMy42LDEuOAoJCQlDLTM5LjgtNjEuMi00MS43LTYwLjUtNDMuOS02MC41eiIvPgoJPC9nPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00NC44LTU1LjljLTMuMywwLTUuOS0xLjMtNS45LTNjMC0wLjksMC43LTEuNywxLjktMi4ybDAuMiwwLjRjLTEuMSwwLjUtMS43LDEuMi0xLjcsMS45CgkJCWMwLDEuNCwyLjUsMi42LDUuNSwyLjZjMi40LDAsNC41LTAuNyw1LjItMS44bDAuMywwLjJDLTQwLjEtNTYuNy00Mi4zLTU1LjktNDQuOC01NS45eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDQuOC01My45Yy0zLjIsMC01LjktMS40LTUuOS0zdi0yLjFoMC40djIuMWMwLDEuNCwyLjUsMi42LDUuNSwyLjZzNS41LTEuMiw1LjUtMi42di0xLjJoMC40djEuMgoJCQlDLTM4LjktNTUuMy00MS42LTUzLjktNDQuOC01My45eiIvPgoJCTxnPgoJCQk8cmVjdCB4PSItNDUiIHk9Ii01Ni4xIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDMuOCIgeT0iLTU2LjEiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii00Mi42IiB5PSItNTYuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQxLjQiIHk9Ii01Ni43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItNDAuMiIgeT0iLTU3LjMiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii00Ny40IiB5PSItNTYuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTQ2LjIiIHk9Ii01Ni4xIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDkuOCIgeT0iLTU3LjMiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii00OC42IiB5PSItNTYuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQk8L2c+Cgk8L2c+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQzLjYtNTMuMmMtMS44LDAtMy41LTAuNC00LjYtMS4xbDAuMi0wLjNjMS4xLDAuNywyLjYsMS4xLDQuNCwxLjFjMywwLDUuNS0xLjIsNS41LTIuNgoJCQljMC0wLjYtMC41LTEuMy0xLjQtMS44bDAuMi0wLjNjMS4xLDAuNiwxLjYsMS4zLDEuNiwyLjFDLTM3LjgtNTQuNS00MC4zLTUzLjItNDMuNi01My4yeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDMuNi01MS4yYy0zLjIsMC01LjktMS40LTUuOS0zdi0wLjZoMC40djAuNmMwLDEuNCwyLjUsMi42LDUuNSwyLjZjMywwLDUuNS0xLjIsNS41LTIuNnYtMi4xaDAuNHYyLjEKCQkJQy0zNy44LTUyLjYtNDAuNC01MS4yLTQzLjYtNTEuMnoiLz4KCQk8Zz4KCQkJPHJlY3QgeD0iLTQzLjgiIHk9Ii01My40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDIuNiIgeT0iLTUzLjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii00MS40IiB5PSItNTMuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQwLjIiIHk9Ii01NCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTM5IiB5PSItNTQuNiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQ2LjIiIHk9Ii01My43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDUiIHk9Ii01My40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDguNiIgeT0iLTU0LjYiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii00Ny40IiB5PSItNTQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJPC9nPgoJPC9nPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00My42LTU5LjJjLTMuMywwLTUuOS0xLjMtNS45LTNjMC0xLjcsMi42LTMsNS45LTNjMy4zLDAsNS45LDEuMyw1LjksM0MtMzcuOC02MC41LTQwLjMtNTkuMi00My42LTU5LjJ6CgkJCSBNLTQzLjYtNjQuOGMtMywwLTUuNSwxLjItNS41LDIuNmMwLDEuNCwyLjUsMi42LDUuNSwyLjZjMywwLDUuNS0xLjIsNS41LTIuNkMtMzguMS02My42LTQwLjctNjQuOC00My42LTY0Ljh6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00My42LTU3LjJjLTMuMiwwLTUuOS0xLjQtNS45LTN2LTIuMWgwLjR2Mi4xYzAsMS40LDIuNSwyLjYsNS41LDIuNmMzLDAsNS41LTEuMiw1LjUtMi42di0yLjFoMC40djIuMQoJCQlDLTM3LjgtNTguNi00MC40LTU3LjItNDMuNi01Ny4yeiIvPgoJCTxnPgoJCQk8cmVjdCB4PSItNDMuOCIgeT0iLTU5LjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii00Mi42IiB5PSItNTkuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTQxLjQiIHk9Ii01OS43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItNDAuMiIgeT0iLTYwIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMzkiIHk9Ii02MC42IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItNDYuMiIgeT0iLTU5LjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii00NSIgeT0iLTU5LjQiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii00OC42IiB5PSItNjAuNiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQ3LjQiIHk9Ii02MCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPGc+Cgk8ZyBjbGFzcz0ic3Q2Ij4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTM4LjgtMjU0LjljLTEuNiwwLTMsMC41LTMuMiwxLjJjLTAuMSwwLjMsMC4yLDAuNiwwLjYsMC45bDIuNS0xLjlsMS44LDJjMC41LTAuMiwwLjktMC41LDAuOS0wLjgKCQkJQy0zNi0yNTQuMy0zNy4xLTI1NC45LTM4LjgtMjU0Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00MC42LTI1Mi41YzAuNCwwLjEsMC44LDAuMiwxLjMsMC4yYzAuNSwwLDAuOSwwLDEuMy0wLjFsLTEuMS0xLjJMLTQwLjYtMjUyLjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0zOC42LTI1NS44Yy0yLjctMC4xLTUuMSwwLjktNS40LDIuMWMtMC4yLDEuMiwxLjgsMi4yLDQuNSwyLjNjMi43LDAuMSw1LjEtMC45LDUuNC0yLjEKCQkJQy0zMy44LTI1NC43LTM1LjktMjU1LjgtMzguNi0yNTUuOHogTS0zOS40LTI1MS45Yy0yLjIsMC0zLjgtMC45LTMuNi0xLjhjMC4yLTEsMi4xLTEuNyw0LjMtMS43YzIuMiwwLDMuOCwwLjksMy42LDEuOAoJCQlTLTM3LjItMjUxLjktMzkuNC0yNTEuOXoiLz4KCTwvZz4KCTxnIGNsYXNzPSJzdDYiPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDAuMi0yNDcuMmMtMy4zLDAtNS45LTEuMy01LjktM2MwLTAuOSwwLjctMS43LDEuOS0yLjJsMC4yLDAuNGMtMS4xLDAuNS0xLjcsMS4yLTEuNywxLjkKCQkJYzAsMS40LDIuNSwyLjYsNS41LDIuNmMyLjQsMCw0LjUtMC43LDUuMi0xLjhsMC4zLDAuMkMtMzUuNS0yNDguMS0zNy43LTI0Ny4yLTQwLjItMjQ3LjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00MC4yLTI0NS4zYy0zLjIsMC01LjktMS40LTUuOS0zdi0yLjFoMC40djIuMWMwLDEuNCwyLjUsMi42LDUuNSwyLjZzNS41LTEuMiw1LjUtMi42di0xLjJoMC40djEuMgoJCQlDLTM0LjQtMjQ2LjYtMzctMjQ1LjMtNDAuMi0yNDUuM3oiLz4KCQk8Zz4KCQkJPHJlY3QgeD0iLTQwLjQiIHk9Ii0yNDcuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTM5LjIiIHk9Ii0yNDcuNCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTM4IiB5PSItMjQ3LjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii0zNi45IiB5PSItMjQ4IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItMzUuNyIgeT0iLTI0OC42IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItNDIuOCIgeT0iLTI0Ny43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDEuNiIgeT0iLTI0Ny40IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDUuMiIgeT0iLTI0OC42IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItNDQiIHk9Ii0yNDgiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJPC9nPgoJPC9nPgoJPGcgY2xhc3M9InN0NiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0zOS4xLTI0NC42Yy0xLjgsMC0zLjUtMC40LTQuNi0xLjFsMC4yLTAuM2MxLjEsMC43LDIuNiwxLjEsNC40LDEuMWMzLDAsNS41LTEuMiw1LjUtMi42CgkJCWMwLTAuNi0wLjUtMS4zLTEuNC0xLjhsMC4yLTAuM2MxLjEsMC42LDEuNiwxLjMsMS42LDIuMUMtMzMuMi0yNDUuOS0zNS44LTI0NC42LTM5LjEtMjQ0LjZ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0zOS0yNDIuNmMtMy4yLDAtNS45LTEuNC01LjktM3YtMC42aDAuNHYwLjZjMCwxLjQsMi41LDIuNiw1LjUsMi42czUuNS0xLjIsNS41LTIuNnYtMi4xaDAuNHYyLjEKCQkJQy0zMy4yLTI0NC0zNS44LTI0Mi42LTM5LTI0Mi42eiIvPgoJCTxnPgoJCQk8cmVjdCB4PSItMzkuMiIgeT0iLTI0NC43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMzgiIHk9Ii0yNDQuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQkJPHJlY3QgeD0iLTM2LjkiIHk9Ii0yNDUiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii0zNS43IiB5PSItMjQ1LjMiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii0zNC41IiB5PSItMjQ1LjkiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMS44Ii8+CgkJCTxyZWN0IHg9Ii00MS42IiB5PSItMjQ1IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDAuNCIgeT0iLTI0NC43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItNDQiIHk9Ii0yNDUuOSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQyLjgiIHk9Ii0yNDUuMyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIyLjEiLz4KCQk8L2c+Cgk8L2c+Cgk8ZyBjbGFzcz0ic3Q2Ij4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTM5LjEtMjUwLjVjLTMuMywwLTUuOS0xLjMtNS45LTNzMi42LTMsNS45LTNjMy4zLDAsNS45LDEuMyw1LjksM1MtMzUuOC0yNTAuNS0zOS4xLTI1MC41eiBNLTM5LjEtMjU2LjIKCQkJYy0zLDAtNS41LDEuMi01LjUsMi42czIuNSwyLjYsNS41LDIuNmMzLDAsNS41LTEuMiw1LjUtMi42Uy0zNi4xLTI1Ni4yLTM5LjEtMjU2LjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0zOS0yNDguNmMtMy4yLDAtNS45LTEuNC01LjktM3YtMi4xaDAuNHYyLjFjMCwxLjQsMi41LDIuNiw1LjUsMi42czUuNS0xLjIsNS41LTIuNnYtMi4xaDAuNHYyLjEKCQkJQy0zMy4yLTI0OS45LTM1LjgtMjQ4LjYtMzktMjQ4LjZ6Ii8+CgkJPGc+CgkJCTxyZWN0IHg9Ii0zOS4yIiB5PSItMjUwLjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii0zOCIgeT0iLTI1MC43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCQk8cmVjdCB4PSItMzYuOSIgeT0iLTI1MSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTM1LjciIHk9Ii0yNTEuMyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTM0LjUiIHk9Ii0yNTEuOSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuNCIgaGVpZ2h0PSIxLjgiLz4KCQkJPHJlY3QgeD0iLTQxLjYiIHk9Ii0yNTEiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii00MC40IiB5PSItMjUwLjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjQiIGhlaWdodD0iMi4xIi8+CgkJCTxyZWN0IHg9Ii00NCIgeT0iLTI1MS45IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjEuOCIvPgoJCQk8cmVjdCB4PSItNDIuOCIgeT0iLTI1MS4zIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC40IiBoZWlnaHQ9IjIuMSIvPgoJCTwvZz4KCTwvZz4KPC9nPgo8dGV4dCB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIC02My40ODE0IC0yOTYuMjk4MikiPjx0c3BhbiB4PSIwIiB5PSIwIiBzdHlsZT0iZm9udC1mYW1pbHk6J01vbnRzZXJyYXQtQm9sZCc7IGZvbnQtc2l6ZTozLjQ5MDdweDsiPlRPUjwvdHNwYW4+PHRzcGFuIHg9Ii0xMy41IiB5PSIyNiIgc3R5bGU9ImZvbnQtZmFtaWx5OidNb250c2VycmF0LUJvbGQnOyBmb250LXNpemU6My40OTA3cHg7Ij5Db25uZWN0aW9uPC90c3Bhbj48dHNwYW4geD0iLTIxIiB5PSI1MiIgc3R5bGU9ImZvbnQtZmFtaWx5OidNb250c2VycmF0LUJvbGQnOyBmb250LXNpemU6My40OTA3cHg7Ij5TdGFraW5nIChvZmYvb24pPC90c3Bhbj48dHNwYW4geD0iLTI0LjYiIHk9Ijc4IiBzdHlsZT0iZm9udC1mYW1pbHk6J01vbnRzZXJyYXQtQm9sZCc7IGZvbnQtc2l6ZTozLjQ5MDdweDsiPkxvY2tlZC9VbmxvY2tlZDwvdHNwYW4+PHRzcGFuIHg9Ii03IiB5PSIxMDQiIHN0eWxlPSJmb250LWZhbWlseTonTW9udHNlcnJhdC1Cb2xkJzsgZm9udC1zaXplOjMuNDkwN3B4OyI+U3luY2luZzwvdHNwYW4+PHRzcGFuIHg9Ii01LjciIHk9IjEzMCIgc3R5bGU9ImZvbnQtZmFtaWx5OidNb250c2VycmF0LUJvbGQnOyBmb250LXNpemU6My40OTA3cHg7Ij5TeW5jZWQ8L3RzcGFuPjwvdGV4dD4KPHRleHQgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMSAtOTYuMDQwNCAtMTM5LjU0NjcpIj48dHNwYW4geD0iMCIgeT0iMCIgc3R5bGU9ImZvbnQtZmFtaWx5OidNb250c2VycmF0LUJvbGQnOyBmb250LXNpemU6My40OTA3cHg7Ij5UcmFuc2FjdGlvbiB0eXBlczo8L3RzcGFuPjx0c3BhbiB4PSIyMS45IiB5PSIyMSIgc3R5bGU9ImZvbnQtZmFtaWx5OidNb250c2VycmF0LUJvbGQnOyBmb250LXNpemU6My40OTA3cHg7Ij4tIFNlbmQ8L3RzcGFuPjx0c3BhbiB4PSIxNC40IiB5PSI0MiIgc3R5bGU9ImZvbnQtZmFtaWx5OidNb250c2VycmF0LUJvbGQnOyBmb250LXNpemU6My40OTA3cHg7Ij4tIFJlY2VpdmVkPC90c3Bhbj48dHNwYW4geD0iMTguNyIgeT0iNjMiIHN0eWxlPSJmb250LWZhbWlseTonTW9udHNlcnJhdC1Cb2xkJzsgZm9udC1zaXplOjMuNDkwN3B4OyI+LSBJbi0vb3V0PC90c3Bhbj48dHNwYW4geD0iMjAuOCIgeT0iODQiIHN0eWxlPSJmb250LWZhbWlseTonTW9udHNlcnJhdC1Cb2xkJzsgZm9udC1zaXplOjMuNDkwN3B4OyI+LSBTdGFrZTwvdHNwYW4+PC90ZXh0Pgo8Zz4KCTxlbGxpcHNlIGNsYXNzPSJzdDIiIGN4PSItMS40IiBjeT0iLTIyMC45IiByeD0iMy4xIiByeT0iMyIvPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xLjQtMjIzYy0xLjEsMC0yLjEsMC45LTIuMSwyLjFjMCwwLjUsMC4yLDEsMC41LDEuNGwxLjUtM2wxLjUsMy4xYzAuMy0wLjQsMC41LTAuOCwwLjUtMS40CgkJCUMwLjYtMjIyLjEtMC4zLTIyMy0xLjQtMjIzeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMi40LTIxOS4xYzAuMywwLjEsMC42LDAuMiwxLDAuMmMwLjMsMCwwLjYtMC4xLDAuOS0wLjJsLTAuOS0xLjlMLTIuNC0yMTkuMXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTEuNC0yMjQuNGMtMS45LDAtMy41LDEuNi0zLjUsMy41YzAsMS45LDEuNiwzLjUsMy41LDMuNWMxLjksMCwzLjUtMS42LDMuNS0zLjUKCQkJQzItMjIyLjksMC41LTIyNC40LTEuNC0yMjQuNHogTS0xLjQtMjE4LjFjLTEuNSwwLTIuOC0xLjMtMi44LTIuOGMwLTEuNSwxLjMtMi44LDIuOC0yLjhzMi44LDEuMywyLjgsMi44CgkJCUMxLjQtMjE5LjQsMC4xLTIxOC4xLTEuNC0yMTguMXoiLz4KCTwvZz4KPC9nPgo8cG9seWdvbiBjbGFzcz0ic3QzIiBwb2ludHM9Ii01MC42LC0xMjYuOCAtNTAuNiwtMTIzLjIgLTQzLjQsLTExOS42IC01MC43LC0xMTUuOSAtNTAuNywtMTEyLjQgLTM2LjMsLTExOS43ICIvPgo8cG9seWdvbiBjbGFzcz0ic3QzIiBwb2ludHM9Ii0zNi40LC05Mi41IC0zNi4zLC05Ni4xIC00My41LC05OS43IC0zNi4zLC0xMDMuMyAtMzYuMywtMTA2LjkgLTUwLjcsLTk5LjYgIi8+Cjxwb2x5Z29uIGNsYXNzPSJzdDMiIHBvaW50cz0iLTUwLjQsLTg1LjQgLTUwLjQsLTgyLjggLTQ1LjIsLTgwLjIgLTUwLjQsLTc3LjYgLTUwLjQsLTc1IC00MCwtODAuMyAiLz4KPHBvbHlnb24gY2xhc3M9InN0MyIgcG9pbnRzPSItMzYuOCwtNjkuNyAtMzYuOCwtNzIuMyAtNDIsLTc0LjkgLTM2LjcsLTc3LjYgLTM2LjcsLTgwLjEgLTQ3LjEsLTc0LjkgIi8+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEwMC40LTE3NS4xYy0xLjMsMC0yLjUsMC40LTIuNiwxYy0wLjEsMC4zLDAuMSwwLjUsMC41LDAuN2wyLjEtMS41bDEuNSwxLjZjMC40LTAuMiwwLjctMC40LDAuOC0wLjcKCQkJQzEwMi43LTE3NC42LDEwMS43LTE3NS4xLDEwMC40LTE3NS4xeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05OC45LTE3My4yYzAuMywwLjEsMC43LDAuMSwxLjEsMC4xYzAuNCwwLDAuOCwwLDEuMS0wLjFsLTAuOS0xTDk4LjktMTczLjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEwMC41LTE3NS45Yy0yLjIsMC00LjIsMC43LTQuNCwxLjdjLTAuMiwxLDEuNCwxLjgsMy43LDEuOGMyLjIsMCw0LjItMC43LDQuNC0xLjdTMTAyLjctMTc1LjgsMTAwLjUtMTc1Ljl6CgkJCSBNOTkuOS0xNzIuN2MtMS44LDAtMy4xLTAuNy0zLTEuNWMwLjItMC44LDEuNy0xLjQsMy41LTEuNGMxLjgsMCwzLjEsMC43LDMsMS41QzEwMy4yLTE3My4yLDEwMS43LTE3Mi42LDk5LjktMTcyLjd6Ii8+Cgk8L2c+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOTkuMi0xNjguOWMtMi43LDAtNC44LTEuMS00LjgtMi41YzAtMC43LDAuNi0xLjQsMS42LTEuOGwwLjEsMC4zYy0wLjksMC40LTEuNCwxLTEuNCwxLjUKCQkJYzAsMS4yLDIsMi4yLDQuNSwyLjJjMS45LDAsMy42LTAuNiw0LjMtMS41bDAuMywwLjJDMTAzLTE2OS41LDEwMS4yLTE2OC45LDk5LjItMTY4Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTk5LjItMTY3LjNjLTIuNiwwLTQuOC0xLjEtNC44LTIuNXYtMS43aDAuM3YxLjdjMCwxLjIsMiwyLjIsNC41LDIuMnM0LjUtMSw0LjUtMi4ydi0xaDAuM3YxCgkJCUMxMDQtMTY4LjQsMTAxLjgtMTY3LjMsOTkuMi0xNjcuM3oiLz4KCQk8Zz4KCQkJPHJlY3QgeD0iOTkiIHk9Ii0xNjkiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS43Ii8+CgkJCTxyZWN0IHg9IjEwMCIgeT0iLTE2OSIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjciLz4KCQkJPHJlY3QgeD0iMTAxIiB5PSItMTY5LjMiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS41Ii8+CgkJCTxyZWN0IHg9IjEwMS45IiB5PSItMTY5LjUiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS41Ii8+CgkJCTxyZWN0IHg9IjEwMi45IiB5PSItMTcwIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNSIvPgoJCQk8cmVjdCB4PSI5Ny4xIiB5PSItMTY5LjMiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS43Ii8+CgkJCTxyZWN0IHg9Ijk4IiB5PSItMTY5IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCQk8cmVjdCB4PSI5NS4xIiB5PSItMTcwIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNSIvPgoJCQk8cmVjdCB4PSI5Ni4xIiB5PSItMTY5LjUiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS43Ii8+CgkJPC9nPgoJPC9nPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEwMC4xLTE2Ni43Yy0xLjUsMC0yLjgtMC4zLTMuNy0wLjlsMC4yLTAuM2MwLjksMC42LDIuMiwwLjksMy42LDAuOWMyLjQsMCw0LjUtMSw0LjUtMi4yCgkJCWMwLTAuNS0wLjQtMS0xLjItMS40bDAuMS0wLjNjMC45LDAuNSwxLjMsMS4xLDEuMywxLjdDMTA0LjktMTY3LjgsMTAyLjgtMTY2LjcsMTAwLjEtMTY2Ljd6Ii8+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEwMC4xLTE2NS4xYy0yLjYsMC00LjgtMS4xLTQuOC0yLjV2LTAuNWgwLjN2MC41YzAsMS4yLDIsMi4yLDQuNSwyLjJzNC41LTEsNC41LTIuMnYtMS43aDAuM3YxLjcKCQkJQzEwNC45LTE2Ni4yLDEwMi44LTE2NS4xLDEwMC4xLTE2NS4xeiIvPgoJCTxnPgoJCQk8cmVjdCB4PSIxMDAiIHk9Ii0xNjYuOCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjciLz4KCQkJPHJlY3QgeD0iMTAxIiB5PSItMTY2LjgiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS43Ii8+CgkJCTxyZWN0IHg9IjEwMS45IiB5PSItMTY3LjEiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS41Ii8+CgkJCTxyZWN0IHg9IjEwMi45IiB5PSItMTY3LjMiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS41Ii8+CgkJCTxyZWN0IHg9IjEwMy45IiB5PSItMTY3LjgiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS41Ii8+CgkJCTxyZWN0IHg9Ijk4IiB5PSItMTY3LjEiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS43Ii8+CgkJCTxyZWN0IHg9Ijk5IiB5PSItMTY2LjgiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS43Ii8+CgkJCTxyZWN0IHg9Ijk2LjEiIHk9Ii0xNjcuOCIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjUiLz4KCQkJPHJlY3QgeD0iOTcuMSIgeT0iLTE2Ny4zIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCTwvZz4KCTwvZz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMDAuMS0xNzEuNmMtMi43LDAtNC44LTEuMS00LjgtMi41czIuMS0yLjUsNC44LTIuNWMyLjcsMCw0LjgsMS4xLDQuOCwyLjVTMTAyLjgtMTcxLjYsMTAwLjEtMTcxLjZ6CgkJCSBNMTAwLjEtMTc2LjJjLTIuNCwwLTQuNSwxLTQuNSwyLjJzMiwyLjIsNC41LDIuMmMyLjQsMCw0LjUtMSw0LjUtMi4yUzEwMi42LTE3Ni4yLDEwMC4xLTE3Ni4yeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMDAuMS0xNzBjLTIuNiwwLTQuOC0xLjEtNC44LTIuNXYtMS43aDAuM3YxLjdjMCwxLjIsMiwyLjIsNC41LDIuMnM0LjUtMSw0LjUtMi4ydi0xLjdoMC4zdjEuNwoJCQlDMTA0LjktMTcxLjEsMTAyLjgtMTcwLDEwMC4xLTE3MHoiLz4KCQk8Zz4KCQkJPHJlY3QgeD0iMTAwIiB5PSItMTcxLjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS43Ii8+CgkJCTxyZWN0IHg9IjEwMSIgeT0iLTE3MS43IiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCQk8cmVjdCB4PSIxMDEuOSIgeT0iLTE3MiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjUiLz4KCQkJPHJlY3QgeD0iMTAyLjkiIHk9Ii0xNzIuMiIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjUiLz4KCQkJPHJlY3QgeD0iMTAzLjkiIHk9Ii0xNzIuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjUiLz4KCQkJPHJlY3QgeD0iOTgiIHk9Ii0xNzIiIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS43Ii8+CgkJCTxyZWN0IHg9Ijk5IiB5PSItMTcxLjciIGNsYXNzPSJzdDMiIHdpZHRoPSIwLjMiIGhlaWdodD0iMS43Ii8+CgkJCTxyZWN0IHg9Ijk2LjEiIHk9Ii0xNzIuNyIgY2xhc3M9InN0MyIgd2lkdGg9IjAuMyIgaGVpZ2h0PSIxLjUiLz4KCQkJPHJlY3QgeD0iOTcuMSIgeT0iLTE3Mi4yIiBjbGFzcz0ic3QzIiB3aWR0aD0iMC4zIiBoZWlnaHQ9IjEuNyIvPgoJCTwvZz4KCTwvZz4KCTxsaW5lIGNsYXNzPSJzdDciIHgxPSI5NC44IiB5MT0iLTE3NS4xIiB4Mj0iOTMiIHkyPSItMTc2LjQiLz4KCTxsaW5lIGNsYXNzPSJzdDciIHgxPSI5NyIgeTE9Ii0xNzYuNyIgeDI9Ijk2LjEiIHkyPSItMTc4LjgiLz4KCTxsaW5lIGNsYXNzPSJzdDciIHgxPSI5OS45IiB5MT0iLTE3Ny4zIiB4Mj0iOTkuOSIgeTI9Ii0xNzkuNSIvPgoJPGxpbmUgY2xhc3M9InN0NyIgeDE9IjEwNS4zIiB5MT0iLTE3NS4yIiB4Mj0iMTA3LjIiIHkyPSItMTc2LjUiLz4KCTxsaW5lIGNsYXNzPSJzdDciIHgxPSIxMDMuMSIgeTE9Ii0xNzYuOSIgeDI9IjEwNC4xIiB5Mj0iLTE3OC45Ii8+CjwvZz4KPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xMDkuNy0xMDguN2MtMC43LTAuOS0xLjYtMS40LTIuNy0xLjdjLTAuNi0wLjEtMS4yLTAuMi0xLjgsMGMxLjMsMS4yLDIsMi42LDIuMiw0LjNsMS4xLDBsLTEuNiwzLjNsLTEuNy0zLjMKCWwwLjksMGMtMC4xLTEuNi0xLjItMy4zLTMuMS00LjFjLTIuMS0wLjgtNC41LDAtNS43LDEuOGMtMS4zLDEuOC0xLjEsNC4zLDAuNCw2YzAuOCwwLjgsMS43LDEuMywyLjgsMS41YzAuNSwwLjEsMS4xLDAuMSwxLjYsMAoJYy0wLjctMC42LTEuMy0xLjMtMS42LTIuMmMtMC4zLTAuNy0wLjUtMS4zLTAuNi0yLjFsLTEsMGwxLjYtMy4zbDEuNywzLjNsLTAuOSwwYzAuMiwxLjUsMS4xLDMuMiwzLjEsNGMyLDAuOCw0LjQsMC4xLDUuNy0xLjcKCUMtMTA4LjItMTA0LjUtMTA4LjItMTA3LTEwOS43LTEwOC43eiIvPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tNDMuNy0yNzUuOWMwLjMtMC41LDAuOC0xLDEuNC0xLjRsLTEuMy0yLjNjLTAuOSwwLjYtMS43LDEuNC0yLjMsMi4zTC00My43LTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0zOS44LTI3Ny45YzAuNywwLDEuMywwLjIsMS44LDAuNWwxLjMtMi4zYy0wLjktMC41LTItMC44LTMuMi0wLjhWLTI3Ny45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00Mi0yNzcuNGMwLjYtMC4zLDEuMi0wLjUsMS45LTAuNWwwLTIuN2MtMS4xLDAtMi4yLDAuMy0zLjIsMC44TC00Mi0yNzcuNHoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMzYuMy0yNzEuMmMtMC4zLDAuNS0wLjgsMS0xLjQsMS40bDEuMywyLjNjMC45LTAuNiwxLjctMS40LDIuMy0yLjNMLTM2LjMtMjcxLjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQzLjctMjcxLjJsLTIuMywxLjNjMC42LDAuOSwxLjQsMS43LDIuMywyLjNsMS4zLTIuM0MtNDIuOS0yNzAuMi00My4zLTI3MC42LTQzLjctMjcxLjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTM2LjMtMjc1LjlsMi4zLTEuM2MtMC42LTAuOS0xLjQtMS43LTIuMy0yLjNsLTEuMywyLjNDLTM3LjEtMjc2LjktMzYuNi0yNzYuNC0zNi4zLTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00NC4zLTI3My43YzAtMC43LDAuMi0xLjMsMC41LTEuOGwtMi4zLTEuM2MtMC41LDAuOS0wLjgsMi0wLjgsMy4ySC00NC4zeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0zNS42LTI3My4zYzAsMC43LTAuMiwxLjMtMC41LDEuOGwyLjMsMS4zYzAuNS0wLjksMC44LTIsMC44LTMuMkgtMzUuNnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMzYuMS0yNzUuNmMwLjMsMC42LDAuNSwxLjIsMC41LDEuOGgyLjdjMC0xLjEtMC4zLTIuMi0wLjgtMy4yTC0zNi4xLTI3NS42eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0zNy45LTI2OS43Yy0wLjYsMC4zLTEuMiwwLjUtMS44LDAuNXYyLjdjMS4xLDAsMi4yLTAuMywzLjItMC44TC0zNy45LTI2OS43eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00My44LTI3MS41Yy0wLjMtMC42LTAuNS0xLjItMC41LTEuOEgtNDdjMCwxLjEsMC4zLDIuMiwwLjgsMy4yTC00My44LTI3MS41eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS00MC4yLTI2OS4yYy0wLjcsMC0xLjMtMC4yLTEuOC0wLjVsLTEuMywyLjNjMC45LDAuNSwyLDAuOCwzLjIsMC44Vi0yNjkuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMjQuNC0yNzUuOWMwLjMtMC41LDAuOC0xLDEuNC0xLjRsLTEuMy0yLjNjLTAuOSwwLjYtMS43LDEuNC0yLjMsMi4zTC0yNC40LTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0yMC42LTI3Ny45YzAuNywwLDEuMywwLjIsMS44LDAuNWwxLjMtMi4zYy0wLjktMC41LTItMC44LTMuMi0wLjhWLTI3Ny45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0yMi44LTI3Ny40YzAuNi0wLjMsMS4yLTAuNSwxLjktMC41bDAtMi43Yy0xLjEsMC0yLjIsMC4zLTMuMiwwLjhMLTIyLjgtMjc3LjR6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTE3LjEtMjcxLjJjLTAuMywwLjUtMC44LDEtMS40LDEuNGwxLjMsMi4zYzAuOS0wLjYsMS43LTEuNCwyLjMtMi4zTC0xNy4xLTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0yNC40LTI3MS4ybC0yLjMsMS4zYzAuNiwwLjksMS40LDEuNywyLjMsMi4zbDEuMy0yLjNDLTIzLjYtMjcwLjItMjQuMS0yNzAuNi0yNC40LTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0xNy4xLTI3NS45bDIuMy0xLjNjLTAuNi0wLjktMS40LTEuNy0yLjMtMi4zbC0xLjMsMi4zQy0xNy45LTI3Ni45LTE3LjQtMjc2LjQtMTcuMS0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMjUuMS0yNzMuN2MwLTAuNywwLjItMS4zLDAuNS0xLjhsLTIuMy0xLjNjLTAuNSwwLjktMC44LDItMC44LDMuMkgtMjUuMXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMTYuNC0yNzMuM2MwLDAuNy0wLjIsMS4zLTAuNSwxLjhsMi4zLDEuM2MwLjUtMC45LDAuOC0yLDAuOC0zLjJILTE2LjR6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTE2LjktMjc1LjZjMC4zLDAuNiwwLjUsMS4yLDAuNSwxLjhoMi43YzAtMS4xLTAuMy0yLjItMC44LTMuMkwtMTYuOS0yNzUuNnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMTguNy0yNjkuN2MtMC42LDAuMy0xLjIsMC41LTEuOCwwLjV2Mi43YzEuMSwwLDIuMi0wLjMsMy4yLTAuOEwtMTguNy0yNjkuN3oiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMjQuNi0yNzEuNWMtMC4zLTAuNi0wLjUtMS4yLTAuNS0xLjhoLTIuN2MwLDEuMSwwLjMsMi4yLDAuOCwzLjJMLTI0LjYtMjcxLjV6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTIwLjktMjY5LjJjLTAuNywwLTEuMy0wLjItMS44LTAuNWwtMS4zLDIuM2MwLjksMC41LDIsMC44LDMuMiwwLjhWLTI2OS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS02LjUtMjc1LjljMC4zLTAuNSwwLjgtMSwxLjQtMS40bC0xLjMtMi4zYy0wLjksMC42LTEuNywxLjQtMi4zLDIuM0wtNi41LTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS0yLjctMjc3LjljMC43LDAsMS4zLDAuMiwxLjgsMC41bDEuMy0yLjNjLTAuOS0wLjUtMi0wLjgtMy4yLTAuOFYtMjc3Ljl6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTQuOS0yNzcuNGMwLjYtMC4zLDEuMi0wLjUsMS45LTAuNWwwLTIuN2MtMS4xLDAtMi4yLDAuMy0zLjIsMC44TC00LjktMjc3LjR6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMC45LTI3MS4yYy0wLjMsMC41LTAuOCwxLTEuNCwxLjRsMS4zLDIuM2MwLjktMC42LDEuNy0xLjQsMi4zLTIuM0wwLjktMjcxLjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTYuNS0yNzEuMmwtMi4zLDEuM2MwLjYsMC45LDEuNCwxLjcsMi4zLDIuM2wxLjMtMi4zQy01LjctMjcwLjItNi4yLTI3MC42LTYuNS0yNzEuMnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0wLjktMjc1LjlsMi4zLTEuM2MtMC42LTAuOS0xLjQtMS43LTIuMy0yLjNsLTEuMywyLjNDMC0yNzYuOSwwLjUtMjc2LjQsMC45LTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTS03LjItMjczLjdjMC0wLjcsMC4yLTEuMywwLjUtMS44bC0yLjMtMS4zYy0wLjUsMC45LTAuOCwyLTAuOCwzLjJILTcuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xLjUtMjczLjNjMCwwLjctMC4yLDEuMy0wLjUsMS44bDIuMywxLjNjMC41LTAuOSwwLjgtMiwwLjgtMy4ySDEuNXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xLTI3NS42YzAuMywwLjYsMC41LDEuMiwwLjUsMS44aDIuN2MwLTEuMS0wLjMtMi4yLTAuOC0zLjJMMS0yNzUuNnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMC44LTI2OS43Yy0wLjYsMC4zLTEuMiwwLjUtMS44LDAuNXYyLjdjMS4xLDAsMi4yLTAuMywzLjItMC44TC0wLjgtMjY5Ljd6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNLTYuNy0yNzEuNWMtMC4zLTAuNi0wLjUtMS4yLTAuNS0xLjhoLTIuN2MwLDEuMSwwLjMsMi4yLDAuOCwzLjJMLTYuNy0yNzEuNXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0tMy0yNjkuMmMtMC43LDAtMS4zLTAuMi0xLjgtMC41bC0xLjMsMi4zYzAuOSwwLjUsMiwwLjgsMy4yLDAuOFYtMjY5LjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTAuMS0yNzUuOWMwLjMtMC41LDAuOC0xLDEuNC0xLjRsLTEuMy0yLjNjLTAuOSwwLjYtMS43LDEuNC0yLjMsMi4zTDEwLjEtMjc1Ljl6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTMuOS0yNzcuOWMwLjcsMCwxLjMsMC4yLDEuOCwwLjVsMS4zLTIuM2MtMC45LTAuNS0yLTAuOC0zLjItMC44Vi0yNzcuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMS43LTI3Ny40YzAuNi0wLjMsMS4yLTAuNSwxLjktMC41bDAtMi43Yy0xLjEsMC0yLjIsMC4zLTMuMiwwLjhMMTEuNy0yNzcuNHoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy40LTI3MS4yYy0wLjMsMC41LTAuOCwxLTEuNCwxLjRsMS4zLDIuM2MwLjktMC42LDEuNy0xLjQsMi4zLTIuM0wxNy40LTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEwLjEtMjcxLjJsLTIuMywxLjNjMC42LDAuOSwxLjQsMS43LDIuMywyLjNsMS4zLTIuM0MxMC45LTI3MC4yLDEwLjQtMjcwLjYsMTAuMS0yNzEuMnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy40LTI3NS45bDIuMy0xLjNjLTAuNi0wLjktMS40LTEuNy0yLjMtMi4zbC0xLjMsMi4zQzE2LjYtMjc2LjksMTcuMS0yNzYuNCwxNy40LTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTkuNC0yNzMuN2MwLTAuNywwLjItMS4zLDAuNS0xLjhsLTIuMy0xLjNjLTAuNSwwLjktMC44LDItMC44LDMuMkg5LjR6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTguMS0yNzMuM2MwLDAuNy0wLjIsMS4zLTAuNSwxLjhsMi4zLDEuM2MwLjUtMC45LDAuOC0yLDAuOC0zLjJIMTguMXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNy42LTI3NS42YzAuMywwLjYsMC41LDEuMiwwLjUsMS44aDIuN2MwLTEuMS0wLjMtMi4yLTAuOC0zLjJMMTcuNi0yNzUuNnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNS44LTI2OS43Yy0wLjYsMC4zLTEuMiwwLjUtMS44LDAuNXYyLjdjMS4xLDAsMi4yLTAuMywzLjItMC44TDE1LjgtMjY5Ljd6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOS45LTI3MS41Yy0wLjMtMC42LTAuNS0xLjItMC41LTEuOEg2LjdjMCwxLjEsMC4zLDIuMiwwLjgsMy4yTDkuOS0yNzEuNXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMy42LTI2OS4yYy0wLjcsMC0xLjMtMC4yLTEuOC0wLjVsLTEuMywyLjNjMC45LDAuNSwyLDAuOCwzLjIsMC44Vi0yNjkuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC43LTI3NS45YzAuMy0wLjUsMC44LTEsMS40LTEuNGwtMS4zLTIuM2MtMC45LDAuNi0xLjcsMS40LTIuMywyLjNMMjguNy0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMi42LTI3Ny45YzAuNywwLDEuMywwLjIsMS44LDAuNWwxLjMtMi4zYy0wLjktMC41LTItMC44LTMuMi0wLjhWLTI3Ny45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTMwLjQtMjc3LjRjMC42LTAuMywxLjItMC41LDEuOS0wLjVsMC0yLjdjLTEuMSwwLTIuMiwwLjMtMy4yLDAuOEwzMC40LTI3Ny40eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM2LjEtMjcxLjJjLTAuMywwLjUtMC44LDEtMS40LDEuNGwxLjMsMi4zYzAuOS0wLjYsMS43LTEuNCwyLjMtMi4zTDM2LjEtMjcxLjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjguNy0yNzEuMmwtMi4zLDEuM2MwLjYsMC45LDEuNCwxLjcsMi4zLDIuM2wxLjMtMi4zQzI5LjUtMjcwLjIsMjkuMS0yNzAuNiwyOC43LTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTM2LjEtMjc1LjlsMi4zLTEuM2MtMC42LTAuOS0xLjQtMS43LTIuMy0yLjNsLTEuMywyLjNDMzUuMy0yNzYuOSwzNS44LTI3Ni40LDM2LjEtMjc1Ljl6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjgtMjczLjdjMC0wLjcsMC4yLTEuMywwLjUtMS44bC0yLjMtMS4zYy0wLjUsMC45LTAuOCwyLTAuOCwzLjJIMjh6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMzYuOC0yNzMuM2MwLDAuNy0wLjIsMS4zLTAuNSwxLjhsMi4zLDEuM2MwLjUtMC45LDAuOC0yLDAuOC0zLjJIMzYuOHoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNi4zLTI3NS42YzAuMywwLjYsMC41LDEuMiwwLjUsMS44aDIuN2MwLTEuMS0wLjMtMi4yLTAuOC0zLjJMMzYuMy0yNzUuNnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zNC40LTI2OS43Yy0wLjYsMC4zLTEuMiwwLjUtMS44LDAuNXYyLjdjMS4xLDAsMi4yLTAuMywzLjItMC44TDM0LjQtMjY5Ljd6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMjguNS0yNzEuNWMtMC4zLTAuNi0wLjUtMS4yLTAuNS0xLjhoLTIuN2MwLDEuMSwwLjMsMi4yLDAuOCwzLjJMMjguNS0yNzEuNXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMi4yLTI2OS4yYy0wLjcsMC0xLjMtMC4yLTEuOC0wLjVsLTEuMywyLjNjMC45LDAuNSwyLDAuOCwzLjIsMC44Vi0yNjkuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00Ny45LTI3NS45YzAuMy0wLjUsMC44LTEsMS40LTEuNGwtMS4zLTIuM2MtMC45LDAuNi0xLjcsMS40LTIuMywyLjNMNDcuOS0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01MS44LTI3Ny45YzAuNywwLDEuMywwLjIsMS44LDAuNWwxLjMtMi4zYy0wLjktMC41LTItMC44LTMuMi0wLjhWLTI3Ny45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ5LjYtMjc3LjRjMC42LTAuMywxLjItMC41LDEuOS0wLjVsMC0yLjdjLTEuMSwwLTIuMiwwLjMtMy4yLDAuOEw0OS42LTI3Ny40eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU1LjMtMjcxLjJjLTAuMywwLjUtMC44LDEtMS40LDEuNGwxLjMsMi4zYzAuOS0wLjYsMS43LTEuNCwyLjMtMi4zTDU1LjMtMjcxLjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDcuOS0yNzEuMmwtMi4zLDEuM2MwLjYsMC45LDEuNCwxLjcsMi4zLDIuM2wxLjMtMi4zQzQ4LjctMjcwLjIsNDguMy0yNzAuNiw0Ny45LTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTU1LjMtMjc1LjlsMi4zLTEuM2MtMC42LTAuOS0xLjQtMS43LTIuMy0yLjNsLTEuMywyLjNDNTQuNS0yNzYuOSw1NS0yNzYuNCw1NS4zLTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ3LjMtMjczLjdjMC0wLjcsMC4yLTEuMywwLjUtMS44bC0yLjMtMS4zYy0wLjUsMC45LTAuOCwyLTAuOCwzLjJINDcuM3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01Ni0yNzMuM2MwLDAuNy0wLjIsMS4zLTAuNSwxLjhsMi4zLDEuM2MwLjUtMC45LDAuOC0yLDAuOC0zLjJINTZ6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTUuNS0yNzUuNmMwLjMsMC42LDAuNSwxLjIsMC41LDEuOGgyLjdjMC0xLjEtMC4zLTIuMi0wLjgtMy4yTDU1LjUtMjc1LjZ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTMuNy0yNjkuN2MtMC42LDAuMy0xLjIsMC41LTEuOCwwLjV2Mi43YzEuMSwwLDIuMi0wLjMsMy4yLTAuOEw1My43LTI2OS43eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ3LjctMjcxLjVjLTAuMy0wLjYtMC41LTEuMi0wLjUtMS44aC0yLjdjMCwxLjEsMC4zLDIuMiwwLjgsMy4yTDQ3LjctMjcxLjV6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTEuNC0yNjkuMmMtMC43LDAtMS4zLTAuMi0xLjgtMC41bC0xLjMsMi4zYzAuOSwwLjUsMiwwLjgsMy4yLDAuOFYtMjY5LjJ6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNjUuOC0yNzUuOWMwLjMtMC41LDAuOC0xLDEuNC0xLjRsLTEuMy0yLjNjLTAuOSwwLjYtMS43LDEuNC0yLjMsMi4zTDY1LjgtMjc1Ljl6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNjkuNy0yNzcuOWMwLjcsMCwxLjMsMC4yLDEuOCwwLjVsMS4zLTIuM2MtMC45LTAuNS0yLTAuOC0zLjItMC44Vi0yNzcuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02Ny41LTI3Ny40YzAuNi0wLjMsMS4yLTAuNSwxLjktMC41bDAtMi43Yy0xLjEsMC0yLjIsMC4zLTMuMiwwLjhMNjcuNS0yNzcuNHoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik03My4yLTI3MS4yYy0wLjMsMC41LTAuOCwxLTEuNCwxLjRsMS4zLDIuM2MwLjktMC42LDEuNy0xLjQsMi4zLTIuM0w3My4yLTI3MS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTY1LjgtMjcxLjJsLTIuMywxLjNjMC42LDAuOSwxLjQsMS43LDIuMywyLjNsMS4zLTIuM0M2Ni42LTI3MC4yLDY2LjItMjcwLjYsNjUuOC0yNzEuMnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik03My4yLTI3NS45bDIuMy0xLjNjLTAuNi0wLjktMS40LTEuNy0yLjMtMi4zbC0xLjMsMi4zQzcyLjQtMjc2LjksNzIuOS0yNzYuNCw3My4yLTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTY1LjItMjczLjdjMC0wLjcsMC4yLTEuMywwLjUtMS44bC0yLjMtMS4zYy0wLjUsMC45LTAuOCwyLTAuOCwzLjJINjUuMnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik03My45LTI3My4zYzAsMC43LTAuMiwxLjMtMC41LDEuOGwyLjMsMS4zYzAuNS0wLjksMC44LTIsMC44LTMuMkg3My45eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTczLjQtMjc1LjZjMC4zLDAuNiwwLjUsMS4yLDAuNSwxLjhoMi43YzAtMS4xLTAuMy0yLjItMC44LTMuMkw3My40LTI3NS42eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTcxLjYtMjY5LjdjLTAuNiwwLjMtMS4yLDAuNS0xLjgsMC41djIuN2MxLjEsMCwyLjItMC4zLDMuMi0wLjhMNzEuNi0yNjkuN3oiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02NS43LTI3MS41Yy0wLjMtMC42LTAuNS0xLjItMC41LTEuOGgtMi43YzAsMS4xLDAuMywyLjIsMC44LDMuMkw2NS43LTI3MS41eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTY5LjMtMjY5LjJjLTAuNywwLTEuMy0wLjItMS44LTAuNWwtMS4zLDIuM2MwLjksMC41LDIsMC44LDMuMiwwLjhWLTI2OS4yeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTgzLjctMjc1LjljMC4zLTAuNSwwLjgtMSwxLjQtMS40bC0xLjMtMi4zYy0wLjksMC42LTEuNywxLjQtMi4zLDIuM0w4My43LTI3NS45eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTg3LjYtMjc3LjljMC43LDAsMS4zLDAuMiwxLjgsMC41bDEuMy0yLjNjLTAuOS0wLjUtMi0wLjgtMy4yLTAuOFYtMjc3Ljl6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODUuNC0yNzcuNGMwLjYtMC4zLDEuMi0wLjUsMS45LTAuNWwwLTIuN2MtMS4xLDAtMi4yLDAuMy0zLjIsMC44TDg1LjQtMjc3LjR6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOTEuMS0yNzEuMmMtMC4zLDAuNS0wLjgsMS0xLjQsMS40bDEuMywyLjNjMC45LTAuNiwxLjctMS40LDIuMy0yLjNMOTEuMS0yNzEuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04My43LTI3MS4ybC0yLjMsMS4zYzAuNiwwLjksMS40LDEuNywyLjMsMi4zbDEuMy0yLjNDODQuNS0yNzAuMiw4NC4xLTI3MC42LDgzLjctMjcxLjJ6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOTEuMS0yNzUuOWwyLjMtMS4zYy0wLjYtMC45LTEuNC0xLjctMi4zLTIuM2wtMS4zLDIuM0M5MC4zLTI3Ni45LDkwLjgtMjc2LjQsOTEuMS0yNzUuOXoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04My4xLTI3My43YzAtMC43LDAuMi0xLjMsMC41LTEuOGwtMi4zLTEuM2MtMC41LDAuOS0wLjgsMi0wLjgsMy4ySDgzLjF6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOTEuOC0yNzMuM2MwLDAuNy0wLjIsMS4zLTAuNSwxLjhsMi4zLDEuM2MwLjUtMC45LDAuOC0yLDAuOC0zLjJIOTEuOHoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05MS4zLTI3NS42YzAuMywwLjYsMC41LDEuMiwwLjUsMS44aDIuN2MwLTEuMS0wLjMtMi4yLTAuOC0zLjJMOTEuMy0yNzUuNnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04OS41LTI2OS43Yy0wLjYsMC4zLTEuMiwwLjUtMS44LDAuNXYyLjdjMS4xLDAsMi4yLTAuMywzLjItMC44TDg5LjUtMjY5Ljd6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODMuNi0yNzEuNWMtMC4zLTAuNi0wLjUtMS4yLTAuNS0xLjhoLTIuN2MwLDEuMSwwLjMsMi4yLDAuOCwzLjJMODMuNi0yNzEuNXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04Ny4zLTI2OS4yYy0wLjcsMC0xLjMtMC4yLTEuOC0wLjVsLTEuMywyLjNjMC45LDAuNSwyLDAuOCwzLjIsMC44Vi0yNjkuMnoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yNS4xLTI5NWMwLjMtMC41LDAuOC0xLDEuNC0xLjRsLTEuMy0yLjNjLTAuOSwwLjYtMS43LDEuNC0yLjMsMi4zTDI1LjEtMjk1eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI4LjktMjk3YzAuNywwLDEuMywwLjIsMS44LDAuNWwxLjMtMi4zYy0wLjktMC41LTItMC44LTMuMi0wLjhWLTI5N3oiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yNi43LTI5Ni41YzAuNi0wLjMsMS4yLTAuNSwxLjktMC41bDAtMi43Yy0xLjEsMC0yLjIsMC4zLTMuMiwwLjhMMjYuNy0yOTYuNXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMi40LTI5MC4zYy0wLjMsMC41LTAuOCwxLTEuNCwxLjRsMS4zLDIuM2MwLjktMC42LDEuNy0xLjQsMi4zLTIuM0wzMi40LTI5MC4zeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI1LjEtMjkwLjNsLTIuMywxLjNjMC42LDAuOSwxLjQsMS43LDIuMywyLjNsMS4zLTIuM0MyNS45LTI4OS4zLDI1LjQtMjg5LjgsMjUuMS0yOTAuM3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMi40LTI5NWwyLjMtMS4zYy0wLjYtMC45LTEuNC0xLjctMi4zLTIuM2wtMS4zLDIuM0MzMS42LTI5NiwzMi4xLTI5NS41LDMyLjQtMjk1eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI0LjQtMjkyLjhjMC0wLjcsMC4yLTEuMywwLjUtMS44bC0yLjMtMS4zYy0wLjUsMC45LTAuOCwyLTAuOCwzLjJIMjQuNHoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMy4xLTI5Mi41YzAsMC43LTAuMiwxLjMtMC41LDEuOGwyLjMsMS4zYzAuNS0wLjksMC44LTIsMC44LTMuMkgzMy4xeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTMyLjYtMjk0LjdjMC4zLDAuNiwwLjUsMS4yLDAuNSwxLjhoMi43YzAtMS4xLTAuMy0yLjItMC44LTMuMkwzMi42LTI5NC43eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTMwLjgtMjg4LjhjLTAuNiwwLjMtMS4yLDAuNS0xLjgsMC41djIuN2MxLjEsMCwyLjItMC4zLDMuMi0wLjhMMzAuOC0yODguOHoiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yNC45LTI5MC42Yy0wLjMtMC42LTAuNS0xLjItMC41LTEuOGgtMi43YzAsMS4xLDAuMywyLjIsMC44LDMuMkwyNC45LTI5MC42eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI4LjYtMjg4LjNjLTAuNywwLTEuMy0wLjItMS44LTAuNWwtMS4zLDIuM2MwLjksMC41LDIsMC44LDMuMiwwLjhWLTI4OC4zeiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQzLjctMjk1YzAuMy0wLjUsMC44LTEsMS40LTEuNGwtMS4zLTIuM2MtMC45LDAuNi0xLjcsMS40LTIuMywyLjNMNDMuNy0yOTV6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDcuNi0yOTdjMC43LDAsMS4zLDAuMiwxLjgsMC41bDEuMy0yLjNjLTAuOS0wLjUtMi0wLjgtMy4yLTAuOFYtMjk3eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ1LjQtMjk2LjVjMC42LTAuMywxLjItMC41LDEuOS0wLjVsMC0yLjdjLTEuMSwwLTIuMiwwLjMtMy4yLDAuOEw0NS40LTI5Ni41eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTUxLjEtMjkwLjNjLTAuMywwLjUtMC44LDEtMS40LDEuNGwxLjMsMi4zYzAuOS0wLjYsMS43LTEuNCwyLjMtMi4zTDUxLjEtMjkwLjN6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDMuNy0yOTAuM2wtMi4zLDEuM2MwLjYsMC45LDEuNCwxLjcsMi4zLDIuM2wxLjMtMi4zQzQ0LjUtMjg5LjMsNDQuMS0yODkuOCw0My43LTI5MC4zeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTUxLjEtMjk1bDIuMy0xLjNjLTAuNi0wLjktMS40LTEuNy0yLjMtMi4zbC0xLjMsMi4zQzUwLjMtMjk2LDUwLjgtMjk1LjUsNTEuMS0yOTV6Ii8+Cgk8L2c+CjwvZz4KPGcgY2xhc3M9InN0NCI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDMtMjkyLjhjMC0wLjcsMC4yLTEuMywwLjUtMS44bC0yLjMtMS4zYy0wLjUsMC45LTAuOCwyLTAuOCwzLjJINDN6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNTEuOC0yOTIuNWMwLDAuNy0wLjIsMS4zLTAuNSwxLjhsMi4zLDEuM2MwLjUtMC45LDAuOC0yLDAuOC0zLjJINTEuOHoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01MS4zLTI5NC43YzAuMywwLjYsMC41LDEuMiwwLjUsMS44aDIuN2MwLTEuMS0wLjMtMi4yLTAuOC0zLjJMNTEuMy0yOTQuN3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00OS40LTI4OC44Yy0wLjYsMC4zLTEuMiwwLjUtMS44LDAuNXYyLjdjMS4xLDAsMi4yLTAuMywzLjItMC44TDQ5LjQtMjg4Ljh6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDMuNS0yOTAuNmMtMC4zLTAuNi0wLjUtMS4yLTAuNS0xLjhoLTIuN2MwLDEuMSwwLjMsMi4yLDAuOCwzLjJMNDMuNS0yOTAuNnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00Ny4yLTI4OC4zYy0wLjcsMC0xLjMtMC4yLTEuOC0wLjVsLTEuMywyLjNjMC45LDAuNSwyLDAuOCwzLjIsMC44Vi0yODguM3oiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02Mi45LTI5NWMwLjMtMC41LDAuOC0xLDEuNC0xLjRsLTEuMy0yLjNjLTAuOSwwLjYtMS43LDEuNC0yLjMsMi4zTDYyLjktMjk1eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTY2LjgtMjk3YzAuNywwLDEuMywwLjIsMS44LDAuNWwxLjMtMi4zYy0wLjktMC41LTItMC44LTMuMi0wLjhWLTI5N3oiLz4KCTwvZz4KPC9nPgo8ZyBjbGFzcz0ic3Q0Ij4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02NC42LTI5Ni41YzAuNi0wLjMsMS4yLTAuNSwxLjktMC41bDAtMi43Yy0xLjEsMC0yLjIsMC4zLTMuMiwwLjhMNjQuNi0yOTYuNXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik03MC4zLTI5MC4zYy0wLjMsMC41LTAuOCwxLTEuNCwxLjRsMS4zLDIuM2MwLjktMC42LDEuNy0xLjQsMi4zLTIuM0w3MC4zLTI5MC4zeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTYyLjktMjkwLjNsLTIuMywxLjNjMC42LDAuOSwxLjQsMS43LDIuMywyLjNsMS4zLTIuM0M2My43LTI4OS4zLDYzLjMtMjg5LjgsNjIuOS0yOTAuM3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik03MC4zLTI5NWwyLjMtMS4zYy0wLjYtMC45LTEuNC0xLjctMi4zLTIuM2wtMS4zLDIuM0M2OS41LTI5Niw3MC0yOTUuNSw3MC4zLTI5NXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02Mi4zLTI5Mi44YzAtMC43LDAuMi0xLjMsMC41LTEuOGwtMi4zLTEuM2MtMC41LDAuOS0wLjgsMi0wLjgsMy4ySDYyLjN6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNzEtMjkyLjVjMCwwLjctMC4yLDEuMy0wLjUsMS44bDIuMywxLjNjMC41LTAuOSwwLjgtMiwwLjgtMy4ySDcxeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTcwLjUtMjk0LjdjMC4zLDAuNiwwLjUsMS4yLDAuNSwxLjhoMi43YzAtMS4xLTAuMy0yLjItMC44LTMuMkw3MC41LTI5NC43eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTY4LjctMjg4LjhjLTAuNiwwLjMtMS4yLDAuNS0xLjgsMC41djIuN2MxLjEsMCwyLjItMC4zLDMuMi0wLjhMNjguNy0yODguOHoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik02Mi43LTI5MC42Yy0wLjMtMC42LTAuNS0xLjItMC41LTEuOGgtMi43YzAsMS4xLDAuMywyLjIsMC44LDMuMkw2Mi43LTI5MC42eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTY2LjQtMjg4LjNjLTAuNywwLTEuMy0wLjItMS44LTAuNWwtMS4zLDIuM2MwLjksMC41LDIsMC44LDMuMiwwLjhWLTI4OC4zeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTgwLjgtMjk1YzAuMy0wLjUsMC44LTEsMS40LTEuNGwtMS4zLTIuM2MtMC45LDAuNi0xLjcsMS40LTIuMywyLjNMODAuOC0yOTV6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODQuNy0yOTdjMC43LDAsMS4zLDAuMiwxLjgsMC41bDEuMy0yLjNjLTAuOS0wLjUtMi0wLjgtMy4yLTAuOFYtMjk3eiIvPgoJPC9nPgo8L2c+CjxnIGNsYXNzPSJzdDQiPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTgyLjUtMjk2LjVjMC42LTAuMywxLjItMC41LDEuOS0wLjVsMC0yLjdjLTEuMSwwLTIuMiwwLjMtMy4yLDAuOEw4Mi41LTI5Ni41eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTg4LjItMjkwLjNjLTAuMywwLjUtMC44LDEtMS40LDEuNGwxLjMsMi4zYzAuOS0wLjYsMS43LTEuNCwyLjMtMi4zTDg4LjItMjkwLjN6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODAuOC0yOTAuM2wtMi4zLDEuM2MwLjYsMC45LDEuNCwxLjcsMi4zLDIuM2wxLjMtMi4zQzgxLjYtMjg5LjMsODEuMi0yODkuOCw4MC44LTI5MC4zeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTg4LjItMjk1bDIuMy0xLjNjLTAuNi0wLjktMS40LTEuNy0yLjMtMi4zbC0xLjMsMi4zQzg3LjQtMjk2LDg3LjktMjk1LjUsODguMi0yOTV6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODAuMi0yOTIuOGMwLTAuNywwLjItMS4zLDAuNS0xLjhsLTIuMy0xLjNjLTAuNSwwLjktMC44LDItMC44LDMuMkg4MC4yeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTg4LjktMjkyLjVjMCwwLjctMC4yLDEuMy0wLjUsMS44bDIuMywxLjNjMC41LTAuOSwwLjgtMiwwLjgtMy4ySDg4Ljl6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODguNC0yOTQuN2MwLjMsMC42LDAuNSwxLjIsMC41LDEuOGgyLjdjMC0xLjEtMC4zLTIuMi0wLjgtMy4yTDg4LjQtMjk0Ljd6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODYuNi0yODguOGMtMC42LDAuMy0xLjIsMC41LTEuOCwwLjV2Mi43YzEuMSwwLDIuMi0wLjMsMy4yLTAuOEw4Ni42LTI4OC44eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTgwLjctMjkwLjZjLTAuMy0wLjYtMC41LTEuMi0wLjUtMS44aC0yLjdjMCwxLjEsMC4zLDIuMiwwLjgsMy4yTDgwLjctMjkwLjZ6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNODQuMy0yODguM2MtMC43LDAtMS4zLTAuMi0xLjgtMC41bC0xLjMsMi4zYzAuOSwwLjUsMiwwLjgsMy4yLDAuOFYtMjg4LjN6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOTguNy0yOTVjMC4zLTAuNSwwLjgtMSwxLjQtMS40bC0xLjMtMi4zYy0wLjksMC42LTEuNywxLjQtMi4zLDIuM0w5OC43LTI5NXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMDIuNi0yOTdjMC43LDAsMS4zLDAuMiwxLjgsMC41bDEuMy0yLjNjLTAuOS0wLjUtMi0wLjgtMy4yLTAuOFYtMjk3eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEwMC40LTI5Ni41YzAuNi0wLjMsMS4yLTAuNSwxLjktMC41bDAtMi43Yy0xLjEsMC0yLjIsMC4zLTMuMiwwLjhMMTAwLjQtMjk2LjV6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTA2LjEtMjkwLjNjLTAuMywwLjUtMC44LDEtMS40LDEuNGwxLjMsMi4zYzAuOS0wLjYsMS43LTEuNCwyLjMtMi4zTDEwNi4xLTI5MC4zeiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTk4LjctMjkwLjNsLTIuMywxLjNjMC42LDAuOSwxLjQsMS43LDIuMywyLjNsMS4zLTIuM0M5OS41LTI4OS4zLDk5LjEtMjg5LjgsOTguNy0yOTAuM3oiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMDYuMS0yOTVsMi4zLTEuM2MtMC42LTAuOS0xLjQtMS43LTIuMy0yLjNsLTEuMywyLjNDMTA1LjMtMjk2LDEwNS44LTI5NS41LDEwNi4xLTI5NXoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik05OC4xLTI5Mi44YzAtMC43LDAuMi0xLjMsMC41LTEuOGwtMi4zLTEuM2MtMC41LDAuOS0wLjgsMi0wLjgsMy4ySDk4LjF6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTA2LjgtMjkyLjVjMCwwLjctMC4yLDEuMy0wLjUsMS44bDIuMywxLjNjMC41LTAuOSwwLjgtMiwwLjgtMy4ySDEwNi44eiIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTEwNi4zLTI5NC43YzAuMywwLjYsMC41LDEuMiwwLjUsMS44aDIuN2MwLTEuMS0wLjMtMi4yLTAuOC0zLjJMMTA2LjMtMjk0Ljd6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNMTA0LjUtMjg4LjhjLTAuNiwwLjMtMS4yLDAuNS0xLjgsMC41djIuN2MxLjEsMCwyLjItMC4zLDMuMi0wLjhMMTA0LjUtMjg4Ljh6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNOTguNi0yOTAuNmMtMC4zLTAuNi0wLjUtMS4yLTAuNS0xLjhoLTIuN2MwLDEuMSwwLjMsMi4yLDAuOCwzLjJMOTguNi0yOTAuNnoiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMDIuMy0yODguM2MtMC43LDAtMS4zLTAuMi0xLjgtMC41bC0xLjMsMi4zYzAuOSwwLjUsMiwwLjgsMy4yLDAuOFYtMjg4LjN6Ii8+Cgk8L2c+CjwvZz4KPGc+Cgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNLTQxLjEtMTYxLjZsLTQuNi04LjVsMi45LTAuMWwxLjUsMi43bDIuOS03LjdoMy4xTC00MS4xLTE2MS42eiIvPgo8L2c+CjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yMDAuMiwzYy0xNi40LDAtMjkuNywxMy4zLTI5LjcsMjkuN2MwLDE2LjQsMTMuMywyOS43LDI5LjcsMjkuN2MxNi40LDAsMjkuNy0xMy4zLDI5LjctMjkuNwoJQzIyOS45LDE2LjMsMjE2LjYsMywyMDAuMiwzeiBNMjAwLjIsNTYuNmMtMTMuMiwwLTIzLjktMTAuNy0yMy45LTIzLjlTMTg3LDguOCwyMDAuMiw4LjhjMTMuMiwwLDIzLjksMTAuNywyMy45LDIzLjkKCVMyMTMuNCw1Ni42LDIwMC4yLDU2LjZ6Ii8+CjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04OC4xLDMxLjZjLTAuMSwxNy42LDE0LDMyLDMxLjYsMzIuMWMxNy42LDAuMSwzMi0xNCwzMi4xLTMxLjZjMC4xLTE3LjYtMTQtMzItMzEuNi0zMi4xCglDMTAyLjYtMC4xLDg4LjMsMTQsODguMSwzMS42eiBNMTQ1LjcsMzIuMWMtMC4xLDE0LjItMTEuNywyNS42LTI1LjksMjUuNWMtMTQuMi0wLjEtMjUuNi0xMS43LTI1LjUtMjUuOQoJYzAuMS0xNC4yLDExLjctMjUuNiwyNS45LTI1LjVTMTQ1LjgsMTcuOSwxNDUuNywzMi4xeiIvPgo8Zz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMTcuMyw1NC41bC0xMy41LTI0LjlsOC42LTAuMmw0LjQsOGw4LjQtMjIuNmg5LjJMMTE3LjMsNTQuNXoiLz4KPC9nPgo8Zz4KCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNzAuOCwxMDkuMWwtMTEuNy0yMS42bDcuNS0wLjJsMy44LDYuOWw3LjMtMTkuNmg3LjlMMTcwLjgsMTA5LjF6Ii8+CjwvZz4KPGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iMjEuMSIgY3k9Ii0yMDkuOCIgcj0iMS45Ii8+Cjwvc3ZnPgo=)}span.spinner{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMjMxRjIwO30KCS5zdDF7ZmlsbDojRjM5MzQ3O30KCS5zdDJ7ZmlsbDojRkZGRkZGO30KCS5zdDN7ZmlsbDojRjM4MjIwO30KCS5zdDR7b3BhY2l0eTowLjM7fQoJLnN0NXtvcGFjaXR5OjAuNTt9Cgkuc3Q2e2ZpbGw6bm9uZTt9Cgkuc3Q3e29wYWNpdHk6MC4zNjt9Cgkuc3Q4e2ZpbGw6bm9uZTtzdHJva2U6I0YzODIyMDtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cjwvc3R5bGU+CjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0wLDMxLjZjLTAuMSwxNy42LDE0LDMyLDMxLjYsMzIuMWMxNy42LDAuMSwzMi0xNCwzMi4xLTMxLjZjMC4xLTE3LjYtMTQtMzItMzEuNi0zMi4xQzE0LjUtMC4xLDAuMSwxNCwwLDMxLjZ6CgkgTTU3LjUsMzIuMWMtMC4xLDE0LjItMTEuNywyNS42LTI1LjksMjUuNUMxNy41LDU3LjQsNi4xLDQ1LjgsNi4yLDMxLjdTMTcuOSw2LjEsMzIuMSw2LjJTNTcuNywxNy45LDU3LjUsMzIuMXoiLz4KPGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iMTkuMSIgY3k9IjE3LjYiIHI9IjcuMyIvPgo8L3N2Zz4K)}span.connection-0{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMjMxRjIwO30KCS5zdDF7ZmlsbDojRjM5MzQ3O30KCS5zdDJ7ZmlsbDojRkZGRkZGO30KCS5zdDN7ZmlsbDojRjM4MjIwO30KCS5zdDR7b3BhY2l0eTowLjM7fQoJLnN0NXtvcGFjaXR5OjAuNTt9Cgkuc3Q2e2ZpbGw6bm9uZTt9Cgkuc3Q3e29wYWNpdHk6MC4zNjt9Cgkuc3Q4e2ZpbGw6bm9uZTtzdHJva2U6I0YzODIyMDtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cjwvc3R5bGU+CjxnPgoJPGcgY2xhc3M9InN0NCI+CgkJPGc+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNS4yLDIxLjdjMS42LTIuNSwzLjctNC42LDYuMS02LjFsLTYtMTAuNGMtNC4zLDIuNi03LjksNi4yLTEwLjUsMTAuNUwxNS4yLDIxLjd6Ii8+CgkJPC9nPgoJPC9nPgoJPGcgY2xhc3M9InN0NCI+CgkJPGc+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMi44LDEyLjVjMywwLjEsNS45LDAuOSw4LjQsMi4ybDYtMTAuNEM0Mi45LDIsMzgsMC42LDMyLjgsMC41VjEyLjV6Ii8+CgkJPC9nPgoJPC9nPgoJPGcgY2xhc3M9InN0NCI+CgkJPGc+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yMi43LDE0LjdjMi41LTEuMyw1LjQtMi4xLDguNC0yLjFsMC4xLTEyYy01LjIsMC4xLTEwLjEsMS40LTE0LjQsMy43TDIyLjcsMTQuN3oiLz4KCQk8L2c+Cgk8L2c+Cgk8ZyBjbGFzcz0ic3Q0Ij4KCQk8Zz4KCQkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTQ4LjgsNDNjLTEuNiwyLjUtMy43LDQuNi02LjEsNi4xbDYsMTAuNGM0LjMtMi42LDcuOS02LjIsMTAuNS0xMC41TDQ4LjgsNDN6Ii8+CgkJPC9nPgoJPC9nPgoJPGcgY2xhc3M9InN0NCI+CgkJPGc+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xNS4yLDQzTDQuOCw0OWMyLjYsNC4zLDYuMiw3LjksMTAuNSwxMC41bDYtMTAuNEMxOC45LDQ3LjUsMTYuOCw0NS40LDE1LjIsNDN6Ii8+CgkJPC9nPgoJPC9nPgoJPGcgY2xhc3M9InN0NCI+CgkJPGc+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00OC44LDIxLjdsMTAuNC02Yy0yLjYtNC4zLTYuMi03LjktMTAuNS0xMC41bC02LDEwLjRDNDUuMSwxNy4xLDQ3LjIsMTkuMiw0OC44LDIxLjd6Ii8+CgkJPC9nPgoJPC9nPgoJPGcgY2xhc3M9InN0NCI+CgkJPGc+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0xMi4yLDMxLjVjMC4xLTMsMC45LTUuOSwyLjItOC40TDQsMTcuMWMtMi4zLDQuMy0zLjcsOS4yLTMuOSwxNC40SDEyLjJ6Ii8+CgkJPC9nPgoJPC9nPgoJPGcgY2xhc3M9InN0NCI+CgkJPGc+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik01MS44LDMzLjJjLTAuMSwzLTAuOSw1LjktMi4yLDguNGwxMC40LDZjMi4zLTQuMywzLjctOS4yLDMuOS0xNC40SDUxLjh6Ii8+CgkJPC9nPgoJPC9nPgoJPGcgY2xhc3M9InN0NCI+CgkJPGc+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00OS42LDIzLjFjMS4zLDIuNSwyLjEsNS40LDIuMiw4LjRoMTJjLTAuMS01LjItMS41LTEwLjEtMy45LTE0LjRMNDkuNiwyMy4xeiIvPgoJCTwvZz4KCTwvZz4KCTxnIGNsYXNzPSJzdDQiPgoJCTxnPgoJCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNDEuMiw0OS45Yy0yLjUsMS4zLTUuNCwyLjEtOC40LDIuMnYxMmM1LjItMC4xLDEwLjEtMS41LDE0LjQtMy45TDQxLjIsNDkuOXoiLz4KCQk8L2c+Cgk8L2c+Cgk8ZyBjbGFzcz0ic3Q0Ij4KCQk8Zz4KCQkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTE0LjQsNDEuNWMtMS4zLTIuNS0yLjEtNS40LTIuMi04LjRoLTEyQzAuMywzOC40LDEuNiw0My4zLDQsNDcuNkwxNC40LDQxLjV6Ii8+CgkJPC9nPgoJPC9nPgoJPGcgY2xhc3M9InN0NCI+CgkJPGc+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0zMS4yLDUyLjJjLTMtMC4xLTUuOS0wLjktOC40LTIuMmwtNiwxMC40YzQuMywyLjMsOS4yLDMuNywxNC40LDMuOVY1Mi4yeiIvPgoJCTwvZz4KCTwvZz4KPC9nPgo8L3N2Zz4K)}span.syncing-0{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMywgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7b3BhY2l0eTowLjM7c3Ryb2tlOiNGMzgyMjA7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3Qxe3N0cm9rZTojRjM4MjIwO30KCS5zdDJ7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cjwvc3R5bGU+CjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjMyIiBjeT0iMzIiIHI9IjI5IiBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjYiLz4KPGNpcmNsZSBjbGFzcz0ic3QxIiBjeD0iMzIiIGN5PSIzMiIgcj0iMjkiIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iNiIgc3Ryb2tlLWRhc2hhcnJheT0iY2FsYygyLjUKICogMTgyLjIxMjQgLyAxMDApIDE4Mi4yMTI0IiB0cmFuc2Zvcm09InJvdGF0ZSgtOTApIHRyYW5zbGF0ZSgtNjQpIiAvPgo8L3N2Zz4K)}.heading-selected{margin:0;color:#313131}.heading-deselected{margin:0;color:#999}@media (max-width:480px){.fa-2x{font-size:1.66666666em}}.page-content-wrapper{background:#f0f1f3}.panel{border:0 solid transparent}.page-sidebar .sidebar-menu .menu-items>li ul.sub-menu>li:hover>.icon-thumbnail{color:#f28321}.page-sidebar .sidebar-menu>.menu-items>li>ul.sub-menu li>a>.arrow:before{margin-right:3px!important}.page-sidebar .sidebar-menu>.menu-items>li ul.sub-menu>li{padding:0 5px 0 0!important}.page-sidebar .sidebar-menu>.menu-items>li ul.sub-menu>li>a{padding-left:40px!important}.page-sidebar .sidebar-menu>:not(.scroll-wrapper) .icon-thumbnail{margin-right:0!important}.panel.panel-default{border:1px solid rgba(0,0,0,.07);background:#fff}.page-container>.page-content-wrapper>.content{padding-top:0!important}.page-container>.page-content-wrapper{position:absolute!important;min-height:initial!important;top:0;left:0;right:0;bottom:0;overflow-y:auto;overflow-x:hidden;padding-right:5px}@media (max-width:767px){.page-container>.page-content-wrapper{position:absolute!important;min-height:initial!important;top:0;left:0;right:0;bottom:0;overflow-y:auto}}.header{position:static!important;padding-right:35px}#status{margin-top:10px;height:42px;display:flex;align-items:center}#status>*{line-height:32px;height:32px;width:32px;margin-left:15px;transition:all .5s;color:orange;font-size:12px;font-weight:700;text-align:center;transition:height .5s,width .5s,font-size .5s,left .5s,margin-right .5s}#status>.icon-overlay{transform:translateX(-100%) translateY(1%);margin-left:0;margin-right:-32px;pointer-events:none;pointer:none}@media only screen and (min-width:768px){#status>.icon-overlay{transform:translateX(-100%) translateY(.1ex)}}#status>.syncing{line-height:42px;width:42px;height:42px}#status>#syncingIconText.syncing{margin-right:-42px}@media (max-width:767px){.header{padding-right:20px;margin-bottom:1px}.header,.header .header-inner{height:51px!important}#status{margin-top:6px;height:38px}#status>*{line-height:28px;height:28px;width:28px;font-size:11px;margin-left:12px}#status>.icon-overlay{margin-right:-28px}#status>.syncing{line-height:38px;width:38px;height:38px}#status>#syncingIconText.syncing{margin-right:-38px}}@media (max-width:480px){.header{padding-right:5px}}.nav-sub-menu{background-color:#fff;border:none;-webkit-border-radius:0!important;-moz-border-radius:0!important;border-radius:0!important}nav.navbar{width:100%;display:flex;justify-content:flex-end;align-items:baseline;flex-wrap:wrap;align-content:center}nav.navbar>div:first-child{flex-grow:1}nav.navbar>div:not(:first-child){padding-left:15px}nav.navbar{padding-top:5px;padding-bottom:10px;padding-left:35px;padding-right:35px}nav.navbar+div.row{margin-top:5px;margin-bottom:0;margin-left:35px;margin-right:35px}@media (max-width:767px){.nav-tabs~.tab-content{padding:5px!important}nav.navbar{padding-top:0;padding-bottom:0;padding-left:20px;padding-right:20px;margin-bottom:0}nav.navbar+div.row{margin-left:5px;margin-right:0}}@media (max-width:480px){.nav-tabs>li>a{padding-left:5px!important}nav.navbar{padding-left:10px;padding-right:5px}}@media (max-height:680px){nav.navbar{margin-bottom:5px!important;padding-top:0!important;padding-bottom:0!important}}#tooltip{font-size:.8em;color:#fff;background:#382b3f;position:absolute;z-index:99999999;padding:10px;line-height:15px;border-radius:4px;border-style:solid;border-width:thin;border-color:#8a8c8e;pointer-events:none;pointer:none}.light-red,.syncing{color:#f28321}#tooltip:after{width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px solid #382b3f;content:'';position:absolute;left:50%;bottom:-10px;margin-left:-10px}#tooltip.top:after{border-top-color:transparent;border-bottom:10px solid #382b3f;top:-20px;bottom:auto}#tooltip.left:after{left:10px;margin:0}#tooltip.right:after{right:10px;left:auto;margin:0}.cents{font-size:15px}.syncing{whitespace:nowrap}.transaction-overview{text-decoration:none;color:#aaa;padding:20px;border-bottom:1px solid #f0f1f3;font-size:13px}.transaction-overview span{color:#382b3f}.transaction-overview span.date{color:#b9bdbe}.overview_date{letter-spacing:1px}.network-alerts-icon{margin-right:5px}.warning{font-size:.8em;color:#f84444;padding:5px}button,input,optgroup,select,textarea{background:transparant;font-family:Montserrat,sans-serif;font-size:13px;color:#000}input,optgroup,select,textarea{padding:3px 9px;height:34px;border:1px solid #f0f1f3;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}button{border:1px solid #f0f1f3;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.newval{background:#fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;width:99%}.select-drop-down{width:145px;border:none;-webkit-appearance:none;-moz-appearance:none;font-size:13px;height:35px}.unit.select-drop-down{width:110px;border:none;-webkit-appearance:none;-moz-appearance:none;font-size:13px;height:35px}select.unit[disabled]{appearance:none!important;border:none!important}::-webkit-input-placeholder,:placeholder-shown{color:#282829}.padding-right-forms{margin-right:25px}.select-drop-down{appearance:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAARklEQVQoz2P4z4AfMgwhBcb/jf8jCyP4SAIIJcg8mJARQhDCMjZCVaAAUwKTNpZDc6SxDJISI2MZLL4wloIqMTKWGlwhCQADevunBw89+AAAAABJRU5ErkJggg==) 95% no-repeat #f0f1f3;border:1px solid rgba(0,0,0,.07)}.select-drop-down-small{width:50px;font-size:13px;border:none;height:35px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAARklEQVQoz2P4z4AfMgwhBcb/jf8jCyP4SAIIJcg8mJARQhDCMjZCVaAAUwKTNpZDc6SxDJISI2MZLL4wloIqMTKWGlwhCQADevunBw89+AAAAABJRU5ErkJggg==) 95% no-repeat #f0f1f3;border:1px solid rgba(0,0,0,.07)}.form-control-options-page{background-color:#f0f1f3;background-image:none;border:1px solid rgba(0,0,0,.07);-webkit-appearance:none;color:#2c2c2c;outline:0;height:35px;line-height:normal;font-size:14px;font-weight:400;min-height:35px;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-transition:background .2s linear 0s;transition:background .2s linear 0s}.small.hint-text{opacity:1}@media (min-width:768px){.panel .btn-primary{margin-right:25px}}@media (max-width:700px){.padding-right-forms{margin-right:0}.hide-this-icon{display:none}}td{max-width:0;white-space:nowrap}table{width:100%}.table{color:#282829}@media (max-width:480px){.table thead tr th{font-size:12px}.table.table-condensed thead tr th{padding-left:5px!important;padding-right:5px!important}.table tbody tr td{padding-top:12px;padding-bottom:12px}}@media (max-height:680px){.table>tbody>tr>td,.table>thead>tr>th{padding-top:10px!important;padding-bottom:10px!important}}@media (min-width:1001px){.table tbody tr td{font-size:12px}}@media (min-width:1401px){.table tbody tr td{font-size:13px}}.footable-row-detail-group{font-weight:700}.footable-row-detail-name{font-weight:700}.footable>tfoot>tr>td{padding-bottom:0!important}.footable-row-detail-value{white-space:normal;overflow-wrap:anywhere;word-break:break-word}@media (max-width:480px){.footable>tbody>tr>td,.footable>thead>tr>th{padding-left:5px!important;padding-right:5px!important}}.wallet{min-height:307px;padding-top:8px}#balances td{padding-left:20px;padding-right:20px}#recenttxns-container{height:424px}#recenttxns tbody tr td,#recenttxns thead tr th{text-align:center}.overview_date{white-space:normal!important}#overview .table tbody tr td,#overview .table tbody tr td *{font-size:13px;white-space:normal}#overview .table tbody tr td span{white-space:nowrap;vertical-align:baseline}@media (max-height:680px){.wallet{min-height:360px}}@media (max-width:991px){.wallet{min-height:0}}@media (max-height:680px),(max-width:767px){.panel{margin-bottom:5px!important}.panel .panel-body{padding-top:0!important;padding-bottom:0!important}#balances{margin-bottom:0}}@media (max-width:480px){#balances td,.panel .panel-heading{padding-left:5px;padding-right:5px}#overview .table tbody tr td,#overview .table tbody tr td *{font-size:11px}#overview .table tbody tr td .unit{display:table;width:100%}}#receive .center-div{margin-top:10px;margin-bottom:10px}#receive .table>tbody>tr>td{vertical-align:middle}@media (max-width:767px){#receive .center-div>a.btn{width:145px;margin-top:5px;margin-bottom:5px}}@media (min-width:531px){#receive tbody>tr>td:first-child,#receive thead>tr>th:first-child{display:none!important}}@media (max-width:530px){#receive tbody>tr>td:first-child,#receive thead>tr>th:first-child{display:table-cell;width:32px;padding-left:7px!important}#receive tbody>tr>td:nth-child(2),#receive thead>tr>th:nth-child(2){padding-left:0!important}}.address{overflow-wrap:anywhere;word-break:break-word}#addressbook .table>tbody>tr>td{vertical-align:middle}#addressbook .center-div{margin-top:10px;margin-bottom:10px}@media (max-width:767px){#addressbook .center-div>a.btn{width:145px;margin-top:5px;margin-bottom:5px}}@media (min-width:531px){#addressbook tbody>tr>td:first-child,#addressbook thead>tr>th:first-child{display:none!important}}@media (max-width:530px){#addressbook tbody>tr>td:first-child,#addressbook thead>tr>th:first-child{width:32px;display:table-cell;padding-left:7px!important}#addressbook tbody>tr>td:nth-child(2),#addressbook thead>tr>th:nth-child(2){padding-left:0!important}}#address-lookup-table tbody>tr>td:first-child,#address-lookup-table thead>tr>th:first-child{display:none}#blk-hash,#txn-hash{overflow-wrap:anywhere;word-break:break-word}#blkexp-txn-modal td:first-child,#blkexp-txn-modal th:first-child,#block-info-modal td:first-child,#block-info-modal th:first-child{width:30%}#blkexp-txn-modal td,#block-info-modal td{overflow-wrap:anywhere;word-break:break-word;white-space:normal;padding-top:12px;padding-bottom:12px}#qrcode-modal{display:none}#import-key-modal{margin:auto;padding:20px;width:800px;background:#fff;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;box-shadow:0 0 4px rgba(0,0,0,.7);-webkit-box-shadow:0 0 4px rgba(0,0,0,.7);-moz-box-shadow:0 0 4px rgba(0,0,0,.7);display:none;position:absolute}#import-key-modal label{display:inline-block;padding-right:20px;margin:15px 20px 20px;text-align:right;width:200px}#import-key-modal input{width:650px;height:40px;padding:0 10px;margin-bottom:10px}#import-key-modal textarea{width:500px;height:50px;padding:0 10px;margin-bottom:10px}#qrcode{margin:auto;padding-bottom:20px}#qrcode canvas,#qrcode img{display:block;margin:auto}#message-preview img{max-width:90%}#transaction-info{padding-bottom:25px;-webkit-user-select:text;user-select:text}.verified-mark{color:#fff;background-color:green;border-radius:15px;padding:3px}.verified-mark:hover{border-radius:10px;padding-left:10px;padding-right:10px}.contributor-mark{color:#fff;background-color:#f84444;border-radius:15px;padding:5px}.contributor-mark:hover{border-radius:10px;padding-left:10px;padding-right:10px}.spectreteam-mark{color:#fff;background-color:#04043d;border-radius:15px;padding:3px}.spectreteam-mark:hover{border-radius:10px;padding-left:10px;padding-right:10px}textarea{resize:none;display:block;height:60px;border:1px solid #ededed;width:100%}.input-list input[type=textedarea]{display:block;margin:0;width:100%;font-family:sans-serif;font-size:18px;appearance:none;box-shadow:none;border-radius:none}.input-list input[type=textaddrea]:focus{outline:0}.heading-deselected,.heading-selected{font-size:1em;font-family:Montserrat,sans-serif;text-decoration:none;cursor:pointer}#remove-on-send{padding:20px}@media (max-width:767px){.modal .modal-header{padding:15px 10px 0!important}.modal-dialog{margin-left:45px;margin-right:25px}}@media (max-width:480px){.modal-dialog{margin:0}}.iScrollVerticalScrollbar{position:absolute;z-index:9999;bottom:0;top:0;right:0;overflow:hidden;background:#a7b0b1;width:10px}.iScrollIndicator{width:100%;background:#697172}.default-scroll{display:block;height:auto;width:auto}#syncProgressBar{height:11px;display:block;-webkit-appearance:none;-moz-appearance:none;border:none;margin-bottom:2px}progress::-webkit-progress-bar{background:#131218;border-radius:50px;padding:2px;box-shadow:0 1px 0 0 rgba(255,255,255,.2)}progress::-webkit-progress-value{border-radius:50px;box-shadow:inset 0 1px 1px 0 rgba(255,255,255,.4);background:-webkit-linear-gradient(45deg,transparent,transparent 33%,rgba(0,0,0,.1) 33%,rgba(0,0,0,.1) 66%,transparent 66%),-webkit-linear-gradient(top,rgba(255,255,255,.25),rgba(0,0,0,.2)),-webkit-linear-gradient(left,#e5203d,#e41c39);background-size:25px 14px,100% 100%,100% 100%;-webkit-animation:animateprogress 5s linear 0 infinite;animation:animateprogress 5s linear 0 infinite}@-webkit-keyframes animateprogress{0%{background-position:0 0,0 0,0 0}100%{background-position:-100px 0,0 0,0 0}}.wizardback:before{float:left}.wizardfwd{display:block;position:fixed;float:right;bottom:0;cursor:pointer;z-index:999999999999;top:430px;right:20px}.footable.breakpoint>tbody>tr>td>span.footable-toggle,.footable>thead>tr>th>span.footable-sort-indicator{display:inline-block;font-family:footable;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased}.wizardfwd:after{float:left}.green-circle{color:#19e2b4}.red-circle{color:#f84444}.none{display:none!important}.radio label.form-controlring_size:before{display:none}#transactions-table>thead{display:table;width:100%;table-layout:fixed}#transactions-table>tbody{display:block;height:50vh;overflow:auto}#transactions-table>tbody>tr{display:table;width:100%;table-layout:fixed}#transactions-table>thead>tr>th.trans-status{width:28px!important;padding-left:5px!important}#transactions-table>tbody>tr>td.trans-status{width:28px!important;padding-left:6px!important;overflow:visible}#transactions-table>tbody>tr>td.trans-status>i{margin-top:-4px;margin-bottom:-4px;font-size:1.66666666em;vertical-align:middle}#transactions-table>tbody>tr>td.trans-date,#transactions-table>thead>tr>th.trans-date{width:127px}#transactions-table>thead>tr>th.amount{text-align:right}#transactions-table>tbody>tr>td.amount{text-align:right}#transactions-table>tbody>tr>td.trans-type-icon,#transactions-table>thead>tr>th.trans-type-icon{width:38px}#transactions-table>tbody>tr>td.trans-type-icon img{margin-top:-4px;margin-bottom:-4px}#transactions-table{margin-bottom:0!important}@media (max-width:1000px){#transactions-table>tbody>tr>td.trans-date,#transactions-table>thead>tr>th.trans-date{width:110px}}@media (max-width:680px){#transactions-table>tbody>tr>td{white-space:normal!important;overflow-wrap:break-word}#transactions-table>tbody>tr>td,#transactions-table>thead>tr>th{padding-top:6px!important;padding-bottom:6px!important}#transactions-table>tbody>tr>td.trans-date,#transactions-table>thead>tr>th.trans-date{width:72px}#transactions-table>tbody>tr>td.trans-status>i,#transactions-table>tbody>tr>td.trans-type-icon>img{margin-top:2px}}@media (max-width:530px){.trans-nar{display:none}}@media (max-width:480px){#transactions-table>thead>tr>th{font-size:11px}#transactions-table>tbody>tr>td.trans-status,#transactions-table>thead>tr>th.trans-status{width:22px!important}#transactions-table>tbody>tr>td.trans-date,#transactions-table>thead>tr>th.trans-date{width:60px}#transactions-table>tbody>tr>td.trans-type-icon,#transactions-table>thead>tr>th.trans-type-icon{width:28px}}body.fixed-header{overflow-y:hidden}#network-alert{display:flex;height:100%;align-items:center;color:#f84444;font-weight:700}#transaction-info dl{width:100%;overflow:hidden;padding:0;margin:0}#transaction-info dt{float:left;width:22%;padding:0;margin:0}#transaction-info dd{overflow-wrap:anywhere;word-break:break-word;float:left;width:78%;padding:0;margin:0}#transaction-info a{overflow-wrap:anywhere;word-break:break-word}#chaindata-table>thead{display:table;width:100%;table-layout:fixed}#chaindata-table>tbody{display:block;height:50vh;overflow:auto}#chaindata-table>tbody>tr{display:table;width:100%;table-layout:fixed}#chaindata-table tbody>tr>td{vertical-align:middle}@media (min-width:531px){#chaindata-table tbody>tr>td:first-child,#chaindata-table thead>tr>th:first-child{display:none!important}}@media (max-width:530px){#chaindata-table tbody>tr>td:first-child,#chaindata-table thead>tr>th:first-child{width:32px;display:table-cell;padding-left:7px!important}#chaindata-table tbody>tr>td:nth-child(2),#chaindata-table thead>tr>th:nth-child(2){padding-left:0!important}} diff --git a/src/qt/res/assets/fonts/Montserrat/Montserrat-Bold.ttf b/src/qt/res/assets/fonts/Montserrat/Montserrat-Bold.ttf deleted file mode 100644 index b4c25f4498..0000000000 Binary files a/src/qt/res/assets/fonts/Montserrat/Montserrat-Bold.ttf and /dev/null differ diff --git a/src/qt/res/assets/fonts/Montserrat/Montserrat-Regular.ttf b/src/qt/res/assets/fonts/Montserrat/Montserrat-Regular.ttf deleted file mode 100644 index 7648363a03..0000000000 Binary files a/src/qt/res/assets/fonts/Montserrat/Montserrat-Regular.ttf and /dev/null differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.svg b/src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.svg deleted file mode 100644 index 82f5ddb942..0000000000 --- a/src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.svg +++ /dev/null @@ -1,1462 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.woff b/src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.woff deleted file mode 100644 index b71667eeaa..0000000000 Binary files a/src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.woff and /dev/null differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.woff2 b/src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.woff2 deleted file mode 100644 index f662810230..0000000000 Binary files a/src/qt/res/assets/fonts/Montserrat/montserrat-bold-webfont.woff2 and /dev/null differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.svg b/src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.svg deleted file mode 100644 index 66cffa363d..0000000000 --- a/src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.svg +++ /dev/null @@ -1,1317 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.woff b/src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.woff deleted file mode 100644 index 2c19fee7ca..0000000000 Binary files a/src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.woff and /dev/null differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.woff2 b/src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.woff2 deleted file mode 100644 index 449f8f1128..0000000000 Binary files a/src/qt/res/assets/fonts/Montserrat/montserrat-regular-webfont.woff2 and /dev/null differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-300.woff b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-300.woff new file mode 100644 index 0000000000..dfa5a04a04 Binary files /dev/null and b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-300.woff differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-300.woff2 b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-300.woff2 new file mode 100644 index 0000000000..6b1bddce92 Binary files /dev/null and b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-300.woff2 differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-500.woff b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-500.woff new file mode 100644 index 0000000000..1c83d8518d Binary files /dev/null and b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-500.woff differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-500.woff2 b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-500.woff2 new file mode 100644 index 0000000000..9dc5c7f158 Binary files /dev/null and b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-500.woff2 differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-700.woff b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-700.woff new file mode 100644 index 0000000000..8573760b18 Binary files /dev/null and b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-700.woff differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-700.woff2 b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-700.woff2 new file mode 100644 index 0000000000..3d0b4099c5 Binary files /dev/null and b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-700.woff2 differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-regular.woff b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-regular.woff new file mode 100644 index 0000000000..676a065e24 Binary files /dev/null and b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-regular.woff differ diff --git a/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-regular.woff2 b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-regular.woff2 new file mode 100644 index 0000000000..70788c2732 Binary files /dev/null and b/src/qt/res/assets/fonts/Montserrat/montserrat-v14-latin-regular.woff2 differ diff --git a/src/qt/res/assets/fonts/OpenSans/OpenSans-Bold.ttf b/src/qt/res/assets/fonts/OpenSans/OpenSans-Bold.ttf deleted file mode 100644 index fd79d43bea..0000000000 Binary files a/src/qt/res/assets/fonts/OpenSans/OpenSans-Bold.ttf and /dev/null differ diff --git a/src/qt/res/assets/fonts/OpenSans/OpenSans-BoldItalic.ttf b/src/qt/res/assets/fonts/OpenSans/OpenSans-BoldItalic.ttf deleted file mode 100644 index 9bc800958a..0000000000 Binary files a/src/qt/res/assets/fonts/OpenSans/OpenSans-BoldItalic.ttf and /dev/null differ diff --git a/src/qt/res/assets/fonts/OpenSans/OpenSans-Italic.ttf b/src/qt/res/assets/fonts/OpenSans/OpenSans-Italic.ttf deleted file mode 100644 index c90da48ff3..0000000000 Binary files a/src/qt/res/assets/fonts/OpenSans/OpenSans-Italic.ttf and /dev/null differ diff --git a/src/qt/res/assets/fonts/OpenSans/OpenSans-Light.ttf b/src/qt/res/assets/fonts/OpenSans/OpenSans-Light.ttf deleted file mode 100644 index 0d381897da..0000000000 Binary files a/src/qt/res/assets/fonts/OpenSans/OpenSans-Light.ttf and /dev/null differ diff --git a/src/qt/res/assets/fonts/OpenSans/OpenSans-LightItalic.ttf b/src/qt/res/assets/fonts/OpenSans/OpenSans-LightItalic.ttf deleted file mode 100644 index 68299c4bc6..0000000000 Binary files a/src/qt/res/assets/fonts/OpenSans/OpenSans-LightItalic.ttf and /dev/null differ diff --git a/src/qt/res/assets/fonts/OpenSans/OpenSans-Regular.ttf b/src/qt/res/assets/fonts/OpenSans/OpenSans-Regular.ttf deleted file mode 100644 index db433349b7..0000000000 Binary files a/src/qt/res/assets/fonts/OpenSans/OpenSans-Regular.ttf and /dev/null differ diff --git a/src/qt/res/css/fonts/chinese_s.otf b/src/qt/res/assets/fonts/chinese_s.otf similarity index 100% rename from src/qt/res/css/fonts/chinese_s.otf rename to src/qt/res/assets/fonts/chinese_s.otf diff --git a/src/qt/res/css/fonts/chinese_t.otf b/src/qt/res/assets/fonts/chinese_t.otf similarity index 100% rename from src/qt/res/css/fonts/chinese_t.otf rename to src/qt/res/assets/fonts/chinese_t.otf diff --git a/src/qt/res/css/fonts/japanese.otf b/src/qt/res/assets/fonts/japanese.otf similarity index 100% rename from src/qt/res/css/fonts/japanese.otf rename to src/qt/res/assets/fonts/japanese.otf diff --git a/src/qt/res/assets/icons/chat_bubble.png b/src/qt/res/assets/icons/chat_bubble.png deleted file mode 100644 index ee44ebc3ee..0000000000 Binary files a/src/qt/res/assets/icons/chat_bubble.png and /dev/null differ diff --git a/src/qt/res/assets/icons/connect_0.png b/src/qt/res/assets/icons/connect_0.png deleted file mode 100644 index 812c87221c..0000000000 Binary files a/src/qt/res/assets/icons/connect_0.png and /dev/null differ diff --git a/src/qt/res/assets/icons/connect_1.png b/src/qt/res/assets/icons/connect_1.png deleted file mode 100644 index 86cfe5a94b..0000000000 Binary files a/src/qt/res/assets/icons/connect_1.png and /dev/null differ diff --git a/src/qt/res/assets/icons/connect_2.png b/src/qt/res/assets/icons/connect_2.png deleted file mode 100644 index 3a35e1e923..0000000000 Binary files a/src/qt/res/assets/icons/connect_2.png and /dev/null differ diff --git a/src/qt/res/assets/icons/connect_3.png b/src/qt/res/assets/icons/connect_3.png deleted file mode 100644 index e9df703a8f..0000000000 Binary files a/src/qt/res/assets/icons/connect_3.png and /dev/null differ diff --git a/src/qt/res/assets/icons/connect_4.png b/src/qt/res/assets/icons/connect_4.png deleted file mode 100644 index 50bcba2520..0000000000 Binary files a/src/qt/res/assets/icons/connect_4.png and /dev/null differ diff --git a/src/qt/res/assets/icons/connect_5.png b/src/qt/res/assets/icons/connect_5.png deleted file mode 100644 index eaac0a6916..0000000000 Binary files a/src/qt/res/assets/icons/connect_5.png and /dev/null differ diff --git a/src/qt/res/assets/icons/connect_6.png b/src/qt/res/assets/icons/connect_6.png deleted file mode 100644 index c148da3e61..0000000000 Binary files a/src/qt/res/assets/icons/connect_6.png and /dev/null differ diff --git a/src/qt/res/assets/icons/delete.png b/src/qt/res/assets/icons/delete.png deleted file mode 100644 index eb968130c5..0000000000 Binary files a/src/qt/res/assets/icons/delete.png and /dev/null differ diff --git a/src/qt/res/assets/icons/i2p.png b/src/qt/res/assets/icons/i2p.png deleted file mode 100644 index e31964c7c7..0000000000 Binary files a/src/qt/res/assets/icons/i2p.png and /dev/null differ diff --git a/src/qt/res/assets/icons/i2p_off.png b/src/qt/res/assets/icons/i2p_off.png deleted file mode 100644 index 533bd42c2c..0000000000 Binary files a/src/qt/res/assets/icons/i2p_off.png and /dev/null differ diff --git a/src/qt/res/assets/icons/lock.png b/src/qt/res/assets/icons/lock.png deleted file mode 100644 index 4aea72cbef..0000000000 Binary files a/src/qt/res/assets/icons/lock.png and /dev/null differ diff --git a/src/qt/res/assets/icons/lock_off.png b/src/qt/res/assets/icons/lock_off.png deleted file mode 100644 index f0af4d98c0..0000000000 Binary files a/src/qt/res/assets/icons/lock_off.png and /dev/null differ diff --git a/src/qt/res/assets/icons/lock_stake.png b/src/qt/res/assets/icons/lock_stake.png deleted file mode 100644 index dc62968346..0000000000 Binary files a/src/qt/res/assets/icons/lock_stake.png and /dev/null differ diff --git a/src/qt/res/assets/icons/notsynced.png b/src/qt/res/assets/icons/notsynced.png deleted file mode 100644 index 812c87221c..0000000000 Binary files a/src/qt/res/assets/icons/notsynced.png and /dev/null differ diff --git a/src/qt/res/assets/icons/qrcode.png b/src/qt/res/assets/icons/qrcode.png new file mode 100644 index 0000000000..1739316798 Binary files /dev/null and b/src/qt/res/assets/icons/qrcode.png differ diff --git a/src/qt/res/assets/icons/search_icon.png b/src/qt/res/assets/icons/search_icon.png deleted file mode 100644 index 9606eceef2..0000000000 Binary files a/src/qt/res/assets/icons/search_icon.png and /dev/null differ diff --git a/src/qt/res/assets/icons/shadow.icns b/src/qt/res/assets/icons/shadow.icns deleted file mode 100644 index 0ad0613408..0000000000 Binary files a/src/qt/res/assets/icons/shadow.icns and /dev/null differ diff --git a/src/qt/res/assets/icons/shadowcoin-128.png b/src/qt/res/assets/icons/shadowcoin-128.png deleted file mode 100644 index a4767a4a6e..0000000000 Binary files a/src/qt/res/assets/icons/shadowcoin-128.png and /dev/null differ diff --git a/src/qt/res/assets/icons/shadowcoin-16.png b/src/qt/res/assets/icons/shadowcoin-16.png deleted file mode 100644 index ea3a0c082f..0000000000 Binary files a/src/qt/res/assets/icons/shadowcoin-16.png and /dev/null differ diff --git a/src/qt/res/assets/icons/shadowcoin-32.png b/src/qt/res/assets/icons/shadowcoin-32.png deleted file mode 100644 index 713b1f8b59..0000000000 Binary files a/src/qt/res/assets/icons/shadowcoin-32.png and /dev/null differ diff --git a/src/qt/res/assets/icons/shadowcoin-48.png b/src/qt/res/assets/icons/shadowcoin-48.png deleted file mode 100644 index 6cb833e6c3..0000000000 Binary files a/src/qt/res/assets/icons/shadowcoin-48.png and /dev/null differ diff --git a/src/qt/res/assets/icons/shadowcoin-64.png b/src/qt/res/assets/icons/shadowcoin-64.png deleted file mode 100644 index 57f37b6423..0000000000 Binary files a/src/qt/res/assets/icons/shadowcoin-64.png and /dev/null differ diff --git a/src/qt/res/assets/icons/shadowcoin-80.png b/src/qt/res/assets/icons/shadowcoin-80.png deleted file mode 100644 index f1606e9445..0000000000 Binary files a/src/qt/res/assets/icons/shadowcoin-80.png and /dev/null differ diff --git a/src/qt/res/assets/icons/shadowcoin.ico b/src/qt/res/assets/icons/shadowcoin.ico deleted file mode 100644 index 38d2b16801..0000000000 Binary files a/src/qt/res/assets/icons/shadowcoin.ico and /dev/null differ diff --git a/src/qt/res/assets/icons/shadowcoin.png b/src/qt/res/assets/icons/shadowcoin.png deleted file mode 100644 index 7f7415717e..0000000000 Binary files a/src/qt/res/assets/icons/shadowcoin.png and /dev/null differ diff --git a/src/qt/res/assets/icons/shadowcoin_icon.png b/src/qt/res/assets/icons/shadowcoin_icon.png deleted file mode 100644 index 9641aa5490..0000000000 Binary files a/src/qt/res/assets/icons/shadowcoin_icon.png and /dev/null differ diff --git a/src/qt/res/assets/icons/staking.png b/src/qt/res/assets/icons/staking.png deleted file mode 100644 index 12c2c5f2f5..0000000000 Binary files a/src/qt/res/assets/icons/staking.png and /dev/null differ diff --git a/src/qt/res/assets/icons/staking_off.png b/src/qt/res/assets/icons/staking_off.png deleted file mode 100644 index ba81bff0f6..0000000000 Binary files a/src/qt/res/assets/icons/staking_off.png and /dev/null differ diff --git a/src/qt/res/assets/icons/synced.png b/src/qt/res/assets/icons/synced.png deleted file mode 100644 index 8dc0be76e4..0000000000 Binary files a/src/qt/res/assets/icons/synced.png and /dev/null differ diff --git a/src/qt/res/assets/icons/syncing.gif b/src/qt/res/assets/icons/syncing.gif deleted file mode 100644 index a3cf6a67ad..0000000000 Binary files a/src/qt/res/assets/icons/syncing.gif and /dev/null differ diff --git a/src/qt/res/assets/icons/syncing_static.gif b/src/qt/res/assets/icons/syncing_static.gif deleted file mode 100644 index 08228e4681..0000000000 Binary files a/src/qt/res/assets/icons/syncing_static.gif and /dev/null differ diff --git a/src/qt/res/assets/icons/tor.png b/src/qt/res/assets/icons/tor.png deleted file mode 100644 index c8d86cbdea..0000000000 Binary files a/src/qt/res/assets/icons/tor.png and /dev/null differ diff --git a/src/qt/res/assets/icons/tor_off.png b/src/qt/res/assets/icons/tor_off.png deleted file mode 100644 index b5e9b980e3..0000000000 Binary files a/src/qt/res/assets/icons/tor_off.png and /dev/null differ diff --git a/src/qt/res/assets/icons/transaction0.png b/src/qt/res/assets/icons/transaction0.png deleted file mode 100644 index 4c7a02dfac..0000000000 Binary files a/src/qt/res/assets/icons/transaction0.png and /dev/null differ diff --git a/src/qt/res/assets/icons/tx_mined.png b/src/qt/res/assets/icons/tx_mined.png deleted file mode 100644 index ce3071083c..0000000000 Binary files a/src/qt/res/assets/icons/tx_mined.png and /dev/null differ diff --git a/src/qt/res/assets/img/about.png b/src/qt/res/assets/img/about.png deleted file mode 100644 index 72edc28e47..0000000000 Binary files a/src/qt/res/assets/img/about.png and /dev/null differ diff --git a/src/qt/res/assets/img/avatars/kewde.png b/src/qt/res/assets/img/avatars/kewde.png deleted file mode 100644 index 05a91ff430..0000000000 Binary files a/src/qt/res/assets/img/avatars/kewde.png and /dev/null differ diff --git a/src/qt/res/assets/img/avatars/litebit.png b/src/qt/res/assets/img/avatars/litebit.png deleted file mode 100644 index 8f2ed5aed4..0000000000 Binary files a/src/qt/res/assets/img/avatars/litebit.png and /dev/null differ diff --git a/src/qt/res/assets/img/linear_gradient.png b/src/qt/res/assets/img/linear_gradient.png deleted file mode 100644 index 240ea9cbb8..0000000000 Binary files a/src/qt/res/assets/img/linear_gradient.png and /dev/null differ diff --git a/src/qt/res/assets/img/progress/progress-bar-danger.svg b/src/qt/res/assets/img/progress/progress-bar-danger.svg index 501db3204d..e69eefd66e 100644 --- a/src/qt/res/assets/img/progress/progress-bar-danger.svg +++ b/src/qt/res/assets/img/progress/progress-bar-danger.svg @@ -3,7 +3,7 @@ - + diff --git a/src/qt/res/assets/img/progress/progress-bar-master.svg b/src/qt/res/assets/img/progress/progress-bar-master.svg index 700e9f6d6c..9bc493c00e 100644 --- a/src/qt/res/assets/img/progress/progress-bar-master.svg +++ b/src/qt/res/assets/img/progress/progress-bar-master.svg @@ -3,7 +3,7 @@ - + diff --git a/src/qt/res/assets/img/progress/progress-bar-success.svg b/src/qt/res/assets/img/progress/progress-bar-success.svg index d964c62c5c..711b97c0b3 100644 --- a/src/qt/res/assets/img/progress/progress-bar-success.svg +++ b/src/qt/res/assets/img/progress/progress-bar-success.svg @@ -3,7 +3,7 @@ diff --git a/src/qt/res/assets/img/progress/progress-circle-complete.svg b/src/qt/res/assets/img/progress/progress-circle-complete.svg index 1fc3b197b4..5313a0fd25 100644 --- a/src/qt/res/assets/img/progress/progress-circle-complete.svg +++ b/src/qt/res/assets/img/progress/progress-circle-complete.svg @@ -4,7 +4,7 @@ viewBox="-280 372 50 50" style="enable-background:new -280 372 50 50;" xml:space="preserve"> diff --git a/src/qt/res/assets/img/progress/progress-circle-danger.svg b/src/qt/res/assets/img/progress/progress-circle-danger.svg index 8e3c397683..9ce496073c 100644 --- a/src/qt/res/assets/img/progress/progress-circle-danger.svg +++ b/src/qt/res/assets/img/progress/progress-circle-danger.svg @@ -6,7 +6,7 @@ - + diff --git a/src/qt/res/assets/img/progress/progress-circle-lg-master.svg b/src/qt/res/assets/img/progress/progress-circle-lg-master.svg index 33f36bb276..111f5a446e 100644 --- a/src/qt/res/assets/img/progress/progress-circle-lg-master.svg +++ b/src/qt/res/assets/img/progress/progress-circle-lg-master.svg @@ -3,7 +3,7 @@ - + diff --git a/src/qt/res/assets/img/progress/progress-circle-master.svg b/src/qt/res/assets/img/progress/progress-circle-master.svg index 8ef1a34250..d8da9310f0 100644 --- a/src/qt/res/assets/img/progress/progress-circle-master.svg +++ b/src/qt/res/assets/img/progress/progress-circle-master.svg @@ -6,7 +6,7 @@ - + diff --git a/src/qt/res/assets/img/progress/progress-circle-success.svg b/src/qt/res/assets/img/progress/progress-circle-success.svg index 8ef1a34250..d8da9310f0 100644 --- a/src/qt/res/assets/img/progress/progress-circle-success.svg +++ b/src/qt/res/assets/img/progress/progress-circle-success.svg @@ -6,7 +6,7 @@ - + diff --git a/src/qt/res/assets/img/sdc-vertical.png b/src/qt/res/assets/img/sdc-vertical.png deleted file mode 100644 index be7b0dcff1..0000000000 Binary files a/src/qt/res/assets/img/sdc-vertical.png and /dev/null differ diff --git a/src/qt/res/assets/img/shadow_logo.png b/src/qt/res/assets/img/shadow_logo.png deleted file mode 100644 index ff63c4f863..0000000000 Binary files a/src/qt/res/assets/img/shadow_logo.png and /dev/null differ diff --git a/src/qt/res/assets/img/shoppingcart.png b/src/qt/res/assets/img/shoppingcart.png deleted file mode 100644 index 8ecd90f183..0000000000 Binary files a/src/qt/res/assets/img/shoppingcart.png and /dev/null differ diff --git a/src/qt/res/assets/img/splash.png b/src/qt/res/assets/img/splash.png deleted file mode 100644 index 4a51bd78a0..0000000000 Binary files a/src/qt/res/assets/img/splash.png and /dev/null differ diff --git a/src/qt/res/assets/js/navigation.min.js b/src/qt/res/assets/js/navigation.min.js index 45914cc6ec..f87568d156 100644 --- a/src/qt/res/assets/js/navigation.min.js +++ b/src/qt/res/assets/js/navigation.min.js @@ -1 +1 @@ -!function(e){function t(t){var i=e(e(this).attr("href"));a=e("#navitems li.selected a"),e("#navitems li").removeClass("selected"),e(this).parent("li").addClass("selected"),1==i.length&&"article"==i[0].tagName.toLowerCase()&&(t.preventDefault(),e(window).scrollTop(0),e("article").hide(),i.show(),e(document).resize())}var a=null;e(function(){e("#navlink").on("click",function(){e("#layout").toggleClass("active")}),e(document).ready(function(){e("#navitems a[href='#overview']").trigger("click")}),e("#navitems a, .navigate a").on("click",t)})}(jQuery); +!function(e){function t(t){var a=e(e(this).attr("href"));e("#navitems li.selected a"),e("#navitems li").removeClass("selected"),e(this).parent("li").addClass("selected"),1==a.length&&"article"==a[0].tagName.toLowerCase()&&(t.preventDefault(),e(window).scrollTop(0),e("article").hide(),a.show(),e(document).resize())}e((function(){e("#navlink").on("click",(function(){e("#layout").toggleClass("active")})),e(document).ready((function(){e("#navitems a[href='#overview']").trigger("click")})),e("#navitems a, .navigate a").on("click",t)}))}(jQuery); diff --git a/src/qt/res/assets/js/pages/send.min.js b/src/qt/res/assets/js/pages/send.min.js index c6bcfaf35c..e9e779f0f6 100644 --- a/src/qt/res/assets/js/pages/send.min.js +++ b/src/qt/res/assets/js/pages/send.min.js @@ -1 +1 @@ -var sendPage=function(n){"use strict";function t(){i(!1),c(),p(),n("#send [name^=transaction_type]").on("change",p),n("#send [data-toggle=tab]").on("shown.bs.tab",p)}function e(t){return t?2==t.at&&""===n("#send-balance .pay_to").val()&&(n("#send-balance .pay_to").val(t.address).change(),n("#send-balance .pay_to").data("address",t.address)):n("#send-balance .pay_to").val(n("#send-balance .pay_to").data("address")).change(),!0}function i(t){void 0===t&&(t=n(".show-coin-control .btn-cons").hasClass("active")),n("#coincontrol").toggle(t)}function o(){if(n("#coincontrol").is(":visible")){for(var t=0,e=0;e0),t>0?(n("#coincontrol_quantity").text(t),n("#coincontrol_amount").text(unit.format(e)),n("#coincontrol_fee").text(unit.format(i)),n("#coincontrol_afterfee").text(unit.format(o)),n("#coincontrol_bytes").text("~"+a).css("color",a>1e4?"red":null),n("#coincontrol_priority").text(r).css("color",0==r.indexOf("low")?"red":null),n("#coincontrol_low").text(c).toggle(l).css("color","yes"==c?"red":null),n("#coincontrol_change").text(unit.format(l)).toggle(l),n("label[for='coincontrol_low'],label[for='coincontrol_change']").toggle(l)):(n("#coincontrol_quantity").text(""),n("#coincontrol_amount").text(""),n("#coincontrol_fee").text(""),n("#coincontrol_afterfee").text(""),n("#coincontrol_bytes").text(""),n("#coincontrol_priority").text(""),n("#coincontrol_low").text(""),n("#coincontrol_change").text("")))}function r(){return n("div.recipient").length}function c(){n("#recipients").append(((0==r()?"":"
")+_.replace(/recipient-template/g,"recipient[count]")).replace(/\[count\]/g,++f)),n("#recipient"+f.toString()+" [data-title]").tooltip(),n("#amount"+f.toString()).on("keydown",unit.keydown).on("paste",unit.paste),bridge.userAction(["clearRecipients"])}function l(t,e,i,o){s(),n("#recipient"+f.toString()+" .pay_to").val(t).change(),n("#recipient"+f.toString()+" .pay_to_label").val(e).change(),n("#recipient"+f.toString()+" .amount").val(o).change(),n("#recipient"+f.toString()+" .narration").val(i).change(),n("[href=#send]").click()}function s(){n("#recipients").html(""),n("#send-balance .amount").val("0").change(),c(),e()}function u(t){r()<=1?s():(t=n(t),0==t.next("hr").remove().length&&t.prev("hr").remove(),t.remove(),n("#tooltip").remove())}function d(){function t(t,e){void 0!=e&&n.isNumeric(e)||(e=1);var i=chainDataPage.anonOutputs[t];return i?Math.min(i&&i.owned_mature>=e&&i.system_mature>=o&&i.system_mature,a):0}function e(n,i,o){switch(n){case 0:return o;case 2:return t(1*i,2)||e(++n,i,o);case 6:return Math.min(t(5*i,1),t(1*i,1))||e(++n,i,o);case 7:return Math.min(t(4*i,1),t(3*i,1))||e(++n,i,o);case 8:return Math.min(t(5*i,1),t(3*i,1))||e(++n,i,o);case 9:return Math.min(t(5*i,1),t(4*i,1))||e(++n,i,o);default:if(10==n)return t(i/2,2);o=Math.max(t(n*i,1),t(1*i,n))||e(1==n?3:++n,i,o)}return o}function i(){var i=1,r=0,c=n(this).find(".amount"),l=unit.parse(c.val(),n(this).find(".unit").val());for(n("[name=err"+c.attr("id")+"]").remove();l>=i&&a>=o;){r=parseInt(l/i%10);try{a=e(r,i,a)}catch(n){console.log(n)}finally{a||(a=t(r*i)),i*=10}}if(aNot enough system and or owned outputs for the requested amount. Only "+a+" anonymous outputs exist for coin value: "+unit.format(r*(i/10),n(this).find(".unit"))+""),c.on("change",function(){n("[name=err"+c.attr("id")+"]").remove()}),n("#tx_ringsize").show(),void n("#suggest_ring_size").show()}chainDataPage.updateAnonOutputs();var o=bridge.info.options.MinRingSize||3,a=bridge.info.options.MaxRingSize||32;n("#send-balance").is(":visible")?n("#send-balance").each(i):n("div.recipient").each(i),n("#ring_size").val(a)}function g(){function t(){var t=n(this).find(".pay_to"),o=n(this).find(".amount");if(i=i&&invalid(t,bridge.validateAddress(t.val())),0!=unit.parse(o.val())||invalid(o)||(i=!1),!i||!bridge.addRecipient(t.val(),n(this).find(".pay_to_label").val(),n(this).find(".narration").val(),unit.parse(o.val(),n(this).find(".unit").val()),e,n("#ring_size").val()))return!1}var e=v(),i=!0;bridge.userAction(["clearRecipients"]),bridge.info.options.AutoRingSize&&e>1&&d(),n("#send-balance").is(":visible")?n("#send-balance").each(t):n("div.recipient").each(t),i&&bridge.sendCoins(n("#coincontrol").is(":visible"),n("#change_address").val())&&s()}function p(t){var i=n("#send-main").is(":visible"),o=n("[name=transaction_type_from]:checked").val();t&&t.target!==n("input#to_account_public")[0]&&t.target!==n("input#to_account_private")[0]&&n("input[name=transaction_type_to][value="+(i?o:"public"===o?"private":"public")+"]").prop("checked",!0);var a=n("[name=transaction_type_to ]:checked").val(),r=v();n("#spend_sdc").toggle("public"===o),n("#spend_shadow").toggle("private"===o),n("#to_sdc").toggle("public"===a),n("#to_shadow").toggle("private"===a),n("#to_balance").toggle(!i),n(".show-coin-control").toggle(r<1),sendPage.toggleCoinControl(r<0);var c=n(".show-advanced-controls .btn-cons").hasClass("active");n(".advanced_controls").toggle(c),n("#tx_ringsize,#suggest_ring_size").toggle((!bridge.info.options||1!=bridge.info.options.AutoRingSize)&&r>1&&c),n("#add_recipient").toggle(n("#send-main").is(":visible")&&c),c||i||e()}function v(){var t="public"===n("[name=transaction_type_from]:checked").val(),e="public"===n("[name=transaction_type_to ]:checked").val();return t?+!e:2+e}var _=n("#recipient-template")[0].outerHTML,f=0;return n("#recipient-template").remove(),{init:t,initSendBalance:e,toggleCoinControl:i,addRecipient:c,addRecipientDetail:l,clearRecipients:s,removeRecipient:u,suggestRingSize:d,sendCoins:g,updateCoinControl:o,updateCoinControlInfo:a,changeTransactionType:p}}(jQuery);$(sendPage.init); +var sendPage;$((function(){sendPage=function(){function e(e){return e?2==e.at&&""===$("#send-balance .pay_to").val()&&($("#send-balance .pay_to").val(e.address).change(),$("#send-balance .pay_to").data("address",e.address)):$("#send-balance .pay_to").val($("#send-balance .pay_to").data("address")).change(),!0}function t(e){void 0===e&&(e=$(".show-coin-control .btn-cons").hasClass("active")),$("#coincontrol").toggle(e)}function n(){return $("div.recipient").length}function o(){$("#recipients").append(((0==n()?"":"
")+s.replace(/recipient-template/g,"recipient[count]")).replace(/\[count\]/g,++p)),$("#recipient"+p.toString()+" [data-title]").tooltip(),$("#amount"+p.toString()).on("keydown",unit.keydown).on("paste",unit.paste),"undefined"!=typeof bridge&&bridge.userAction(["clearRecipients"])}function i(){$("#recipients").html(""),$("#send-balance .amount").val("0").change(),o(),e(),a()}function a(){numOfRecipients=0}function c(e,t){function n(){numOfRecipients++;var e=$(this).find(".pay_to"),t=$(this).find(".amount"),n=$(this).find(".narration").val();void 0===n&&(n=""),bridge.addRecipient(e.val(),$(this).find(".pay_to_label").val(),n,unit.parse(t.val(),$(this).find(".unit").val()),o)}if(void 0!==e)e&&i();else if(void 0!==t)t&&(numOfRecipients--,0==numOfRecipients&&bridge.sendCoins($("#coincontrol").is(":visible"),$("#change_address").val()));else{var o=l();bridge.userAction(["clearRecipients"]),$("#send-balance").is(":visible")?$("#send-balance").each(n):$("div.recipient").each(n)}}function r(t){var n=$("#send-main").is(":visible"),o=$("[name=transaction_type_from]:checked").val(),i=$("[name=transaction_type_to]:checked").val();console.log("OPEN"),console.log(o),t&&(t.target!==$("input#to_account_public")[0]&&t.target!==$("input#to_account_private")[0]?(i=n?o:"public"===o?"private":"public",$("input[name=transaction_type_to][value="+i+"]").prop("checked",!0)):n||(o="public"===i?"private":"public",$("input[name=transaction_type_from][value="+o+"]").prop("checked",!0)));var a=$("[name=transaction_type_to ]:checked").val(),c=l();$("#spend_spec").toggle("public"===o),$("#spend_spectre").toggle("private"===o),$("#tx_ringsize").toggle("private"===o),$("#to_spec").toggle("public"===a),$("#to_spectre").toggle("private"===a),$("#to_balance").toggle(!n),$(".show-coin-control").toggle(c<1),sendPage.toggleCoinControl(c<0),$(".advanced_controls").toggle(!n),$("#add_recipient").toggle($("#send-main").hasClass("active")),n||e()}function l(){var e="public"===$("[name=transaction_type_from]:checked").val(),t="public"===$("[name=transaction_type_to ]:checked").val();return e?+!t:2+t}var s=$("#recipient-template")[0].outerHTML,p=0;return $("#recipient-template").remove(),{init:function(){t(!1),o(),r(),$(".advanced_controls").toggle(!1),$("#send [name^=transaction_type]").on("change",r),$("#send [data-toggle=tab]").on("shown.bs.tab",r)},initSendBalance:e,toggleCoinControl:t,addRecipient:o,addRecipientDetail:function(e,t,n,o){i(),$("[href=#send]").click(),$("[href=#send-main]").click();let a=e.length<76?"public":"private";$("input[name=transaction_type_from][value="+a+"]").prop("checked",!0).change(),$("#recipient"+p.toString()+" .pay_to").val(e).change(),$("#recipient"+p.toString()+" .pay_to_label").val(t).change(),$("#recipient"+p.toString()+" .amount").val(o/1e8).change(),$("#recipient"+p.toString()+" .narration").val(n).change(),document.querySelector("#send-main").scrollIntoView({behavior:"smooth"})},clearRecipients:i,removeRecipient:function(e){n()<=1?i():(0==(e=$(e)).next("hr").remove().length&&e.prev("hr").remove(),e.remove(),$("#tooltip").remove())},sendCoins:function(){a(),c()},update:c,updateCoinControl:function(){if($("#coincontrol").is(":visible")){for(var e=0,t=0;t0),e>0?($("#coincontrol_quantity").text(e),$("#coincontrol_amount").text(unit.format(t)),$("#coincontrol_fee").text(unit.format(n)),$("#coincontrol_afterfee").text(unit.format(o)),$("#coincontrol_bytes").text("~"+i).css("color",i>1e4?"red":null),$("#coincontrol_priority").text(a).css("color",0==a.indexOf("low")?"red":null),$("#coincontrol_low").text(c).toggle(r).css("color","yes"==c?"red":null),$("#coincontrol_change").text(unit.format(r)).toggle(r),$("label[for='coincontrol_low'],label[for='coincontrol_change']").toggle(r)):($("#coincontrol_quantity").text(""),$("#coincontrol_amount").text(""),$("#coincontrol_fee").text(""),$("#coincontrol_afterfee").text(""),$("#coincontrol_bytes").text(""),$("#coincontrol_priority").text(""),$("#coincontrol_low").text(""),$("#coincontrol_change").text("")))},changeTransactionType:r}}()})); diff --git a/src/qt/res/assets/js/qrcode.min.js b/src/qt/res/assets/js/qrcode.min.js index 3238f2152a..48b765baa6 100644 --- a/src/qt/res/assets/js/qrcode.min.js +++ b/src/qt/res/assets/js/qrcode.min.js @@ -1 +1 @@ -var showQRCode=function(a,r){function o(r,o){void 0!==r&&t.val(r),void 0!==o&&l.val(o),e.clear();var d="shadowcoin:"+t.val()+"?label="+l.val()+"&narration="+i.val()+"&amount="+unit.parse(a("#qramount").val(),a("#qrunit").val());n.text(d),e.makeCode(d)}var e=new r("qrcode",{colorDark:"#E51C39",colorLight:"#ffffff",correctLevel:r.CorrectLevel.H,width:220,height:220}),n=a("#qrcode-data"),t=a("#qraddress"),l=a("#qrlabel"),i=a("#qrnarration");return o}(jQuery,QRCode);jQuery(function(){$("#qramount").on("keydown",unit.keydown).on("paste",unit.paste)}); +var showQRCode;$((function(){var a=new QRCode("qrcode",{colorDark:"#282829",colorLight:"#ffffff",correctLevel:QRCode.CorrectLevel.H,width:220,height:220}),o=$("#qrcode-data"),e=$("#qraddress"),r=$("#qrlabel"),t=$("#qrnarration");showQRCode=function(n,l){void 0!==n&&e.val(n),void 0!==l&&r.val(l),a.clear();var d=encodeURI("alias:"+e.val()+"?label="+r.val()+"&narration="+t.val()+"&amount="+unit.format(unit.parse($("#qramount").val(),$("#qrunit").val()),0));o.text(d),a.makeCode(d)},$("#qramount").on("keydown",unit.keydown).on("paste",unit.paste)})); diff --git a/src/qt/res/assets/js/shadow.min.js b/src/qt/res/assets/js/shadow.min.js deleted file mode 100644 index a94497e87f..0000000000 --- a/src/qt/res/assets/js/shadow.min.js +++ /dev/null @@ -1,2 +0,0 @@ -function invalid(e,t){return t===!0?e.css("background","").css("color",""):e.css("background","#E51C39").css("color","white"),1==t}function updateValue(e){function t(t){var s=$(".newval");0!==s.length&&e.html(a.replace(n,s.val().trim()))}var a=e.html(),n=void 0!==e.parent("td").data("label")?e.parent("td").data("label"):void 0!==e.parent("td").data("value")?e.parent("td").data("value"):void 0!==e.data("label")?e.data("label"):void 0!==e.data("value")?e.data("value"):e.text(),s=e.parents(".selected").find(".address"),o=e.parents(".selected").find(".addresstype");s=s.data("value")?s.data("value"):s.text(),1===o.length&&(o=o.data("value")?o.data("value"):o.text()),"Group"===o&&n.replace("group_",""),e.html(''),$(".newval").focus().on("contextmenu",function(e){e.stopPropagation()}).keyup(function(e){13==e.keyCode&&t(e)}),$(document).one("click",t)}function updateValueChat(e,t){var a=e.data("value"),n=contacts[t];return void 0!=n&&(e.html(''),$("#chat-header .new_chat_value").focus(),$("#chat-header .new_chat_value").on("contextmenu",function(e){e.stopPropagation()}),$("#chat-header .new_chat_value").keypress(function(t){if(13==t.which){t.preventDefault();var a=$("#chat-header .new_chat_value");if(void 0==a||void 0===a.val())return!1;var n=a.val().trim();if(void 0==n)return!1;if(0===n.length)return!1;e.html(n),contacts[current_key].label=n,$("#chat-header").data("value",n),$("#contact-"+current_key+" .contact-info .contact-name").text(n),$("#contact-book-"+current_key+" .contact-info .contact-name").text(n)}}),$("#chat-header .new_chat_value").click(function(e){e.stopPropagation()}),void $(document).one("click",function(){var t=$("#chat-header .new_chat_value");if(void 0===typeof t||void 0===t.val())return!1;var a=t.val().trim();return void 0!=a&&(e.html(a),contacts[current_key].label=a,$("#chat-header").data("value",a),$("#contact-"+current_key+" .contact-info .contact-name").text(a),void $("#contact-book-"+current_key+" .contact-info .contact-name").text(a))}))}function connectSignals(){bridge.emitPaste.connect(this,pasteValue),bridge.emitTransactions.connect(this,appendTransactions),bridge.emitAddresses.connect(this,appendAddresses),bridge.emitMessages.connect(this,appendMessages),bridge.emitMessage.connect(this,appendMessage),bridge.emitCoinControlUpdate.connect(sendPage,"updateCoinControlInfo"),bridge.triggerElement.connect(this,triggerElement),bridge.emitReceipient.connect(sendPage,"addRecipientDetail"),bridge.networkAlert.connect(this,networkAlert),optionsModel.displayUnitChanged.connect(unit,"setType"),optionsModel.reserveBalanceChanged.connect(overviewPage,"updateReserved"),optionsModel.rowsPerPageChanged.connect(this,"updateRowsPerPage"),optionsModel.visibleTransactionsChanged.connect(this,"visibleTransactions"),walletModel.encryptionStatusChanged.connect(overviewPage,"encryptionStatusChanged"),walletModel.balanceChanged.connect(overviewPage,"updateBalance"),overviewPage.clientInfo(),optionsPage.update(),chainDataPage.updateAnonOutputs(),translateStrings()}function triggerElement(e,t){$(e).trigger(t)}function updateRowsPerPage(e){$(".footable").each(function(){var t=$(this);t.hasClass("footable-lookup")||(t.data().pageSize=e,t.trigger("footable_initialize"))})}function pasteValue(e){$(pasteTo).val(e)}function paste(e){pasteTo=e,bridge.paste(),0!=pasteTo.indexOf("#pay_to")&&"#change_address"!=pasteTo||base58.check(pasteTo)}function copy(e,t){var a="";try{a=$(e).text()}catch(e){}void 0!=a&&void 0==t||(a="copy"==t?e:$(e).attr(t)),bridge.copy(a)}function networkAlert(e){$("#network-alert span").text(e).toggle(""!==e)}function openContextMenu(e){contextMenus.indexOf(e)===-1&&contextMenus.push(e),void 0!==e.isOpen&&1===e.isOpen&&(e.isOpen=0,e.close&&e.close());for(var t=0;t"+e.label+""):$("#message-from-address option[value="+e.address+"]").text(e.label),initialAddress&&($("#message-from-address").prepend(""),$(".user-name").text(Name),$(".user-address").text(e.address),initialAddress=!1));var o=4==e.at||0===e.label.lastIndexOf("group_",0),r="S"==e.type;o&&(e.at=4,e.label=e.label.replace("group_",""),e.label_value=e.label_value.replace("group_",""),r=!0);var i="n/a"!==e.pubkey;if(r&&i&&(createContact(e.label,e.address,o,!0),appendContact(e.address,!1,!0)),!o&&r&&i){if(0==n.length){var l=" "+e.label+" "+e.address+" ";$("#invite-modal-tbody").append(l)}else $("#invite-modal-"+e.address+" .label2").text(e.label);if(0==s.length){var l=" "+e.label+" "+e.address+" ";$("#group-modal-tbody").append(l)}else $("#group-modal-"+e.address+" .label2").text(e.label)}0==t.length?($(a+" .footable tbody").append(" "+e.label+" "+e.address+" "+e.pubkey+" "+(4==e.at?"Group":3==e.at?"BIP32":2==e.at?"Stealth":"Normal")+""),$("#"+e.address).selection("tr").find(".editable").on("dblclick",function(e){e.stopPropagation(),updateValue($(this))}).attr("data-title","Double click to edit").tooltip()):($("#"+e.address+" .label2").data("value",e.label_value).text(e.label),$("#"+e.address+" .pubkey").text(e.pubkey))});$("#addressbook .footable,#receive .footable").trigger("footable_setup_paging")}function addressLookup(e,t,a){function n(){$("#address-lookup-filter").val($("#address-lookup-address-filter").val()+" "+$("#address-lookup-address-type").val()),o.trigger("footable_filter",{filter:$("#address-lookup-filter").val()})}var s=$((t?"#receive":"#addressbook")+" table.footable > tbody").html(),o=$("#address-lookup-table");o.children("tbody").html(s),o.trigger("footable_initialize"),o.data("footable-filter").clearFilter(),$("#address-lookup-table > tbody tr").selection().on("dblclick",function(){var t=e.split(",");$("#"+t[0]).val($(this).attr("id").trim()).change(),void 0!==t[1]&&$("#"+t[1]).val($(this).attr("lbl").trim()).text($(this).attr("lbl").trim()).change(),$("#address-lookup-modal").modal("hide")}),$("#address-lookup-address-filter").on("input",function(){""==$("#lookup-address-filter").val()&&o.data("footable-filter").clearFilter(),n()}),$("#address-lookup-address-type").change(function(){""==$("#address-lookup-address-type").val()&&o.data("footable-filter").clearFilter(),n()}),a&&($("#address-lookup-address-type").val(a),n())}function transactionPageInit(){var e=[{name:"Copy Amount",fun:function(){copy("#transactions .footable .selected .amount","data-value")}},{name:"Copy transaction ID",fun:function(){copy("#transactions .footable .selected","id")}},{name:"Edit label",fun:function(){$("#transactions .footable .selected .editable").dblclick()}},{name:"Show transaction details",fun:function(){$("#transactions .footable .selected").dblclick()}}];$("#transactions .footable tbody").on("contextmenu",function(e){$(e.target).closest("tr").click()}).contextMenu(e,{triggerOn:"contextmenu",sizeStyle:"content"}),$("#transactions .footable").on("footable_paging",function(e){var t=filteredTransactions.slice(e.page*e.size);t=t.slice(0,e.size);var a=$("#transactions .footable tbody");a.html(""),delete e.ft.pageInfo.pages[e.page],e.ft.pageInfo.pages[e.page]=t.map(function(e){return e.html=formatTransaction(e),a.append(e.html),$("#"+e.id)[0]}),e.result=!0,bindTransactionTableEvents()}).on("footable_create_pages",function(e){var t=$("#transactions .footable");$(t.data("filter")).val()||(filteredTransactions=Transactions);var a=t.data("sorted"),n=1==t.find("th.footable-sorted").length,s="numeric";switch(a){case 0:a="d";break;case 2:a="t_l",s="alpha";break;case 3:a="ad",s="alpha";break;case 4:a="n",s="alpha";break;case 5:a="am";break;default:a="c"}s=e.ft.options.sorters[s],filteredTransactions.sort(function(e,t){return n?s(e[a],t[a]):s(t[a],e[a])}),delete e.ft.pageInfo.pages,e.ft.pageInfo.pages=[];var o=Math.ceil(filteredTransactions.length/e.ft.pageInfo.pageSize),r=[];if(o>0){for(var i=0;i "+e.d_s+"
"+e.t_l+" "+e.ad_d+" "+e.n+" "+e.am_d+" "}function visibleTransactions(e){"*"!==e[0]&&(Transactions=Transactions.filter(function(e){return this.some(function(e){return e==this},e.t_l)},e))}function bindTransactionTableEvents(){$("#transactions .footable tbody tr").tooltip().on("click",function(){$(this).addClass("selected").siblings("tr").removeClass("selected")}).on("dblclick",function(e){$(this).attr("href","#transaction-info-modal"),$("#transaction-info-modal").appendTo("body").modal("show"),$("#transaction-info").html(bridge.transactionDetails($(this).attr("id"))),$(this).click(),$(this).off("click"),$(this).on("click",function(){$(this).addClass("selected").siblings("tr").removeClass("selected")})}).find(".editable").on("dblclick",function(e){e.stopPropagation(),e.preventDefault(),updateValue($(this))}).attr("data-title","Double click to edit").tooltip()}function appendTransactions(e){if("string"==typeof e){if("[]"==e)return;e=JSON.parse(e.replace(/,\]$/,"]"))}1==e.length&&e[0].id==-1||(e.sort(function(e,t){return e.d=parseInt(e.d),t.d=parseInt(t.d),t.d-e.d}),Transactions=Transactions.filter(function(e){return 0==this.some(function(e){return e.id==this.id},e)},e).concat(e),overviewPage.recent(e.slice(0,7)),$("#transactions .footable").trigger("footable_redraw"))}function shadowChatInit(){var e=[{name:"Send Shadow",fun:function(){clearRecipients(),$("#pay_to0").val($("#contact-list .selected .contact-address").text()),$("#navpanel [href=#send]").click()}},{name:"Copy Address",fun:function(){copy("#contact-list .selected .contact-address")}},{name:"Private Message",fun:function(){$("#message-text").focus()}}];$("#contact-list").on("contextmenu",function(e){$(e.target).closest("li").click()}).contextMenu(e,{triggerOn:"contextmenu",sizeStyle:"content"}),e=[{name:"Copy Selected",fun:function(){var e=$("#message-text")[0];"undefined"!=typeof e.selectionStart&©(e.value.substring(e.selectionStart,e.selectionEnd),"copy")}},{name:"Paste",fun:function(){paste("#pasteTo");var e=$("#message-text")[0];"undefined"!=typeof e.selectionStart?e.value=e.value.substring(e.selectionStart,0)+$("#pasteTo").val()+e.value.substring(e.selectionStart):e.value+=$("#pasteTo").val()}}],$("#message-text").contextMenu(e,{triggerOn:"contextmenu",sizeStyle:"content"}),$("#message-text").keypress(function(e){if(13==e.which&&!e.shiftKey){if(e.preventDefault(),""==$("#message-text").val())return 0;removeNotificationCount(),sendMessage()}}),$("#messages").selection().on("click",function(e){""!==current_key&&removeNotificationCount(current_key)}),$("#contact-list").on("mouseover",function(){contactScroll.refresh()}),$("#contact-group-list").on("mouseover",function(){contactGroupScroll.refresh()}),$("#contact-book-list").on("mouseover",function(){contactBookScroll.refresh()})}function appendMessages(e,t){if(contact_list=$("#contact-list ul"),contact_group_list=$("#contact-group-list ul"),t){for(var a in contacts)contacts[a].messages.length>0&&(contacts[a].messages=[]);$("#chat-menu-link .details").hide(),contact_list.html(""),contact_group_list.html(""),$("#contact-list").removeClass("in-conversation"),$("#contact-group-list").removeClass("in-conversation"),$(".contact-discussion ul").html(""),$(".user-notifications").hide(),$("#message-count").text(0),messagesScroller.scrollTo(0,0),contactScroll.scrollTo(0,0),contactGroupScroll.scrollTo(0,0),contactBookScroll.scrollTo(0,0),$("#invite-group-btn").hide(),$("#leave-group-btn").hide()}if("[]"!=e){var n=/([\u0000-\u001f])|([\u007f-\u009f])|([\u00ad])|([\u0600-\u0604])|([\u070f])|([\u17b4-\u17b5])|([\u200c-\u200f])|([\u2028-\u202f])|([\u2060-\u206f])|([\ufeff])|([\ufff0-\uffff])+/g;e=JSON.parse(e.replace(/,\]$/,"]").replace(n,"")),e.forEach(function(e){appendMessage(e.id,e.type,e.sent_date,e.received_date,e.label_value,e.label,e.labelTo,e.to_address,e.from_address,e.read,e.message,t)}),t&&openConversation(contacts[current_key].address,!1),$(contacts[current_key].group?"#contact-group-list":"#contact-list").addClass("in-conversation")}}function appendMessage(e,t,a,n,s,o,r,i,l,c,d,u){var p,f="S"==t?i:l,v="S"==t?l:i,g="S"==t?"(no label)"==r?v:r:"(no label)"==o?f:o,m=f,b="S"==t?v:f,h=!1;if(0===r.lastIndexOf("group_",0)?(p=r.replace("group_",""),h=!0,m=v):0===s.lastIndexOf("group_",0)?(p=s.replace("group_",""),h=!0,m=f,b=v):p=g,0===d.lastIndexOf("/invite",0)&&d.length>=60){var k=d.match(/[V79e][1-9A-HJ-NP-Za-km-z]{50,51}/g),y=d.substring(61,d.length).replace(/[^A-Za-z0-9\s!?]/g,"");if(null!=k){if(t="R")return c||addInvite(k,y,e),!1;(t="S")&&(d="An invite for group "+y+" has been sent.")}else 0==y.length?y=f+"_"+String(k).substring(1,5):null==k&&(d="The group invitation was a malconfigured private key.")}createContact(p,m,h),h&&(createContact(g,f,!1,!1),addContactToGroup(b,m));var x=contacts[m];0==$.grep(x.messages,function(t){return t.id==e}).length&&(x.messages.push({id:e,them:f,self:v,label_msg:g,key_msg:b,group:h,message:d,type:t,sent:a,received:n,read:c}),x.messages.sort(function(e,t){return e.received-t.received}),appendContact(m,!1),current_key!=m||u||openConversation(m,!1),"R"==t&&0==c&&addNotificationCount(m,1)),""==current_key&&(current_key=m)}function createContact(e,t,a,n){var s=contacts[t];void 0==contacts[t]&&(contacts[t]={},s=contacts[t],s.key=t,s.label=e,s.address=t,s.group=a,s.addressbook=void 0!=n&&n,s.title=a?"Untrusted":s.addressbook?"Verified":"Unverified",s.avatar_type=0,s.avatar="",s.messages=[],a&&(s.contacts=[]))}function addContactToGroup(e,t){return void 0!=contacts[t]&&(void 0!=contacts[e]&&(!existsContactInGroup(e,t)&&(contacts[t].contacts.push(e),!0)))}function existsContact(e){return void 0!=contacts[e]}function existsContactInGroup(e,t){return!contacts[t].contacts.indexOf(e)==-1}function updateContactTitle(e){return!!existsContact(e)&&(!contacts[e].group&&(!!isStaticVerified(e)&&(contacts[e].title=verified_list[e].title,!0)))}function updateContact(e,t,a,n){n=n!==!1;var s=contacts[t];void 0!==s&&(void 0!==a&&t!=a||(a=""),s.messages.forEach(function(n){"R"!==n.type||n.them!==t&&n.them!==a||(n.label_msg=e)}),""===a?(contacts[t].label=e,$("#contact-book-"+t+" .contact-info .contact-name").text(e),$("#contact-"+t+" .contact-info .contact-name").text(e)):($("#contact-book-"+a+" .contact-info .contact-name").text(e),$("#contact-"+a+" .contact-info .contact-name").text(e)),openConversation&&openConversation(t,!0))}function appendContact(e,t,a){var n=a?"contact-book-":"contact-",s=$("#"+n+e),o=contacts[e];if(0===s.length){var r="";void 0===o.messages[0]||a||(r=o.messages[0].message);var i="
  • "+(o.group&&a?"":"")+o.label+" "+(a?o.address:r)+" 0
  • ";a?(contact_book_list.append(i),$("#"+n+e).find(".delete").hide()):o.group?contact_group_list.append(i):contact_list.append(i),s=$("#"+n+e).selection("li").on("dblclick",function(t){openConversation(e,!0),prependContact(e)}).on("click",function(t){openConversation(e,!0)}),a&&s.on("click",function(e){}),s.find(".delete").on("click",function(e){e.stopPropagation()}),s.find(".message-notifications").hide()}else void 0===o.messages||a||$("#"+n+e+" .contact-info .contact-message").text(o.messages[o.messages.length-1].message);t&&openConversation(e,!1)}function getContactUsername(e){var t;return"object"==typeof verified_list[e]?verified_list[e].username:(t=bridge.getAddressLabel(e),"string"==typeof t?t.replace("group_",""):e)}function isStaticVerified(e){return"object"==typeof verified_list[e]}function allowCustomAvatar(e){return"object"==typeof verified_list[e]&&"boolean"==typeof verified_list[e].custom_avatar&&verified_list[e].custom_avatar}function getIconTitle(e){return"unverified"==e?"fa fa-cross ":"verified"==e?"fa fa-check ":"contributor"==e?"fa fa-cog ":"shadowteam"==e?"fa fa-code ":""}function addNotificationCount(e,t){if(void 0==contacts[e])return!1;var a=$("#contact-"+e).find(".message-notifications"),n=a.html();a.text(parseInt(n)+parseInt(t)).show(),$("#chat-menu-link .details").show(),$(".user-notifications").show(),$("#message-count").text(parseInt($("#message-count").text())+1).show(),$("#contact-"+e).prependTo(contacts[e].group?"#contact-group-list ul":"#contact-list ul")}function removeNotificationCount(e){void 0==e&&""!==current_key&&(e=current_key),messagesScroller.refresh();var t=contacts[e];if(void 0==t)return!1;var a=$("#contact-"+e).find(".message-notifications"),n=a.html();if(0==a.text())return!1;a.text(0),a.hide();var s=$("#message-count"),o=parseInt(s.text())-n;if(s.text(o),0==o?(s.hide(),$("#chat-menu-link .details").hide()):s.show(),0==t.messages.length)return 0;for(var r=t.messages.length;r--;)t.messages[r].read||bridge.markMessageAsRead(t.messages[r].id)}function openConversation(e,t){function a(e){return micromarkdown.parse(emojione.toImage(e)).replace(/(.+)<\/a>/g,'$1')}t&&$("#chat-menu-link").click(),current_key=e;var n=$(".contact-discussion ul"),s=contacts[e];n.html("");var o=s.group;o?$("#invite-group-btn").show():($("#invite-group-btn").hide(),$("#leave-group-btn").hide()),$("#chat-header").text(s.label).addClass("editable"),$("#chat-header").data("value",s.label),$("#chat-header").off(),$("#chat-header").on("dblclick",function(e){e.stopPropagation(),updateValueChat($(this),s.key)}).attr("data-title","Double click to edit").tooltip();var r,i=!1;t&&removeNotificationCount(s.key),s.messages.forEach(function(e,t){if(t>0&&combineMessages(r,e))return $("#"+r.id).attr("id",e.id),$("#"+e.id+" .message-text").append(a(e.message)),void(r=e);r=e;var l=new Date(1e3*e.sent),c=new Date(1e3*e.received);addAvatar(e.them);var d=e.label_msg==e.key_msg?" data-toggle=\"modal\" data-target=\"#add-address-modal\" onclick=\"clearSendAddress(); $('#add-rcv-address').hide(); $('#add-send-address').show(); $('#new-send-address').val('"+e.key_msg+"')\" ":"";n.append("
  • "+getAvatar("S"==e.type?e.self:e.them)+" "+e.label_msg+" "+((l.getHours()<10?"0":"")+l.getHours()+":"+(l.getMinutes()<10?"0":"")+l.getMinutes()+":"+(l.getSeconds()<10?"0":"")+l.getSeconds())+" "+a(e.message)+"
  • "),$("#"+e.id+" .timestamp").attr("data-title","Sent: "+l.toLocaleString()+"\n Received: "+c.toLocaleString()).tooltip().find(".message-text").tooltip(),insertTitleHTML(e.id,e.key_msg),"S"==e.type?($("#"+e.id+" .user-name").attr("data-title",""+e.self).tooltip(),e.group&&!i&&($("#message-from-address").val(e.self),$("#message-to-address").val(e.them))):$("#"+e.id+" .user-name").attr("data-title",""+e.them).tooltip(),!i&&s.messages.length>0?o?"R"==e.type&&$("#message-to-address").val(e.self):($("#message-from-address").val(e.self),$("#message-to-address").val(e.them)):0==s.messages.length&&($(".contact-discussion ul").html("
  • Starting Conversation with "+s.label+" - "+s.address+"
  • "),$("#message-to-address").val(s.address))}),setTimeout(function(){scrollMessages()},200)}function insertTitleHTML(e,t){if(!existsContact(t))return!1;var a=(contacts[t],contacts[t].title.toLowerCase());$("#"+e+" .title").addClass(getIconTitle(a)+a+"-mark"),$("#"+e+" .title").hover(function(){$(this).text(" "+a)},function(){$(this).text("")})}function confirmConversationOpenLink(){return confirm("Are you sure you want to open this link?\n\nIt will leak your IP address and other browser metadata, the least we can do is advice you to copy the link and open it in a _Tor Browser_ instead.\n\n You can disable this message in options.")}function combineMessages(e,t){return e.type==t.type&&("R"==t.type&&e.them==t.them||"S"==t.type&&e.self==t.self)}function addRandomAvatar(e){return!!existsContact(e)&&(contacts[e].avatar_type=1,void(contacts[e].avatar=generateRandomAvatar(e)))}function generateRandomAvatar(e){var t=new jsSHA("SHA-512","TEXT");t.update(e);var a=t.getHash("HEX"),n=new Identicon(a,40).toString();return''}function addCustomAvatar(e){contacts[e].avatar_type=2,contacts[e].avatar=''}function addAvatar(e){allowCustomAvatar(e)?addCustomAvatar(e):addRandomAvatar(e)}function getAvatar(e){return allowCustomAvatar(e)?'':existsContact(e)?contacts[e].avatar:generateRandomAvatar(e)}function prependContact(e){var t=contacts[e];t.group?($("#contact-group-list").addClass("in-conversation"),$("#contact-"+e).prependTo($("#contact-group-list ul"))):($("#contact-list").addClass("in-conversation"),$("#contact-"+e).prependTo($("#contact-list ul")))}function createGroupChat(){var e=$("#new-group-name").val();if(""==e)return!1;$("#filter-new-group").text(""),$("#new-group-modal").modal("hide");var t=bridge.createGroupChat(e);inviteGroupChat(t),createContact(e,t,!0),appendContact(t,!0,!1)}function addInvite(e,t,a){return 0==$("#invite-"+e+"-"+a).length&&void $("#group-invite-list").append("")}function deleteInvite(e,t){bridge.deleteMessage(t),$("#invite-"+e+"-"+t).html("")}function acceptInvite(e,t,a){deleteInvite(e,a);var n=bridge.joinGroupChat(e,t);return"false"!==n&&(updateContact(t,n),createContact(t,n,!0),void appendContact(n,!0,!1))}function inviteGroupChat(e){var t=[],a="#invite-modal-tbody";void 0!=e?a="group-modal-tbody":e=current_key,$(a+" tr").each(function(){var e=$(this).find(".address").text(),a=$(this).find(".invite .checkbox").is(":checked");a&&(t.push(e),$(this).find(".invite .checkbox").attr("checked",!1))});var n=[];t.length>0&&(n=bridge.inviteGroupChat(e,t,$("#message-from-address").val())),n.length>0}function leaveGroupChat(){var e=bridge.leaveGroupChat(current_key);return e}function openInviteModal(){if(0==current_key.length)return!1;var e=bridge.getAddressLabel(current_key).replace("group_","");$("#existing-group-name").val(e)}function submitInviteModal(){inviteGroupChat(),$("#invite-to-group-modal").hide()}function scrollMessages(){messagesScroller.refresh();var e=function(){var e=messagesScroller.y;messagesScroller.refresh(),e!==messagesScroller.maxScrollY&&messagesScroller.scrollTo(0,messagesScroller.maxScrollY,100)};setTimeout(e,100)}function newConversation(){var e=$("#new-contact-address").val(),t=$("#new-contact-name").val();return createContact(t,e,!1),result=bridge.newAddress($("#new-contact-name").val(),0,$("#new-contact-address").val(),!0),""===result&&"Duplicate Address."!==bridge.lastAddressError()?void $("#new-contact-address").css("background","#E51C39").css("color","white"):($("#new-contact-address").css("background","").css("color",""),bridge.setPubKey($("#new-contact-address").val(),$("#new-contact-pubkey").val()),bridge.updateAddressLabel($("#new-contact-address").val(),$("#new-contact-name").val()),$("#new-contact-modal").modal("hide"),$("#message-to-address").val($("#new-contact-address").val()),$("#message-text").focus(),$("#new-contact-address").val(""),$("#new-contact-name").val(""),$("#new-contact-pubkey").val(""),$("#contact-list ul li").removeClass("selected"),$("#contact-list").addClass("in-conversation"),$("#contact-group-list ul li").removeClass("selected"),$("#contact-group-list").addClass("in-conversation"),void setTimeout(function(){openConversation(e,!0),$(".contact-discussion ul").html("
  • Starting Conversation with "+e+" - "+t+"
  • ")},1e3))}function sendMessage(){$("#remove-on-send").remove(),bridge.sendMessage(current_key,$("#message-text").val(),$("#message-from-address").val())&&$("#message-text").val("")}function deleteMessages(e,t){var a=contacts[e];if(!confirm("Are you sure you want to delete "+(void 0==t?"these messages?":"this message?")))return!1;var n=$("#message-count");parseInt(n.text());removeNotificationCount(e),void 0==t&&(current_key="");for(var s=0;s div");backbtnjs='$("#key-options").show(); $("#wizards").hide();',fwdbtnjs='gotoWizard("new-key-wizard", 1);',$("#"+e).prepend(""),$("#"+e).prepend(""),t.each(function(e){$(this).addClass("step"+e),$(this).hide(),$("#backWiz").hide()})}function gotoWizard(section,step,runStepJS){var sections=$("#wizards > div");if(validateJS=$("#"+section+" .step"+(step-1)).attr("validateJS"),runStepJS&&void 0!==validateJS){var valid=eval(validateJS);if(!valid)return!1}sections.each(function(e){$(this).hide()});var steps=$("#"+section+" > div[class^=step]"),gotoStep=step;null==gotoStep&&(gotoStep=0),0==gotoStep?($("#"+section+" #backWiz").attr("onclick",'$(".wizardback").hide(); $("#wizards").show();'),$("#"+section+" #fwdWiz").attr("onclick",'$(".wizardback").hide(); gotoWizard("'+section+'", 1, true);'),$("#backWiz").hide()):($("#"+section+" #backWiz").attr("onclick",'gotoWizard("'+section+'", '+(gotoStep-1)+" , false);"),$("#"+section+" #fwdWiz").attr("onclick",'gotoWizard("'+section+'", '+(gotoStep+1)+" , true);")),endWiz=$("#"+section+" .step"+step).attr("endWiz"),void 0!==endWiz&&""!==endWiz&&$("#"+section+" #fwdWiz").attr("onclick",endWiz),steps.each(function(e){$(this).hide()}),$("#"+section).show(),stepJS=$("#"+section+" .step"+gotoStep).attr("stepJS"),runStepJS&&void 0!==stepJS&&eval(stepJS),$("#"+section+" .step"+gotoStep).fadeIn(0)}function dumpStrings(){function e(e){return'QT_TRANSLATE_NOOP("ShadowBridge", "'+e+'"),\n'}var t="";$(".translate").each(function(a){var n=e($(this).text().trim());t.indexOf(n)==-1&&(t+=n)}),$("[data-title]").each(function(a){var n=e($(this).attr("data-title").trim());t.indexOf(n)==-1&&(t+=n)}),console.log(t)}function translateStrings(){$(".translate").each(function(e){var t=$(this).text();$(this).text(t.replace(t,bridge.translateHtmlString(t.trim())))}),$("[data-title]").each(function(e){var t=$(this).attr("data-title");$(this).attr("data-title",t.replace(t,bridge.translateHtmlString(t.trim())))})}var breakpoint=906;$(function(){$(".footable,.footable-lookup").footable({breakpoints:{phone:480,tablet:700},delay:50}).on({footable_breakpoint:function(){},footable_row_expanded:function(e){var t=$(this).find(".editable");t.off("dblclick").on("dblclick",function(e){e.stopPropagation(),updateValue($(this))}).attr("data-title","Double click to edit").tooltip()}}),$(".editable").on("dblclick",function(e){e.stopPropagation(),updateValue($(this))}).attr("data-title","Double click to edit %column%"),window.onresize=function(e){window.innerWidth>breakpoint&&$("#layout").removeClass("active")},bridge&&$("[href='#about']").on("click",function(){bridge.userAction(["aboutClicked"])}),overviewPage.init(),receivePageInit(),transactionPageInit(),addressBookInit(),shadowChatInit(),chainDataPage.init(),walletManagementPage.init(),$(".footable > tbody tr").selection()}),$.fn.selection=function(e){return e||(e="tr"),this.on("click",function(){$(this).addClass("selected").siblings(e).removeClass("selected")})};var base58={base58Chars:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",check:function(e){for(var t=$(e),a=t.val(),n=0,s=a.length;n0&&(e*=Math.pow(10,n)),n>0&&fp.length>1){for(var s=fp[1].split("");s.length>1&&"0"==s[s.length-1];)s.pop();var o=parseInt(s.join(""));o>0&&(n-=s.length,n>0&&(o*=Math.pow(10,n)),e+=o)}return void 0==a?e:(a.data("value",e),void this.format(a,t))},mask:function(e){switch(e=void 0==e?this.type:parseInt(e)){case 1:return 5;case 2:return 2;case 3:return 0;default:return 8}},keydown:function(e){var t=e.which,a=$(e.target).siblings(".unit").val();if(190==t||110==t)return this.value.toString().indexOf(".")===-1&&0!=unit.mask(a)||e.preventDefault(),!0;if(e.shiftKey||!(t>=96&&t<=105||t>=48&&t<=57))8==t||9==t||17==t||46==t||45==t||t>=35&&t<=40||e.ctrlKey&&(65==t||67==t||86==t||88==t)||e.preventDefault();else{var n=this.selectionStart,s=this.value.indexOf(".");if("Range"!==document.getSelection().type&&n>s&&this.value.indexOf(".")!==-1&&this.value.length-1-s>=unit.mask(a)){if("0"==this.value[this.value.length-1]&&n span:first-child").text(a[0]),$("#total-big .cents").text(a[1])}if("stake"===e&&void 0!==t&&!isNaN(t)){0==t?$("#staking-big").addClass("not-staking"):$("#staking-big").removeClass("not-staking");var a=unit.format(t).split(".");$("#staking-big > span:first-child").text(a[0]),$("#staking-big .cents").text(a[1])}e=this[e],0==t?(e.html(""),e.parent("tr").hide()):(e.text(unit.format(t)),e.parent("tr").show())},recent:function(e){for(var t=0;t
    "+unit.format(e.am)+" "+unit.display+"
    "+e.d_s+"
    "},a=e.id.substring(0,17);if(0==$("#"+a).attr("data-title",e.tt).length){for(var n=$("#recenttxns tr"),s=t(e),o=!1,r=0;rparseInt(i.find(".overview_date").data("value"))){i.before(s),o=!0;break}}for(o||$("#recenttxns").append(s),n=$("#recenttxns tr");n.length>8;)$("#recenttxns tr:last").remove(),n=$("#recenttxns tr")}},clientInfo:function(){$("#version").text(bridge.info.build.replace(/\-[\w\d]*$/,"")),$("#clientinfo").attr("data-title","Build Desc: "+bridge.info.build+"\nBuild Date: "+bridge.info.date).tooltip()},encryptionStatusChanged:function(e){switch(e){case 0:case 1:case 2:}}},optionsPage={init:function(){},update:function(){function e(e){e=$(this);var t=e.prop("checked"),a=e.data("linked");if(a){a=a.split(" ");for(var n=0;n");for(var i=0;i"+o[r][i]+"")}else n.append(""+o[r]+"")}n.is(":checkbox")?(n.prop("checked",s===!0||"true"===s),n.off("change"),n.on("change",e),n.change()):n.is("select[multiple]")&&"*"===s?n.find("option").attr("selected",!0):n.val(s),n.one("change",function(){$("#options-ok,#options-apply").removeClass("disabled")})}else a.indexOf("opt")==-1&&console.log("Option element not available for %s",a)}},save:function(){var e=bridge.info.options,t={};for(var a in e){var n=$("#opt"+a),s=e[a],o=!1;null!=s&&"false"!=s||(s=!1),0!=n.length&&(n.is(":checkbox")?o=n.prop("checked"):n.is("select[multiple]")?(o=n.val(),null===o&&(o="*")):o=n.val(),s!=o&&s.toString()!==o.toString()&&(t[a]=o))}$.isEmptyObject(t)||(bridge.userAction({optionsChanged:t}),optionsPage.update(),t.hasOwnProperty("AutoRingSize")&&changeTxnType())}},Name="You",initialAddress=!0,Transactions=[],filteredTransactions=[],contacts={},contact_list,contact_group_list,contact_book_list,current_key="",verified_list={"sdcdev-slack":{username:"sdcdev-slack",title:"Shadowteam",custom_avatar:!1},SR46wGPK5sGwT9qymRNTVtF9ExHHvVuDXQ:{username:"crz",title:"Shadowteam",custom_avatar:!1},SVY9s4CySAXjECDUwvMHNM6boAZeYuxgJE:{username:"kewde",title:"Shadowteam",custom_avatar:!0},dasource:{username:"dasource",title:"Shadowteam",custom_avatar:!1},SNLYNVwWQNgPqxND5iWyRfnGbEPnvSGVLw:{username:"ffmad",title:"Shadowteam",custom_avatar:!1},STWYshQBdzk47swrp2S77jHLxjrNAWUNdq:{username:"ludx",title:"Shadowteam",custom_avatar:!1},"edu-online":{username:"edu-online",title:"Shadowteam",custom_avatar:!1},arcanum:{username:"arcanum",title:"Shadowteam",custom_avatar:!1},SQqVGXi9Hi1CJv7Qy4gjvxyVinemTx8nK7:{username:"allien",title:"Shadowteam",custom_avatar:!1},sebsebastian:{username:"sebsebastian",title:"Shadowteam",custom_avatar:!1},SPXkEj2Daa9un5uzKHFNpseAfirsygCAhq:{username:"litebit",title:"Contributor",custom_avatar:!0},SZxH6HNYAh9iNaGLdoHYjSN2qWvfjahrF1:{username:"6ea86b96",title:"Verified"},ShKkz1b6XD4ASgTP9BAh8C3zi4Z9HsCH5F:{username:"dadon",title:"Verified"},ScrvNCexThmfctYcLZLwzFCcaH6znW69sj:{username:"dzarmush",title:"Verified"},SZ8bMXxkBELD6s5jSsBRLCwvkXibwRWw4q:{username:"GRE3N",title:"Verified"},SPAfq2i8cP1SMcaTT8nMTxa2Fg9LNNJSyk:{username:"NGS",title:"Verified"},SWUBRJUdgck6d8tiM5hf4wEAAp3J8JyuQj:{username:"The-C-Word",title:"Verified"},SgyxAj1j2ebtecYAFu5McPyzZUqDX3UpBP:{username:"tintifax",title:"Verified"},SWG4eCfpsrFwB64owwrLjvDnyYkdCp2oPi:{username:"wwonka36",title:"Verified"}},contactScroll=new IScroll("#contact-list",{mouseWheel:!0,lockDirection:!0,scrollbars:!0,interactiveScrollbars:!0,scrollbars:"custom",scrollY:!0,scrollX:!1,preventDefaultException:{tagName:/^(INPUT|TEXTAREA|BUTTON|SELECT|P|SPAN)$/}}),contactGroupScroll=new IScroll("#contact-group-list",{mouseWheel:!0,lockDirection:!0,scrollbars:!0,interactiveScrollbars:!0,scrollbars:"custom",scrollY:!0,scrollX:!1,preventDefaultException:{tagName:/^(INPUT|TEXTAREA|BUTTON|SELECT|P|SPAN)$/}}),contactBookScroll=new IScroll("#contact-book-list",{mouseWheel:!0,lockDirection:!0,scrollbars:!0,interactiveScrollbars:!0,scrollbars:"custom",scrollY:!0,scrollX:!1,preventDefaultException:{tagName:/^(INPUT|TEXTAREA|BUTTON|SELECT|P|SPAN)$/}}),messagesScroller=new IScroll(".contact-discussion",{mouseWheel:!0,lockDirection:!0,scrollbars:!0,interactiveScrollbars:!0,scrollbars:"custom",scrollY:!0,scrollX:!1,preventDefaultException:{tagName:/^(INPUT|TEXTAREA|BUTTON|SELECT|P|SPAN)$/}}),chainDataPage={anonOutputs:{},init:function(){$("#show-own-outputs,#show-all-outputs").on("click",function(e){$(e.target).hide().siblings("a").show()}),$("#show-own-outputs").on("click",function(){$("#chaindata .footable tbody tr>td:first-child+td").each(function(){0==$(this).text()&&$(this).parents("tr").hide()})}),$("#show-all-outputs").on("click",function(){$("#chaindata .footable tbody tr:hidden").show()})},updateAnonOutputs:function(){chainDataPage.anonOutputs=bridge.listAnonOutputs();var e=$("#chaindata .footable tbody");e.html("");for(value in chainDataPage.anonOutputs){var t=chainDataPage.anonOutputs[value];e.append(" "+t.value_s+" "+t.owned_outputs+(t.owned_outputs==t.owned_mature?"":" ("+t.owned_mature+")")+" "+t.system_outputs+" ("+t.system_mature+") "+t.system_spends+" "+t.least_depth+" ")}$("#chaindata .footable").trigger("footable_initialize")}},blockExplorerPage={blockHeader:{},findBlock:function(e){if(""===e||null===e)blockExplorerPage.updateLatestBlocks();else{if(blockExplorerPage.foundBlock=bridge.findBlock(e),""!==blockExplorerPage.foundBlock.error_msg)return $("#latest-blocks-table > tbody").html(""),$("#block-txs-table > tbody").html(""),$("#block-txs-table").addClass("none"),alert(blockExplorerPage.foundBlock.error_msg),!1;var t=$("#latest-blocks-table > tbody");t.html("");var a=$("#block-txs-table > tbody");a.html(""),$("#block-txs-table").addClass("none"),t.append(" "+blockExplorerPage.foundBlock.block_hash+" "+blockExplorerPage.foundBlock.block_height+" "+blockExplorerPage.foundBlock.block_timestamp+" "+blockExplorerPage.foundBlock.block_transactions+" "),blockExplorerPage.prepareBlockTable()}},updateLatestBlocks:function(){blockExplorerPage.latestBlocks=bridge.listLatestBlocks();var e=$("#block-txs-table > tbody");e.html(""),$("#block-txs-table").addClass("none");var t=$("#latest-blocks-table > tbody");t.html("");for(value in blockExplorerPage.latestBlocks){var a=blockExplorerPage.latestBlocks[value];t.append(" "+a.block_hash+" "+a.block_height+" "+a.block_timestamp+" "+a.block_transactions+" ")}blockExplorerPage.prepareBlockTable()},prepareBlockTable:function(){$("#latest-blocks-table > tbody tr").selection().on("click",function(){var e=$(this).attr("data-value").trim();blockExplorerPage.blkTxns=bridge.listTransactionsForBlock(e);var t=$("#block-txs-table > tbody");t.html("");for(value in blockExplorerPage.blkTxns){var a=blockExplorerPage.blkTxns[value];t.append(" "+a.transaction_hash+" "+a.transaction_value+" ")}$("#block-txs-table").removeClass("none"),$("#block-txs-table > tbody tr").selection().on("dblclick",function(t){$("#blkexp-txn-modal").appendTo("body").modal("show"),selectedTxn=bridge.txnDetails(e,$(this).attr("data-value").trim()),""==selectedTxn.error_msg&&($("#txn-hash").html(selectedTxn.transaction_hash),$("#txn-size").html(selectedTxn.transaction_size),$("#txn-rcvtime").html(selectedTxn.transaction_rcv_time),$("#txn-minetime").html(selectedTxn.transaction_mined_time),$("#txn-blkhash").html(selectedTxn.transaction_block_hash),$("#txn-reward").html(selectedTxn.transaction_reward),$("#txn-confirmations").html(selectedTxn.transaction_confirmations),$("#txn-value").html(selectedTxn.transaction_value),$("#error-msg").html(selectedTxn.error_msg),selectedTxn.transaction_reward>0?($("#lbl-reward-or-fee").html("Reward"),$("#txn-reward").html(selectedTxn.transaction_reward)):($("#lbl-reward-or-fee").html("Fee"),$("#txn-reward").html(selectedTxn.transaction_reward*-1)));var a=$("#txn-detail-inputs > tbody");a.html("");for(value in selectedTxn.transaction_inputs){var n=selectedTxn.transaction_inputs[value];a.append(" "+n.input_source_address+" "+n.input_value+" ")}var s=$("#txn-detail-outputs > tbody");s.html("");for(value in selectedTxn.transaction_outputs){var o=selectedTxn.transaction_outputs[value];s.append(" "+o.output_source_address+" "+o.output_value+" ")}$(this).click().off("click").selection()}).find(".editable")}).on("dblclick",function(e){$("#block-info-modal").appendTo("body").modal("show"),selectedBlock=bridge.blockDetails($(this).attr("data-value").trim()),selectedBlock&&($("#blk-hash").html(selectedBlock.block_hash),$("#blk-numtx").html(selectedBlock.block_transactions),$("#blk-height").html(selectedBlock.block_height),$("#blk-type").html(selectedBlock.block_type),$("#blk-reward").html(selectedBlock.block_reward),$("#blk-timestamp").html(selectedBlock.block_timestamp),$("#blk-merkleroot").html(selectedBlock.block_merkle_root),$("#blk-prevblock").html(selectedBlock.block_prev_block),$("#blk-nextblock").html(selectedBlock.block_next_block),$("#blk-difficulty").html(selectedBlock.block_difficulty),$("#blk-bits").html(selectedBlock.block_bits),$("#blk-size").html(selectedBlock.block_size),$("#blk-version").html(selectedBlock.block_version),$("#blk-nonce").html(selectedBlock.block_nonce)),$(this).click().off("click").selection()}).find(".editable")}},walletManagementPage={init:function(){setupWizard("new-key-wizard"),setupWizard("recover-key-wizard"),setupWizard("open-key-wizard")},newMnemonic:function(){var e=bridge.getNewMnemonic($("#new-account-passphrase").val(),$("#new-account-language").val()),t=e.error_msg,a=e.mnemonic;""!==t?alert(t):$("#new-key-mnemonic").val(a)},compareMnemonics:function(){var e=$("#new-key-mnemonic").val().trim(),t=$("#validate-key-mnemonic").val().trim();return e==t?($("#validate-key-mnemonic").removeClass("red"),$("#validate-key-mnemonic").val(""),!0):($("#validate-key-mnemonic").addClass("red"),alert("The recovery phrase you provided does not match the recovery phrase that was generated earlier - please go back and check to make sure you have copied it down correctly."),!1)},gotoPage:function(e){$("#navitems a[href='#"+e+"']").trigger("click")},prepareAccountTable:function(){$("#extkey-account-table > tbody tr").selection().on("click",function(){var e=$("#extkey-table > tbody > tr");e.removeClass("selected")})},updateAccountList:function(){walletManagementPage.accountList=bridge.extKeyAccList();var e=$("#extkey-account-table > tbody");e.html("");for(value in walletManagementPage.accountList){var t=walletManagementPage.accountList[value];e.append(" "+t.id+" "+t.label+" "+t.created_at+' '+(void 0!==t.default_account?"":"")+" ")}walletManagementPage.prepareAccountTable()},prepareKeyTable:function(){$("#extkey-table > tbody tr").selection().on("click",function(){var e=$("#extkey-account-table > tbody > tr");e.removeClass("selected")})},updateKeyList:function(){walletManagementPage.keyList=bridge.extKeyList();var e=$("#extkey-table > tbody");e.html("");for(value in walletManagementPage.keyList){var t=walletManagementPage.keyList[value];e.append(" "+t.id+" "+t.label+" "+t.path+' '+(void 0!==t.current_master?"":"")+" ")}walletManagementPage.prepareKeyTable()},newKey:function(){if(result=bridge.importFromMnemonic($("#new-key-mnemonic").val().trim(),$("#new-account-passphrase").val().trim(),$("#new-account-label").val().trim(),$("#new-account-bip44").prop("checked")),""!==result.error_msg)return alert(result.error_msg),!1},recoverKey:function(){return result=bridge.importFromMnemonic($("#recover-key-mnemonic").val().trim(),$("#recover-passphrase").val().trim(),$("#recover-account-label").val().trim(),$("#recover-bip44").prop("checked"),1443657600),""===result.error_msg||(alert(result.error_msg),!1)},setMaster:function(){var e=$("#extkey-table tr.selected");return e.length?(selected=$("#extkey-table tr.selected").attr("data-value").trim(),void 0===selected||""===selected?(alert("Select a key from the table to set a Master."),!1):(result=bridge.extKeySetMaster(selected),""!==result.error_msg?(alert(result.error_msg),!1):void walletManagementPage.updateKeyList())):(alert("Please select a key to set it as master."),!1)},setDefault:function(){var e=$("#extkey-account-table tr.selected");return e.length?(selected=$("#extkey-account-table tr.selected").attr("data-value").trim(),void 0===selected||""===selected?(alert("Select an account from the table to set a default."),!1):(result=bridge.extKeySetDefault(selected),""!==result.error_msg?(alert(result.error_msg),!1):void walletManagementPage.updateAccountList())):(alert("Please select an account to set it as default."),!1)},changeActiveFlag:function(){var e=!1,t=$("#extkey-account-table tr.selected"),a=$("#extkey-table tr.selected");return t.length||a.length?(t.length?(selected=t.attr("data-value").trim(),active=t.attr("active-flag").trim(),e=!0):(selected=a.attr("data-value").trim(),active=a.attr("active-flag").trim()),void 0===selected||""===selected?(alert("Please select an account or key to change the active status."),!1):(result=bridge.extKeySetActive(selected,active),""!==result.error_msg?(alert(result.error_msg),!1):void(e?walletManagementPage.updateAccountList():walletManagementPage.updateKeyList()))):(alert("Please select an account or key to change the active status."),!1)}}; diff --git a/src/qt/res/assets/js/spectre.min.js b/src/qt/res/assets/js/spectre.min.js new file mode 100644 index 0000000000..53216d00d2 --- /dev/null +++ b/src/qt/res/assets/js/spectre.min.js @@ -0,0 +1 @@ +Number.prototype.countDecimals=function(){return Math.floor(this.valueOf())===this.valueOf()?0:this.toString().split(".")[1].length||0};var TYPE_PRIVATE="Private",TYPE_PUBLIC="Public",TYPE_ORPHAN="Orphan",TYPE_RECEIVED="Received",TYPE_SENT="Sent",TYPE_IN_OUT="In-Out",TYPE_STAKE="Stake",TYPE_DONATED="Donated",TYPE_CONTRIBUTED="Contributed",TYPE_OTHER="Other";function invalid(e,t){return!0===t?e.css("background","").css("color",""):e.css("background","#155b9a").css("color","white"),1==t}function updateValue(e){function t(t){var a=$(".newval");0!==a.length&&(e.html(a.val().trim()),e.parent("td").data("label",a.val().trim()))}$("#tooltip").remove();var a=void 0!==e.parent("td").data("label")&&e.parent("td").data("label").length>0?e.parent("td").data("label"):void 0!==e.data("value")&&e.data("value").length>0?e.data("value"):"",n=e.parents(".selected").find(".address"),s=e.parents(".selected").find(".addresstype");n=n.data("value")?n.data("value"):n.text(),1===s.length&&(s=s.data("value")?s.data("value"):s.text()),e.html(''),$(".newval").focus().on("contextmenu",(function(e){e.stopPropagation()})).keyup((function(e){13==e.keyCode&&t()})),$(document).one("click",t)}var connectSignalsAttempts=0;function connectSignals(){"undefined"!=typeof bridge&&"undefined"!=typeof optionsModel&&"undefined"!=typeof walletModel?(bridge.emitPaste.connect(pasteValue),bridge.emitTransactions.connect(appendTransactions),bridge.emitAddresses.connect(appendAddresses),bridge.emitCoinControlUpdate.connect(updateCoinControlInfo),bridge.triggerElement.connect(triggerElement),bridge.emitReceipient.connect(addRecipientDetail),bridge.networkAlert.connect(networkAlert),bridge.getAddressLabelResult.connect(getAddressLabelResult),bridge.newAddressResult.connect(newAddressResult),bridge.lastAddressErrorResult.connect(lastAddressErrorResult),bridge.getAddressLabelForSelectorResult.connect(getAddressLabelForSelectorResult),blockExplorerPage.connectSignals(),walletManagementPage.connectSignals(),optionsPage.connectSignals(),chainDataPage.connectSignals(),bridge.updateElement.connect(updateElement),bridge.validateAddressResult.connect(validateAddressResult),bridge.addRecipientResult.connect(addRecipientResult),bridge.sendCoinsResult.connect(sendCoinsResult),bridge.transactionDetailsResult.connect(transactionDetailsResult),optionsModel.displayUnitChanged.connect(unit_setType),optionsModel.reserveBalanceChanged.connect(updateReserved),optionsModel.rowsPerPageChanged.connect(updateRowsPerPage),optionsModel.visibleTransactionsChanged.connect(visibleTransactions),walletModel.encryptionStatusChanged.connect(encryptionStatusChanged),walletModel.balanceChanged.connect(updateBalance),overviewPage.clientInfo(),optionsPage.update(),chainDataPage.updateAnonOutputs(),sendPage.init(),translateStrings(),bridge.jsReady()):(connectSignalsAttempts+=1)<50?(console.log("retrying connecting signals in 200ms"),setTimeout(connectSignals,200)):(console.log("giving up on connecting signals."),console.log("bridge available: "+("undefined"!=typeof bridge)),console.log("optionsModel available: "+("undefined"!=typeof optionsModel)),console.log("walletModel available: "+("undefined"!=typeof walletModel)))}function transactionDetailsResult(e){$("#transaction-info").html(e)}var numOfRecipients=void 0;function validateAddressResult(e){}function sendCoinsResult(e){console.log("sendCoinsResult"),console.log(e),sendPage.update(e,void 0)}function addRecipientResult(e){sendPage.update(void 0,e)}function encryptionStatusChanged(e){overviewPage.encryptionStatusChanged(e)}function unit_setType(e){unit.setType(e)}function updateCoinControlInfo(e,t,a,n,s,o,l,i){sendPage.updateCoinControlInfo(e,t,a,n,s,o,l,i)}function addRecipientDetail(e,t,a,n){sendPage.addRecipientDetail(e,t,a,n)}function updateReserved(e){overviewPage.updateReserved(e)}function updateBalance(e,t,a,n,s,o,l,i){overviewPage.updateBalance(e,t,a,n,s,o,l,i)}function triggerElement(e,t){$(e).trigger(t)}function updateRowsPerPage(e){$(".footable").each((function(){var t=$(this);t.hasClass("footable-lookup")||(t.data().pageSize=e,t.trigger("footable_initialize"))}))}function pasteValue(e){$(pasteTo).val(e).change()}function paste(e){pasteTo=e,bridge.paste(),0!=pasteTo.indexOf("#pay_to")&&"#change_address"!=pasteTo||base58.check(pasteTo)}function copy(e,t){var a="";try{a=$(e).text()}catch(e){}null!=a&&null==t||(a="copy"==t?e:$(e).attr(t)),bridge.copy(a)}function networkAlert(e){$("#network-alert span").text(e).toggle(""!==e)}function openContextMenu(e){-1===contextMenus.indexOf(e)&&contextMenus.push(e),void 0!==e.isOpen&&1===e.isOpen&&(e.isOpen=0,e.close&&e.close());for(var t=0;t"+e.label+""):$("#message-from-address option[value="+e.address+"]").text(e.label));e.type,e.pubkey;0==t.length?($(a+" .footable tbody").append(" "+e.label+" "+e.address+" "+e.pubkey+" "+(4==e.at?"Group":3==e.at?"BIP32":2==e.at?TYPE_PRIVATE:TYPE_PUBLIC)+""),$("#address-lookup-table.footable tbody").append(" "+e.label+" "+e.address+" "+(4==e.at?"Group":3==e.at?"BIP32":2==e.at?TYPE_PRIVATE:TYPE_PUBLIC)+""),$(a+" #"+e.address).selection("tr").find(".editable").on("dblclick",(function(e){e.stopPropagation(),updateValue($(this))})).attr("data-title","Double click to edit").tooltip()):($("#"+e.address+" .label2").data("value",e.label_value).text(e.label),$("#"+e.address+" .pubkey").text(e.pubkey))})),$("#addressbook .footable, #receive .footable").trigger("footable_setup_paging"),0===$("#addressbook .footable tbody tr.selected").length&&$("#addressbook .footable tbody tr:first").addClass("selected"),0===$("#receive .footable tbody tr.selected").length&&$("#receive .footable tbody tr:first").addClass("selected")}function addressLookup(e,t,a){function n(){$("#address-lookup-filter").val($("#address-lookup-address-filter").val()+" "+$("#address-lookup-address-type").val()),s.trigger("footable_filter",{filter:$("#address-lookup-filter").val()})}var s=$("#address-lookup-table");s.trigger("footable_initialize"),s.data("footable-filter").clearFilter(),$("#address-lookup-table > tbody tr").selection().on("dblclick",(function(){var t=e.split(",");$("#"+t[0]).val($(this).attr("id").trim()).change(),void 0!==t[1]&&$("#"+t[1]).val($(this).attr("lbl").trim()).text($(this).attr("lbl").trim()).change(),$("#address-lookup-modal").modal("hide")})),$("#address-lookup-address-filter").on("input",(function(){""==$("#lookup-address-filter").val()&&s.data("footable-filter").clearFilter(),n()})),$("#address-lookup-address-type").change((function(){""==$("#address-lookup-address-type").val()&&s.data("footable-filter").clearFilter(),n()})),a&&($("#address-lookup-address-type").val(a),n()),t?$("tr.addressTypeS",s).hide():$("tr.addressTypeR",s).hide()}function transactionPageInit(){var e=[{name:"Copy Amount",fun:function(){copy("#transactions .footable .selected .amount","data-value")}},{name:"Copy transaction ID",fun:function(){var e=$("#transactions .footable .selected").attr("id");copy(e.substring(0,e.length-4),"copy")}},{name:"Edit label",fun:function(){$("#transactions .footable .selected .editable").dblclick()}},{name:"Show transaction details",fun:function(){$("#transactions .footable .selected").dblclick()}}];$("#transactions .footable tbody").on("contextmenu",(function(e){$(e.target).closest("tr").click()})).contextMenu(e,{triggerOn:"contextmenu",sizeStyle:"content"}),$("#transactions .footable").on("footable_paging",(function(e){var t=filteredTransactions.slice(e.page*e.size);t=t.slice(0,e.size);var a=$("#transactions .footable tbody");a.html(""),delete e.ft.pageInfo.pages[e.page],e.ft.pageInfo.pages[e.page]=t.map((function(e){var t=Array.isArray(e)?e[0].id:e.id;return e.html=formatTransaction(e),a.append(e.html),$("#"+t)[0]})),e.result=!0,bindTransactionTableEvents()})).on("footable_create_pages",(function(e){var t=$("#transactions .footable");$(t.data("filter")).val()||(filteredTransactions=Transactions);var a=t.data("sorted"),n=1==t.find("th.footable-sorted").length,s="numeric";switch(a){case 1:a="d";break;case 2:a="t_l",s="alpha";break;case 3:a="ad",s="alpha";break;case 4:a="n",s="alpha";break;case 5:a="am";break;default:a="c"}s=e.ft.options.sorters[s],filteredTransactions.sort((function(e,t){var o=Array.isArray(e)?e[0]:e,l=Array.isArray(t)?t[0]:t;return n?s(o[a],l[a]):s(l[a],o[a])})),delete e.ft.pageInfo.pages,e.ft.pageInfo.pages=[];var o=Math.ceil(filteredTransactions.length/e.ft.pageInfo.pageSize),l=[];if(o>0){for(var i=0;i0&&filteredTransactions.push(a)}else filterTransaction(t,e.filter)&&filteredTransactions.push(t)})))}))}function filterTransaction(e,t){var a;for(a in e)if(-1!==e[a].toString().toLowerCase().indexOf(t.toLowerCase()))return!0;return!1}function formatTransaction(e){if(Array.isArray(e)){var t=e[0].tt;e.length>1&&e[0].tt!==e[e.length-1].tt&&(t="Tx.No. 1:\n"+t,t+="\n-\nTx.No. "+e.length+":\n"+e[e.length-1].tt);var a=0,n="",s=new Set;e.forEach((function(e){s.add(e.ad_d.trim()),e.n&&(n&&(n+="; "),n+=e.n.trim()),a+=e.am}));var o="";return s.forEach((function(e){o&&(o+="; "),o+=e})),"1?" data-title='"+t+"'":"")+">1?" data-title='"+e[0].d_s+" - "+e[e.length-1].d_s+"'":"")+">"+l.d_s+""+unit.format(a)+" "+unit.display+"1?" data-title='"+t+"'":"")+">1?" data-title='"+t+"'":"")+">"+l.t_l+"  (x"+e.length+")"+(o.length>26?o.substr(0,26)+"...":o)+""+n+""}var l;return""+l.d_s+""+l.am_d+" "+unit.display+""+l.t_l+""+(l.ad_d.length>26?l.ad_d.substr(0,26)+"...":l.ad_d)+""+l.n+""}function visibleTransactions(e){"*"!==e[0]&&(RawTransactions=RawTransactions.filter((function(e){return this.some((function(e){return e==this}),e.t_l)}),e),prepareTransactions())}function bindTransactionTableEvents(){$("#transactions .footable tbody td[data-title]").tooltip(),$("#transactions .footable tbody tr[data-title]").tooltip(),$("#transactions .footable tbody tr").on("click",(function(){$(this).addClass("selected").siblings("tr").removeClass("selected")})).on("dblclick",(function(e){$(this).attr("href","#transaction-info-modal"),$("#transaction-info-modal").appendTo("body").modal("show"),bridge.transactionDetails($(this).attr("id")),$(this).click(),$(this).off("click"),$(this).on("click",(function(){$(this).addClass("selected").siblings("tr").removeClass("selected")}))})).find(".editable").on("dblclick",(function(e){e.stopPropagation(),e.preventDefault(),updateValue($(this))})).attr("data-title","Double click to edit").tooltip()}function appendTransactions(e,t){if(console.log(e),"string"==typeof e){if("[]"==e&&!t)return;e=JSON.parse(e.replace(/,\]$/,"]"))}e.sort((function(e,t){return e.d=parseInt(e.d),t.d=parseInt(t.d),t.d-e.d})),t?RawTransactions=e:1==e.length&&-1==e[0].id||(RawTransactions=RawTransactions.filter((function(e){return 0==this.some((function(e){return e.id==this.id}),e)}),e).concat(e)),overviewPage.recent(e.slice(0,7)),prepareTransactions()}function prepareTransactions(){var e=$("select[id=optGroupTxType]").val(),t=$("select[id=optGroupTxTime]").val();if("0"===t)Transactions=RawTransactions;else{var a={};Transactions=[],RawTransactions.forEach((function(n){if("0"===e&&(n.t_i<1||n.t_i>6))Transactions.push(n);else{var s=new Date(1e3*n.d),o=(9!==n.s_i?n.t_i:3===n.t_i||5===n.t_i?1:4===n.t_i||6===n.t_i?2:n.t_i)+"-"+n.s_i;switch(t){case"1":o=s.getDate()+"-"+o;case"2":o=s.getMonth()+"-"+o;case"3":o=s.getFullYear()+"-"+o}var l=a[o];l?l.push(n):(a[o]=[n],Transactions.push(a[o]))}}))}$("#transactions .footable").trigger("footable_redraw")}function getIconTitle(e){return"unverified"==e?"fa fa-cross ":"verified"==e?"fa fa-check ":"contributor"==e?"fa fa-cog ":"spectreteam"==e?"fa fa-code ":""}function signMessage(){var e,t,a;$("#sign-signature").val("");e=$("#sign-address").val().trim(),t=$("#sign-message").val().trim();var n=bridge.signMessage(e,t);return a=n.error_msg,n.signed_signature,""!==a?($("#sign-result").removeClass("green"),$("#sign-result").addClass("red"),$("#sign-result").html(a),!1):($("#sign-signature").val(n.signed_signature),$("#sign-result").removeClass("red"),$("#sign-result").addClass("green"),void $("#sign-result").html("Message signed successfully"))}function verifyMessage(){var e,t,a,n;return e=$("#verify-address").val().trim(),t=$("#verify-message").val().trim(),n=$("#verify-signature").val().trim(),""!==(a=bridge.verifyMessage(e,t,n).error_msg)?($("#verify-result").removeClass("green"),$("#verify-result").addClass("red"),$("#verify-result").html(a),!1):($("#verify-result").removeClass("red"),$("#verify-result").addClass("green"),void $("#verify-result").html("Message verified successfully"))}function iscrollReload(e){messagesScroller.refresh(),!0===e&&messagesScroller.scrollTo(0,messagesScroller.maxScrollY,0)}function editorCommand(e,t){var a,n,s,o=$("#message-text")[0];s=o.scrollTop,o.focus(),void 0!==o.selectionStart?(a=o.selectionStart,n=o.selectionEnd,e.length,t&&(e+=o.value.substring(a,n)+t),o.value=o.value.substring(0,a)+e+o.value.substring(n,o.value.length),o.selectionStart=a+e.length-(t?t.length:0),o.selectionEnd=o.selectionStart):o.value+=e+t,o.scrollTop=s,o.focus()}function setupWizard(e){var t=$("#"+e+" > div");backbtnjs='$("#key-options").show(); $("#wizards").hide();',fwdbtnjs='gotoWizard("new-key-wizard", 1);',$("#"+e).prepend(""),$("#"+e).prepend(""),t.each((function(e){$(this).addClass("step"+e),$(this).hide(),$("#backWiz").hide()}))}function gotoWizard(vid,node,dataAndEvents){var collection=$("#wizards > div");if(validateJS=$("#"+vid+" .step"+(node-1)).attr("validateJS"),dataAndEvents&&void 0!==validateJS){var jsonObj=eval(validateJS);if(!jsonObj)return!1}collection.each((function(e){$(this).hide()}));var $allModules=$("#"+vid+" > div[class^=step]"),current=node;null==current&&(current=0),0==current?($("#"+vid+" #backWiz").attr("onclick",'$(".wizardback").hide(); $("#wizards").show();'),$("#"+vid+" #fwdWiz").attr("onclick",'$(".wizardback").hide(); gotoWizard("'+vid+'", 1, true);'),$("#backWiz").hide()):($("#"+vid+" #backWiz").attr("onclick",'gotoWizard("'+vid+'", '+(current-1)+" , false);"),$("#"+vid+" #fwdWiz").attr("onclick",'gotoWizard("'+vid+'", '+(current+1)+" , true);")),endWiz=$("#"+vid+" .step"+node).attr("endWiz"),void 0!==endWiz&&""!==endWiz&&$("#"+vid+" #fwdWiz").attr("onclick",endWiz),$allModules.each((function(e){$(this).hide()})),$("#"+vid).show(),stepJS=$("#"+vid+" .step"+current).attr("stepJS"),dataAndEvents&&void 0!==stepJS&&eval(stepJS),$("#"+vid+" .step"+current).fadeIn(0)}function dumpStrings(){function e(e){return'QT_TRANSLATE_NOOP("SpectreBridge", "'+e+'"),\n'}var t="";$(".translate").each((function(a){var n=e($(this).text().trim());-1==t.indexOf(n)&&(t+=n)})),$("[data-title]").each((function(a){var n=e($(this).attr("data-title").trim());-1==t.indexOf(n)&&(t+=n)})),console.log(t)}function translateStrings(){$(".translate").each((function(e){var t=$(this).text().replace(/\s+/g," ");bridge.translateHtmlString(t.trim())})),$("[data-title]").each((function(e){var t=$(this).attr("data-title").replace(/\s+/g," ");bridge.translateHtmlString(t.trim())})),$("[placeholder]").each((function(e){var t=$(this).attr("placeholder").replace(/\s+/g," ");bridge.translateHtmlString(t.trim())}))}function updateElement(e,t){$(".translate").each((function(a){$(this).text().replace(/\s+/g," ").trim()===e&&$(this).text(t)})),$("[data-title]").each((function(a){var n=$(this).attr("data-title").replace(/\s+/g," ");n.trim()===e&&$(this).attr("data-title",n.replace(n,t))})),$("[placeholder]").each((function(a){var n=$(this).attr("placeholder").replace(/\s+/g," ");n.trim()===e&&$(this).attr("placeholder",n.replace(n,t))})),TYPE_PRIVATE===e&&(TYPE_PRIVATE=t),TYPE_PUBLIC===e&&(TYPE_PUBLIC=t),TYPE_ORPHAN===e&&(TYPE_ORPHAN=t),TYPE_RECEIVED===e&&(TYPE_RECEIVED=t),TYPE_SENT===e&&(TYPE_SENT=t),TYPE_IN_OUT===e&&(TYPE_IN_OUT=t),TYPE_STAKE===e&&(TYPE_STAKE=t),TYPE_DONATED===e&&(TYPE_DONATED=t),TYPE_CONTRIBUTED===e&&(TYPE_CONTRIBUTED=t),TYPE_OTHER===e&&(TYPE_OTHER=t)}var breakpoint=906,base58={base58Chars:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",check:function(e){for(var t=$(e),a=t.val(),n=0,s=a.length;n=2?e.countDecimals()>2?e.toString():e.toFixed(2):e.toFixed(s),null==n?e:void n.val(e)},parse:function(e,t){var a=$.isNumeric(e)?null:$(e);t=null==t?this.type:parseInt(t),fp=null==a?e:a.val(),null==fp||fp.length<1?fp=["0","0"]:"."==fp[0]?fp=["0",fp.slice(1)]:fp=fp.split("."),e=parseInt(fp[0]);var n=this.mask(t);if(n>0&&(e*=Math.pow(10,n)),n>0&&fp.length>1){for(var s=fp[1].split("");s.length>1&&"0"==s[s.length-1];)s.pop();var o=parseInt(s.join(""));o>0&&((n-=s.length)>0&&(o*=Math.pow(10,n)),e+=o)}return null==a?e:(a.data("value",e),void this.format(a,t))},mask:function(e){switch(e=null==e?this.type:parseInt(e)){case 1:return 5;case 2:return 2;case 3:return 0;default:return 8}},keydown:function(e){var t=e.which,a=$(e.target).siblings(".unit").val();if(190==t||110==t)return-1===this.value.toString().indexOf(".")&&0!=unit.mask(a)||e.preventDefault(),!0;if(e.shiftKey||!(t>=96&&t<=105||t>=48&&t<=57))8!=t&&9!=t&&17!=t&&46!=t&&45!=t&&(t>=35&&t<=40||(!e.ctrlKey||65!=t&&67!=t&&86!=t&&88!=t)&&e.preventDefault());else{var n=this.selectionStart,s=this.value.indexOf(".");if("Range"!==document.getSelection().type&&n>s&&-1!==this.value.indexOf(".")&&this.value.length-1-s>=unit.mask(a)){if("0"==this.value[this.value.length-1]&&n span:first-child").text(t[0]),3==unit.type?($("#total-big .light-red").toggle(!1),$("#total-big .cents").toggle(!1)):($("#total-big .cents").text(t[1]),$("#total-big .light-red").toggle(!0),$("#total-big .cents").toggle(!0))},formatValue:function(e,t,a,n,s){var o=this[e],l=this[t];0!==a||s?o.text(unit.format(a)):o.html(""),0!==n||s?l.text(unit.format(n)):l.html(""),s||0!==a||0!==n?o.parent("tr").show():o.parent("tr").hide()},recent:function(e){for(var t=0;t "+unit.format(t.am,0,!0)+" "+unit.display+" ("+("PRIVATE"===t.am_curr?"private":"public")+")"+t.d_s+""),s=e.id.substring(e.id.length-20),o=$("#"+s).attr("data-title",e.tt).closest("tr");if(0==o.length){for(var l=$("#recenttxns tr"),i=!1,r=0;rparseInt(d.find(".overview_date").data("value"))){d.before(n),i=!0;break}}for(i||$("#recenttxns").append(n),l=$("#recenttxns tr");l.length>8;)$("#recenttxns tr:last").remove(),l=$("#recenttxns tr")}else o.replaceWith(n)},clientInfo:function(){$("#version").text(bridge.info.build.replace(/\-[\w\d]*$/,"")),$("#clientinfo").attr("data-title","Build Desc: "+bridge.info.build+"\nBuild Date: "+bridge.info.date).tooltip()},encryptionStatusChanged:function(e){e}},optionsPage={init:function(){},connectSignals:function(){bridge.getOptionResult.connect(this.getOptionResult)},getOptionResult:function(e){function t(e){var t=(e=$(this)).prop("checked"),a=e.data("linked");if(a){a=a.split(" ");for(var n=0;n");for(var r=0;r"+l[i][r]+"")}else s.append(""+l[i]+"");s.is(":checkbox")?(s.prop("checked",!0===o||"true"===o),s.off("change"),s.on("change",t),s.change()):s.is("select[multiple]")&&("*"===o||Array.isArray(o)&&o.length>0&&"*"===o[0])?s.find("option").attr("selected",!0):(s.hasClass("amount")&&(s.data("value",o),o=unit.format(o,0)),s.val(o)),s.one("change",(function(){$("#options-ok,#options-apply").removeClass("disabled")}))}else-1==a.indexOf("opt")&&console.log("Option element not available for %s",a)}},update:function(){bridge.getOptions()},save:function(){var e,t=bridge.info.options,a={};for(e in t){var n=$("#opt"+e),s=t[e],o=!1;null!=s&&"false"!=s||(s=!1),0!=n.length&&(n.is(":checkbox")?o=n.prop("checked"):n.is("select[multiple]")?null===(o=n.val())&&(o="*"):(o=n.val(),n.hasClass("amount")&&(o=unit.parse(o,0))),s!=o&&s.toString()!==o.toString()&&(a[e]=o))}$.isEmptyObject(a)?console.log("options cache is empty"):(console.log("calling bridge.userAction.optionsChanged"),bridge.userAction({optionsChanged:a}),optionsPage.update(),a.hasOwnProperty("AutoRingSize")&&changeTxnType())}},RawTransactions=[],Transactions=[],filteredTransactions=[],current_key="",chainDataPage={anonOutputs:{},connectSignals:function(){console.log("chainDataPage.connectSignals"),bridge.listAnonOutputsResult.connect(this.listAnonOutputsResult)},init:function(){$("#show-own-outputs,#show-all-outputs").on("click",(function(e){$(e.target).hide().siblings("a").show()})),$("#show-own-outputs").on("click",(function(){$("#chaindata .footable tbody tr>td:first-child+td").each((function(){0==$(this).text()&&$(this).parents("tr").hide()}))})),$("#show-all-outputs").on("click",(function(){$("#chaindata .footable tbody tr:hidden").show()}))},updateAnonOutputs:function(){bridge.listAnonOutputs()},listAnonOutputsResult:function(e){chainDataPage.anonOutputs=e;var t=$("#chaindata .footable tbody");for(value in t.html(""),chainDataPage.anonOutputs){var a=chainDataPage.anonOutputs[value];t.append(" "+a.value_s+" "+a.owned_outputs+(a.owned_outputs==a.owned_mature?"":" ("+(a.owned_outputs-a.owned_mature)+")")+" "+a.system_unspent+(a.system_unspent==a.system_unspent_mature?"":" ("+(a.system_unspent-a.system_unspent_mature)+")")+" "+a.system_mixins+(a.system_mixins==a.system_mixins_mature?"":" ("+(a.system_mixins-a.system_mixins_mature)+")")+" "+a.system_outputs+(0==a.system_compromised?"":" ("+a.system_compromised+")")+" "+a.least_depth+" ")}$("#chaindata .footable").trigger("footable_initialize")}},blockExplorerPage={blockHeader:{},connectSignals:function(){console.log("blockExplorerPage.connectSignals"),bridge.findBlockResult.connect(this.findBlockResult),bridge.listLatestBlocksResult.connect(this.listLatestBlocksResult),bridge.listTransactionsForBlockResult.connect(this.listTransactionsForBlockResult),bridge.txnDetailsResult.connect(this.txnDetailsResult),bridge.blockDetailsResult.connect(this.blockDetailsResult)},findBlock:function(e){console.log("findBlock : function(value)"),console.log(e),""===e||null===e?blockExplorerPage.updateLatestBlocks():bridge.findBlock(e)},findBlockResult:function(e){if(console.log("findBlockResult : function(result)"),blockExplorerPage.foundBlock=e,blockExplorerPage.foundBlock,""!==blockExplorerPage.foundBlock.error_msg)return $("#latest-blocks-table > tbody").html(""),$("#block-txs-table > tbody").html(""),$("#block-txs-table").addClass("none"),alert(blockExplorerPage.foundBlock.error_msg),!1;var t=$("#latest-blocks-table > tbody");t.html(""),$("#block-txs-table > tbody").html(""),$("#block-txs-table").addClass("none"),t.append(" "+blockExplorerPage.foundBlock.block_hash+" "+blockExplorerPage.foundBlock.block_height+" "+blockExplorerPage.foundBlock.block_timestamp+" "+blockExplorerPage.foundBlock.block_transactions+" "),blockExplorerPage.prepareBlockTable()},updateLatestBlocks:function(){blockExplorerPage.latestBlocks=bridge.listLatestBlocks()},listLatestBlocksResult:function(e){console.log("function listLatestBlocksResult"),console.log(e),blockExplorerPage.latestBlocks=e,$("#block-txs-table > tbody").html(""),$("#block-txs-table").addClass("none");var t=$("#latest-blocks-table > tbody");for(value in t.html(""),blockExplorerPage.latestBlocks){var a=blockExplorerPage.latestBlocks[value];t.append(" "+a.block_hash+" "+a.block_height+" "+a.block_timestamp+" "+a.block_transactions+" ")}blockExplorerPage.prepareBlockTable()},prepareBlockTable:function(){$("#latest-blocks-table > tbody tr").selection().on("click",(function(){var e=$(this).attr("data-value").trim();blockExplorerPage.blkTxns=bridge.listTransactionsForBlock(e)})).on("dblclick",(function(e){$("#block-info-modal").appendTo("body").modal("show"),selectedBlock=bridge.blockDetails($(this).attr("data-value").trim())})).find(".editable")},listTransactionsForBlockResult:function(e,t){blockExplorerPage.blkTxns=t;var a=$("#block-txs-table > tbody");for(value in a.html(""),blockExplorerPage.blkTxns){var n=blockExplorerPage.blkTxns[value];a.append(" "+n.transaction_hash+" "+n.transaction_value+" ")}$("#block-txs-table").removeClass("none"),$("#block-txs-table > tbody tr").selection().on("dblclick",(function(t){$("#blkexp-txn-modal").appendTo("body").modal("show"),selectedTxn=bridge.txnDetails(e,$(this).attr("data-value").trim())})).find(".editable")},txnDetailsResult:function(e){selectedTxn=e,""==selectedTxn.error_msg&&($("#txn-hash").html(selectedTxn.transaction_hash),$("#txn-size").html(selectedTxn.transaction_size),$("#txn-rcvtime").html(selectedTxn.transaction_rcv_time),$("#txn-minetime").html(selectedTxn.transaction_mined_time),$("#txn-blkhash").html(selectedTxn.transaction_block_hash),$("#txn-reward").html(selectedTxn.transaction_reward),$("#txn-confirmations").html(selectedTxn.transaction_confirmations),$("#txn-value").html(selectedTxn.transaction_value),$("#error-msg").html(selectedTxn.error_msg),selectedTxn.transaction_reward>0?($("#lbl-reward-or-fee").html("Reward"),$("#txn-reward").html(selectedTxn.transaction_reward)):($("#lbl-reward-or-fee").html("Fee"),$("#txn-reward").html(-1*selectedTxn.transaction_reward)));var t=$("#txn-detail-inputs > tbody");for(value in t.html(""),selectedTxn.transaction_inputs){var a=selectedTxn.transaction_inputs[value];t.append(" "+a.input_source_address+" "+a.input_value+" ")}var n=$("#txn-detail-outputs > tbody");for(value in n.html(""),selectedTxn.transaction_outputs){var s=selectedTxn.transaction_outputs[value];n.append(" "+s.output_source_address+" "+s.output_value+" ")}},blockDetailsResult:function(e){selectedBlock=e,selectedBlock&&($("#blk-hash").html(selectedBlock.block_hash),$("#blk-numtx").html(selectedBlock.block_transactions),$("#blk-height").html(selectedBlock.block_height),$("#blk-type").html(selectedBlock.block_type),$("#blk-reward").html(selectedBlock.block_reward),$("#blk-timestamp").html(selectedBlock.block_timestamp),$("#blk-merkleroot").html(selectedBlock.block_merkle_root),$("#blk-prevblock").html(selectedBlock.block_prev_block),$("#blk-nextblock").html(selectedBlock.block_next_block),$("#blk-difficulty").html(selectedBlock.block_difficulty),$("#blk-bits").html(selectedBlock.block_bits),$("#blk-size").html(selectedBlock.block_size),$("#blk-version").html(selectedBlock.block_version),$("#blk-nonce").html(selectedBlock.block_nonce)),$(this).click().off("click").selection()}},walletManagementPage={connectSignals:function(){console.log("walletManagementPage.connectSignals"),bridge.importFromMnemonicResult.connect(this.importFromMnemonicResult),bridge.getNewMnemonicResult.connect(this.getNewMnemonicResult),bridge.extKeyAccListResult.connect(this.extKeyAccListResult),bridge.extKeyListResult.connect(this.extKeyListResult),bridge.extKeySetDefaultResult.connect(this.extKeySetDefaultResult),bridge.extKeySetMasterResult.connect(this.extKeySetMasterResult),bridge.extKeySetActiveResult.connect(this.extKeySetActiveResult)},init:function(){setupWizard("new-key-wizard"),setupWizard("recover-key-wizard"),setupWizard("open-key-wizard")},newMnemonic:function(){bridge.getNewMnemonic($("#new-account-passphrase").val(),$("#new-account-language").val())},getNewMnemonicResult:function(e){var t=e,a=t.error_msg,n=t.mnemonic;""!==a?alert(a):$("#new-key-mnemonic").val(n)},compareMnemonics:function(){return $("#new-key-mnemonic").val().trim()==$("#validate-key-mnemonic").val().trim()?($("#validate-key-mnemonic").removeClass("red"),$("#validate-key-mnemonic").val(""),!0):($("#validate-key-mnemonic").addClass("red"),alert("The recovery phrase you provided does not match the recovery phrase that was generated earlier - please go back and check to make sure you have copied it down correctly."),!1)},gotoPage:function(e){$("#navitems a[href='#"+e+"']").trigger("click")},prepareAccountTable:function(){$("#extkey-account-table > tbody tr").selection().on("click",(function(){$("#extkey-table > tbody > tr").removeClass("selected")}))},updateAccountList:function(){bridge.extKeyAccList()},extKeyAccListResult:function(e){walletManagementPage.accountList=e;var t=$("#extkey-account-table > tbody");for(value in t.html(""),walletManagementPage.accountList){e=walletManagementPage.accountList[value];t.append(" "+e.id+" "+e.label+" "+e.created_at+' '+(void 0!==e.default_account?"":"")+" ")}walletManagementPage.prepareAccountTable()},prepareKeyTable:function(){$("#extkey-table > tbody tr").selection().on("click",(function(){$("#extkey-account-table > tbody > tr").removeClass("selected")}))},updateKeyList:function(){bridge.extKeyList()},extKeyListResult:function(e){walletManagementPage.keyList=e;var t=$("#extkey-table > tbody");for(value in t.html(""),walletManagementPage.keyList){var a=walletManagementPage.keyList[value];t.append(" "+a.id+" "+a.label+" "+a.path+' '+(void 0!==a.current_master?"":"")+" ")}walletManagementPage.prepareKeyTable()},newKey:function(){bridge.importFromMnemonic($("#new-key-mnemonic").val().trim(),$("#new-account-passphrase").val().trim(),$("#new-account-label").val().trim(),$("#new-account-bip44").prop("checked"),0)},importFromMnemonicResult:function(e){if(""!==e.error_msg)return alert(e.error_msg),!1},recoverKey:function(){bridge.importFromMnemonic($("#recover-key-mnemonic").val().trim(),$("#recover-passphrase").val().trim(),$("#recover-account-label").val().trim(),$("#recover-bip44").prop("checked"),1443657600)},setMaster:function(){return $("#extkey-table tr.selected").length?(selected=$("#extkey-table tr.selected").attr("data-value").trim(),void 0===selected||""===selected?(alert("Select a key from the table to set a Master."),!1):(result=bridge.extKeySetMaster(selected),""!==result.error_msg?(alert(result.error_msg),!1):void walletManagementPage.updateKeyList())):(alert("Please select a key to set it as master."),!1)},extKeySetMasterResult:function(e){},setDefault:function(){return $("#extkey-account-table tr.selected").length?(selected=$("#extkey-account-table tr.selected").attr("data-value").trim(),void 0===selected||""===selected?(alert("Select an account from the table to set a default."),!1):(result=bridge.extKeySetDefault(selected),""!==result.error_msg?(alert(result.error_msg),!1):void walletManagementPage.updateAccountList())):(alert("Please select an account to set it as default."),!1)},extKeySetDefaultResult:function(e){},changeActiveFlag:function(){var e=!1,t=$("#extkey-account-table tr.selected"),a=$("#extkey-table tr.selected");return t.length||a.length?(t.length?(selected=t.attr("data-value").trim(),active=t.attr("active-flag").trim(),e=!0):(selected=a.attr("data-value").trim(),active=a.attr("active-flag").trim()),void 0===selected||""===selected?(alert("Please select an account or key to change the active status."),!1):(result=bridge.extKeySetActive(selected,active),""!==result.error_msg?(alert(result.error_msg),!1):void(e?walletManagementPage.updateAccountList():walletManagementPage.updateKeyList()))):(alert("Please select an account or key to change the active status."),!1)},extKeySetActiveResult:function(e){}};function resizeTableBodies(){var e=$(window).height()<480||$(window).width()<480?$(window).height()-$("#transactions nav.navbar").height()-$("#transactions-table > thead").height()-$("#transactions-table > tfoot").height()-10:$(window).height()-$("#transactions-table > tbody").offset().top-$("#transactions-table > tfoot").height()-10;$("#transactions-table > tbody").height(e);var t=$(window).height()<480||$(window).width()<480?$(window).height()-$("#chaindata nav.navbar").height()-$("#chaindata-table > thead").height()-$("#chaindata-table > tfoot").height()-10:$(window).height()-$("#chaindata-table > tbody").offset().top-$("#chaindata-table > tfoot").height()-10;$("#chaindata-table > tbody").height(t)}window.onload=function(){overviewPage.init(),receivePageInit(),transactionPageInit(),addressBookInit(),chainDataPage.init(),walletManagementPage.init(),$(".footable,.footable-lookup").footable({breakpoints:{phone:480,tablet:700},delay:50}).on({footable_breakpoint:function(){},footable_row_expanded:function(e){$(this).find(".editable").off("dblclick").on("dblclick",(function(e){e.stopPropagation(),updateValue($(this))})).attr("data-title","Double click to edit").tooltip()}}),$(".editable").on("dblclick",(function(e){e.stopPropagation(),updateValue($(this))})).attr("data-title","Double click to edit %column%"),window.onresize=function(e){window.innerWidth>breakpoint&&$("#layout").removeClass("active"),setTimeout(resizeTableBodies,50)},window.sidebarMouseEnter=!1,window.sidebarMouseEnterTimeout=void 0,$(".sidebar-menu").on({mouseenter:function(e){window.sidebarMouseEnter=!0,window.sidebarMouseEnterTimeout=setTimeout((function(){window.sidebarMouseEnter=!1}),25)},mouseleave:function(e){window.sidebarMouseEnter=!1,clearTimeout(window.sidebarMouseEnterTimeout)}}),$(".sidebar-menu a[href]").on({click:function(e){e.originalEvent&&(!$("body").hasClass("sidebar-visible")||window.sidebarMouseEnter?$(this).closest("li").hasClass("open")?(e.stopImmediatePropagation(),window.sidebarMouseEnter||$(".page-sidebar").mouseenter()):$(this).next().hasClass("sub-menu")?window.sidebarMouseEnter||$(".page-sidebar").mouseenter():window.sidebarMouseEnter&&$(".page-sidebar").mouseleave():$(this).next().hasClass("sub-menu")||$(".page-sidebar").mouseleave(),($(window).height()<480||$(window).width()<480&&!$(this).closest("li").hasClass("open"))&&("#transactions"===$(this).attr("href")?document.querySelector("#transactions").scrollIntoView({behavior:"smooth"}):"#chaindata"===$(this).attr("href")&&document.querySelector("#chaindata").scrollIntoView({behavior:"smooth"})))}}),$("[href='#about']").on("click",(function(){bridge.userAction(["aboutClicked"])})),$(".footable > tbody tr").selection();var e=new URLSearchParams(window.location.search),t="ws://127.0.0.1:"+(e.has("websocketport")?e.get("websocketport"):52471)+"/?token="+e.get("token");console.log("Connecting to WebSocket server at "+t+".");var a=new WebSocket(t);a.onopen=function(){new QWebChannel(a,(function(e){window.bridge=e.objects.bridge,window.walletModel=e.objects.walletModel,window.optionsModel=e.objects.optionsModel,connectSignals(),resizeTableBodies()}))},a.onerror=function(e){console.log("WebSocket connection error: "+e)},a.onclose=function(e){console.log("WebSocket connection is closed: "+e.code+" - "+e.reason)}},$.fn.selection=function(e){return e||(e="tr"),this.on("click",(function(){$(this).addClass("selected").siblings(e).removeClass("selected")}))}; diff --git a/src/qt/res/assets/js/tooltip.min.js b/src/qt/res/assets/js/tooltip.min.js index 2ef9de2b21..1a2752da4b 100644 --- a/src/qt/res/assets/js/tooltip.min.js +++ b/src/qt/res/assets/js/tooltip.min.js @@ -1 +1 @@ -!function(t){"use strict";function e(e){return e===t&&(e=t("[data-title]")),void 0===e&&(e=this),e.off("mouseenter").on("mouseenter",o)}function o(e){function o(){t(window).width()<1.5*n.outerWidth()?n.css("max-width",t(window).width()/2):n.css("max-width",340);var o=r.offset().left+r.outerWidth()/2-n.outerWidth()/2,i=r.offset().top-n.outerHeight()-20;o<0?(o=r.offset().left+r.outerWidth()/2-20,n.addClass("left")):n.removeClass("left"),o+n.outerWidth()>t(document).width()?(o=r.offset().left-n.outerWidth()+r.outerWidth()/2+20,n.addClass("right")):n.removeClass("right"),o+r.outerWidth()>t(document).width()&&(o=e.pageX,n.removeClass("left right")),i<0?(i=r.offset().top+r.outerHeight()+25,n.addClass("top"),a=!0):n.removeClass("top"),n.css({left:o,top:i}).animate({top:(a?"-":"+")+"=10",opacity:1},100)}function i(){n.animate({top:(a?"+":"-")+"=10",opacity:0},100,function(){t(this).remove()})}var r=!1,n=!1,s=!1,a=!1;if(!t("input, textarea").is(":focus")&&"inline-block"!=t(".iw-contextMenu").css("display")){if(e.stopPropagation(),t("#tooltip").remove(),r=t(this),s=r.attr("data-title"),n=t('
    '),!s||""==s)return!1;s=s.replace(/ |\n|\x0A/g,"
    ").replace(/%column%/g,function(){return t(r.parents("table").find("thead tr th")[r[0].cellIndex]).text()}).replace(/%([.\w\-]+),([.\w\-]+)%/g,function(t,e,o){return r.children(e).attr(o)}).replace(/%([.\w\-]+)%/g,function(t,e){return r.children(e).text()}),n.css("opacity",0).html(s).appendTo("body"),"pointer"!=r.css("cursor")&&"A"!=r.prop("tagName")&&r.css("cursor","help"),o(),t(window).resize(o),r.on("contextmenu mouseleave",i)}}t.fn.tooltip=e}(jQuery),jQuery($.fn.tooltip); +!function(t){"use strict";let e=void 0,o=!1;function r(t){return o=!0,e=t.currentTarget===e||$(t.target).hasClass("footable-toggle")?void 0:t.currentTarget,!0}function n(t){return o=!1,e=void 0,!0}function i(t){return e!==t.currentTarget||(a(t),$(this).hasClass("editable"))}function s(t){return o||$(t.target).hasClass("footable-toggle")||(e=t.currentTarget,a(t)),!0}function a(r){let n=void 0,i=void 0,s=void 0,a=void 0,c=void 0,u=!1;function l(){t(window).width()<1.5*s.outerWidth()?s.css("max-width",t(window).width()/2):s.css("max-width",340);var e=n.offset().left+n.outerWidth()/2-s.outerWidth()/2,o=n.offset().top-s.outerHeight()-20;e<0?(e=n.offset().left+n.outerWidth()/2-20,s.addClass("left")):s.removeClass("left"),e+s.outerWidth()>t(document).width()?(e=n.offset().left-s.outerWidth()+n.outerWidth()/2+20,s.addClass("right")):s.removeClass("right"),e+n.outerWidth()>t(document).width()&&(e=r.pageX,s.removeClass("left right")),o<0?(o=n.offset().top+n.outerHeight()+25,s.addClass("top"),u=!0):s.removeClass("top"),s.css({left:e,top:o}),1!=s.css("opacity")?(s.css({left:e,top:o}),s.animate({top:(u?"-":"+")+"=10",opacity:1},100)):s.css({left:e,top:u?o-10:o+10})}function d(){o=!1,clearInterval(c),t(window).off("resize",d),document.removeEventListener("touchstart",d,!0),n.off("contextmenu mouseleave",d);let i=r.currentTarget;s.animate({top:(u?"+":"-")+"=10",opacity:0},100,(function(){e!==i&&void 0!==e||(e=void 0,t(this).remove())}))}function f(){return a.replace(/ |\n|\x0A/g,"
    ").replace(/%column%/g,(function(){return t(n.parents("table").find("thead tr th")[n[0].cellIndex]).text()})).replace(/%([.\w\-]+),([.\w\-]+)%/g,(function(t,e,o){return n.children(e).attr(o)})).replace(/%([.\w\-]+)%/g,(function(t,e){return n.children(e).text()}))}if(!t("input, textarea").is(":focus")&&"inline-block"!=t(".iw-contextMenu").css("display")){if(t("#tooltip").remove(),n=t(r.currentTarget),a=n.attr("data-title"),s=t('
    '),!a||""==a)return!1;a=f(),s.css("opacity",0).html(a).appendTo("body"),"pointer"!=n.css("cursor")&&"A"!=n.prop("tagName")&&n.css("cursor","help"),l(),t(window).on("resize",d),n.on("contextmenu mouseleave",d),i=n.offset(),document.addEventListener("touchstart",d,!0),c=setInterval((function(e){let o=a?a.length:0;if(s=t("#tooltip"),n=t(e),!s.length||!n.length||n.is(":hidden")||(a=n.attr("data-title"),!a||""==a))return d(),!1;a=f(),s.html(a);let r=n.offset();o==a.length&&i.left==r.left&&i.right==r.right||(i=r,s.css("left",""),s.css("top",""),s.css("max-width",""),s.removeClass("left, right top"),l())}),500,r.currentTarget)}}t.fn.tooltip=function(e){return e===t&&(e=t("[data-title]")),void 0===e&&(e=this),e.off("mouseenter touchstart touchend touchmove touchcancel").on("mouseenter",s).on("touchstart",r).on("touchend",i).on("touchmove touchcancel",n)}}(jQuery),jQuery($.fn.tooltip); diff --git a/src/qt/res/assets/plugins/boostrapv3/css/bootstrap-theme.css b/src/qt/res/assets/plugins/boostrapv3/css/bootstrap-theme.css deleted file mode 100644 index d14cec5033..0000000000 --- a/src/qt/res/assets/plugins/boostrapv3/css/bootstrap-theme.css +++ /dev/null @@ -1,476 +0,0 @@ -/*! - * Bootstrap v3.3.4 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); -} -.btn-default:active, -.btn-primary:active, -.btn-success:active, -.btn-info:active, -.btn-warning:active, -.btn-danger:active, -.btn-default.active, -.btn-primary.active, -.btn-success.active, -.btn-info.active, -.btn-warning.active, -.btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn-default .badge, -.btn-primary .badge, -.btn-success .badge, -.btn-info .badge, -.btn-warning .badge, -.btn-danger .badge { - text-shadow: none; -} -.btn:active, -.btn.active { - background-image: none; -} -.btn-default { - text-shadow: 0 1px 0 #fff; - background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); - background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0)"; - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; - background-repeat: repeat-x; - border-color: #dbdbdb; - border-color: #ccc; -} -.btn-default:hover, -.btn-default:focus { - background-color: #e0e0e0; - background-position: 0 -15px; -} -.btn-default:active, -.btn-default.active { - background-color: #e0e0e0; - border-color: #dbdbdb; -} -.btn-default.disabled, -.btn-default:disabled, -.btn-default[disabled] { - background-color: #e0e0e0; - background-image: none; -} -.btn-primary { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); - background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0)"; - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; - background-repeat: repeat-x; - border-color: #245580; -} -.btn-primary:hover, -.btn-primary:focus { - background-color: #265a88; - background-position: 0 -15px; -} -.btn-primary:active, -.btn-primary.active { - background-color: #265a88; - border-color: #245580; -} -.btn-primary.disabled, -.btn-primary:disabled, -.btn-primary[disabled] { - background-color: #265a88; - background-image: none; -} -.btn-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); - background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0)"; - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; - background-repeat: repeat-x; - border-color: #3e8f3e; -} -.btn-success:hover, -.btn-success:focus { - background-color: #419641; - background-position: 0 -15px; -} -.btn-success:active, -.btn-success.active { - background-color: #419641; - border-color: #3e8f3e; -} -.btn-success.disabled, -.btn-success:disabled, -.btn-success[disabled] { - background-color: #419641; - background-image: none; -} -.btn-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); - background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0)"; - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; - background-repeat: repeat-x; - border-color: #28a4c9; -} -.btn-info:hover, -.btn-info:focus { - background-color: #2aabd2; - background-position: 0 -15px; -} -.btn-info:active, -.btn-info.active { - background-color: #2aabd2; - border-color: #28a4c9; -} -.btn-info.disabled, -.btn-info:disabled, -.btn-info[disabled] { - background-color: #2aabd2; - background-image: none; -} -.btn-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0)"; - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; - background-repeat: repeat-x; - border-color: #e38d13; -} -.btn-warning:hover, -.btn-warning:focus { - background-color: #eb9316; - background-position: 0 -15px; -} -.btn-warning:active, -.btn-warning.active { - background-color: #eb9316; - border-color: #e38d13; -} -.btn-warning.disabled, -.btn-warning:disabled, -.btn-warning[disabled] { - background-color: #eb9316; - background-image: none; -} -.btn-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); - background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0)"; - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; - background-repeat: repeat-x; - border-color: #b92c28; -} -.btn-danger:hover, -.btn-danger:focus { - background-color: #c12e2a; - background-position: 0 -15px; -} -.btn-danger:active, -.btn-danger.active { - background-color: #c12e2a; - border-color: #b92c28; -} -.btn-danger.disabled, -.btn-danger:disabled, -.btn-danger[disabled] { - background-color: #c12e2a; - background-image: none; -} -.thumbnail, -.img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - background-color: #e8e8e8; - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)"; - background-repeat: repeat-x; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - background-color: #2e6da4; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)"; - background-repeat: repeat-x; -} -.navbar-default { - background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); - background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); - background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0)"; - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; - background-repeat: repeat-x; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); - background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); - background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0)"; - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); -} -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, .25); -} -.navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0)"; - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; - background-repeat: repeat-x; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); - background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); - background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0)"; - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); -} -.navbar-inverse .navbar-brand, -.navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); -} -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} -@media (max-width: 767px) { - .navbar .navbar-nav .open .dropdown-menu > .active > a, - .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)"; - background-repeat: repeat-x; - } -} -.alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); -} -.alert-success { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0)"; - background-repeat: repeat-x; - border-color: #b2dba1; -} -.alert-info { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0)"; - background-repeat: repeat-x; - border-color: #9acfea; -} -.alert-warning { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0)"; - background-repeat: repeat-x; - border-color: #f5e79e; -} -.alert-danger { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0)"; - background-repeat: repeat-x; - border-color: #dca7a7; -} -.progress { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)"; - background-repeat: repeat-x; -} -.progress-bar { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); - background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0)"; - background-repeat: repeat-x; -} -.progress-bar-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)"; - background-repeat: repeat-x; -} -.progress-bar-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)"; - background-repeat: repeat-x; -} -.progress-bar-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)"; - background-repeat: repeat-x; -} -.progress-bar-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)"; - background-repeat: repeat-x; -} -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.list-group { - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 #286090; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0)"; - background-repeat: repeat-x; - border-color: #2b669a; -} -.list-group-item.active .badge, -.list-group-item.active:hover .badge, -.list-group-item.active:focus .badge { - text-shadow: none; -} -.panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: 0 1px 2px rgba(0, 0, 0, .05); -} -.panel-default > .panel-heading { - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)"; - background-repeat: repeat-x; -} -.panel-primary > .panel-heading { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)"; - background-repeat: repeat-x; -} -.panel-success > .panel-heading { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)"; - background-repeat: repeat-x; -} -.panel-info > .panel-heading { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)"; - background-repeat: repeat-x; -} -.panel-warning > .panel-heading { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)"; - background-repeat: repeat-x; -} -.panel-danger > .panel-heading { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)"; - background-repeat: repeat-x; -} -.well { - background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0)"; - background-repeat: repeat-x; - border-color: #dcdcdc; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); -} -/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/src/qt/res/assets/plugins/boostrapv3/css/bootstrap-theme.css.map b/src/qt/res/assets/plugins/boostrapv3/css/bootstrap-theme.css.map deleted file mode 100644 index 5a12d63173..0000000000 --- a/src/qt/res/assets/plugins/boostrapv3/css/bootstrap-theme.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAcA;;;;;;EAME,0CAAA;ECgDA,6FAAA;EACQ,qFAAA;EC5DT;AFgBC;;;;;;;;;;;;EC2CA,0DAAA;EACQ,kDAAA;EC7CT;AFVD;;;;;;EAiBI,mBAAA;EECH;AFiCC;;EAEE,wBAAA;EE/BH;AFoCD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EAgC2C,2BAAA;EAA2B,oBAAA;EEzBvE;AFLC;;EAEE,2BAAA;EACA,8BAAA;EEOH;AFJC;;EAEE,2BAAA;EACA,uBAAA;EEMH;AFHC;;;EAGE,2BAAA;EACA,wBAAA;EEKH;AFUD;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEgCD;AF9BC;;EAEE,2BAAA;EACA,8BAAA;EEgCH;AF7BC;;EAEE,2BAAA;EACA,uBAAA;EE+BH;AF5BC;;;EAGE,2BAAA;EACA,wBAAA;EE8BH;AFdD;EGrDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEyDD;AFvDC;;EAEE,2BAAA;EACA,8BAAA;EEyDH;AFtDC;;EAEE,2BAAA;EACA,uBAAA;EEwDH;AFrDC;;;EAGE,2BAAA;EACA,wBAAA;EEuDH;AFtCD;EGtDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEkFD;AFhFC;;EAEE,2BAAA;EACA,8BAAA;EEkFH;AF/EC;;EAEE,2BAAA;EACA,uBAAA;EEiFH;AF9EC;;;EAGE,2BAAA;EACA,wBAAA;EEgFH;AF9DD;EGvDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE2GD;AFzGC;;EAEE,2BAAA;EACA,8BAAA;EE2GH;AFxGC;;EAEE,2BAAA;EACA,uBAAA;EE0GH;AFvGC;;;EAGE,2BAAA;EACA,wBAAA;EEyGH;AFtFD;EGxDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEoID;AFlIC;;EAEE,2BAAA;EACA,8BAAA;EEoIH;AFjIC;;EAEE,2BAAA;EACA,uBAAA;EEmIH;AFhIC;;;EAGE,2BAAA;EACA,wBAAA;EEkIH;AFxGD;;EChBE,oDAAA;EACQ,4CAAA;EC4HT;AFnGD;;EGzEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHwEF,2BAAA;EEyGD;AFvGD;;;EG9EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8EF,2BAAA;EE6GD;AFpGD;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ6GA,oBAAA;EC/CA,6FAAA;EACQ,qFAAA;EC0JT;AF/GD;;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;ECoKT;AF5GD;;EAEE,gDAAA;EE8GD;AF1GD;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EF+OD;AFlHD;;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;EC0LT;AF5HD;;EAYI,2CAAA;EEoHH;AF/GD;;;EAGE,kBAAA;EEiHD;AF5FD;EAfI;;;IAGE,aAAA;IG3IF,0EAAA;IACA,qEAAA;IACA,+FAAA;IAAA,wEAAA;IACA,6BAAA;IACA,wHAAA;ID0PD;EACF;AFxGD;EACE,+CAAA;ECzGA,4FAAA;EACQ,oFAAA;ECoNT;AFhGD;EGpKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4GD;AFvGD;EGrKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoHD;AF9GD;EGtKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4HD;AFrHD;EGvKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoID;AFrHD;EG/KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDuSH;AFlHD;EGzLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8SH;AFxHD;EG1LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqTH;AF9HD;EG3LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4TH;AFpID;EG5LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDmUH;AF1ID;EG7LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED0UH;AF7ID;EGhKI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDgTH;AFzID;EACE,oBAAA;EC5JA,oDAAA;EACQ,4CAAA;ECwST;AF1ID;;;EAGE,+BAAA;EGjNE,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH+MF,uBAAA;EEgJD;AFrJD;;;EAQI,mBAAA;EEkJH;AFxID;ECjLE,mDAAA;EACQ,2CAAA;EC4TT;AFlID;EG1OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED+WH;AFxID;EG3OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDsXH;AF9ID;EG5OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED6XH;AFpJD;EG7OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDoYH;AF1JD;EG9OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED2YH;AFhKD;EG/OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDkZH;AFhKD;EGtPI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHoPF,uBAAA;ECzMA,2FAAA;EACQ,mFAAA;ECgXT","file":"bootstrap-theme.css","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",".btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default:disabled,\n.btn-default[disabled] {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary:disabled,\n.btn-primary[disabled] {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success:disabled,\n.btn-success[disabled] {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info:disabled,\n.btn-info[disabled] {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning:disabled,\n.btn-warning[disabled] {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger:disabled,\n.btn-danger[disabled] {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/src/qt/res/assets/plugins/boostrapv3/css/bootstrap.css.map b/src/qt/res/assets/plugins/boostrapv3/css/bootstrap.css.map deleted file mode 100644 index 2fd84f36eb..0000000000 --- a/src/qt/res/assets/plugins/boostrapv3/css/bootstrap.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA,6DAA4D;ACQ5D;EACE,yBAAA;EACA,4BAAA;EACA,gCAAA;EDND;ACaD;EACE,WAAA;EDXD;ACwBD;;;;;;;;;;;;;EAaE,gBAAA;EDtBD;AC8BD;;;;EAIE,uBAAA;EACA,0BAAA;ED5BD;ACoCD;EACE,eAAA;EACA,WAAA;EDlCD;AC0CD;;EAEE,eAAA;EDxCD;ACkDD;EACE,+BAAA;EDhDD;ACuDD;;EAEE,YAAA;EDrDD;AC+DD;EACE,2BAAA;ED7DD;ACoED;;EAEE,mBAAA;EDlED;ACyED;EACE,oBAAA;EDvED;AC+ED;EACE,gBAAA;EACA,kBAAA;ED7ED;ACoFD;EACE,kBAAA;EACA,aAAA;EDlFD;ACyFD;EACE,gBAAA;EDvFD;AC8FD;;EAEE,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,0BAAA;ED5FD;AC+FD;EACE,aAAA;ED7FD;ACgGD;EACE,iBAAA;ED9FD;ACwGD;EACE,WAAA;EDtGD;AC6GD;EACE,kBAAA;ED3GD;ACqHD;EACE,kBAAA;EDnHD;AC0HD;EACE,8BAAA;EACA,iCAAA;UAAA,yBAAA;EACA,WAAA;EDxHD;AC+HD;EACE,gBAAA;ED7HD;ACoID;;;;EAIE,mCAAA;EACA,gBAAA;EDlID;ACoJD;;;;;EAKE,gBAAA;EACA,eAAA;EACA,WAAA;EDlJD;ACyJD;EACE,mBAAA;EDvJD;ACiKD;;EAEE,sBAAA;ED/JD;AC0KD;;;;EAIE,4BAAA;EACA,iBAAA;EDxKD;AC+KD;;EAEE,iBAAA;ED7KD;ACoLD;;EAEE,WAAA;EACA,YAAA;EDlLD;AC0LD;EACE,qBAAA;EDxLD;ACmMD;;EAEE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,YAAA;EDjMD;AC0MD;;EAEE,cAAA;EDxMD;ACiND;EACE,+BAAA;EACA,8BAAA;EACA,iCAAA;EACA,yBAAA;ED/MD;ACwND;;EAEE,0BAAA;EDtND;AC6ND;EACE,2BAAA;EACA,eAAA;EACA,gCAAA;ED3ND;ACmOD;EACE,WAAA;EACA,YAAA;EDjOD;ACwOD;EACE,gBAAA;EDtOD;AC8OD;EACE,mBAAA;ED5OD;ACsPD;EACE,2BAAA;EACA,mBAAA;EDpPD;ACuPD;;EAEE,YAAA;EDrPD;AACD,sFAAqF;AE1ErF;EAnGI;;;IAGI,oCAAA;IACA,wBAAA;IACA,qCAAA;YAAA,6BAAA;IACA,8BAAA;IFgLL;EE7KC;;IAEI,4BAAA;IF+KL;EE5KC;IACI,8BAAA;IF8KL;EE3KC;IACI,+BAAA;IF6KL;EExKC;;IAEI,aAAA;IF0KL;EEvKC;;IAEI,wBAAA;IACA,0BAAA;IFyKL;EEtKC;IACI,6BAAA;IFwKL;EErKC;;IAEI,0BAAA;IFuKL;EEpKC;IACI,4BAAA;IFsKL;EEnKC;;;IAGI,YAAA;IACA,WAAA;IFqKL;EElKC;;IAEI,yBAAA;IFoKL;EE7JC;IACI,6BAAA;IF+JL;EE3JC;IACI,eAAA;IF6JL;EE3JC;;IAGQ,mCAAA;IF4JT;EEzJC;IACI,wBAAA;IF2JL;EExJC;IACI,sCAAA;IF0JL;EE3JC;;IAKQ,mCAAA;IF0JT;EEvJC;;IAGQ,mCAAA;IFwJT;EACF;AGpPD;EACE,qCAAA;EACA,uDAAA;EACA,iYAAA;EHsPD;AG9OD;EACE,oBAAA;EACA,UAAA;EACA,uBAAA;EACA,qCAAA;EACA,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,qCAAA;EACA,oCAAA;EHgPD;AG5OmC;EAAW,gBAAA;EH+O9C;AG9OmC;EAAW,gBAAA;EHiP9C;AG/OmC;;EAAW,kBAAA;EHmP9C;AGlPmC;EAAW,kBAAA;EHqP9C;AGpPmC;EAAW,kBAAA;EHuP9C;AGtPmC;EAAW,kBAAA;EHyP9C;AGxPmC;EAAW,kBAAA;EH2P9C;AG1PmC;EAAW,kBAAA;EH6P9C;AG5PmC;EAAW,kBAAA;EH+P9C;AG9PmC;EAAW,kBAAA;EHiQ9C;AGhQmC;EAAW,kBAAA;EHmQ9C;AGlQmC;EAAW,kBAAA;EHqQ9C;AGpQmC;EAAW,kBAAA;EHuQ9C;AGtQmC;EAAW,kBAAA;EHyQ9C;AGxQmC;EAAW,kBAAA;EH2Q9C;AG1QmC;EAAW,kBAAA;EH6Q9C;AG5QmC;EAAW,kBAAA;EH+Q9C;AG9QmC;EAAW,kBAAA;EHiR9C;AGhRmC;EAAW,kBAAA;EHmR9C;AGlRmC;EAAW,kBAAA;EHqR9C;AGpRmC;EAAW,kBAAA;EHuR9C;AGtRmC;EAAW,kBAAA;EHyR9C;AGxRmC;EAAW,kBAAA;EH2R9C;AG1RmC;EAAW,kBAAA;EH6R9C;AG5RmC;EAAW,kBAAA;EH+R9C;AG9RmC;EAAW,kBAAA;EHiS9C;AGhSmC;EAAW,kBAAA;EHmS9C;AGlSmC;EAAW,kBAAA;EHqS9C;AGpSmC;EAAW,kBAAA;EHuS9C;AGtSmC;EAAW,kBAAA;EHyS9C;AGxSmC;EAAW,kBAAA;EH2S9C;AG1SmC;EAAW,kBAAA;EH6S9C;AG5SmC;EAAW,kBAAA;EH+S9C;AG9SmC;EAAW,kBAAA;EHiT9C;AGhTmC;EAAW,kBAAA;EHmT9C;AGlTmC;EAAW,kBAAA;EHqT9C;AGpTmC;EAAW,kBAAA;EHuT9C;AGtTmC;EAAW,kBAAA;EHyT9C;AGxTmC;EAAW,kBAAA;EH2T9C;AG1TmC;EAAW,kBAAA;EH6T9C;AG5TmC;EAAW,kBAAA;EH+T9C;AG9TmC;EAAW,kBAAA;EHiU9C;AGhUmC;EAAW,kBAAA;EHmU9C;AGlUmC;EAAW,kBAAA;EHqU9C;AGpUmC;EAAW,kBAAA;EHuU9C;AGtUmC;EAAW,kBAAA;EHyU9C;AGxUmC;EAAW,kBAAA;EH2U9C;AG1UmC;EAAW,kBAAA;EH6U9C;AG5UmC;EAAW,kBAAA;EH+U9C;AG9UmC;EAAW,kBAAA;EHiV9C;AGhVmC;EAAW,kBAAA;EHmV9C;AGlVmC;EAAW,kBAAA;EHqV9C;AGpVmC;EAAW,kBAAA;EHuV9C;AGtVmC;EAAW,kBAAA;EHyV9C;AGxVmC;EAAW,kBAAA;EH2V9C;AG1VmC;EAAW,kBAAA;EH6V9C;AG5VmC;EAAW,kBAAA;EH+V9C;AG9VmC;EAAW,kBAAA;EHiW9C;AGhWmC;EAAW,kBAAA;EHmW9C;AGlWmC;EAAW,kBAAA;EHqW9C;AGpWmC;EAAW,kBAAA;EHuW9C;AGtWmC;EAAW,kBAAA;EHyW9C;AGxWmC;EAAW,kBAAA;EH2W9C;AG1WmC;EAAW,kBAAA;EH6W9C;AG5WmC;EAAW,kBAAA;EH+W9C;AG9WmC;EAAW,kBAAA;EHiX9C;AGhXmC;EAAW,kBAAA;EHmX9C;AGlXmC;EAAW,kBAAA;EHqX9C;AGpXmC;EAAW,kBAAA;EHuX9C;AGtXmC;EAAW,kBAAA;EHyX9C;AGxXmC;EAAW,kBAAA;EH2X9C;AG1XmC;EAAW,kBAAA;EH6X9C;AG5XmC;EAAW,kBAAA;EH+X9C;AG9XmC;EAAW,kBAAA;EHiY9C;AGhYmC;EAAW,kBAAA;EHmY9C;AGlYmC;EAAW,kBAAA;EHqY9C;AGpYmC;EAAW,kBAAA;EHuY9C;AGtYmC;EAAW,kBAAA;EHyY9C;AGxYmC;EAAW,kBAAA;EH2Y9C;AG1YmC;EAAW,kBAAA;EH6Y9C;AG5YmC;EAAW,kBAAA;EH+Y9C;AG9YmC;EAAW,kBAAA;EHiZ9C;AGhZmC;EAAW,kBAAA;EHmZ9C;AGlZmC;EAAW,kBAAA;EHqZ9C;AGpZmC;EAAW,kBAAA;EHuZ9C;AGtZmC;EAAW,kBAAA;EHyZ9C;AGxZmC;EAAW,kBAAA;EH2Z9C;AG1ZmC;EAAW,kBAAA;EH6Z9C;AG5ZmC;EAAW,kBAAA;EH+Z9C;AG9ZmC;EAAW,kBAAA;EHia9C;AGhamC;EAAW,kBAAA;EHma9C;AGlamC;EAAW,kBAAA;EHqa9C;AGpamC;EAAW,kBAAA;EHua9C;AGtamC;EAAW,kBAAA;EHya9C;AGxamC;EAAW,kBAAA;EH2a9C;AG1amC;EAAW,kBAAA;EH6a9C;AG5amC;EAAW,kBAAA;EH+a9C;AG9amC;EAAW,kBAAA;EHib9C;AGhbmC;EAAW,kBAAA;EHmb9C;AGlbmC;EAAW,kBAAA;EHqb9C;AGpbmC;EAAW,kBAAA;EHub9C;AGtbmC;EAAW,kBAAA;EHyb9C;AGxbmC;EAAW,kBAAA;EH2b9C;AG1bmC;EAAW,kBAAA;EH6b9C;AG5bmC;EAAW,kBAAA;EH+b9C;AG9bmC;EAAW,kBAAA;EHic9C;AGhcmC;EAAW,kBAAA;EHmc9C;AGlcmC;EAAW,kBAAA;EHqc9C;AGpcmC;EAAW,kBAAA;EHuc9C;AGtcmC;EAAW,kBAAA;EHyc9C;AGxcmC;EAAW,kBAAA;EH2c9C;AG1cmC;EAAW,kBAAA;EH6c9C;AG5cmC;EAAW,kBAAA;EH+c9C;AG9cmC;EAAW,kBAAA;EHid9C;AGhdmC;EAAW,kBAAA;EHmd9C;AGldmC;EAAW,kBAAA;EHqd9C;AGpdmC;EAAW,kBAAA;EHud9C;AGtdmC;EAAW,kBAAA;EHyd9C;AGxdmC;EAAW,kBAAA;EH2d9C;AG1dmC;EAAW,kBAAA;EH6d9C;AG5dmC;EAAW,kBAAA;EH+d9C;AG9dmC;EAAW,kBAAA;EHie9C;AGhemC;EAAW,kBAAA;EHme9C;AGlemC;EAAW,kBAAA;EHqe9C;AGpemC;EAAW,kBAAA;EHue9C;AGtemC;EAAW,kBAAA;EHye9C;AGxemC;EAAW,kBAAA;EH2e9C;AG1emC;EAAW,kBAAA;EH6e9C;AG5emC;EAAW,kBAAA;EH+e9C;AG9emC;EAAW,kBAAA;EHif9C;AGhfmC;EAAW,kBAAA;EHmf9C;AGlfmC;EAAW,kBAAA;EHqf9C;AGpfmC;EAAW,kBAAA;EHuf9C;AGtfmC;EAAW,kBAAA;EHyf9C;AGxfmC;EAAW,kBAAA;EH2f9C;AG1fmC;EAAW,kBAAA;EH6f9C;AG5fmC;EAAW,kBAAA;EH+f9C;AG9fmC;EAAW,kBAAA;EHigB9C;AGhgBmC;EAAW,kBAAA;EHmgB9C;AGlgBmC;EAAW,kBAAA;EHqgB9C;AGpgBmC;EAAW,kBAAA;EHugB9C;AGtgBmC;EAAW,kBAAA;EHygB9C;AGxgBmC;EAAW,kBAAA;EH2gB9C;AG1gBmC;EAAW,kBAAA;EH6gB9C;AG5gBmC;EAAW,kBAAA;EH+gB9C;AG9gBmC;EAAW,kBAAA;EHihB9C;AGhhBmC;EAAW,kBAAA;EHmhB9C;AGlhBmC;EAAW,kBAAA;EHqhB9C;AGphBmC;EAAW,kBAAA;EHuhB9C;AGthBmC;EAAW,kBAAA;EHyhB9C;AGxhBmC;EAAW,kBAAA;EH2hB9C;AG1hBmC;EAAW,kBAAA;EH6hB9C;AG5hBmC;EAAW,kBAAA;EH+hB9C;AG9hBmC;EAAW,kBAAA;EHiiB9C;AGhiBmC;EAAW,kBAAA;EHmiB9C;AGliBmC;EAAW,kBAAA;EHqiB9C;AGpiBmC;EAAW,kBAAA;EHuiB9C;AGtiBmC;EAAW,kBAAA;EHyiB9C;AGxiBmC;EAAW,kBAAA;EH2iB9C;AG1iBmC;EAAW,kBAAA;EH6iB9C;AG5iBmC;EAAW,kBAAA;EH+iB9C;AG9iBmC;EAAW,kBAAA;EHijB9C;AGhjBmC;EAAW,kBAAA;EHmjB9C;AGljBmC;EAAW,kBAAA;EHqjB9C;AGpjBmC;EAAW,kBAAA;EHujB9C;AGtjBmC;EAAW,kBAAA;EHyjB9C;AGxjBmC;EAAW,kBAAA;EH2jB9C;AG1jBmC;EAAW,kBAAA;EH6jB9C;AG5jBmC;EAAW,kBAAA;EH+jB9C;AG9jBmC;EAAW,kBAAA;EHikB9C;AGhkBmC;EAAW,kBAAA;EHmkB9C;AGlkBmC;EAAW,kBAAA;EHqkB9C;AGpkBmC;EAAW,kBAAA;EHukB9C;AGtkBmC;EAAW,kBAAA;EHykB9C;AGxkBmC;EAAW,kBAAA;EH2kB9C;AG1kBmC;EAAW,kBAAA;EH6kB9C;AG5kBmC;EAAW,kBAAA;EH+kB9C;AG9kBmC;EAAW,kBAAA;EHilB9C;AGhlBmC;EAAW,kBAAA;EHmlB9C;AGllBmC;EAAW,kBAAA;EHqlB9C;AGplBmC;EAAW,kBAAA;EHulB9C;AGtlBmC;EAAW,kBAAA;EHylB9C;AGxlBmC;EAAW,kBAAA;EH2lB9C;AG1lBmC;EAAW,kBAAA;EH6lB9C;AG5lBmC;EAAW,kBAAA;EH+lB9C;AG9lBmC;EAAW,kBAAA;EHimB9C;AGhmBmC;EAAW,kBAAA;EHmmB9C;AGlmBmC;EAAW,kBAAA;EHqmB9C;AGpmBmC;EAAW,kBAAA;EHumB9C;AGtmBmC;EAAW,kBAAA;EHymB9C;AGxmBmC;EAAW,kBAAA;EH2mB9C;AG1mBmC;EAAW,kBAAA;EH6mB9C;AG5mBmC;EAAW,kBAAA;EH+mB9C;AG9mBmC;EAAW,kBAAA;EHinB9C;AGhnBmC;EAAW,kBAAA;EHmnB9C;AGlnBmC;EAAW,kBAAA;EHqnB9C;AGpnBmC;EAAW,kBAAA;EHunB9C;AGtnBmC;EAAW,kBAAA;EHynB9C;AGxnBmC;EAAW,kBAAA;EH2nB9C;AG1nBmC;EAAW,kBAAA;EH6nB9C;AG5nBmC;EAAW,kBAAA;EH+nB9C;AG9nBmC;EAAW,kBAAA;EHioB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGxoBmC;EAAW,kBAAA;EH2oB9C;AG1oBmC;EAAW,kBAAA;EH6oB9C;AG5oBmC;EAAW,kBAAA;EH+oB9C;AG9oBmC;EAAW,kBAAA;EHipB9C;AGhpBmC;EAAW,kBAAA;EHmpB9C;AGlpBmC;EAAW,kBAAA;EHqpB9C;AGppBmC;EAAW,kBAAA;EHupB9C;AGtpBmC;EAAW,kBAAA;EHypB9C;AGxpBmC;EAAW,kBAAA;EH2pB9C;AG1pBmC;EAAW,kBAAA;EH6pB9C;AG5pBmC;EAAW,kBAAA;EH+pB9C;AG9pBmC;EAAW,kBAAA;EHiqB9C;AGhqBmC;EAAW,kBAAA;EHmqB9C;AGlqBmC;EAAW,kBAAA;EHqqB9C;AGpqBmC;EAAW,kBAAA;EHuqB9C;AGtqBmC;EAAW,kBAAA;EHyqB9C;AGxqBmC;EAAW,kBAAA;EH2qB9C;AG1qBmC;EAAW,kBAAA;EH6qB9C;AG5qBmC;EAAW,kBAAA;EH+qB9C;AG9qBmC;EAAW,kBAAA;EHirB9C;AGhrBmC;EAAW,kBAAA;EHmrB9C;AGlrBmC;EAAW,kBAAA;EHqrB9C;AGprBmC;EAAW,kBAAA;EHurB9C;AGtrBmC;EAAW,kBAAA;EHyrB9C;AGxrBmC;EAAW,kBAAA;EH2rB9C;AG1rBmC;EAAW,kBAAA;EH6rB9C;AG5rBmC;EAAW,kBAAA;EH+rB9C;AG9rBmC;EAAW,kBAAA;EHisB9C;AGhsBmC;EAAW,kBAAA;EHmsB9C;AGlsBmC;EAAW,kBAAA;EHqsB9C;AGpsBmC;EAAW,kBAAA;EHusB9C;AGtsBmC;EAAW,kBAAA;EHysB9C;AGxsBmC;EAAW,kBAAA;EH2sB9C;AG1sBmC;EAAW,kBAAA;EH6sB9C;AG5sBmC;EAAW,kBAAA;EH+sB9C;AG9sBmC;EAAW,kBAAA;EHitB9C;AGhtBmC;EAAW,kBAAA;EHmtB9C;AGltBmC;EAAW,kBAAA;EHqtB9C;AGptBmC;EAAW,kBAAA;EHutB9C;AGttBmC;EAAW,kBAAA;EHytB9C;AGxtBmC;EAAW,kBAAA;EH2tB9C;AG1tBmC;EAAW,kBAAA;EH6tB9C;AG5tBmC;EAAW,kBAAA;EH+tB9C;AG9tBmC;EAAW,kBAAA;EHiuB9C;AGhuBmC;EAAW,kBAAA;EHmuB9C;AGluBmC;EAAW,kBAAA;EHquB9C;AGpuBmC;EAAW,kBAAA;EHuuB9C;AGtuBmC;EAAW,kBAAA;EHyuB9C;AGxuBmC;EAAW,kBAAA;EH2uB9C;AG1uBmC;EAAW,kBAAA;EH6uB9C;AG5uBmC;EAAW,kBAAA;EH+uB9C;AG9uBmC;EAAW,kBAAA;EHivB9C;AIvhCD;ECgEE,gCAAA;EACG,6BAAA;EACK,wBAAA;EL09BT;AIzhCD;;EC6DE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELg+BT;AIvhCD;EACE,iBAAA;EACA,+CAAA;EJyhCD;AIthCD;EACE,6DAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EJwhCD;AIphCD;;;;EAIE,sBAAA;EACA,oBAAA;EACA,sBAAA;EJshCD;AIhhCD;EACE,gBAAA;EACA,uBAAA;EJkhCD;AIhhCC;;EAEE,gBAAA;EACA,4BAAA;EJkhCH;AI/gCC;EErDA,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENskCD;AIzgCD;EACE,WAAA;EJ2gCD;AIrgCD;EACE,wBAAA;EJugCD;AIngCD;;;;;EGvEE,gBAAA;EACA,iBAAA;EACA,cAAA;EPilCD;AIvgCD;EACE,oBAAA;EJygCD;AIngCD;EACE,cAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EC6FA,0CAAA;EACK,qCAAA;EACG,kCAAA;EEvLR,uBAAA;EACA,iBAAA;EACA,cAAA;EPimCD;AIngCD;EACE,oBAAA;EJqgCD;AI//BD;EACE,kBAAA;EACA,qBAAA;EACA,WAAA;EACA,+BAAA;EJigCD;AIz/BD;EACE,oBAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EJ2/BD;AIn/BC;;EAEE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA;EJq/BH;AIz+BD;EACE,iBAAA;EJ2+BD;AQnoCD;;;;;;;;;;;;EAEE,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;ER+oCD;AQppCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,qBAAA;EACA,gBAAA;EACA,gBAAA;ERqqCH;AQjqCD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERsqCD;AQ1qCD;;;;;;;;;;;;EAQI,gBAAA;ERgrCH;AQ7qCD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERkrCD;AQtrCD;;;;;;;;;;;;EAQI,gBAAA;ER4rCH;AQxrCD;;EAAU,iBAAA;ER4rCT;AQ3rCD;;EAAU,iBAAA;ER+rCT;AQ9rCD;;EAAU,iBAAA;ERksCT;AQjsCD;;EAAU,iBAAA;ERqsCT;AQpsCD;;EAAU,iBAAA;ERwsCT;AQvsCD;;EAAU,iBAAA;ER2sCT;AQrsCD;EACE,kBAAA;ERusCD;AQpsCD;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ERssCD;AQjsCD;EAAA;IAFI,iBAAA;IRusCD;EACF;AQ/rCD;;EAEE,gBAAA;ERisCD;AQ9rCD;;EAEE,2BAAA;EACA,eAAA;ERgsCD;AQ5rCD;EAAuB,kBAAA;ER+rCtB;AQ9rCD;EAAuB,mBAAA;ERisCtB;AQhsCD;EAAuB,oBAAA;ERmsCtB;AQlsCD;EAAuB,qBAAA;ERqsCtB;AQpsCD;EAAuB,qBAAA;ERusCtB;AQpsCD;EAAuB,2BAAA;ERusCtB;AQtsCD;EAAuB,2BAAA;ERysCtB;AQxsCD;EAAuB,4BAAA;ER2sCtB;AQxsCD;EACE,gBAAA;ER0sCD;AQxsCD;ECrGE,gBAAA;ETgzCD;AS/yCC;EACE,gBAAA;ETizCH;AQ3sCD;ECxGE,gBAAA;ETszCD;ASrzCC;EACE,gBAAA;ETuzCH;AQ9sCD;EC3GE,gBAAA;ET4zCD;AS3zCC;EACE,gBAAA;ET6zCH;AQjtCD;EC9GE,gBAAA;ETk0CD;ASj0CC;EACE,gBAAA;ETm0CH;AQptCD;ECjHE,gBAAA;ETw0CD;ASv0CC;EACE,gBAAA;ETy0CH;AQntCD;EAGE,aAAA;EE3HA,2BAAA;EV+0CD;AU90CC;EACE,2BAAA;EVg1CH;AQptCD;EE9HE,2BAAA;EVq1CD;AUp1CC;EACE,2BAAA;EVs1CH;AQvtCD;EEjIE,2BAAA;EV21CD;AU11CC;EACE,2BAAA;EV41CH;AQ1tCD;EEpIE,2BAAA;EVi2CD;AUh2CC;EACE,2BAAA;EVk2CH;AQ7tCD;EEvIE,2BAAA;EVu2CD;AUt2CC;EACE,2BAAA;EVw2CH;AQ3tCD;EACE,qBAAA;EACA,qBAAA;EACA,kCAAA;ER6tCD;AQrtCD;;EAEE,eAAA;EACA,qBAAA;ERutCD;AQ1tCD;;;;EAMI,kBAAA;ER0tCH;AQntCD;EACE,iBAAA;EACA,kBAAA;ERqtCD;AQjtCD;EALE,iBAAA;EACA,kBAAA;EAMA,mBAAA;ERotCD;AQttCD;EAKI,uBAAA;EACA,mBAAA;EACA,oBAAA;ERotCH;AQ/sCD;EACE,eAAA;EACA,qBAAA;ERitCD;AQ/sCD;;EAEE,yBAAA;ERitCD;AQ/sCD;EACE,mBAAA;ERitCD;AQ/sCD;EACE,gBAAA;ERitCD;AQxrCD;EAAA;IAVM,aAAA;IACA,cAAA;IACA,aAAA;IACA,mBAAA;IGtNJ,kBAAA;IACA,yBAAA;IACA,qBAAA;IX65CC;EQlsCH;IAHM,oBAAA;IRwsCH;EACF;AQ/rCD;;EAGE,cAAA;EACA,mCAAA;ERgsCD;AQ9rCD;EACE,gBAAA;EA9IqB,2BAAA;ER+0CtB;AQ5rCD;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,gCAAA;ER8rCD;AQzrCG;;;EACE,kBAAA;ER6rCL;AQvsCD;;;EAmBI,gBAAA;EACA,gBAAA;EACA,yBAAA;EACA,gBAAA;ERyrCH;AQvrCG;;;EACE,wBAAA;ER2rCL;AQnrCD;;EAEE,qBAAA;EACA,iBAAA;EACA,iCAAA;EACA,gBAAA;EACA,mBAAA;ERqrCD;AQ/qCG;;;;;;EAAW,aAAA;ERurCd;AQtrCG;;;;;;EACE,wBAAA;ER6rCL;AQvrCD;EACE,qBAAA;EACA,oBAAA;EACA,yBAAA;ERyrCD;AY/9CD;;;;EAIE,gEAAA;EZi+CD;AY79CD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EZ+9CD;AY39CD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EACA,wDAAA;UAAA,gDAAA;EZ69CD;AYn+CD;EASI,YAAA;EACA,iBAAA;EACA,mBAAA;EACA,0BAAA;UAAA,kBAAA;EZ69CH;AYx9CD;EACE,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EZ09CD;AYr+CD;EAeI,YAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,kBAAA;EZy9CH;AYp9CD;EACE,mBAAA;EACA,oBAAA;EZs9CD;AahhDD;ECHE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;EdshDD;AahhDC;EAAA;IAFE,cAAA;IbshDD;EACF;AalhDC;EAAA;IAFE,cAAA;IbwhDD;EACF;AaphDD;EAAA;IAFI,eAAA;Ib0hDD;EACF;AajhDD;ECvBE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Ed2iDD;Aa9gDD;ECvBE,oBAAA;EACA,qBAAA;EdwiDD;AexiDG;EACE,oBAAA;EAEA,iBAAA;EAEA,oBAAA;EACA,qBAAA;EfwiDL;AexhDG;EACE,aAAA;Ef0hDL;AenhDC;EACE,aAAA;EfqhDH;AethDC;EACE,qBAAA;EfwhDH;AezhDC;EACE,qBAAA;Ef2hDH;Ae5hDC;EACE,YAAA;Ef8hDH;Ae/hDC;EACE,qBAAA;EfiiDH;AeliDC;EACE,qBAAA;EfoiDH;AeriDC;EACE,YAAA;EfuiDH;AexiDC;EACE,qBAAA;Ef0iDH;Ae3iDC;EACE,qBAAA;Ef6iDH;Ae9iDC;EACE,YAAA;EfgjDH;AejjDC;EACE,qBAAA;EfmjDH;AepjDC;EACE,oBAAA;EfsjDH;AexiDC;EACE,aAAA;Ef0iDH;Ae3iDC;EACE,qBAAA;Ef6iDH;Ae9iDC;EACE,qBAAA;EfgjDH;AejjDC;EACE,YAAA;EfmjDH;AepjDC;EACE,qBAAA;EfsjDH;AevjDC;EACE,qBAAA;EfyjDH;Ae1jDC;EACE,YAAA;Ef4jDH;Ae7jDC;EACE,qBAAA;Ef+jDH;AehkDC;EACE,qBAAA;EfkkDH;AenkDC;EACE,YAAA;EfqkDH;AetkDC;EACE,qBAAA;EfwkDH;AezkDC;EACE,oBAAA;Ef2kDH;AevkDC;EACE,aAAA;EfykDH;AezlDC;EACE,YAAA;Ef2lDH;Ae5lDC;EACE,oBAAA;Ef8lDH;Ae/lDC;EACE,oBAAA;EfimDH;AelmDC;EACE,WAAA;EfomDH;AermDC;EACE,oBAAA;EfumDH;AexmDC;EACE,oBAAA;Ef0mDH;Ae3mDC;EACE,WAAA;Ef6mDH;Ae9mDC;EACE,oBAAA;EfgnDH;AejnDC;EACE,oBAAA;EfmnDH;AepnDC;EACE,WAAA;EfsnDH;AevnDC;EACE,oBAAA;EfynDH;Ae1nDC;EACE,mBAAA;Ef4nDH;AexnDC;EACE,YAAA;Ef0nDH;Ae5mDC;EACE,mBAAA;Ef8mDH;Ae/mDC;EACE,2BAAA;EfinDH;AelnDC;EACE,2BAAA;EfonDH;AernDC;EACE,kBAAA;EfunDH;AexnDC;EACE,2BAAA;Ef0nDH;Ae3nDC;EACE,2BAAA;Ef6nDH;Ae9nDC;EACE,kBAAA;EfgoDH;AejoDC;EACE,2BAAA;EfmoDH;AepoDC;EACE,2BAAA;EfsoDH;AevoDC;EACE,kBAAA;EfyoDH;Ae1oDC;EACE,2BAAA;Ef4oDH;Ae7oDC;EACE,0BAAA;Ef+oDH;AehpDC;EACE,iBAAA;EfkpDH;AalpDD;EElCI;IACE,aAAA;IfurDH;EehrDD;IACE,aAAA;IfkrDD;EenrDD;IACE,qBAAA;IfqrDD;EetrDD;IACE,qBAAA;IfwrDD;EezrDD;IACE,YAAA;If2rDD;Ee5rDD;IACE,qBAAA;If8rDD;Ee/rDD;IACE,qBAAA;IfisDD;EelsDD;IACE,YAAA;IfosDD;EersDD;IACE,qBAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,YAAA;If6sDD;Ee9sDD;IACE,qBAAA;IfgtDD;EejtDD;IACE,oBAAA;IfmtDD;EersDD;IACE,aAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,qBAAA;If6sDD;Ee9sDD;IACE,YAAA;IfgtDD;EejtDD;IACE,qBAAA;IfmtDD;EeptDD;IACE,qBAAA;IfstDD;EevtDD;IACE,YAAA;IfytDD;Ee1tDD;IACE,qBAAA;If4tDD;Ee7tDD;IACE,qBAAA;If+tDD;EehuDD;IACE,YAAA;IfkuDD;EenuDD;IACE,qBAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EepuDD;IACE,aAAA;IfsuDD;EetvDD;IACE,YAAA;IfwvDD;EezvDD;IACE,oBAAA;If2vDD;Ee5vDD;IACE,oBAAA;If8vDD;Ee/vDD;IACE,WAAA;IfiwDD;EelwDD;IACE,oBAAA;IfowDD;EerwDD;IACE,oBAAA;IfuwDD;EexwDD;IACE,WAAA;If0wDD;Ee3wDD;IACE,oBAAA;If6wDD;Ee9wDD;IACE,oBAAA;IfgxDD;EejxDD;IACE,WAAA;IfmxDD;EepxDD;IACE,oBAAA;IfsxDD;EevxDD;IACE,mBAAA;IfyxDD;EerxDD;IACE,YAAA;IfuxDD;EezwDD;IACE,mBAAA;If2wDD;Ee5wDD;IACE,2BAAA;If8wDD;Ee/wDD;IACE,2BAAA;IfixDD;EelxDD;IACE,kBAAA;IfoxDD;EerxDD;IACE,2BAAA;IfuxDD;EexxDD;IACE,2BAAA;If0xDD;Ee3xDD;IACE,kBAAA;If6xDD;Ee9xDD;IACE,2BAAA;IfgyDD;EejyDD;IACE,2BAAA;IfmyDD;EepyDD;IACE,kBAAA;IfsyDD;EevyDD;IACE,2BAAA;IfyyDD;Ee1yDD;IACE,0BAAA;If4yDD;Ee7yDD;IACE,iBAAA;If+yDD;EACF;AavyDD;EE3CI;IACE,aAAA;Ifq1DH;Ee90DD;IACE,aAAA;Ifg1DD;Eej1DD;IACE,qBAAA;Ifm1DD;Eep1DD;IACE,qBAAA;Ifs1DD;Eev1DD;IACE,YAAA;Ify1DD;Ee11DD;IACE,qBAAA;If41DD;Ee71DD;IACE,qBAAA;If+1DD;Eeh2DD;IACE,YAAA;Ifk2DD;Een2DD;IACE,qBAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,YAAA;If22DD;Ee52DD;IACE,qBAAA;If82DD;Ee/2DD;IACE,oBAAA;Ifi3DD;Een2DD;IACE,aAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,qBAAA;If22DD;Ee52DD;IACE,YAAA;If82DD;Ee/2DD;IACE,qBAAA;Ifi3DD;Eel3DD;IACE,qBAAA;Ifo3DD;Eer3DD;IACE,YAAA;Ifu3DD;Eex3DD;IACE,qBAAA;If03DD;Ee33DD;IACE,qBAAA;If63DD;Ee93DD;IACE,YAAA;Ifg4DD;Eej4DD;IACE,qBAAA;Ifm4DD;Eep4DD;IACE,oBAAA;Ifs4DD;Eel4DD;IACE,aAAA;Ifo4DD;Eep5DD;IACE,YAAA;Ifs5DD;Eev5DD;IACE,oBAAA;Ify5DD;Ee15DD;IACE,oBAAA;If45DD;Ee75DD;IACE,WAAA;If+5DD;Eeh6DD;IACE,oBAAA;Ifk6DD;Een6DD;IACE,oBAAA;Ifq6DD;Eet6DD;IACE,WAAA;Ifw6DD;Eez6DD;IACE,oBAAA;If26DD;Ee56DD;IACE,oBAAA;If86DD;Ee/6DD;IACE,WAAA;Ifi7DD;Eel7DD;IACE,oBAAA;Ifo7DD;Eer7DD;IACE,mBAAA;Ifu7DD;Een7DD;IACE,YAAA;Ifq7DD;Eev6DD;IACE,mBAAA;Ify6DD;Ee16DD;IACE,2BAAA;If46DD;Ee76DD;IACE,2BAAA;If+6DD;Eeh7DD;IACE,kBAAA;Ifk7DD;Een7DD;IACE,2BAAA;Ifq7DD;Eet7DD;IACE,2BAAA;Ifw7DD;Eez7DD;IACE,kBAAA;If27DD;Ee57DD;IACE,2BAAA;If87DD;Ee/7DD;IACE,2BAAA;Ifi8DD;Eel8DD;IACE,kBAAA;Ifo8DD;Eer8DD;IACE,2BAAA;Ifu8DD;Eex8DD;IACE,0BAAA;If08DD;Ee38DD;IACE,iBAAA;If68DD;EACF;Aal8DD;EE9CI;IACE,aAAA;Ifm/DH;Ee5+DD;IACE,aAAA;If8+DD;Ee/+DD;IACE,qBAAA;Ifi/DD;Eel/DD;IACE,qBAAA;Ifo/DD;Eer/DD;IACE,YAAA;Ifu/DD;Eex/DD;IACE,qBAAA;If0/DD;Ee3/DD;IACE,qBAAA;If6/DD;Ee9/DD;IACE,YAAA;IfggED;EejgED;IACE,qBAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,YAAA;IfygED;Ee1gED;IACE,qBAAA;If4gED;Ee7gED;IACE,oBAAA;If+gED;EejgED;IACE,aAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,qBAAA;IfygED;Ee1gED;IACE,YAAA;If4gED;Ee7gED;IACE,qBAAA;If+gED;EehhED;IACE,qBAAA;IfkhED;EenhED;IACE,YAAA;IfqhED;EethED;IACE,qBAAA;IfwhED;EezhED;IACE,qBAAA;If2hED;Ee5hED;IACE,YAAA;If8hED;Ee/hED;IACE,qBAAA;IfiiED;EeliED;IACE,oBAAA;IfoiED;EehiED;IACE,aAAA;IfkiED;EeljED;IACE,YAAA;IfojED;EerjED;IACE,oBAAA;IfujED;EexjED;IACE,oBAAA;If0jED;Ee3jED;IACE,WAAA;If6jED;Ee9jED;IACE,oBAAA;IfgkED;EejkED;IACE,oBAAA;IfmkED;EepkED;IACE,WAAA;IfskED;EevkED;IACE,oBAAA;IfykED;Ee1kED;IACE,oBAAA;If4kED;Ee7kED;IACE,WAAA;If+kED;EehlED;IACE,oBAAA;IfklED;EenlED;IACE,mBAAA;IfqlED;EejlED;IACE,YAAA;IfmlED;EerkED;IACE,mBAAA;IfukED;EexkED;IACE,2BAAA;If0kED;Ee3kED;IACE,2BAAA;If6kED;Ee9kED;IACE,kBAAA;IfglED;EejlED;IACE,2BAAA;IfmlED;EeplED;IACE,2BAAA;IfslED;EevlED;IACE,kBAAA;IfylED;Ee1lED;IACE,2BAAA;If4lED;Ee7lED;IACE,2BAAA;If+lED;EehmED;IACE,kBAAA;IfkmED;EenmED;IACE,2BAAA;IfqmED;EetmED;IACE,0BAAA;IfwmED;EezmED;IACE,iBAAA;If2mED;EACF;AgB/qED;EACE,+BAAA;EhBirED;AgB/qED;EACE,kBAAA;EACA,qBAAA;EACA,gBAAA;EACA,kBAAA;EhBirED;AgB/qED;EACE,kBAAA;EhBirED;AgB3qED;EACE,aAAA;EACA,iBAAA;EACA,qBAAA;EhB6qED;AgBhrED;;;;;;EAWQ,cAAA;EACA,yBAAA;EACA,qBAAA;EACA,+BAAA;EhB6qEP;AgB3rED;EAoBI,wBAAA;EACA,kCAAA;EhB0qEH;AgB/rED;;;;;;EA8BQ,eAAA;EhByqEP;AgBvsED;EAoCI,+BAAA;EhBsqEH;AgB1sED;EAyCI,2BAAA;EhBoqEH;AgB7pED;;;;;;EAOQ,cAAA;EhB8pEP;AgBnpED;EACE,2BAAA;EhBqpED;AgBtpED;;;;;;EAQQ,2BAAA;EhBspEP;AgB9pED;;EAeM,0BAAA;EhBmpEL;AgBzoED;EAEI,2BAAA;EhB0oEH;AgBjoED;EAEI,2BAAA;EhBkoEH;AgBznED;EACE,kBAAA;EACA,aAAA;EACA,uBAAA;EhB2nED;AgBtnEG;;EACE,kBAAA;EACA,aAAA;EACA,qBAAA;EhBynEL;AiBrwEC;;;;;;;;;;;;EAOI,2BAAA;EjB4wEL;AiBtwEC;;;;;EAMI,2BAAA;EjBuwEL;AiB1xEC;;;;;;;;;;;;EAOI,2BAAA;EjBiyEL;AiB3xEC;;;;;EAMI,2BAAA;EjB4xEL;AiB/yEC;;;;;;;;;;;;EAOI,2BAAA;EjBszEL;AiBhzEC;;;;;EAMI,2BAAA;EjBizEL;AiBp0EC;;;;;;;;;;;;EAOI,2BAAA;EjB20EL;AiBr0EC;;;;;EAMI,2BAAA;EjBs0EL;AiBz1EC;;;;;;;;;;;;EAOI,2BAAA;EjBg2EL;AiB11EC;;;;;EAMI,2BAAA;EjB21EL;AgBzsED;EACE,kBAAA;EACA,mBAAA;EhB2sED;AgB9oED;EAAA;IA1DI,aAAA;IACA,qBAAA;IACA,oBAAA;IACA,8CAAA;IACA,2BAAA;IhB4sED;EgBtpEH;IAlDM,kBAAA;IhB2sEH;EgBzpEH;;;;;;IAzCY,qBAAA;IhB0sET;EgBjqEH;IAjCM,WAAA;IhBqsEH;EgBpqEH;;;;;;IAxBY,gBAAA;IhBosET;EgB5qEH;;;;;;IApBY,iBAAA;IhBwsET;EgBprEH;;;;IAPY,kBAAA;IhBisET;EACF;AkB35ED;EACE,YAAA;EACA,WAAA;EACA,WAAA;EAIA,cAAA;ElB05ED;AkBv5ED;EACE,gBAAA;EACA,aAAA;EACA,YAAA;EACA,qBAAA;EACA,iBAAA;EACA,sBAAA;EACA,gBAAA;EACA,WAAA;EACA,kCAAA;ElBy5ED;AkBt5ED;EACE,uBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;ElBw5ED;AkB74ED;Eb4BE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELo3ET;AkB74ED;;EAEE,iBAAA;EACA,oBAAA;EACA,qBAAA;ElB+4ED;AkB34ED;EACE,gBAAA;ElB64ED;AkBz4ED;EACE,gBAAA;EACA,aAAA;ElB24ED;AkBv4ED;;EAEE,cAAA;ElBy4ED;AkBr4ED;;;EZxEE,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENi9ED;AkBr4ED;EACE,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;ElBu4ED;AkB72ED;EACE,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EACA,wBAAA;EACA,2BAAA;EACA,oBAAA;EbzDA,0DAAA;EACQ,kDAAA;EAyHR,wFAAA;EACK,2EAAA;EACG,wEAAA;ELizET;AmBz7EC;EACE,uBAAA;EACA,YAAA;EdUF,wFAAA;EACQ,gFAAA;ELk7ET;AKj5EC;EACE,gBAAA;EACA,YAAA;ELm5EH;AKj5EC;EAA0B,gBAAA;ELo5E3B;AKn5EC;EAAgC,gBAAA;ELs5EjC;AkBr3EC;;;EAGE,2BAAA;EACA,YAAA;ElBu3EH;AkBp3EC;;EAEE,qBAAA;ElBs3EH;AkBl3EC;EACE,cAAA;ElBo3EH;AkBx2ED;EACE,0BAAA;ElB02ED;AkBt0ED;EAxBE;;;;IAIE,mBAAA;IlBi2ED;EkB/1EC;;;;;;;;IAEE,mBAAA;IlBu2EH;EkBp2EC;;;;;;;;IAEE,mBAAA;IlB42EH;EACF;AkBl2ED;EACE,qBAAA;ElBo2ED;AkB51ED;;EAEE,oBAAA;EACA,gBAAA;EACA,kBAAA;EACA,qBAAA;ElB81ED;AkBn2ED;;EAQI,kBAAA;EACA,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,iBAAA;ElB+1EH;AkB51ED;;;;EAIE,oBAAA;EACA,oBAAA;EACA,oBAAA;ElB81ED;AkB31ED;;EAEE,kBAAA;ElB61ED;AkBz1ED;;EAEE,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,kBAAA;EACA,wBAAA;EACA,qBAAA;EACA,iBAAA;ElB21ED;AkBz1ED;;EAEE,eAAA;EACA,mBAAA;ElB21ED;AkBl1EC;;;;;;EAGE,qBAAA;ElBu1EH;AkBj1EC;;;;EAEE,qBAAA;ElBq1EH;AkB/0EC;;;;EAGI,qBAAA;ElBk1EL;AkBv0ED;EAEE,kBAAA;EACA,qBAAA;EAEA,kBAAA;EACA,kBAAA;ElBu0ED;AkBr0EC;;EAEE,iBAAA;EACA,kBAAA;ElBu0EH;AkB1zED;EC1PE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBujFD;AmBrjFC;EACE,cAAA;EACA,mBAAA;EnBujFH;AmBpjFC;;EAEE,cAAA;EnBsjFH;AkBt0ED;EC7PE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBskFD;AmBpkFC;EACE,cAAA;EACA,mBAAA;EnBskFH;AmBnkFC;;EAEE,cAAA;EnBqkFH;AkBr1ED;EAKI,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ElBm1EH;AkB/0ED;EC1QE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnB4lFD;AmB1lFC;EACE,cAAA;EACA,mBAAA;EnB4lFH;AmBzlFC;;EAEE,cAAA;EnB2lFH;AkB31ED;EC7QE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnB2mFD;AmBzmFC;EACE,cAAA;EACA,mBAAA;EnB2mFH;AmBxmFC;;EAEE,cAAA;EnB0mFH;AkB12ED;EAKI,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,kBAAA;ElBw2EH;AkB/1ED;EAEE,oBAAA;ElBg2ED;AkBl2ED;EAMI,uBAAA;ElB+1EH;AkB31ED;EACE,oBAAA;EACA,QAAA;EACA,UAAA;EACA,YAAA;EACA,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;EACA,sBAAA;ElB61ED;AkB31ED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElB61ED;AkB31ED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElB61ED;AkBz1ED;;;;;;;;;;ECrXI,gBAAA;EnB0tFH;AkBr2ED;ECjXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;EL2qFT;AmBztFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;ELgrFT;AkB/2ED;ECvWI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBytFH;AkBp3ED;ECjWI,gBAAA;EnBwtFH;AkBp3ED;;;;;;;;;;ECxXI,gBAAA;EnBwvFH;AkBh4ED;ECpXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;ELysFT;AmBvvFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;EL8sFT;AkB14ED;EC1WI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBuvFH;AkB/4ED;ECpWI,gBAAA;EnBsvFH;AkB/4ED;;;;;;;;;;EC3XI,gBAAA;EnBsxFH;AkB35ED;ECvXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;ELuuFT;AmBrxFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;EL4uFT;AkBr6ED;EC7WI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBqxFH;AkB16ED;ECvWI,gBAAA;EnBoxFH;AkBt6EC;EACG,WAAA;ElBw6EJ;AkBt6EC;EACG,QAAA;ElBw6EJ;AkB95ED;EACE,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;ElBg6ED;AkB70ED;EAAA;IA9DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlB+4EH;EkBn1EH;IAvDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlB64EH;EkBx1EH;IAhDM,uBAAA;IlB24EH;EkB31EH;IA5CM,uBAAA;IACA,wBAAA;IlB04EH;EkB/1EH;;;IAtCQ,aAAA;IlB04EL;EkBp2EH;IAhCM,aAAA;IlBu4EH;EkBv2EH;IA5BM,kBAAA;IACA,wBAAA;IlBs4EH;EkB32EH;;IApBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBm4EH;EkBl3EH;;IAdQ,iBAAA;IlBo4EL;EkBt3EH;;IATM,oBAAA;IACA,gBAAA;IlBm4EH;EkB33EH;IAHM,QAAA;IlBi4EH;EACF;AkBv3ED;;;;EASI,eAAA;EACA,kBAAA;EACA,kBAAA;ElBo3EH;AkB/3ED;;EAiBI,kBAAA;ElBk3EH;AkBn4ED;EJjfE,oBAAA;EACA,qBAAA;Edu3FD;AkBh2EC;EAAA;IAVI,mBAAA;IACA,kBAAA;IACA,kBAAA;IlB82EH;EACF;AkB94ED;EAwCI,aAAA;ElBy2EH;AkB51EC;EAAA;IAHM,0BAAA;IlBm2EL;EACF;AkB11EC;EAAA;IAHM,kBAAA;IlBi2EL;EACF;AoBn5FD;EACE,uBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,wBAAA;EACA,gCAAA;MAAA,4BAAA;EACA,iBAAA;EACA,wBAAA;EACA,+BAAA;EACA,qBAAA;EC6BA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,oBAAA;EhB4KA,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;EL8sFT;AoBt5FG;;;;;;EdrBF,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENk7FD;AoB15FC;;;EAGE,gBAAA;EACA,uBAAA;EpB45FH;AoBz5FC;;EAEE,YAAA;EACA,wBAAA;Ef2BF,0DAAA;EACQ,kDAAA;ELi4FT;AoBz5FC;;;EAGE,qBAAA;EACA,sBAAA;EE9CF,eAAA;EAGA,2BAAA;EjB8DA,0BAAA;EACQ,kBAAA;EL24FT;AoBr5FD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB68FD;AqB38FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB68FP;AqB38FC;;;EAGE,wBAAA;ErB68FH;AqBx8FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBs9FT;AoB97FD;ECnBI,gBAAA;EACA,2BAAA;ErBo9FH;AoB/7FD;ECxDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB0/FD;AqBx/FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB0/FP;AqBx/FC;;;EAGE,wBAAA;ErB0/FH;AqBr/FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBmgGT;AoBx+FD;ECtBI,gBAAA;EACA,2BAAA;ErBigGH;AoBx+FD;EC5DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBuiGD;AqBriGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBuiGP;AqBriGC;;;EAGE,wBAAA;ErBuiGH;AqBliGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBgjGT;AoBjhGD;EC1BI,gBAAA;EACA,2BAAA;ErB8iGH;AoBjhGD;EChEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBolGD;AqBllGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBolGP;AqBllGC;;;EAGE,wBAAA;ErBolGH;AqB/kGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB6lGT;AoB1jGD;EC9BI,gBAAA;EACA,2BAAA;ErB2lGH;AoB1jGD;ECpEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBioGD;AqB/nGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBioGP;AqB/nGC;;;EAGE,wBAAA;ErBioGH;AqB5nGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB0oGT;AoBnmGD;EClCI,gBAAA;EACA,2BAAA;ErBwoGH;AoBnmGD;ECxEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB8qGD;AqB5qGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB8qGP;AqB5qGC;;;EAGE,wBAAA;ErB8qGH;AqBzqGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBurGT;AoB5oGD;ECtCI,gBAAA;EACA,2BAAA;ErBqrGH;AoBvoGD;EACE,gBAAA;EACA,qBAAA;EACA,kBAAA;EpByoGD;AoBvoGC;;;;;EAKE,+BAAA;Ef7BF,0BAAA;EACQ,kBAAA;ELuqGT;AoBxoGC;;;;EAIE,2BAAA;EpB0oGH;AoBxoGC;;EAEE,gBAAA;EACA,4BAAA;EACA,+BAAA;EpB0oGH;AoBtoGG;;;;EAEE,gBAAA;EACA,uBAAA;EpB0oGL;AoBjoGD;;EC/EE,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;ErBotGD;AoBpoGD;;ECnFE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErB2tGD;AoBvoGD;;ECvFE,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErBkuGD;AoBtoGD;EACE,gBAAA;EACA,aAAA;EpBwoGD;AoBpoGD;EACE,iBAAA;EpBsoGD;AoB/nGC;;;EACE,aAAA;EpBmoGH;AuBvxGD;EACE,YAAA;ElBoLA,0CAAA;EACK,qCAAA;EACG,kCAAA;ELsmGT;AuB1xGC;EACE,YAAA;EvB4xGH;AuBxxGD;EACE,eAAA;EvB0xGD;AuBxxGC;EAAY,gBAAA;EvB2xGb;AuB1xGC;EAAY,oBAAA;EvB6xGb;AuB5xGC;EAAY,0BAAA;EvB+xGb;AuB5xGD;EACE,oBAAA;EACA,WAAA;EACA,kBAAA;ElBuKA,iDAAA;EACQ,4CAAA;KAAA,yCAAA;EAOR,oCAAA;EACQ,+BAAA;KAAA,4BAAA;EAGR,0CAAA;EACQ,qCAAA;KAAA,kCAAA;ELgnGT;AwB1zGD;EACE,uBAAA;EACA,UAAA;EACA,WAAA;EACA,kBAAA;EACA,wBAAA;EACA,wBAAA;EACA,qCAAA;EACA,oCAAA;ExB4zGD;AwBxzGD;;EAEE,oBAAA;ExB0zGD;AwBtzGD;EACE,YAAA;ExBwzGD;AwBpzGD;EACE,oBAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,2BAAA;EACA,2BAAA;EACA,uCAAA;EACA,oBAAA;EnBuBA,qDAAA;EACQ,6CAAA;EmBtBR,sCAAA;UAAA,8BAAA;ExBuzGD;AwBlzGC;EACE,UAAA;EACA,YAAA;ExBozGH;AwB70GD;ECxBE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzBw2GD;AwBn1GD;EAmCI,gBAAA;EACA,mBAAA;EACA,aAAA;EACA,qBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBmzGH;AwB7yGC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;ExB+yGH;AwBzyGC;;;EAGE,gBAAA;EACA,uBAAA;EACA,YAAA;EACA,2BAAA;ExB2yGH;AwBlyGC;;;EAGE,gBAAA;ExBoyGH;AwBhyGC;;EAEE,uBAAA;EACA,+BAAA;EACA,wBAAA;EE1GF,qEAAA;EF4GE,qBAAA;ExBkyGH;AwB7xGD;EAGI,gBAAA;ExB6xGH;AwBhyGD;EAQI,YAAA;ExB2xGH;AwBnxGD;EACE,YAAA;EACA,UAAA;ExBqxGD;AwB7wGD;EACE,SAAA;EACA,aAAA;ExB+wGD;AwB3wGD;EACE,gBAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExB6wGD;AwBzwGD;EACE,iBAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,QAAA;EACA,cAAA;ExB2wGD;AwBvwGD;EACE,UAAA;EACA,YAAA;ExBywGD;AwBjwGD;;EAII,eAAA;EACA,0BAAA;EACA,aAAA;ExBiwGH;AwBvwGD;;EAUI,WAAA;EACA,cAAA;EACA,oBAAA;ExBiwGH;AwB5uGD;EAXE;IAnEA,YAAA;IACA,UAAA;IxB8zGC;EwB5vGD;IAzDA,SAAA;IACA,aAAA;IxBwzGC;EACF;A2Bv8GD;;EAEE,oBAAA;EACA,uBAAA;EACA,wBAAA;E3By8GD;A2B78GD;;EAMI,oBAAA;EACA,aAAA;E3B28GH;A2Bz8GG;;;;;;;;EAIE,YAAA;E3B+8GL;A2Bz8GD;;;;EAKI,mBAAA;E3B08GH;A2Br8GD;EACE,mBAAA;E3Bu8GD;A2Bx8GD;;EAMI,aAAA;E3Bs8GH;A2B58GD;;;EAWI,kBAAA;E3Bs8GH;A2Bl8GD;EACE,kBAAA;E3Bo8GD;A2Bh8GD;EACE,gBAAA;E3Bk8GD;A2Bj8GC;ECjDA,+BAAA;EACG,4BAAA;E5Bq/GJ;A2Bh8GD;;EC9CE,8BAAA;EACG,2BAAA;E5Bk/GJ;A2B/7GD;EACE,aAAA;E3Bi8GD;A2B/7GD;EACE,kBAAA;E3Bi8GD;A2B/7GD;;EClEE,+BAAA;EACG,4BAAA;E5BqgHJ;A2B97GD;EChEE,8BAAA;EACG,2BAAA;E5BigHJ;A2B77GD;;EAEE,YAAA;E3B+7GD;A2B96GD;EACE,mBAAA;EACA,oBAAA;E3Bg7GD;A2B96GD;EACE,oBAAA;EACA,qBAAA;E3Bg7GD;A2B36GD;EtB9CE,0DAAA;EACQ,kDAAA;EL49GT;A2B36GC;EtBlDA,0BAAA;EACQ,kBAAA;ELg+GT;A2Bx6GD;EACE,gBAAA;E3B06GD;A2Bv6GD;EACE,yBAAA;EACA,wBAAA;E3By6GD;A2Bt6GD;EACE,yBAAA;E3Bw6GD;A2Bj6GD;;;EAII,gBAAA;EACA,aAAA;EACA,aAAA;EACA,iBAAA;E3Bk6GH;A2Bz6GD;EAcM,aAAA;E3B85GL;A2B56GD;;;;EAsBI,kBAAA;EACA,gBAAA;E3B45GH;A2Bv5GC;EACE,kBAAA;E3By5GH;A2Bv5GC;EACE,8BAAA;ECnKF,+BAAA;EACC,8BAAA;E5B6jHF;A2Bx5GC;EACE,gCAAA;EC/KF,4BAAA;EACC,2BAAA;E5B0kHF;A2Bx5GD;EACE,kBAAA;E3B05GD;A2Bx5GD;;EC9KE,+BAAA;EACC,8BAAA;E5B0kHF;A2Bv5GD;EC5LE,4BAAA;EACC,2BAAA;E5BslHF;A2Bn5GD;EACE,gBAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;E3Bq5GD;A2Bz5GD;;EAOI,aAAA;EACA,qBAAA;EACA,WAAA;E3Bs5GH;A2B/5GD;EAYI,aAAA;E3Bs5GH;A2Bl6GD;EAgBI,YAAA;E3Bq5GH;A2Bp4GD;;;;EAKM,oBAAA;EACA,wBAAA;EACA,sBAAA;E3Bq4GL;A6B9mHD;EACE,oBAAA;EACA,gBAAA;EACA,2BAAA;E7BgnHD;A6B7mHC;EACE,aAAA;EACA,iBAAA;EACA,kBAAA;E7B+mHH;A6BxnHD;EAeI,oBAAA;EACA,YAAA;EAKA,aAAA;EAEA,aAAA;EACA,kBAAA;E7BumHH;A6B9lHD;;;EV8BE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnBqkHD;AmBnkHC;;;EACE,cAAA;EACA,mBAAA;EnBukHH;AmBpkHC;;;;;;EAEE,cAAA;EnB0kHH;A6BhnHD;;;EVyBE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnB4lHD;AmB1lHC;;;EACE,cAAA;EACA,mBAAA;EnB8lHH;AmB3lHC;;;;;;EAEE,cAAA;EnBimHH;A6B9nHD;;;EAGE,qBAAA;E7BgoHD;A6B9nHC;;;EACE,kBAAA;E7BkoHH;A6B9nHD;;EAEE,WAAA;EACA,qBAAA;EACA,wBAAA;E7BgoHD;A6B3nHD;EACE,mBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;E7B6nHD;A6B1nHC;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;E7B4nHH;A6B1nHC;EACE,oBAAA;EACA,iBAAA;EACA,oBAAA;E7B4nHH;A6BhpHD;;EA0BI,eAAA;E7B0nHH;A6BrnHD;;;;;;;EDhGE,+BAAA;EACG,4BAAA;E5B8tHJ;A6BtnHD;EACE,iBAAA;E7BwnHD;A6BtnHD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;E5BmuHJ;A6BvnHD;EACE,gBAAA;E7BynHD;A6BpnHD;EACE,oBAAA;EAGA,cAAA;EACA,qBAAA;E7BonHD;A6BznHD;EAUI,oBAAA;E7BknHH;A6B5nHD;EAYM,mBAAA;E7BmnHL;A6BhnHG;;;EAGE,YAAA;E7BknHL;A6B7mHC;;EAGI,oBAAA;E7B8mHL;A6B3mHC;;EAGI,mBAAA;E7B4mHL;A8BtwHD;EACE,kBAAA;EACA,iBAAA;EACA,kBAAA;E9BwwHD;A8B3wHD;EAOI,oBAAA;EACA,gBAAA;E9BuwHH;A8B/wHD;EAWM,oBAAA;EACA,gBAAA;EACA,oBAAA;E9BuwHL;A8BtwHK;;EAEE,uBAAA;EACA,2BAAA;E9BwwHP;A8BnwHG;EACE,gBAAA;E9BqwHL;A8BnwHK;;EAEE,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,qBAAA;E9BqwHP;A8B9vHG;;;EAGE,2BAAA;EACA,uBAAA;E9BgwHL;A8BzyHD;ELHE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzB+yHD;A8B/yHD;EA0DI,iBAAA;E9BwvHH;A8B/uHD;EACE,kCAAA;E9BivHD;A8BlvHD;EAGI,aAAA;EAEA,qBAAA;E9BivHH;A8BtvHD;EASM,mBAAA;EACA,yBAAA;EACA,+BAAA;EACA,4BAAA;E9BgvHL;A8B/uHK;EACE,uCAAA;E9BivHP;A8B3uHK;;;EAGE,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,kCAAA;EACA,iBAAA;E9B6uHP;A8BxuHC;EAqDA,aAAA;EA8BA,kBAAA;E9BypHD;A8B5uHC;EAwDE,aAAA;E9BurHH;A8B/uHC;EA0DI,oBAAA;EACA,oBAAA;E9BwrHL;A8BnvHC;EAgEE,WAAA;EACA,YAAA;E9BsrHH;A8B1qHD;EAAA;IAPM,qBAAA;IACA,WAAA;I9BqrHH;E8B/qHH;IAJQ,kBAAA;I9BsrHL;EACF;A8BhwHC;EAuFE,iBAAA;EACA,oBAAA;E9B4qHH;A8BpwHC;;;EA8FE,2BAAA;E9B2qHH;A8B7pHD;EAAA;IATM,kCAAA;IACA,4BAAA;I9B0qHH;E8BlqHH;;;IAHM,8BAAA;I9B0qHH;EACF;A8B3wHD;EAEI,aAAA;E9B4wHH;A8B9wHD;EAMM,oBAAA;E9B2wHL;A8BjxHD;EASM,kBAAA;E9B2wHL;A8BtwHK;;;EAGE,gBAAA;EACA,2BAAA;E9BwwHP;A8BhwHD;EAEI,aAAA;E9BiwHH;A8BnwHD;EAIM,iBAAA;EACA,gBAAA;E9BkwHL;A8BtvHD;EACE,aAAA;E9BwvHD;A8BzvHD;EAII,aAAA;E9BwvHH;A8B5vHD;EAMM,oBAAA;EACA,oBAAA;E9ByvHL;A8BhwHD;EAYI,WAAA;EACA,YAAA;E9BuvHH;A8B3uHD;EAAA;IAPM,qBAAA;IACA,WAAA;I9BsvHH;E8BhvHH;IAJQ,kBAAA;I9BuvHL;EACF;A8B/uHD;EACE,kBAAA;E9BivHD;A8BlvHD;EAKI,iBAAA;EACA,oBAAA;E9BgvHH;A8BtvHD;;;EAYI,2BAAA;E9B+uHH;A8BjuHD;EAAA;IATM,kCAAA;IACA,4BAAA;I9B8uHH;E8BtuHH;;;IAHM,8BAAA;I9B8uHH;EACF;A8BruHD;EAEI,eAAA;E9BsuHH;A8BxuHD;EAKI,gBAAA;E9BsuHH;A8B7tHD;EAEE,kBAAA;EF3OA,4BAAA;EACC,2BAAA;E5B08HF;A+Bp8HD;EACE,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,+BAAA;E/Bs8HD;A+B97HD;EAAA;IAFI,oBAAA;I/Bo8HD;EACF;A+Br7HD;EAAA;IAFI,aAAA;I/B27HD;EACF;A+B76HD;EACE,qBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,4DAAA;UAAA,oDAAA;EAEA,mCAAA;E/B86HD;A+B56HC;EACE,kBAAA;E/B86HH;A+Bl5HD;EAAA;IAxBI,aAAA;IACA,eAAA;IACA,0BAAA;YAAA,kBAAA;I/B86HD;E+B56HC;IACE,2BAAA;IACA,yBAAA;IACA,mBAAA;IACA,8BAAA;I/B86HH;E+B36HC;IACE,qBAAA;I/B66HH;E+Bx6HC;;;IAGE,iBAAA;IACA,kBAAA;I/B06HH;EACF;A+Bt6HD;;EAGI,mBAAA;E/Bu6HH;A+Bl6HC;EAAA;;IAFI,mBAAA;I/By6HH;EACF;A+Bh6HD;;;;EAII,qBAAA;EACA,oBAAA;E/Bk6HH;A+B55HC;EAAA;;;;IAHI,iBAAA;IACA,gBAAA;I/Bs6HH;EACF;A+B15HD;EACE,eAAA;EACA,uBAAA;E/B45HD;A+Bv5HD;EAAA;IAFI,kBAAA;I/B65HD;EACF;A+Bz5HD;;EAEE,iBAAA;EACA,UAAA;EACA,SAAA;EACA,eAAA;E/B25HD;A+Br5HD;EAAA;;IAFI,kBAAA;I/B45HD;EACF;A+B15HD;EACE,QAAA;EACA,uBAAA;E/B45HD;A+B15HD;EACE,WAAA;EACA,kBAAA;EACA,uBAAA;E/B45HD;A+Bt5HD;EACE,aAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,cAAA;E/Bw5HD;A+Bt5HC;;EAEE,uBAAA;E/Bw5HH;A+Bj6HD;EAaI,gBAAA;E/Bu5HH;A+B94HD;EALI;;IAEE,oBAAA;I/Bs5HH;EACF;A+B54HD;EACE,oBAAA;EACA,cAAA;EACA,oBAAA;EACA,mBAAA;EC9LA,iBAAA;EACA,oBAAA;ED+LA,+BAAA;EACA,wBAAA;EACA,+BAAA;EACA,oBAAA;E/B+4HD;A+B34HC;EACE,YAAA;E/B64HH;A+B35HD;EAmBI,gBAAA;EACA,aAAA;EACA,aAAA;EACA,oBAAA;E/B24HH;A+Bj6HD;EAyBI,iBAAA;E/B24HH;A+Br4HD;EAAA;IAFI,eAAA;I/B24HD;EACF;A+Bl4HD;EACE,qBAAA;E/Bo4HD;A+Br4HD;EAII,mBAAA;EACA,sBAAA;EACA,mBAAA;E/Bo4HH;A+Bx2HC;EAAA;IAtBI,kBAAA;IACA,aAAA;IACA,aAAA;IACA,eAAA;IACA,+BAAA;IACA,WAAA;IACA,0BAAA;YAAA,kBAAA;I/Bk4HH;E+Bl3HD;;IAbM,4BAAA;I/Bm4HL;E+Bt3HD;IAVM,mBAAA;I/Bm4HL;E+Bl4HK;;IAEE,wBAAA;I/Bo4HP;EACF;A+Bl3HD;EAAA;IAXI,aAAA;IACA,WAAA;I/Bi4HD;E+Bv3HH;IAPM,aAAA;I/Bi4HH;E+B13HH;IALQ,mBAAA;IACA,sBAAA;I/Bk4HL;EACF;A+Bv3HD;EACE,oBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,sCAAA;E1B9NA,8FAAA;EACQ,sFAAA;E2B/DR,iBAAA;EACA,oBAAA;EhCwpID;AkBvqHD;EAAA;IA9DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlByuHH;EkB7qHH;IAvDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlBuuHH;EkBlrHH;IAhDM,uBAAA;IlBquHH;EkBrrHH;IA5CM,uBAAA;IACA,wBAAA;IlBouHH;EkBzrHH;;;IAtCQ,aAAA;IlBouHL;EkB9rHH;IAhCM,aAAA;IlBiuHH;EkBjsHH;IA5BM,kBAAA;IACA,wBAAA;IlBguHH;EkBrsHH;;IApBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlB6tHH;EkB5sHH;;IAdQ,iBAAA;IlB8tHL;EkBhtHH;;IATM,oBAAA;IACA,gBAAA;IlB6tHH;EkBrtHH;IAHM,QAAA;IlB2tHH;EACF;A+Bh6HC;EAAA;IANI,oBAAA;I/B06HH;E+Bx6HG;IACE,kBAAA;I/B06HL;EACF;A+Bz5HD;EAAA;IARI,aAAA;IACA,WAAA;IACA,gBAAA;IACA,iBAAA;IACA,gBAAA;IACA,mBAAA;I1BzPF,0BAAA;IACQ,kBAAA;IL+pIP;EACF;A+B/5HD;EACE,eAAA;EHpUA,4BAAA;EACC,2BAAA;E5BsuIF;A+B/5HD;EACE,kBAAA;EHzUA,8BAAA;EACC,6BAAA;EAOD,+BAAA;EACC,8BAAA;E5BquIF;A+B35HD;EChVE,iBAAA;EACA,oBAAA;EhC8uID;A+B55HC;ECnVA,kBAAA;EACA,qBAAA;EhCkvID;A+B75HC;ECtVA,kBAAA;EACA,qBAAA;EhCsvID;A+Bv5HD;EChWE,kBAAA;EACA,qBAAA;EhC0vID;A+Bn5HD;EAAA;IAJI,aAAA;IACA,mBAAA;IACA,oBAAA;I/B25HD;EACF;A+B93HD;EAhBE;IExWA,wBAAA;IjC0vIC;E+Bj5HD;IE5WA,yBAAA;IF8WE,qBAAA;I/Bm5HD;E+Br5HD;IAKI,iBAAA;I/Bm5HH;EACF;A+B14HD;EACE,2BAAA;EACA,uBAAA;E/B44HD;A+B94HD;EAKI,gBAAA;E/B44HH;A+B34HG;;EAEE,gBAAA;EACA,+BAAA;E/B64HL;A+Bt5HD;EAcI,gBAAA;E/B24HH;A+Bz5HD;EAmBM,gBAAA;E/By4HL;A+Bv4HK;;EAEE,gBAAA;EACA,+BAAA;E/By4HP;A+Br4HK;;;EAGE,gBAAA;EACA,2BAAA;E/Bu4HP;A+Bn4HK;;;EAGE,gBAAA;EACA,+BAAA;E/Bq4HP;A+B76HD;EA8CI,uBAAA;E/Bk4HH;A+Bj4HG;;EAEE,2BAAA;E/Bm4HL;A+Bp7HD;EAoDM,2BAAA;E/Bm4HL;A+Bv7HD;;EA0DI,uBAAA;E/Bi4HH;A+B13HK;;;EAGE,2BAAA;EACA,gBAAA;E/B43HP;A+B31HC;EAAA;IAzBQ,gBAAA;I/Bw3HP;E+Bv3HO;;IAEE,gBAAA;IACA,+BAAA;I/By3HT;E+Br3HO;;;IAGE,gBAAA;IACA,2BAAA;I/Bu3HT;E+Bn3HO;;;IAGE,gBAAA;IACA,+BAAA;I/Bq3HT;EACF;A+Bv9HD;EA8GI,gBAAA;E/B42HH;A+B32HG;EACE,gBAAA;E/B62HL;A+B79HD;EAqHI,gBAAA;E/B22HH;A+B12HG;;EAEE,gBAAA;E/B42HL;A+Bx2HK;;;;EAEE,gBAAA;E/B42HP;A+Bp2HD;EACE,2BAAA;EACA,uBAAA;E/Bs2HD;A+Bx2HD;EAKI,gBAAA;E/Bs2HH;A+Br2HG;;EAEE,gBAAA;EACA,+BAAA;E/Bu2HL;A+Bh3HD;EAcI,gBAAA;E/Bq2HH;A+Bn3HD;EAmBM,gBAAA;E/Bm2HL;A+Bj2HK;;EAEE,gBAAA;EACA,+BAAA;E/Bm2HP;A+B/1HK;;;EAGE,gBAAA;EACA,2BAAA;E/Bi2HP;A+B71HK;;;EAGE,gBAAA;EACA,+BAAA;E/B+1HP;A+Bv4HD;EA+CI,uBAAA;E/B21HH;A+B11HG;;EAEE,2BAAA;E/B41HL;A+B94HD;EAqDM,2BAAA;E/B41HL;A+Bj5HD;;EA2DI,uBAAA;E/B01HH;A+Bp1HK;;;EAGE,2BAAA;EACA,gBAAA;E/Bs1HP;A+B/yHC;EAAA;IA/BQ,uBAAA;I/Bk1HP;E+BnzHD;IA5BQ,2BAAA;I/Bk1HP;E+BtzHD;IAzBQ,gBAAA;I/Bk1HP;E+Bj1HO;;IAEE,gBAAA;IACA,+BAAA;I/Bm1HT;E+B/0HO;;;IAGE,gBAAA;IACA,2BAAA;I/Bi1HT;E+B70HO;;;IAGE,gBAAA;IACA,+BAAA;I/B+0HT;EACF;A+Bv7HD;EA+GI,gBAAA;E/B20HH;A+B10HG;EACE,gBAAA;E/B40HL;A+B77HD;EAsHI,gBAAA;E/B00HH;A+Bz0HG;;EAEE,gBAAA;E/B20HL;A+Bv0HK;;;;EAEE,gBAAA;E/B20HP;AkCr9ID;EACE,mBAAA;EACA,qBAAA;EACA,kBAAA;EACA,2BAAA;EACA,oBAAA;ElCu9ID;AkC59ID;EAQI,uBAAA;ElCu9IH;AkC/9ID;EAWM,mBAAA;EACA,gBAAA;EACA,gBAAA;ElCu9IL;AkCp+ID;EAkBI,gBAAA;ElCq9IH;AmCz+ID;EACE,uBAAA;EACA,iBAAA;EACA,gBAAA;EACA,oBAAA;EnC2+ID;AmC/+ID;EAOI,iBAAA;EnC2+IH;AmCl/ID;;EAUM,oBAAA;EACA,aAAA;EACA,mBAAA;EACA,yBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,mBAAA;EnC4+IL;AmC1+IG;;EAGI,gBAAA;EPXN,gCAAA;EACG,6BAAA;E5Bu/IJ;AmCz+IG;;EPvBF,iCAAA;EACG,8BAAA;E5BogJJ;AmCp+IG;;;;EAEE,gBAAA;EACA,2BAAA;EACA,uBAAA;EnCw+IL;AmCl+IG;;;;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,iBAAA;EnCu+IL;AmC7hJD;;;;;;EAiEM,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,qBAAA;EnCo+IL;AmC39ID;;EC1EM,oBAAA;EACA,iBAAA;EpCyiJL;AoCviJG;;ERMF,gCAAA;EACG,6BAAA;E5BqiJJ;AoCtiJG;;ERRF,iCAAA;EACG,8BAAA;E5BkjJJ;AmCr+ID;;EC/EM,mBAAA;EACA,iBAAA;EpCwjJL;AoCtjJG;;ERMF,gCAAA;EACG,6BAAA;E5BojJJ;AoCrjJG;;ERRF,iCAAA;EACG,8BAAA;E5BikJJ;AqCpkJD;EACE,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oBAAA;ErCskJD;AqC1kJD;EAOI,iBAAA;ErCskJH;AqC7kJD;;EAUM,uBAAA;EACA,mBAAA;EACA,2BAAA;EACA,2BAAA;EACA,qBAAA;ErCukJL;AqCrlJD;;EAmBM,uBAAA;EACA,2BAAA;ErCskJL;AqC1lJD;;EA2BM,cAAA;ErCmkJL;AqC9lJD;;EAkCM,aAAA;ErCgkJL;AqClmJD;;;;EA2CM,gBAAA;EACA,2BAAA;EACA,qBAAA;ErC6jJL;AsC3mJD;EACE,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,qBAAA;EACA,0BAAA;EACA,sBAAA;EtC6mJD;AsCzmJG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EtC2mJL;AsCtmJC;EACE,eAAA;EtCwmJH;AsCpmJC;EACE,oBAAA;EACA,WAAA;EtCsmJH;AsC/lJD;ECtCE,2BAAA;EvCwoJD;AuCroJG;;EAEE,2BAAA;EvCuoJL;AsClmJD;EC1CE,2BAAA;EvC+oJD;AuC5oJG;;EAEE,2BAAA;EvC8oJL;AsCrmJD;EC9CE,2BAAA;EvCspJD;AuCnpJG;;EAEE,2BAAA;EvCqpJL;AsCxmJD;EClDE,2BAAA;EvC6pJD;AuC1pJG;;EAEE,2BAAA;EvC4pJL;AsC3mJD;ECtDE,2BAAA;EvCoqJD;AuCjqJG;;EAEE,2BAAA;EvCmqJL;AsC9mJD;EC1DE,2BAAA;EvC2qJD;AuCxqJG;;EAEE,2BAAA;EvC0qJL;AwC5qJD;EACE,uBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,0BAAA;EACA,qBAAA;EACA,oBAAA;EACA,2BAAA;EACA,qBAAA;ExC8qJD;AwC3qJC;EACE,eAAA;ExC6qJH;AwCzqJC;EACE,oBAAA;EACA,WAAA;ExC2qJH;AwCxqJC;;EAEE,QAAA;EACA,kBAAA;ExC0qJH;AwCrqJG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;ExCuqJL;AwClqJC;;EAEE,gBAAA;EACA,2BAAA;ExCoqJH;AwCjqJC;EACE,cAAA;ExCmqJH;AwChqJC;EACE,mBAAA;ExCkqJH;AwC/pJC;EACE,kBAAA;ExCiqJH;AyC3tJD;EACE,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,2BAAA;EzC6tJD;AyCjuJD;;EAQI,gBAAA;EzC6tJH;AyCruJD;EAYI,qBAAA;EACA,iBAAA;EACA,kBAAA;EzC4tJH;AyC1uJD;EAkBI,2BAAA;EzC2tJH;AyCxtJC;;EAEE,oBAAA;EzC0tJH;AyCjvJD;EA2BI,iBAAA;EzCytJH;AyCxsJD;EAAA;IAbI,iBAAA;IzCytJD;EyCvtJC;;IAEE,oBAAA;IACA,qBAAA;IzCytJH;EyCjtJH;;IAHM,iBAAA;IzCwtJH;EACF;A0CjwJD;EACE,gBAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;ErCiLA,6CAAA;EACK,wCAAA;EACG,qCAAA;ELmlJT;A0C7wJD;;EAaI,mBAAA;EACA,oBAAA;E1CowJH;A0ChwJC;;;EAGE,uBAAA;E1CkwJH;A0CvxJD;EA0BI,cAAA;EACA,gBAAA;E1CgwJH;A2CzxJD;EACE,eAAA;EACA,qBAAA;EACA,+BAAA;EACA,oBAAA;E3C2xJD;A2C/xJD;EAQI,eAAA;EAEA,gBAAA;E3CyxJH;A2CnyJD;EAeI,mBAAA;E3CuxJH;A2CtyJD;;EAqBI,kBAAA;E3CqxJH;A2C1yJD;EAyBI,iBAAA;E3CoxJH;A2C5wJD;;EAEE,qBAAA;E3C8wJD;A2ChxJD;;EAMI,oBAAA;EACA,WAAA;EACA,cAAA;EACA,gBAAA;E3C8wJH;A2CtwJD;ECvDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Cg0JD;A2C3wJD;EClDI,2BAAA;E5Cg0JH;A2C9wJD;EC/CI,gBAAA;E5Cg0JH;A2C7wJD;EC3DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C20JD;A2ClxJD;ECtDI,2BAAA;E5C20JH;A2CrxJD;ECnDI,gBAAA;E5C20JH;A2CpxJD;EC/DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Cs1JD;A2CzxJD;EC1DI,2BAAA;E5Cs1JH;A2C5xJD;ECvDI,gBAAA;E5Cs1JH;A2C3xJD;ECnEE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Ci2JD;A2ChyJD;EC9DI,2BAAA;E5Ci2JH;A2CnyJD;EC3DI,gBAAA;E5Ci2JH;A6Cn2JD;EACE;IAAQ,6BAAA;I7Cs2JP;E6Cr2JD;IAAQ,0BAAA;I7Cw2JP;EACF;A6Cr2JD;EACE;IAAQ,6BAAA;I7Cw2JP;E6Cv2JD;IAAQ,0BAAA;I7C02JP;EACF;A6C72JD;EACE;IAAQ,6BAAA;I7Cw2JP;E6Cv2JD;IAAQ,0BAAA;I7C02JP;EACF;A6Cn2JD;EACE,kBAAA;EACA,cAAA;EACA,qBAAA;EACA,2BAAA;EACA,oBAAA;ExCsCA,wDAAA;EACQ,gDAAA;ELg0JT;A6Cl2JD;EACE,aAAA;EACA,WAAA;EACA,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;ExCyBA,wDAAA;EACQ,gDAAA;EAyHR,qCAAA;EACK,gCAAA;EACG,6BAAA;ELotJT;A6C/1JD;;ECCI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDAF,oCAAA;UAAA,4BAAA;E7Cm2JD;A6C51JD;;ExC5CE,4DAAA;EACK,uDAAA;EACG,oDAAA;EL44JT;A6Cz1JD;EErEE,2BAAA;E/Ci6JD;A+C95JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Ci3JH;A6C71JD;EEzEE,2BAAA;E/Cy6JD;A+Ct6JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Cy3JH;A6Cj2JD;EE7EE,2BAAA;E/Ci7JD;A+C96JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Ci4JH;A6Cr2JD;EEjFE,2BAAA;E/Cy7JD;A+Ct7JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Cy4JH;AgDj8JD;EAEE,kBAAA;EhDk8JD;AgDh8JC;EACE,eAAA;EhDk8JH;AgD97JD;;EAEE,SAAA;EACA,kBAAA;EhDg8JD;AgD77JD;EACE,gBAAA;EhD+7JD;AgD57JD;EACE,gBAAA;EhD87JD;AgD37JD;;EAEE,oBAAA;EhD67JD;AgD17JD;;EAEE,qBAAA;EhD47JD;AgDz7JD;;;EAGE,qBAAA;EACA,qBAAA;EhD27JD;AgDx7JD;EACE,wBAAA;EhD07JD;AgDv7JD;EACE,wBAAA;EhDy7JD;AgDr7JD;EACE,eAAA;EACA,oBAAA;EhDu7JD;AgDj7JD;EACE,iBAAA;EACA,kBAAA;EhDm7JD;AiDr+JD;EAEE,qBAAA;EACA,iBAAA;EjDs+JD;AiD99JD;EACE,oBAAA;EACA,gBAAA;EACA,oBAAA;EAEA,qBAAA;EACA,2BAAA;EACA,2BAAA;EjD+9JD;AiD59JC;ErB3BA,8BAAA;EACC,6BAAA;E5B0/JF;AiD79JC;EACE,kBAAA;ErBvBF,iCAAA;EACC,gCAAA;E5Bu/JF;AiDt9JD;EACE,gBAAA;EjDw9JD;AiDz9JD;EAII,gBAAA;EjDw9JH;AiDp9JC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;EjDs9JH;AiDh9JC;;;EAGE,2BAAA;EACA,gBAAA;EACA,qBAAA;EjDk9JH;AiDv9JC;;;EASI,gBAAA;EjDm9JL;AiD59JC;;;EAYI,gBAAA;EjDq9JL;AiDh9JC;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EjDk9JH;AiDx9JC;;;;;;;;;EAYI,gBAAA;EjDu9JL;AiDn+JC;;;EAeI,gBAAA;EjDy9JL;AkDrjKC;EACE,gBAAA;EACA,2BAAA;ElDujKH;AkDrjKG;EACE,gBAAA;ElDujKL;AkDxjKG;EAII,gBAAA;ElDujKP;AkDpjKK;;EAEE,gBAAA;EACA,2BAAA;ElDsjKP;AkDpjKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDsjKP;AkD3kKC;EACE,gBAAA;EACA,2BAAA;ElD6kKH;AkD3kKG;EACE,gBAAA;ElD6kKL;AkD9kKG;EAII,gBAAA;ElD6kKP;AkD1kKK;;EAEE,gBAAA;EACA,2BAAA;ElD4kKP;AkD1kKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElD4kKP;AkDjmKC;EACE,gBAAA;EACA,2BAAA;ElDmmKH;AkDjmKG;EACE,gBAAA;ElDmmKL;AkDpmKG;EAII,gBAAA;ElDmmKP;AkDhmKK;;EAEE,gBAAA;EACA,2BAAA;ElDkmKP;AkDhmKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDkmKP;AkDvnKC;EACE,gBAAA;EACA,2BAAA;ElDynKH;AkDvnKG;EACE,gBAAA;ElDynKL;AkD1nKG;EAII,gBAAA;ElDynKP;AkDtnKK;;EAEE,gBAAA;EACA,2BAAA;ElDwnKP;AkDtnKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDwnKP;AiD5hKD;EACE,eAAA;EACA,oBAAA;EjD8hKD;AiD5hKD;EACE,kBAAA;EACA,kBAAA;EjD8hKD;AmDlpKD;EACE,qBAAA;EACA,2BAAA;EACA,+BAAA;EACA,oBAAA;E9C0DA,mDAAA;EACQ,2CAAA;EL2lKT;AmDjpKD;EACE,eAAA;EnDmpKD;AmD9oKD;EACE,oBAAA;EACA,sCAAA;EvBpBA,8BAAA;EACC,6BAAA;E5BqqKF;AmDppKD;EAMI,gBAAA;EnDipKH;AmD5oKD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EnD8oKD;AmDlpKD;;;;;EAWI,gBAAA;EnD8oKH;AmDzoKD;EACE,oBAAA;EACA,2BAAA;EACA,+BAAA;EvBxCA,iCAAA;EACC,gCAAA;E5BorKF;AmDnoKD;;EAGI,kBAAA;EnDooKH;AmDvoKD;;EAMM,qBAAA;EACA,kBAAA;EnDqoKL;AmDjoKG;;EAEI,eAAA;EvBvEN,8BAAA;EACC,6BAAA;E5B2sKF;AmDhoKG;;EAEI,kBAAA;EvBtEN,iCAAA;EACC,gCAAA;E5BysKF;AmD7nKD;EAEI,qBAAA;EnD8nKH;AmD3nKD;EACE,qBAAA;EnD6nKD;AmDrnKD;;;EAII,kBAAA;EnDsnKH;AmD1nKD;;;EAOM,oBAAA;EACA,qBAAA;EnDwnKL;AmDhoKD;;EvBnGE,8BAAA;EACC,6BAAA;E5BuuKF;AmDroKD;;;;EAmBQ,6BAAA;EACA,8BAAA;EnDwnKP;AmD5oKD;;;;;;;;EAwBU,6BAAA;EnD8nKT;AmDtpKD;;;;;;;;EA4BU,8BAAA;EnDooKT;AmDhqKD;;EvB3FE,iCAAA;EACC,gCAAA;E5B+vKF;AmDrqKD;;;;EAyCQ,gCAAA;EACA,iCAAA;EnDkoKP;AmD5qKD;;;;;;;;EA8CU,gCAAA;EnDwoKT;AmDtrKD;;;;;;;;EAkDU,iCAAA;EnD8oKT;AmDhsKD;;;;EA2DI,+BAAA;EnD2oKH;AmDtsKD;;EA+DI,eAAA;EnD2oKH;AmD1sKD;;EAmEI,WAAA;EnD2oKH;AmD9sKD;;;;;;;;;;;;EA0EU,gBAAA;EnDkpKT;AmD5tKD;;;;;;;;;;;;EA8EU,iBAAA;EnD4pKT;AmD1uKD;;;;;;;;EAuFU,kBAAA;EnD6pKT;AmDpvKD;;;;;;;;EAgGU,kBAAA;EnD8pKT;AmD9vKD;EAsGI,WAAA;EACA,kBAAA;EnD2pKH;AmDjpKD;EACE,qBAAA;EnDmpKD;AmDppKD;EAKI,kBAAA;EACA,oBAAA;EnDkpKH;AmDxpKD;EASM,iBAAA;EnDkpKL;AmD3pKD;EAcI,kBAAA;EnDgpKH;AmD9pKD;;EAkBM,+BAAA;EnDgpKL;AmDlqKD;EAuBI,eAAA;EnD8oKH;AmDrqKD;EAyBM,kCAAA;EnD+oKL;AmDxoKD;ECpPE,uBAAA;EpD+3KD;AoD73KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD+3KH;AoDl4KC;EAMI,2BAAA;EpD+3KL;AoDr4KC;EASI,gBAAA;EACA,2BAAA;EpD+3KL;AoD53KC;EAEI,8BAAA;EpD63KL;AmDvpKD;ECvPE,uBAAA;EpDi5KD;AoD/4KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDi5KH;AoDp5KC;EAMI,2BAAA;EpDi5KL;AoDv5KC;EASI,gBAAA;EACA,2BAAA;EpDi5KL;AoD94KC;EAEI,8BAAA;EpD+4KL;AmDtqKD;EC1PE,uBAAA;EpDm6KD;AoDj6KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDm6KH;AoDt6KC;EAMI,2BAAA;EpDm6KL;AoDz6KC;EASI,gBAAA;EACA,2BAAA;EpDm6KL;AoDh6KC;EAEI,8BAAA;EpDi6KL;AmDrrKD;EC7PE,uBAAA;EpDq7KD;AoDn7KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDq7KH;AoDx7KC;EAMI,2BAAA;EpDq7KL;AoD37KC;EASI,gBAAA;EACA,2BAAA;EpDq7KL;AoDl7KC;EAEI,8BAAA;EpDm7KL;AmDpsKD;EChQE,uBAAA;EpDu8KD;AoDr8KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDu8KH;AoD18KC;EAMI,2BAAA;EpDu8KL;AoD78KC;EASI,gBAAA;EACA,2BAAA;EpDu8KL;AoDp8KC;EAEI,8BAAA;EpDq8KL;AmDntKD;ECnQE,uBAAA;EpDy9KD;AoDv9KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDy9KH;AoD59KC;EAMI,2BAAA;EpDy9KL;AoD/9KC;EASI,gBAAA;EACA,2BAAA;EpDy9KL;AoDt9KC;EAEI,8BAAA;EpDu9KL;AqDv+KD;EACE,oBAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;ErDy+KD;AqD9+KD;;;;;EAYI,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,cAAA;EACA,aAAA;EACA,WAAA;ErDy+KH;AqDp+KD;EACE,wBAAA;ErDs+KD;AqDl+KD;EACE,qBAAA;ErDo+KD;AsD//KD;EACE,kBAAA;EACA,eAAA;EACA,qBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EjDwDA,yDAAA;EACQ,iDAAA;EL08KT;AsDzgLD;EASI,oBAAA;EACA,mCAAA;EtDmgLH;AsD9/KD;EACE,eAAA;EACA,oBAAA;EtDggLD;AsD9/KD;EACE,cAAA;EACA,oBAAA;EtDggLD;AuDthLD;EACE,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,8BAAA;EjCRA,cAAA;EAGA,2BAAA;EtB+hLD;AuDvhLC;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EjCfF,cAAA;EAGA,2BAAA;EtBuiLD;AuDnhLC;EACE,YAAA;EACA,iBAAA;EACA,yBAAA;EACA,WAAA;EACA,0BAAA;EvDqhLH;AwD1iLD;EACE,kBAAA;ExD4iLD;AwDxiLD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,mCAAA;EAIA,YAAA;ExDuiLD;AwDpiLC;EnD+GA,uCAAA;EACI,mCAAA;EACC,kCAAA;EACG,+BAAA;EAkER,qDAAA;EAEK,2CAAA;EACG,qCAAA;ELu3KT;AwD1iLC;EnD2GA,oCAAA;EACI,gCAAA;EACC,+BAAA;EACG,4BAAA;ELk8KT;AwD9iLD;EACE,oBAAA;EACA,kBAAA;ExDgjLD;AwD5iLD;EACE,oBAAA;EACA,aAAA;EACA,cAAA;ExD8iLD;AwD1iLD;EACE,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;EnDaA,kDAAA;EACQ,0CAAA;EmDZR,sCAAA;UAAA,8BAAA;EAEA,YAAA;ExD4iLD;AwDxiLD;EACE,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,2BAAA;ExD0iLD;AwDxiLC;ElCrEA,YAAA;EAGA,0BAAA;EtB8mLD;AwD3iLC;ElCtEA,cAAA;EAGA,2BAAA;EtBknLD;AwD1iLD;EACE,eAAA;EACA,kCAAA;EACA,2BAAA;ExD4iLD;AwDziLD;EACE,kBAAA;ExD2iLD;AwDviLD;EACE,WAAA;EACA,yBAAA;ExDyiLD;AwDpiLD;EACE,oBAAA;EACA,eAAA;ExDsiLD;AwDliLD;EACE,eAAA;EACA,mBAAA;EACA,+BAAA;ExDoiLD;AwDviLD;EAQI,kBAAA;EACA,kBAAA;ExDkiLH;AwD3iLD;EAaI,mBAAA;ExDiiLH;AwD9iLD;EAiBI,gBAAA;ExDgiLH;AwD3hLD;EACE,oBAAA;EACA,cAAA;EACA,aAAA;EACA,cAAA;EACA,kBAAA;ExD6hLD;AwD3gLD;EAZE;IACE,cAAA;IACA,mBAAA;IxD0hLD;EwDxhLD;InDvEA,mDAAA;IACQ,2CAAA;ILkmLP;EwDvhLD;IAAY,cAAA;IxD0hLX;EACF;AwDrhLD;EAFE;IAAY,cAAA;IxD2hLX;EACF;AyD1qLD;EACE,oBAAA;EACA,eAAA;EACA,gBAAA;EAEA,6DAAA;EACA,iBAAA;EACA,qBAAA;EACA,kBAAA;EnCXA,YAAA;EAGA,0BAAA;EtBqrLD;AyD1qLC;EnCdA,cAAA;EAGA,2BAAA;EtByrLD;AyD7qLC;EAAW,kBAAA;EAAmB,gBAAA;EzDirL/B;AyDhrLC;EAAW,kBAAA;EAAmB,gBAAA;EzDorL/B;AyDnrLC;EAAW,iBAAA;EAAmB,gBAAA;EzDurL/B;AyDtrLC;EAAW,mBAAA;EAAmB,gBAAA;EzD0rL/B;AyDtrLD;EACE,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,uBAAA;EACA,2BAAA;EACA,oBAAA;EzDwrLD;AyDprLD;EACE,oBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;EzDsrLD;AyDlrLC;EACE,WAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,WAAA;EACA,YAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,WAAA;EACA,WAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,UAAA;EACA,SAAA;EACA,kBAAA;EACA,6BAAA;EACA,6BAAA;EzDorLH;AyDlrLC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,6BAAA;EACA,4BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,YAAA;EACA,kBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,WAAA;EACA,kBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;A0DlxLD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;EACA,cAAA;EAEA,6DAAA;EACA,iBAAA;EACA,qBAAA;EACA,yBAAA;EACA,kBAAA;EACA,2BAAA;EACA,sCAAA;UAAA,8BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;ErD6CA,mDAAA;EACQ,2CAAA;EqD1CR,qBAAA;E1DkxLD;A0D/wLC;EAAY,mBAAA;E1DkxLb;A0DjxLC;EAAY,mBAAA;E1DoxLb;A0DnxLC;EAAY,kBAAA;E1DsxLb;A0DrxLC;EAAY,oBAAA;E1DwxLb;A0DrxLD;EACE,WAAA;EACA,mBAAA;EACA,iBAAA;EACA,2BAAA;EACA,kCAAA;EACA,4BAAA;E1DuxLD;A0DpxLD;EACE,mBAAA;E1DsxLD;A0D9wLC;;EAEE,oBAAA;EACA,gBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;E1DgxLH;A0D7wLD;EACE,oBAAA;E1D+wLD;A0D7wLD;EACE,oBAAA;EACA,aAAA;E1D+wLD;A0D3wLC;EACE,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;EACA,uCAAA;EACA,eAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;E1D8wLL;A0D3wLC;EACE,UAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,6BAAA;EACA,yCAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,WAAA;EACA,eAAA;EACA,sBAAA;EACA,6BAAA;E1D8wLL;A0D3wLC;EACE,WAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;EACA,0CAAA;EACA,YAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,UAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;E1D8wLL;A0D1wLC;EACE,UAAA;EACA,cAAA;EACA,mBAAA;EACA,uBAAA;EACA,4BAAA;EACA,wCAAA;E1D4wLH;A0D3wLG;EACE,cAAA;EACA,YAAA;EACA,uBAAA;EACA,4BAAA;EACA,eAAA;E1D6wLL;A2D14LD;EACE,oBAAA;E3D44LD;A2Dz4LD;EACE,oBAAA;EACA,kBAAA;EACA,aAAA;E3D24LD;A2D94LD;EAMI,eAAA;EACA,oBAAA;EtD6KF,2CAAA;EACK,sCAAA;EACG,mCAAA;EL+tLT;A2Dr5LD;;EAcM,gBAAA;E3D24LL;A2Dj3LC;EAAA;ItDiKA,wDAAA;IAEK,8CAAA;IACG,wCAAA;IA7JR,qCAAA;IAEQ,6BAAA;IA+GR,2BAAA;IAEQ,mBAAA;ILowLP;E2D/4LG;;ItDmHJ,4CAAA;IACQ,oCAAA;IsDjHF,SAAA;I3Dk5LL;E2Dh5LG;;ItD8GJ,6CAAA;IACQ,qCAAA;IsD5GF,SAAA;I3Dm5LL;E2Dj5LG;;;ItDyGJ,yCAAA;IACQ,iCAAA;IsDtGF,SAAA;I3Do5LL;EACF;A2D17LD;;;EA6CI,gBAAA;E3Dk5LH;A2D/7LD;EAiDI,SAAA;E3Di5LH;A2Dl8LD;;EAsDI,oBAAA;EACA,QAAA;EACA,aAAA;E3Dg5LH;A2Dx8LD;EA4DI,YAAA;E3D+4LH;A2D38LD;EA+DI,aAAA;E3D+4LH;A2D98LD;;EAmEI,SAAA;E3D+4LH;A2Dl9LD;EAuEI,aAAA;E3D84LH;A2Dr9LD;EA0EI,YAAA;E3D84LH;A2Dt4LD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;ErC9FA,cAAA;EAGA,2BAAA;EqC6FA,iBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3Dy4LD;A2Dp4LC;EblGE,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9Cy+LH;A2Dx4LC;EACE,YAAA;EACA,UAAA;EbvGA,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9Ck/LH;A2D14LC;;EAEE,YAAA;EACA,gBAAA;EACA,uBAAA;ErCtHF,cAAA;EAGA,2BAAA;EtBigMD;A2D36LD;;;;EAsCI,oBAAA;EACA,UAAA;EACA,YAAA;EACA,uBAAA;E3D24LH;A2Dp7LD;;EA6CI,WAAA;EACA,oBAAA;E3D24LH;A2Dz7LD;;EAkDI,YAAA;EACA,qBAAA;E3D24LH;A2D97LD;;EAuDI,aAAA;EACA,cAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;E3D24LH;A2Dt4LG;EACE,kBAAA;E3Dw4LL;A2Dp4LG;EACE,kBAAA;E3Ds4LL;A2D53LD;EACE,oBAAA;EACA,cAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;E3D83LD;A2Dv4LD;EAYI,uBAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;EACA,qBAAA;EACA,iBAAA;EAWA,2BAAA;EACA,oCAAA;E3Do3LH;A2Dn5LD;EAkCI,WAAA;EACA,aAAA;EACA,cAAA;EACA,2BAAA;E3Do3LH;A2D72LD;EACE,oBAAA;EACA,WAAA;EACA,YAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3D+2LD;A2D92LC;EACE,mBAAA;E3Dg3LH;A2Dv0LD;EAhCE;;;;IAKI,aAAA;IACA,cAAA;IACA,mBAAA;IACA,iBAAA;I3Dy2LH;E2Dj3LD;;IAYI,oBAAA;I3Dy2LH;E2Dr3LD;;IAgBI,qBAAA;I3Dy2LH;E2Dp2LD;IACE,WAAA;IACA,YAAA;IACA,sBAAA;I3Ds2LD;E2Dl2LD;IACE,cAAA;I3Do2LD;EACF;A4DlmMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,cAAA;EACA,gBAAA;E5DgoMH;A4D9nMC;;;;;;;;;;;;;;;EACE,aAAA;E5D8oMH;AiCtpMD;E4BRE,gBAAA;EACA,mBAAA;EACA,oBAAA;E7DiqMD;AiCxpMD;EACE,yBAAA;EjC0pMD;AiCxpMD;EACE,wBAAA;EjC0pMD;AiClpMD;EACE,0BAAA;EjCopMD;AiClpMD;EACE,2BAAA;EjCopMD;AiClpMD;EACE,oBAAA;EjCopMD;AiClpMD;E6BzBE,aAAA;EACA,oBAAA;EACA,mBAAA;EACA,+BAAA;EACA,WAAA;E9D8qMD;AiChpMD;EACE,0BAAA;EjCkpMD;AiC3oMD;EACE,iBAAA;EjC6oMD;A+D9qMD;EACE,qBAAA;E/DgrMD;A+D1qMD;;;;ECdE,0BAAA;EhE8rMD;A+DzqMD;;;;;;;;;;;;EAYE,0BAAA;E/D2qMD;A+DpqMD;EAAA;IChDE,2BAAA;IhEwtMC;EgEvtMD;IAAU,gBAAA;IhE0tMT;EgEztMD;IAAU,+BAAA;IhE4tMT;EgE3tMD;;IACU,gCAAA;IhE8tMT;EACF;A+D9qMD;EAAA;IAFI,2BAAA;I/DorMD;EACF;A+D9qMD;EAAA;IAFI,4BAAA;I/DorMD;EACF;A+D9qMD;EAAA;IAFI,kCAAA;I/DorMD;EACF;A+D7qMD;EAAA;ICrEE,2BAAA;IhEsvMC;EgErvMD;IAAU,gBAAA;IhEwvMT;EgEvvMD;IAAU,+BAAA;IhE0vMT;EgEzvMD;;IACU,gCAAA;IhE4vMT;EACF;A+DvrMD;EAAA;IAFI,2BAAA;I/D6rMD;EACF;A+DvrMD;EAAA;IAFI,4BAAA;I/D6rMD;EACF;A+DvrMD;EAAA;IAFI,kCAAA;I/D6rMD;EACF;A+DtrMD;EAAA;IC1FE,2BAAA;IhEoxMC;EgEnxMD;IAAU,gBAAA;IhEsxMT;EgErxMD;IAAU,+BAAA;IhEwxMT;EgEvxMD;;IACU,gCAAA;IhE0xMT;EACF;A+DhsMD;EAAA;IAFI,2BAAA;I/DssMD;EACF;A+DhsMD;EAAA;IAFI,4BAAA;I/DssMD;EACF;A+DhsMD;EAAA;IAFI,kCAAA;I/DssMD;EACF;A+D/rMD;EAAA;IC/GE,2BAAA;IhEkzMC;EgEjzMD;IAAU,gBAAA;IhEozMT;EgEnzMD;IAAU,+BAAA;IhEszMT;EgErzMD;;IACU,gCAAA;IhEwzMT;EACF;A+DzsMD;EAAA;IAFI,2BAAA;I/D+sMD;EACF;A+DzsMD;EAAA;IAFI,4BAAA;I/D+sMD;EACF;A+DzsMD;EAAA;IAFI,kCAAA;I/D+sMD;EACF;A+DxsMD;EAAA;IC5HE,0BAAA;IhEw0MC;EACF;A+DxsMD;EAAA;ICjIE,0BAAA;IhE60MC;EACF;A+DxsMD;EAAA;ICtIE,0BAAA;IhEk1MC;EACF;A+DxsMD;EAAA;IC3IE,0BAAA;IhEu1MC;EACF;A+DrsMD;ECnJE,0BAAA;EhE21MD;A+DlsMD;EAAA;ICjKE,2BAAA;IhEu2MC;EgEt2MD;IAAU,gBAAA;IhEy2MT;EgEx2MD;IAAU,+BAAA;IhE22MT;EgE12MD;;IACU,gCAAA;IhE62MT;EACF;A+DhtMD;EACE,0BAAA;E/DktMD;A+D7sMD;EAAA;IAFI,2BAAA;I/DmtMD;EACF;A+DjtMD;EACE,0BAAA;E/DmtMD;A+D9sMD;EAAA;IAFI,4BAAA;I/DotMD;EACF;A+DltMD;EACE,0BAAA;E/DotMD;A+D/sMD;EAAA;IAFI,kCAAA;I/DqtMD;EACF;A+D9sMD;EAAA;ICpLE,0BAAA;IhEs4MC;EACF","file":"bootstrap.css","sourcesContent":["/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n select {\n background: #fff !important;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.form-group-sm .form-control {\n height: 30px;\n line-height: 30px;\n}\ntextarea.form-group-sm .form-control,\nselect[multiple].form-group-sm .form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n min-height: 32px;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.form-group-lg .form-control {\n height: 46px;\n line-height: 46px;\n}\ntextarea.form-group-lg .form-control,\nselect[multiple].form-group-lg .form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n min-height: 38px;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.333333px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px solid;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding: 30px 15px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding: 48px 0;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-weight: normal;\n line-height: 1.4;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n text-decoration: none;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n white-space: normal;\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000;\n -moz-perspective: 1000;\n perspective: 1000;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n //\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n// Upstream patch for normalize.css submitted: https://github.com/necolas/normalize.css/pull/379 - remove this fix once that is merged\n\n[role=\"button\"] {\n cursor: pointer;\n}","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: @input-height-base;\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because